Compare commits
101 Commits
69ef9c09e8
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 49a0651f05 | |||
| d5da99ed70 | |||
| 6309d760f0 | |||
| e30a0b74e1 | |||
| f38a3878b1 | |||
| 307f7844c4 | |||
| c03b3f2659 | |||
| 7e7d759b34 | |||
| 153ef20ae5 | |||
| 5009ed19b7 | |||
| 30be97ab2f | |||
| d7042430c3 | |||
| a5f6b0ecd8 | |||
| c5dd2f98a8 | |||
| f3a5858597 | |||
| 748e9bb482 | |||
| 1f0a2c8971 | |||
| a13133aabe | |||
| 5410009bea | |||
| 8c23849952 | |||
| 2cf5b38da1 | |||
| 1d6fe0f70d | |||
| bf55377fdc | |||
| 9948122ed3 | |||
| 66d372b50e | |||
| ed73ed8b18 | |||
| 3959401a65 | |||
| 76e2359216 | |||
| 434b379c13 | |||
| 212ed517ee | |||
| 85674763a3 | |||
| 008ce8be65 | |||
| dd1ad7d964 | |||
| 300a4c9ca9 | |||
| 213c0e0797 | |||
| 565689df25 | |||
| 1bbb61520c | |||
| 17ad101eb1 | |||
| 790effdf0e | |||
| 6c89c54fe5 | |||
| 03989e9df4 | |||
| c15c3a1fec | |||
| 21f4f07cbb | |||
| cee32e6dfb | |||
| 40cc290035 | |||
| 5a11a21562 | |||
| dc537f9925 | |||
| 70e2251995 | |||
| b3696949f5 | |||
| eaa276b26d | |||
| 70f6b9a34d | |||
| a61f1f67c5 | |||
| 3366990cfa | |||
| 3694393c43 | |||
| 5cd3ba9f4e | |||
| a5e52dc69b | |||
| e3c54d62ed | |||
| ef477d878c | |||
| 904ae5c415 | |||
| 474ccf09eb | |||
| 102bdf36d7 | |||
| c749e66460 | |||
| 137b160a09 | |||
| 9239901028 | |||
| 5c884a0de6 | |||
| e95e2b3f3a | |||
| 72b98409f2 | |||
| ff3652c8b1 | |||
| b5e3fc0f4e | |||
| defd5c0bf6 | |||
| b20c21cbd2 | |||
| 76001b1994 | |||
| c9fafad10d | |||
| f8d17f4437 | |||
| 0845db1915 | |||
| 2d9c6719e8 | |||
| a3c6496ffa | |||
| 70841548bc | |||
| ae83deab9f | |||
| 7a60bb1865 | |||
| 25a01f7f4a | |||
| c1a46fd908 | |||
| bfb518307f | |||
| 1c03a1a6af | |||
| 81e8847a8e | |||
| af058cf36d | |||
| 8bfaecbd1e | |||
| 51d0384ed4 | |||
| 9c830f58f6 | |||
| e1fd6a7e84 | |||
| 8c891a820a | |||
| 5ee35a0e27 | |||
| 7bb07ea3ad | |||
| f8cd71713b | |||
| 9cc7043490 | |||
| 0ba61d4d7c | |||
| cbc89a4843 | |||
| 721fe9011c | |||
| 891bc274dc | |||
| 79c6647431 | |||
| 7f1c52a580 |
+12
@@ -32,6 +32,18 @@ update-check.json
|
||||
**/state/*
|
||||
!**/state/trade_journal.jsonl
|
||||
!**/state/market_indicators_history.jsonl
|
||||
# sim 전략 정의·페이퍼 실험 데이터는 추적 (108변이 파라미터·마킹·누적 성적 — 복구 불가, 2026-06-11)
|
||||
# last_scan·variants_compare(5분 스냅샷)·flow_history.sqlite(백필로 재구축 가능)는 계속 제외
|
||||
!**/state/sim/
|
||||
**/state/sim/*
|
||||
!**/state/sim/variants.json
|
||||
!**/state/sim/params.json
|
||||
!**/state/sim/favorites.json
|
||||
!**/state/sim/backtest_results.json
|
||||
!**/state/sim/equity_history.json
|
||||
!**/state/sim/watchlist.json
|
||||
!**/state/sim/index_history.json
|
||||
!**/state/sim/variants/
|
||||
/cache/
|
||||
/locks/
|
||||
/logs/
|
||||
|
||||
+30
-20
@@ -11,44 +11,53 @@ OpenClaw 에이전트 간 파일 기반 통신의 topic 카탈로그. envelope
|
||||
### `securities_balance`
|
||||
|
||||
- **방향:** `stock` → `budget`
|
||||
- **목적:** 본인 증권 계좌별 잔액(평가액·예수금·총자산)을 골디에게 전달, 월간 결산 입력으로 사용
|
||||
- **목적:** 본인+가희 증권 계좌별 잔액(평가액·예수금·총자산)을 소유자별로 골디에게 전달, 월간 결산 입력으로 사용
|
||||
- **트리거:** macOS launchd `ai.openclaw.stock.send-balance` — 매월 1일 04:30 KST. 골디 결산 cron(05:00) 30분 전. (`inbox_handler.py`의 `as_of` 가드는 1·10·20일을 허용 — 과거 운영 호환 안전망)
|
||||
- **schema_version:** 1
|
||||
- **payload 스키마:**
|
||||
- **schema_version:** 2 (v1 하위호환 유지 — 수신자 `SUPPORTED_SCHEMA={1,2}`)
|
||||
- **payload 스키마 (v2):**
|
||||
|
||||
```json
|
||||
{
|
||||
"as_of": "2026-05-01",
|
||||
"owner_scope": "self_only",
|
||||
"as_of": "2026-07-01",
|
||||
"owner_scope": "self_and_gahee",
|
||||
"accounts": [
|
||||
{
|
||||
"label": "일반",
|
||||
"owner": "self",
|
||||
"account_no": "",
|
||||
"deposit": 118743,
|
||||
"eval_amount": 63177225,
|
||||
"total": 63295968,
|
||||
"position_count": 4
|
||||
"deposit": 56032,
|
||||
"eval_amount": 114294705,
|
||||
"total": 114350737,
|
||||
"position_count": 7
|
||||
},
|
||||
{ "label": "ISA", ... }
|
||||
{ "label": "ISA", "owner": "self", ... },
|
||||
{ "label": "가희_일반", "owner": "gahee", ... },
|
||||
{ "label": "가희_ISA", "owner": "gahee", ... }
|
||||
],
|
||||
"by_owner": {
|
||||
"self": { "deposit": 146362, "eval_amount": 188964561, "total": 189110923 },
|
||||
"gahee": { "deposit": 138469, "eval_amount": 22587331, "total": 22725800 }
|
||||
},
|
||||
"totals": {
|
||||
"deposit": 843705,
|
||||
"eval_amount": 114519255,
|
||||
"total": 115362960
|
||||
"deposit": 284831,
|
||||
"eval_amount": 211551892,
|
||||
"total": 211836723
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
- **owner_scope:** 현재 `self_only`만 발행 (가희 계좌 제외 — `가희_` prefix 라벨 자동 필터). 향후 가희 포함 버전 필요해지면 `with_gahee` 등 새 값 도입
|
||||
- **owner_scope:** v2는 `self_and_gahee` — 본인·가희 모두 발행. `accounts[].owner` 는 `self`|`gahee` (`가희_` prefix 라벨이 gahee). 소유자 집계는 `by_owner`. `totals` 는 참고용 grand total. (v1은 `self_only`·`by_owner` 없음, 단일 소유자로 처리)
|
||||
- **수신자(골디) 처리 동작:**
|
||||
- 월간결산 cron 진입부에서 `inbox_handler.process_inbox()` 호출 (fetch_balance 이전 — 분개가 후잉 잔액에 반영되어 결산이 분개 후 스냅샷을 보도록)
|
||||
- payload의 `totals.total` 과 후잉 자산 `증권(효원)` 의 차액을 계산:
|
||||
- 차액 > 0 → 차변 `증권(효원)` / 대변 `주식평가수익` 자동 분개
|
||||
- 차액 < 0 → 차변 `주식평가손실` / 대변 `증권(효원)` 자동 분개
|
||||
- `by_owner` 의 각 소유자 total 과 후잉 자산(`self`→`증권(효원)`, `gahee`→`증권(가희)`)의 차액을 소유자별로 reconcile:
|
||||
- 차액 > 0 → 차변 `증권(효원|가희)` / 대변 `주식평가수익` 자동 분개 (손익 계정은 소유자 공용)
|
||||
- 차액 < 0 → 차변 `주식평가손실` / 대변 `증권(효원|가희)` 자동 분개
|
||||
- `|차액| < 1만원` → 노이즈로 간주, 분개 skip (processed 처리)
|
||||
- `|차액| > 1억원` → 안전 가드 발동, 분개 거부 + 텔레그램 alert + `failed/` 이동
|
||||
- 처리 후 `processed/`로 이동, `state/inbox_state.json` 의 `processed[]` 에 message_id 누적 (idempotency, 최근 1000개)
|
||||
- 결산 메일 본문에 `## 인박스 reconcile` 섹션, 텔레그램에 한 줄 요약 추가
|
||||
- 후잉에 해당 자산 항목 없으면 `skipped` (분개 안 함)
|
||||
- 소유자 하나라도 rejected/journal_failed 면 `failed/` 이동·미처리. 재실행 시 이미 분개된 소유자는 fresh 조회로 차액≈0 aligned → 중복분개 없음 (reconcile는 목표값으로 맞추기라 자연 idempotent)
|
||||
- 정상 처리 후 `processed/`로 이동, `state/inbox_state.json` 의 `processed[]` 에 message_id 누적 (idempotency, 최근 1000개)
|
||||
- 결산 메일 본문에 `## 인박스` reconcile 섹션(소유자별 라인), 텔레그램에 한 줄 요약 추가. 메일 "자산 계정별 변동"은 후잉 자산 전수 순회라 `증권(가희)`도 자동 표시
|
||||
- **GC / 적체 정책 (월간결산 cron 진입부에서 매월 자동 수행):**
|
||||
- `processed/` 의 mtime 30일 초과 envelope 자동 삭제 (`gc_processed`)
|
||||
- `failed/` 적체가 5건 이상이면 결산 메일·텔레그램에 ⚠️ alert 한 줄 추가 — 사람이 검토 후 수동 삭제 (자동 삭제 안 함, CLAUDE.md 원칙 준수)
|
||||
@@ -57,8 +66,9 @@ OpenClaw 에이전트 간 파일 기반 통신의 topic 카탈로그. envelope
|
||||
- envelope 키 누락 / `to != budget` / 미등록 topic / 미지원 `schema_version`
|
||||
- payload 키 누락 (`as_of`, `accounts`, `totals`, `owner_scope`)
|
||||
- `as_of` 가 매월 1·10·20일이 아님
|
||||
- `totals.{deposit,eval_amount,total}` 음수 또는 100억 초과
|
||||
- `totals`/`by_owner.*` 의 `{deposit,eval_amount,total}` 음수 또는 100억 초과
|
||||
- `accounts[].total` 합계가 `totals.total` 과 불일치
|
||||
- `by_owner` 에 미등록 소유자 (self/gahee 외) 또는 구조 오류
|
||||
- 차액이 1억원 초과 (분개 거부)
|
||||
- 후잉 webhook 분개 실패
|
||||
- **관련 스크립트:**
|
||||
|
||||
@@ -18,8 +18,11 @@
|
||||
| **증권잔액 → 골디 inbox** | `python3 ~/.openclaw/agents/stock/workspace/scripts/send_balance_to_budget.py` | launchd `ai.openclaw.stock.send-balance` (매월 1일 04:30) |
|
||||
| **골디 inbox 처리** (단독) | `python3 ~/.openclaw/agents/budget/workspace/skills/monthly-settlement/scripts/inbox_handler.py [--dry-run]` | 트리거 없음 — 월간결산 cron 진입부에서 자동 호출. 수동 점검·재처리용 |
|
||||
| **워치리스트 모니터링** | `python3 ~/.openclaw/agents/stock/workspace/scripts/watchlist_monitor.py check` | launchd `ai.openclaw.stock.watchlist-monitor` (평일 09–15시 매 15분) |
|
||||
| **트레일링 스톱 감시** | `python3 ~/.openclaw/agents/stock/workspace/scripts/trailing_monitor.py {check [--repeat N --gap S] [--force] [--dry-run]\|list}` | launchd `ai.openclaw.stock.trailing-monitor` (평일 09:00–15:30 **매 1분**, 스크립트가 장외·휴장 self-skip). 자산웹에서 PIN 승인된 트레일링 예약의 조건단가를 고점 갱신 시 kt10002로 **상향만** 정정. 신규 발주 없음. 예약 0건이면 즉시 종료(API 콜 0). 상태 `state/trailing_stops.json`. ⚠️ cadence 변경 이력 2분→30초→**1분**(2026-07-30 관리자님) — 30초는 launchd로 불가해 `--repeat 2 --gap 30`(프로세스 내부 2회)으로 구현했었고, 옵션은 살아있으니 다시 쓸 땐 plist 인자만 추가 |
|
||||
| **공모주 캘린더 동기화** | `python3 ~/.openclaw/agents/stock/workspace/scripts/ipo_calendar_sync.py` | launchd `ai.openclaw.stock.ipo-calendar-sync` (매월 1일 09:00) |
|
||||
| **FOMC 캘린더 동기화** | `python3 ~/.openclaw/agents/stock/workspace/scripts/fomc_calendar_sync.py [--list\|--dry-run]` | launchd `ai.openclaw.stock.fomc-calendar-sync` (매월 1일 09:10). 연준 공식 일정표 → `[FOMC] YYYY-MM 회의` 종일 일정(회의 시작일 ET ~ 발표일 KST). `--list`는 파싱 결과만(캘린더 미접근) |
|
||||
| **휴장일 동기화** | `python3 ~/.openclaw/agents/stock/workspace/scripts/holiday_sync.py [--show]` | launchd `ai.openclaw.stock.holiday-sync` (매주 일요일 03:00) |
|
||||
| **Gmail 라벨 분류** | `python3 ~/.openclaw/workspace/scripts/gmail_label_classify.py [--dry-run]` | launchd `ai.openclaw.gmail-label-classify` (매일 01:00). self-sent 브리핑·종목분석·주식 리포트 메일 라벨링 + 24h 테스트메일 휴지통. LLM 미경유(`gog` CLI). 2026-06-26 cron→launchd 이관 |
|
||||
| **매매 기록 적재** | `python3 ~/.openclaw/agents/stock/workspace/scripts/trade_journal.py {collect\|seed\|show\|query} ...` | launchd `ai.openclaw.stock.trade-journal` (평일 21:00 — NXT 야간 마감 후 ka10170 4계좌 적재). `seed`는 적재 시작일 이전 보유분을 현재 평단가로 1회 시드 (idempotent) |
|
||||
| **자동매매 시뮬 스캔** | `cd ~/.openclaw/agents/stock/workspace && python3 -m sim {scan [--force]\|status\|report\|reset --yes}` | launchd `ai.openclaw.stock.sim-scan` (평일 09–15:30 매 15분, 엔진이 장외 self-skip). 가상자본 1천만 페이퍼 트레이딩, 규칙 엔진(LLM 미경유). 결과 `state/sim/`. 실주문 아님 |
|
||||
| **자동매매 시뮬 대시보드** | `cd ~/.openclaw/agents/stock/workspace && python3 -m sim.sim_web {serve\|render}` | launchd `ai.openclaw.stock.sim-web` (상시). 포트 18792 → `sim.hyowons.net`(reverse proxy 수동 등록 대기). 5탭(계좌·관심종목·시장·튜닝·백테스트), 읽기전용+`/save_params`만 쓰기 |
|
||||
@@ -36,7 +39,7 @@ LLM이 자막 요약·뉴스 평문 생성·결산 보고서 등 본문을 만
|
||||
|
||||
| 작업 | 진입점 (사람이 시키는 한 마디) | 트리거 |
|
||||
|---|---|---|
|
||||
| **오전 브리핑** (main/클로) | "오전 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 | OpenClaw cron `56d66b54` (매일 07:00) |
|
||||
| **오전 브리핑** (main/클로) | "오전 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 (미국증시 요약 포함) | OpenClaw cron `56d66b54` (매일 07:30) + 1차폴백 `c4f2d3e5...0755` (07:55) + 2차폴백·최종 `b3f1c2d4...0830` (08:30, US 미게시여도 발송) |
|
||||
| **오후 브리핑** (main/클로) | "오후 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 | OpenClaw cron `9d2c105f` (매일 19:00) |
|
||||
| **비하이브 종목분석 요약** (stock/레이) | "비하이브 신규 영상 점검해줘" → cron payload의 step 그대로 실행 | OpenClaw cron `747e1013` (평일 07/12/18시) |
|
||||
| **월간 결산** (budget/골디) | "월간 결산 돌려줘" → cron payload의 step 그대로 실행 | OpenClaw cron `08e9a978` (매월 1일 05:00) |
|
||||
|
||||
@@ -68,5 +68,8 @@
|
||||
- **이미지 답신**: 자동분개 X. 골디 텔레그램 알림만 — 관리자님이 직접 처리하거나 가희님께 텍스트로 다시 요청.
|
||||
- **포맷 오류** (페어 0건): 분개 중단 + 골디 텔레그램 보고. 가희님께 다시 요청 또는 직접 입력.
|
||||
- **완료**: 골디 텔레그램으로 합계·차액·분개 방향 보고.
|
||||
- 상태 파일: `state/gahee_reminder.json` (last_sent_month, last_processed_message_at), 수신자: `credentials/gahee_imessage.json`.
|
||||
- 상태 파일: `state/gahee_reminder.json` (last_sent_month, last_processed_message_at, last_sent_at, reply_alert_for), 수신자: `credentials/gahee_imessage.json`.
|
||||
- 발신 문구 수정은 state 파일 `message_template` 직접 편집 (코드 재배포 불필요).
|
||||
- **발신 경로는 `--service imessage`** (2026-08-03 전환). 이전 `sms` 강제는 이 수신자에게 3전 3패였고(전부 `error=4` 미발송), 살아남은 건은 Messages 가 RCS 로 바꿔준 운이었다. 7/25 미발송이 성공으로 기록돼 7월 잔액이 통째로 누락된 사고의 원인.
|
||||
- **답신 미도착 감시**: 발신 후 2일간 답신 없으면 골디 텔레그램 1회 경고. `imsg send` 는 발송 실패를 알려주지 않아(rc=0) 이게 유일한 안전망이다. 재발신은 자동 X — `python3 gahee_reminder.py --send-now` 로 수동.
|
||||
- ⚠️ `--send-now` 는 **내 세션에서 못 돌린다** (자동화 → 메시지 권한이 Claude Code 에 거부). launchd 임시 oneshot plist 경유로 실행. 상세는 SKILL.md.
|
||||
|
||||
@@ -21,7 +21,8 @@
|
||||
|
||||
## Scripts (python3)
|
||||
|
||||
- `skills/whooing-sync/scripts/whooing_sync.py` — iMessage 결제문자 → 후잉 웹훅 POST. launchd `ai.openclaw.budget.whooing-sync` 가 매시 0/15/30/45분 실행 (OpenClaw cron 아님). FDA 필수(`/opt/homebrew/bin/imsg`). 페어 매칭 로직 내장 — 자세한 건 `skills/whooing-sync/SKILL.md`.
|
||||
- `skills/whooing-sync/scripts/whooing_sync.py` — iMessage 결제문자 → 후잉 웹훅 POST. launchd `ai.openclaw.budget.whooing-sync` 가 매시 0/15/30/45분 실행 (OpenClaw cron 아님). ⚠️ **on-demand 실행은 스크립트 직접 호출이 아니라 `launchctl kickstart -p gui/$(id -u)/ai.openclaw.budget.whooing-sync` + 로그 확인** — 내 세션은 게이트웨이 node 를 TCC responsible process 로 물고 있어 `imsg` 가 Messages DB 를 못 읽는다. FDA 필수(`/opt/homebrew/bin/imsg`). 페어 매칭 로직 내장 — 자세한 건 `skills/whooing-sync/SKILL.md`.
|
||||
- `skills/whooing-sync/scripts/imsg_cli.py` — `imsg` CLI 공용 래퍼(`run_json`/`chats`). stderr·returncode 를 판정해 FDA 누락을 파싱 에러로 둔갑시키지 않는다. `whooing_sync.py`·`gahee_reminder.py` 가 공유.
|
||||
- `skills/whooing-sync/scripts/whooing_manual.py` — iMessage 없이 한 건 직접 등록. structured(`--item/--money/--left/--right [--date] [--memo]`) 또는 raw(`--message`). structured는 `whooing_accounts.json` 차트 검증 후 POST.
|
||||
- `skills/whooing-sync/scripts/whooing_balance.py` — 후잉 OpenAPI로 자산/부채/자본 잔액 조회. 옵션: `--section-id`, `--as-of YYYY-MM-DD`, `--json`. 크리덴셜은 `credentials/whooing.json`의 `api` 블록(app_id/token/signature).
|
||||
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
# 2026-05-07
|
||||
|
||||
- 관리자님 지시: `삼천리도시가스`는 후잉에서 `주거,관리` 항목으로 분류하고, item은 `공과금`으로 처리.
|
||||
- ⚠️ **2026-08-06 정정: 계정은 `주거,통신`** — 후잉 차트에 `주거,관리` 계정이 존재하지 않는다(그래서 이 날 실제 입력분도 `주거,통신`으로 들어갔다). item `공과금`은 그대로. 상세는 `memory/2026-08-06.md`.
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
# 2026-06-20
|
||||
|
||||
- 신한은행 잔액 불일치 `144원`은 관리자님 확인으로 은행이자였다. 후잉에 `신한은행(효원) ← 기타수익`, item `이자`, memo `은행이자`, 금액 `144원`, 날짜 `2026-06-20`로 수동 등록했고, 후잉 잔액이 SMS 잔액 `307,004원`과 일치함을 검증했다. `state/whooing_balance_alerts.json`의 신한은행 정합성 상태도 diff `0`으로 정리했다.
|
||||
- 관리자님 지시로 신한은행도 잔액 불일치 자동 이자 보정 대상에 추가했다. `whooing_sync.py` 정합성 체크에서 자산 계정이고 후잉 잔액이 SMS보다 부족하며 차이가 `5,000원` 이하이면 카카오뱅크와 동일하게 `{은행계정} ← 기타수익`, item `이자`, memo `은행이자`로 자동 분개한다.
|
||||
@@ -0,0 +1,27 @@
|
||||
# 2026-08-06
|
||||
|
||||
## 신한카드 삼천리도시가스 분류 실패 — 원인 3겹 (코디 수정)
|
||||
|
||||
가스요금 14,000원 SMS가 structured 분류를 통과하지 못하고 raw 폴백 → **후잉에 거래가 아예 생성되지 않았다**(후잉 자체 파서도 이 형식을 못 읽음). 8/6 후잉 거래에 복권·톨비·쿠팡 3건만 있었음.
|
||||
|
||||
1. **파서 공백** — 신한카드 `자동납부` SMS는 기존 승인 SMS와 **금액/상호 순서가 반대**다.
|
||||
- 기존: `신한카드(6847)승인 방*원님 아파트 관리비 184,440원 정상승인 되었습니다.` (상호 → 금액)
|
||||
- 자동납부: `[신한카드] 자동납부 정상승인 방효원님 08/06 (일시불) 14,000원 삼천리도시가스` (금액 → 상호)
|
||||
|
||||
`SHINHAN_APPROVE_RE`가 `[신한카드]`의 `]`에서 막혀 처음부터 한 번도 파싱된 적 없음(2026-05-07·08-06 두 건 전부 raw). `parsers.py`에 `SHINHAN_AUTOPAY_RE` 신설, `parse_shinhan_card`가 자동납부 → 일반 순으로 시도.
|
||||
⚠️ `SHINHAN_APPROVE_RE`를 느슨하게 고치는 건 안 된다 — merchant 자리에 `08/06 (일시불)`이 잡힌다.
|
||||
|
||||
2. **계정 `주거,관리`는 후잉에 없다** — `삼천리도시가스` 매핑이 이 죽은 계정을 가리키고 있었다. 2026-06-30 `주택임대료`가 같은 계정으로 `left account does not exist at entry_date` 실패한 그 계정. **`주거,통신` / item `공과금`으로 확정**(2026-05-07 실제 입력분·`도시가스` 기본 매핑·주택임대료 정정 선례와 동일). 2026-05-07 메모의 `주거,관리` 지시는 그 메모에 정정 표기함.
|
||||
|
||||
3. **`state/whooing_accounts.json`이 stale**(updated_at 2026-04-23) — `whooing_manual.py`의 차트 검증이 이 파일을 보는데 죽은 계정 `주거,관리`·`카뱅지금통`(실제는 `카뱅저금통`)을 싣고 있어 로컬 검증만 통과하고 후잉에서 터졌다. 라이브 `accounts.json`으로 전체 동기화(자산 +7/−1, 부채 +2, 비용 −1, updated_at 2026-08-06). 매핑 계정을 늘릴 때는 이 스냅샷이 최신인지 먼저 확인할 것.
|
||||
|
||||
누락분 14,000원은 `whooing_manual.py`로 보정 입력 완료(`20260806 / 공과금 / 주거,통신 ← 신한신용(효원)`).
|
||||
|
||||
## ⚠️ raw 폴백 200은 "후잉에 기록됨"이 아니다
|
||||
|
||||
후잉 raw 엔드포인트는 **자기 파서가 실패해도 200을 준다**. `✅ [raw] … 200` 로그와 `sent_raw` 카운트는 "접수됨"일 뿐이라, 이번 누락이 5월부터 안 보인 이유다. raw 폴백 알림을 받으면 **후잉에 실제로 줄이 생겼는지 `entries.json`으로 확인**해야 한다. (`imsg send`의 rc=0이 발송 성공이 아닌 것과 같은 함정.)
|
||||
|
||||
## 범위 밖 (관리자님 판단 대기)
|
||||
|
||||
- **현대카드 자동납부도 같은 파서 공백** — `[현대카드] 자동납부 승인 방*원님 라이나생명 31,100원`(2026-05-17 raw). 다만 `whooing_sync.py`의 잔액차 기반 월 1회 자동보정 + `_should_skip_hyundai_insurance_duplicate`가 이미 커버해 실질 누락 없음. 미수정.
|
||||
- raw 폴백분이 후잉에 실제 반영됐는지 자동 검출하는 장치는 붙이지 않았다.
|
||||
@@ -0,0 +1,4 @@
|
||||
{
|
||||
"version": 1,
|
||||
"setupCompletedAt": "2026-04-23T06:17:48.250Z"
|
||||
}
|
||||
@@ -43,11 +43,13 @@ BALANCE_SCRIPT = WORKSPACE / 'skills' / 'whooing-sync' / 'scripts' / 'whooing_ba
|
||||
TELEGRAM_ACCOUNT = 'budget'
|
||||
|
||||
KNOWN_TOPICS = {'securities_balance'}
|
||||
SUPPORTED_SCHEMA = {1}
|
||||
SUPPORTED_SCHEMA = {1, 2}
|
||||
|
||||
SECURITIES_ASSET_NAME = '증권(효원)'
|
||||
SECURITIES_ASSET_NAME = '증권(효원)' # v1(단일 소유자) 경로 및 self 자산명
|
||||
SECURITIES_GAIN_NAME = '주식평가수익'
|
||||
SECURITIES_LOSS_NAME = '주식평가손실'
|
||||
# 소유자 → 후잉 자산명 (v2). 손익 계정(주식평가수익/손실)은 양쪽 공용.
|
||||
OWNER_ASSET = {'self': '증권(효원)', 'gahee': '증권(가희)'}
|
||||
|
||||
RECONCILE_NOISE_FLOOR = 10_000 # |차액| < 1만원: 노이즈, 분개 skip
|
||||
RECONCILE_HARD_CAP = 100_000_000 # |차액| > 1억원: 분개 거부 (안전 가드)
|
||||
@@ -124,6 +126,17 @@ def validate_envelope(env: dict) -> None:
|
||||
raise ValidationError('payload 가 dict 가 아님')
|
||||
|
||||
|
||||
def _validate_amount_block(block: dict, where: str) -> None:
|
||||
for key in ('deposit', 'eval_amount', 'total'):
|
||||
if key not in block:
|
||||
raise ValidationError(f'{where}.{key} 누락')
|
||||
v = block[key]
|
||||
if not isinstance(v, int) or v < 0:
|
||||
raise ValidationError(f'{where}.{key} 비정상: {v!r}')
|
||||
if v > PAYLOAD_AMOUNT_CAP:
|
||||
raise ValidationError(f'{where}.{key} 100억 초과 (가드): {v:,}')
|
||||
|
||||
|
||||
def validate_securities_payload(payload: dict) -> None:
|
||||
for key in ('as_of', 'accounts', 'totals', 'owner_scope'):
|
||||
if key not in payload:
|
||||
@@ -137,24 +150,28 @@ def validate_securities_payload(payload: dict) -> None:
|
||||
if as_of_dt.day not in (1, 10, 20):
|
||||
raise ValidationError(f'as_of 는 매월 1·10·20일이어야 함: {as_of}')
|
||||
|
||||
totals = payload['totals']
|
||||
for key in ('deposit', 'eval_amount', 'total'):
|
||||
if key not in totals:
|
||||
raise ValidationError(f'totals.{key} 누락')
|
||||
v = totals[key]
|
||||
if not isinstance(v, int) or v < 0:
|
||||
raise ValidationError(f'totals.{key} 비정상: {v!r}')
|
||||
if v > PAYLOAD_AMOUNT_CAP:
|
||||
raise ValidationError(f'totals.{key} 100억 초과 (가드): {v:,}')
|
||||
_validate_amount_block(payload['totals'], 'totals')
|
||||
|
||||
if not isinstance(payload['accounts'], list) or not payload['accounts']:
|
||||
raise ValidationError('accounts 비어있음')
|
||||
sum_total = sum(int(a.get('total', 0)) for a in payload['accounts'])
|
||||
if sum_total != totals['total']:
|
||||
if sum_total != payload['totals']['total']:
|
||||
raise ValidationError(
|
||||
f'accounts 합계 불일치: {sum_total:,} vs totals.total={totals["total"]:,}'
|
||||
f'accounts 합계 불일치: {sum_total:,} vs totals.total={payload["totals"]["total"]:,}'
|
||||
)
|
||||
|
||||
# v2: 소유자별 집계(by_owner) 검증. 미등록 소유자·구조 오류 차단.
|
||||
by_owner = payload.get('by_owner')
|
||||
if by_owner is not None:
|
||||
if not isinstance(by_owner, dict) or not by_owner:
|
||||
raise ValidationError('by_owner 비어있음')
|
||||
for owner, block in by_owner.items():
|
||||
if owner not in OWNER_ASSET:
|
||||
raise ValidationError(f'by_owner 미등록 소유자: {owner}')
|
||||
if not isinstance(block, dict):
|
||||
raise ValidationError(f'by_owner.{owner} 가 dict 가 아님')
|
||||
_validate_amount_block(block, f'by_owner.{owner}')
|
||||
|
||||
|
||||
def fetch_whooing_balance(as_of: str | None = None) -> dict:
|
||||
cmd = ['python3', str(BALANCE_SCRIPT), '--json']
|
||||
@@ -197,23 +214,25 @@ def post_whooing(payload: dict, dry_run: bool = False) -> tuple[bool, str]:
|
||||
return False, str(e)
|
||||
|
||||
|
||||
def handle_securities_balance(envelope: dict, current_balance: dict, dry_run: bool = False) -> dict:
|
||||
"""차액 reconcile + 후잉 자동 분개. 반환: {action, delta, before, after, journal_ok, note, journal?}.
|
||||
def _reconcile_asset(asset_name: str, owner: str, target_total: int,
|
||||
as_of: str, message_id: str, current_balance: dict,
|
||||
dry_run: bool = False) -> dict:
|
||||
"""자산 하나를 목표총액으로 reconcile + 후잉 자동 분개. 반환 result dict.
|
||||
action ∈ {aligned, journaled, noise, skipped, rejected, journal_failed}.
|
||||
"""
|
||||
payload = envelope['payload']
|
||||
target_total = int(payload['totals']['total'])
|
||||
current = get_whooing_balance_for(SECURITIES_ASSET_NAME, current_balance)
|
||||
current = get_whooing_balance_for(asset_name, current_balance)
|
||||
base = {
|
||||
'topic': 'securities_balance',
|
||||
'as_of': payload.get('as_of'),
|
||||
'owner': owner,
|
||||
'asset_name': asset_name,
|
||||
'as_of': as_of,
|
||||
'target_total': target_total,
|
||||
}
|
||||
if current is None:
|
||||
return {
|
||||
**base,
|
||||
'action': 'skipped',
|
||||
'note': f'후잉 자산에 "{SECURITIES_ASSET_NAME}" 항목 없음',
|
||||
'note': f'후잉 자산에 "{asset_name}" 항목 없음',
|
||||
'delta': None, 'before': None, 'after': None, 'journal_ok': None,
|
||||
}
|
||||
delta = target_total - current
|
||||
@@ -230,14 +249,14 @@ def handle_securities_balance(envelope: dict, current_balance: dict, dry_run: bo
|
||||
'before': current, 'after': current, 'journal_ok': False,
|
||||
'note': f'차액 {delta:+,}원 — 1억원 초과, 분개 거부 (가드)'}
|
||||
|
||||
entry_date = payload['as_of'].replace('-', '')
|
||||
ym = payload['as_of'][:7]
|
||||
entry_date = as_of.replace('-', '')
|
||||
ym = as_of[:7]
|
||||
if delta > 0:
|
||||
item = f'{ym} 평가차익'
|
||||
left, right, money = SECURITIES_ASSET_NAME, SECURITIES_GAIN_NAME, delta
|
||||
left, right, money = asset_name, SECURITIES_GAIN_NAME, delta
|
||||
else:
|
||||
item = f'{ym} 평가차손'
|
||||
left, right, money = SECURITIES_LOSS_NAME, SECURITIES_ASSET_NAME, -delta
|
||||
left, right, money = SECURITIES_LOSS_NAME, asset_name, -delta
|
||||
|
||||
journal = {
|
||||
'entry_date': entry_date,
|
||||
@@ -245,7 +264,7 @@ def handle_securities_balance(envelope: dict, current_balance: dict, dry_run: bo
|
||||
'money': str(money),
|
||||
'left': left,
|
||||
'right': right,
|
||||
'memo': f'레이 inbox reconcile (msg={envelope["message_id"][:8]})',
|
||||
'memo': f'레이 inbox reconcile (msg={message_id[:8]})',
|
||||
}
|
||||
ok, body = post_whooing(journal, dry_run=dry_run)
|
||||
return {
|
||||
@@ -260,6 +279,31 @@ def handle_securities_balance(envelope: dict, current_balance: dict, dry_run: bo
|
||||
}
|
||||
|
||||
|
||||
def handle_securities_balance(envelope: dict, current_balance: dict, dry_run: bool = False) -> list[dict]:
|
||||
"""소유자별 reconcile. v2(by_owner)는 소유자마다, v1은 totals.total→증권(효원) 단건.
|
||||
반환: result dict 리스트.
|
||||
"""
|
||||
payload = envelope['payload']
|
||||
as_of = payload['as_of']
|
||||
msg_id = envelope['message_id']
|
||||
by_owner = payload.get('by_owner')
|
||||
|
||||
if by_owner:
|
||||
results = []
|
||||
for owner, block in sorted(by_owner.items()): # 'gahee' < 'self' — 결정적 순서
|
||||
results.append(_reconcile_asset(
|
||||
OWNER_ASSET[owner], owner, int(block['total']),
|
||||
as_of, msg_id, current_balance, dry_run=dry_run,
|
||||
))
|
||||
return results
|
||||
|
||||
# v1 하위호환: 단일 소유자(self) → 증권(효원)
|
||||
return [_reconcile_asset(
|
||||
SECURITIES_ASSET_NAME, 'self', int(payload['totals']['total']),
|
||||
as_of, msg_id, current_balance, dry_run=dry_run,
|
||||
)]
|
||||
|
||||
|
||||
def move_to(src: Path, dest_dir: Path, dry_run: bool = False) -> None:
|
||||
if dry_run:
|
||||
return
|
||||
@@ -350,24 +394,28 @@ def process_inbox(current_balance: dict | None = None, dry_run: bool = False) ->
|
||||
validate_securities_payload(env['payload'])
|
||||
if balance is None:
|
||||
balance = fetch_whooing_balance()
|
||||
result = handle_securities_balance(env, balance, dry_run=dry_run)
|
||||
summary['reconcile'].setdefault(topic, []).append(result)
|
||||
results = handle_securities_balance(env, balance, dry_run=dry_run)
|
||||
summary['reconcile'].setdefault(topic, []).extend(results)
|
||||
|
||||
if result['action'] in ('rejected', 'journal_failed'):
|
||||
# 소유자 하나라도 rejected/journal_failed 면 failed 로.
|
||||
# 재실행 시 이미 분개된 소유자는 fresh 조회로 delta≈0 aligned → 중복분개 없음.
|
||||
bad = [r for r in results if r['action'] in ('rejected', 'journal_failed')]
|
||||
if bad:
|
||||
move_to(fpath, FAILED_DIR, dry_run=dry_run)
|
||||
reason = result['note']
|
||||
reason = '; '.join(f'{r["asset_name"]}: {r["note"]}' for r in bad)
|
||||
summary['failed'].append({'file': fpath.name, 'reason': reason, 'message_id': msg_id})
|
||||
send_telegram(f'⚠️ 골디 inbox: 분개 {result["action"]}\n{fpath.name}\n{reason}')
|
||||
send_telegram(f'⚠️ 골디 inbox: 분개 {"/".join(r["action"] for r in bad)}\n{fpath.name}\n{reason}')
|
||||
continue
|
||||
|
||||
# 분개 성공/aligned/noise/skipped 모두 processed 로 이동
|
||||
if result.get('journal_ok') and result['action'] == 'journaled' and balance is not None:
|
||||
# 후잉 잔액 in-memory 업데이트 (다음 파일 reconcile 시 정합성 위해)
|
||||
# 분개 성공분은 후잉 잔액 in-memory 업데이트 (동일 run 내 정합성 위해)
|
||||
if balance is not None:
|
||||
for r in results:
|
||||
if r.get('journal_ok') and r['action'] == 'journaled':
|
||||
for sec in balance.get('sections', []):
|
||||
items = (sec.get('groups', {}).get('자산', {}) or {}).get('items', []) or []
|
||||
for it in items:
|
||||
if it.get('name') == SECURITIES_ASSET_NAME:
|
||||
it['money'] = result['after']
|
||||
if it.get('name') == r['asset_name']:
|
||||
it['money'] = r['after']
|
||||
else:
|
||||
raise ValidationError(f'핸들러 없음: {topic}')
|
||||
|
||||
@@ -415,22 +463,23 @@ def format_summary(summary: dict) -> str:
|
||||
before = result.get('before')
|
||||
after = result.get('after')
|
||||
delta = result.get('delta')
|
||||
label = result.get('asset_name', '증권(효원)')
|
||||
if action == 'aligned':
|
||||
lines.append(f'- **증권(효원):** {before:,}원 — 레이 ground truth 와 일치')
|
||||
lines.append(f'- **{label}:** {before:,}원 — 레이 ground truth 와 일치')
|
||||
elif action == 'journaled':
|
||||
sign = '평가차익' if (delta or 0) > 0 else '평가차손'
|
||||
lines.append(
|
||||
f'- **증권(효원):** {before:,}원 → {after:,}원 '
|
||||
f'- **{label}:** {before:,}원 → {after:,}원 '
|
||||
f'({sign} **{abs(delta):,}원** 자동 분개)'
|
||||
)
|
||||
elif action == 'noise':
|
||||
lines.append(f'- **증권(효원):** 차액 {delta:+,}원 (1만원 미만, 분개 skip)')
|
||||
lines.append(f'- **{label}:** 차액 {delta:+,}원 (1만원 미만, 분개 skip)')
|
||||
elif action == 'skipped':
|
||||
lines.append(f'- **증권(효원):** {result.get("note", "skip")}')
|
||||
lines.append(f'- **{label}:** {result.get("note", "skip")}')
|
||||
elif action == 'rejected':
|
||||
lines.append(f'- **증권(효원):** ⚠️ 차액 {delta:+,}원 — 분개 거부 (안전 가드)')
|
||||
lines.append(f'- **{label}:** ⚠️ 차액 {delta:+,}원 — 분개 거부 (안전 가드)')
|
||||
elif action == 'journal_failed':
|
||||
lines.append(f'- **증권(효원):** ⚠️ 분개 실패 — {result.get("note", "")[:120]}')
|
||||
lines.append(f'- **{label}:** ⚠️ 분개 실패 — {result.get("note", "")[:120]}')
|
||||
|
||||
if summary['failed']:
|
||||
lines.append('')
|
||||
|
||||
@@ -238,19 +238,20 @@ def format_inbox_telegram_line(summary: dict) -> str:
|
||||
for r in summary.get("reconcile", {}).get("securities_balance", []):
|
||||
action = r.get("action")
|
||||
delta = r.get("delta") or 0
|
||||
label = r.get("asset_name", "증권(효원)")
|
||||
if action == "aligned":
|
||||
parts.append("증권 일치")
|
||||
parts.append(f"{label} 일치")
|
||||
elif action == "journaled":
|
||||
sign = "차익" if delta > 0 else "차손"
|
||||
parts.append(f"증권 평가{sign} {abs(delta):,}원 분개")
|
||||
parts.append(f"{label} 평가{sign} {abs(delta):,}원 분개")
|
||||
elif action == "noise":
|
||||
parts.append(f"증권 차액 {delta:+,}원 (노이즈)")
|
||||
parts.append(f"{label} 차액 {delta:+,}원 (노이즈)")
|
||||
elif action == "rejected":
|
||||
parts.append(f"⚠️ 증권 차액 {delta:+,}원 거부")
|
||||
parts.append(f"⚠️ {label} 차액 {delta:+,}원 거부")
|
||||
elif action == "journal_failed":
|
||||
parts.append("⚠️ 증권 분개 실패")
|
||||
parts.append(f"⚠️ {label} 분개 실패")
|
||||
elif action == "skipped":
|
||||
parts.append("증권 reconcile skip")
|
||||
parts.append(f"{label} reconcile skip")
|
||||
# rejected/journal_failed 는 위 reconcile 라인에서 이미 표시됨 — 중복 카운트 방지
|
||||
reconcile_failed = sum(
|
||||
1 for r in summary.get("reconcile", {}).get("securities_balance", [])
|
||||
|
||||
@@ -10,6 +10,18 @@ iMessage에 들어오는 카드/은행 결제 알림을 후잉(whooing.com) 웹
|
||||
|
||||
## How
|
||||
|
||||
**on-demand 실행은 launchd 잡을 앞당겨 돌린다.** 스크립트를 직접 실행하지 말 것 —
|
||||
에이전트 세션(코덱스)은 게이트웨이 node 를 TCC responsible process 로 물고 있어서
|
||||
`imsg` 가 Messages DB 를 못 읽는다 (아래 "Full Disk Access" 참고). launchd 잡은 그 제약이 없다.
|
||||
|
||||
```bash
|
||||
launchctl kickstart -p gui/$(id -u)/ai.openclaw.budget.whooing-sync
|
||||
# 비동기 — 몇 초 뒤 결과 확인
|
||||
tail -20 /Users/snowoyh/.openclaw/logs/whooing-sync.log
|
||||
```
|
||||
|
||||
스크립트 직접 실행은 **FDA 를 가진 터미널 앱**(iTerm2 등)에서만 동작한다:
|
||||
|
||||
```bash
|
||||
python3 /Users/snowoyh/.openclaw/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py
|
||||
```
|
||||
@@ -72,18 +84,42 @@ launchctl bootstrap gui/$(id -u) ~/Library/LaunchAgents/ai.openclaw.budget.whooi
|
||||
|
||||
## 전제조건: Full Disk Access (FDA)
|
||||
|
||||
launchd 컨텍스트에서 `imsg` 가 `~/Library/Messages/chat.db` 를 읽으려면 FDA 허용이 필요. 터미널에서 직접 돌릴 땐 터미널 앱의 FDA 를 자식 프로세스가 상속받지만, launchd 는 상속 안 됨.
|
||||
`imsg` 가 `~/Library/Messages/chat.db` 를 읽으려면 FDA 허용이 필요. **판정 주체는 TCC responsible process** — 자기 자신이 아니라 프로세스 체인의 책임 프로세스다.
|
||||
|
||||
- 등록 대상: `/opt/homebrew/bin/imsg`
|
||||
- 경로: 시스템 설정 → 개인정보 보호 및 보안 → 전체 디스크 접근 권한 → `+` 로 추가 → 토글 ON
|
||||
- launchd → `/usr/bin/python3`(플랫폼 바이너리) → `imsg`: 책임이 `imsg` 자신이라 **`/opt/homebrew/bin/imsg` 승인으로 통과**
|
||||
- 터미널 앱 → … → `imsg`: 터미널 앱(iTerm2 등)의 FDA 로 통과
|
||||
- 게이트웨이 node → codex → bash → `imsg`: **게이트웨이 node 바이너리**의 FDA 로 판정됨
|
||||
|
||||
**FDA 누락 증상**: stderr 로그에
|
||||
등록 경로: 시스템 설정 → 개인정보 보호 및 보안 → 전체 디스크 접근 권한 → `+` 로 추가 → 토글 ON
|
||||
|
||||
**FDA 누락 증상**: `imsg` 가 stderr 로 다음을 낸다.
|
||||
|
||||
```
|
||||
❌ imsg chats 실행 실패: Expecting value: line 1 column 1 (char 0)
|
||||
Permission Error: Cannot access Messages database
|
||||
... requires Full Disk Access permission.
|
||||
```
|
||||
|
||||
가 뜨고, stdout 은 `🟢 새 결제 메시지 없음` 으로 조용히 끝남. 오류처럼 보이지 않아 놓치기 쉬움. 맥 이전 / imsg 재설치 시 FDA 재등록 필요.
|
||||
`imsg_cli.run_json()` 이 이걸 잡아 로그에 그대로 옮긴다:
|
||||
|
||||
```
|
||||
⚠️ chat-id 7 history 실패: Messages DB 접근 거부 — 전체 디스크 접근 권한(FDA) 누락. ...
|
||||
```
|
||||
|
||||
### 2026-08-03 사고: homebrew node 업그레이드로 FDA 무효화
|
||||
|
||||
node@22 가 2026-07-20 에 `22.22.2` → `22.23.1` 로 올라가며 **바이너리 경로가 바뀌어** 기존 FDA 승인이 무효화됐다 (시스템 TCC.db 에 22.22.2=허용 / 22.23.1=거부로 남아 있음). 게이트웨이가 7/21 새 바이너리로 재기동되면서 골디의 에이전트 세션에서 `imsg` 가 죽었다. **launchd 잡은 영향 없었다** — 그래서 자동 동기화는 정상인데 골디만 실패하는 그림이 됐고, 골디는 이걸 "문자 수집 실패"로 오진했다.
|
||||
|
||||
- 재발 시 확인: `lsof -p $(pgrep -f 'openclaw/dist/index.js gateway') -a -d txt | head -1` 로 실제 node 경로를 뽑아, 그 경로를 FDA 목록에 추가
|
||||
- 그 다음 게이트웨이 재기동: `launchctl kickstart -k gui/$(id -u)/ai.openclaw.gateway`
|
||||
- **on-demand 실행을 kickstart 로 바꾼 이유가 이것** — node 업그레이드마다 깨지는 의존을 실행 경로에서 뺐다
|
||||
|
||||
당시 오진을 만든 코드 결함 3개는 함께 고쳤다 (2026-08-03):
|
||||
|
||||
1. 호출부가 stderr·returncode 를 버려 권한 오류가 `Expecting value: line 1 column 1 (char 0)` 파싱 에러로 둔갑 → `imsg_cli.py` 공용 래퍼로 사유 노출
|
||||
2. `resolve_chat_ids()` 가 권한 거부 시 **빈 chat id 매핑을 캐시에 저장** → 이후 launchd 포함 전 실행이 캐시 적중으로 조용히 0건 수집을 영구 반복. 이제 전 carrier 가 비면 저장 거부 + exit 3
|
||||
3. `imsg chats` 기본값이 최근 20건이라 조용한 발신번호(현대카드 SMS·신한은행)가 목록에서 빠짐 → 캐시 재생성 시 그 carrier 수집이 조용히 끊김. `CHATS_LIMIT=200` 으로 전량 조회
|
||||
|
||||
맥 이전 / imsg 재설치 시에도 FDA 재등록 필요.
|
||||
|
||||
## 페어 매칭 (자기 계좌 간 이체)
|
||||
|
||||
@@ -118,7 +154,18 @@ launchd 컨텍스트에서 `imsg` 가 `~/Library/Messages/chat.db` 를 읽으려
|
||||
|
||||
- 사람 이름 송금(예: "박영춘", "이지윤")은 exact 룰로 등록하지 말고 default fallback 에 맡긴다. merchant_map 비대화 방지.
|
||||
- `deposit` 은 default fallback 없음 — rule 없으면 raw 폴백 (수익/이체/환급 구분 위험 때문).
|
||||
- ⚠️ **후잉은 계정 그룹별로 쓸 수 있는 변이 정해져 있다** — `비용(expenses)`은 **차변(left) 전용**, `수익(income)`은 **대변(right) 전용**이고 `자산·부채`만 양쪽 자유다. 위반하면 `[r_account] => 잘못된 값입니다`(비용을 우측에) 또는 `[l_account] => 잘못된 값입니다`(수익을 좌측에)로 **HTTP 200 + 실패 본문**이 온다. 이 제약을 몰라서 2026-08-03~04 회귀가 났다. 새 분개 방향을 만들 때 반드시 확인할 것.
|
||||
- ⚠️ **후잉은 취소·환불 문자를 자동 처리하지 않는다.** 공식 FAQ(`/help/faqs/inserting/refund`)가 "기존의 구입 거래를 **찾아서 지워주거나**, 금액을 마이너스로..." 라고 **사용자에게 수동 안내**한다. raw 로 취소 원문을 보내도 원본 승인은 그대로 남는다. 2026-08-04 에 과거 3건(07-04 카카오 월드킹·06-09 현대 쿠팡·06-13 현대 네이버페이)에서 원본이 사라진 걸 보고 "후잉 파서가 지운다"고 판단했는데, **관리자님이 그동안 수동 삭제해 오신 것**이었다. 두 설명 모두 "건수 −1, 순액 일치"라 검산으로는 구분되지 않는다 — 같은 착각을 반복하지 말 것.
|
||||
- `card_cancel` 은 **원본 승인 거래를 찾아 PUT 으로 감액**한다 (2026-08-04, 관리자님 결정 — 수동 삭제를 없애는 게 목적). `_handle_card_cancel` → `whooing_balance.find_card_entries` 로 같은 카드·같은 상호(memo 토큰 매칭)·금액이 취소액 이상인 거래를 30일 창에서 찾고, **정확히 1건일 때만** `set_entry_money` 로 `원금액 − 취소액` 으로 줄인다. 전액취소면 0원 줄이 남지만 잔액·합계에 영향은 없다.
|
||||
- ⚠️ **좌우를 뒤집은 역분개로 바꾸지 말 것** — 비용이 대변으로 가서 후잉이 거부한다(위 제약). 2026-08-03 에 이 방식으로 바꿨다가 **첫 취소 문자에서 동기화가 통째로 멈췄다**(`blocked_at` 이 커서를 잠가 뒤의 정상 결제까지 전부 대기).
|
||||
- ⚠️ **거래 삭제는 API 로 불가능하다** — 후잉 OpenAPI 의 DELETE 는 `section_id` 를 쿼리·본문(urlencoded/JSON)·쿠키·경로 어디에서도 읽지 못한다(2026-08-04 전수 실측, 같은 본문을 PUT 으로 보내면 정상). 0원 줄을 지우려면 후잉 UI 에서 수동으로. 마이너스 분개(후잉 공식 안내안)도 가능하지만 ± 두 줄이 남아 채택하지 않았다.
|
||||
- **후보가 0건이거나 2건 이상이면 감액하지 않고 raw 폴백**(오감액보다 안전). 이때는 **후잉이 알아서 처리해주지 않으므로 관리자님 수동 작업이 필요하다** — 그래서 폴백 건은 `new_raw` 에 그대로 실어 raw 폴백 텔레그램 알림이 울리게 둔다. 알림을 끄면 수동 작업이 필요한 걸 모르고 지나친다.
|
||||
- ⚠️ **매칭은 `item` 이 아니라 `memo` 로 한다** — `merchant_map` contains 룰이 `item` 을 재작성해서(동행복권→`복권`) item 은 상호와 다를 수 있지만 memo 는 항상 승인 SMS 원문이다.
|
||||
- ⚠️ **memo 매칭은 토큰 단위**(`_memo_has_merchant`) — 단순 substring 이면 `쿠팡` 이 `쿠팡페이주` 승인까지 잡는다. 2026-08-04 에 두 상호가 같은 날 같은 금액(22,700원)으로 실제로 있었다.
|
||||
- ⚠️ **`card_cancel` 을 내는 파서는 현대카드·신한카드(`매입취소`/`승인취소`) 둘뿐이다.** 카카오뱅크 `카드결제취소` 는 `KAKAOBANK_CARD_RE` 의 `카드결제\s+` 가 안 맞아 **파싱 자체가 실패**(`kind=None`)하고, 하나·신한은행은 입금/출금만 있다. **이들은 감액 대상이 아니라 raw 로 가고, 후잉도 처리하지 않으므로 관리자님 수동 삭제가 계속 필요하다.** 자동화하려면 `parsers.py` 보강 + 2026-08-03 픽스처 회귀 재실행이 필요하다 — **2026-08-04 관리자님 지시로 "실제 취소 문자가 올 때 처리"로 보류**. 판단 근거는 파싱이 실패해도 `_infer_raw_details` 가 정규식으로 금액·상호를 뽑아 raw 폴백 알림에 실어주기 때문(실측: 카카오 취소 문자 → `2,000원 · (주)월드킹`). 알림을 보고 그때 대응하면 된다.
|
||||
- **삼성카드는 아예 동기화 대상이 아니다** — 발신번호 `+8215888700` 이 `whooing_account_map.json` 에서 `confirmed=False` 라 수집조차 안 되고, 실제 오는 문자는 전부 `(광고)` 이며 후잉 `삼성신용(효원)`(x77) 은 최근 90일 거래 0건이다(2026-08-04 확인). 취소를 기다릴 대상이 아니라, **다시 사용하기 시작하면 승인 문자부터 누락**되니 그때 `confirmed` 등록이 먼저다.
|
||||
- 기존 contains(예: "스타벅스 → 식비") / exact(예: "방효원 → 기초잔액(효원)") 는 계속 유효. fallback 은 둘 다 miss 일 때만 탄다.
|
||||
- ⚠️ **주유소는 두 곳을 함께 손대야 한다** — `whooing_sync.py` 의 `FUEL_KEYWORDS`(150,000원 선승인/취소 스킵)와 `whooing_merchant_map.json` contains 룰(실제 결제 → `차량유지비/주유비`)이 한 쌍이다. 한쪽만 넣으면 선승인이 후잉에 남거나 실제 주유가 기타비용으로 샌다. 상호에 주유/석유가 없는 충전소(현대가스·한경에너)는 상호 자체를 등록. 한경에너는 선승인이 149,900원이라 `FUEL_PREAUTH_AMOUNT`(150,000 정확일치) 스킵엔 안 걸리고 분류만 적용된다.
|
||||
- 결과적으로 자잘한 인명 송금·가맹점 미등록 건은 전부 기타비용으로 자동 분류되고, 분류가 필요한 것만 후잉 UI 에서 사후 조정하거나 merchant_map 에 규칙 추가한다.
|
||||
|
||||
### 우선 룰 (whooing_overrides.json)
|
||||
@@ -229,7 +276,7 @@ python3 .../whooing_manual.py --dry-run --item ... --money ...
|
||||
원칙:
|
||||
- 차트에 없는 계정명으로 절대 추측 POST 금지. 모르면 반드시 재질문.
|
||||
- 사용자가 이미 한 문장에 "스타벅스 5800원 신한카드로" 다 말했다면, 카테고리만 확인하고 바로 실행.
|
||||
- 카드 취소/환불이면 structured 대신 `--message` raw 모드로 원문 보내 후잉이 상쇄하게 한다.
|
||||
- 카드 취소/환불은 원본 승인 거래를 찾아 감액하는 게 원칙(위 `card_cancel` 항목). 후잉은 취소 문자를 자동 처리해주지 않으니 raw 로 보내고 끝내면 안 된다 — 원본이 그대로 남는다.
|
||||
|
||||
## 잔액 조회 (whooing_balance.py)
|
||||
|
||||
@@ -296,6 +343,9 @@ python3 .../whooing_balance.py --json \
|
||||
### 흐름
|
||||
|
||||
1. **발신 게이트** — KST 기준 `day >= send_day_of_month` (catch-up 정책) 이고 시각이 `send_hour_kst` 이상이며 `last_sent_month` ≠ 이번 달이면 1회 발신. 25일에 Mac이 꺼져 있었어도 26~월말 사이 켜면 그 시점에 발신. 다음 달로 넘어가면 포기.
|
||||
- 발신은 **`--service imessage`** (2026-08-03 전환, 아래 사고 참고). 가희님은 iMessage 사용자다.
|
||||
- 성공 시 `last_sent_month` 와 함께 **`last_sent_at`** 을 찍는다 — 답신 미도착 감시의 시작점.
|
||||
1-b. **답신 미도착 감시** (`_check_reply_overdue`) — 발신 후 `REPLY_GRACE_DAYS`(2일)가 지나도 가희님 답신이 없으면 관리자님께 텔레그램 1회. 유예 전이면 API 콜 0으로 즉시 반환하고, 답신이 확인되면 `last_sent_at` 을 지워 감시를 끝낸다. 같은 발신 건에 대한 재알림은 `reply_alert_for` 로 막는다. ⚠️ **재발신은 자동으로 하지 않는다** — 가희님이 늦게 답하는 경우 중복 독촉이 되고, 자동 발송 트리거를 늘리지 않는다는 방침에도 어긋난다.
|
||||
2. **응답 폴링** — `imsg chats --json` → 가희 chat 찾기 → `imsg history --chat-id X --start <last_processed_message_at> --attachments --json`. 가희 발신(is_from_me≠true) 메시지만 처리.
|
||||
3. **1차 스캔** (즉시 워터마크 갱신):
|
||||
- **이미지 첨부 있음** → 자동분개 X, 골디 텔레그램 알림만 ("이미지 답신 — 직접 처리 부탁")
|
||||
@@ -322,6 +372,8 @@ python3 .../whooing_balance.py --json \
|
||||
"message_template": "가계부 업데이트 날이에요. 계좌잔액 보내주시면 자동으로 반영됩니다.",
|
||||
"last_sent_month": null,
|
||||
"last_processed_message_at": null,
|
||||
"last_sent_at": null,
|
||||
"reply_alert_for": null,
|
||||
"whooing_account_name": "가희주머니",
|
||||
"income_account": "가희비밀주머니_수익",
|
||||
"expense_account": "기타비용"
|
||||
@@ -330,8 +382,29 @@ python3 .../whooing_balance.py --json \
|
||||
|
||||
- `last_sent_month` = "YYYY-MM" 발신 직후 기록. 같은 달에 재발신 안 함.
|
||||
- `last_processed_message_at` = imsg history `--start` 의 ISO 워터마크. 처리한 메시지의 created_at 최댓값.
|
||||
- `last_sent_at` = 발신 시각(UTC Z). 답신 미도착 감시의 기준점. 답신 확인되면 지워진다.
|
||||
- `reply_alert_for` = 이미 "답신 없음" 알림을 보낸 `last_sent_at` 값. 같은 발신 건 재알림 방지.
|
||||
- 발신 문구·트리거 일자·계정명 변경은 모두 이 JSON 직접 편집. 코드 재배포 불필요. whooing-sync 가 매 사이클 다시 읽음.
|
||||
|
||||
### 수동 발신 (`--send-now`)
|
||||
|
||||
발송이 실패해 그 달을 놓쳤을 때의 복구 수단. 날짜 게이트를 무시하고 1회 발신하며 `last_sent_month` 는 건드리지 않아 정규 25일 발신이 살아있다.
|
||||
|
||||
```bash
|
||||
python3 gahee_reminder.py --send-now [--dry-run]
|
||||
```
|
||||
|
||||
⚠️ **에이전트 세션·코디 셸에서 실행하면 20초 타임아웃으로 실패한다.** `imsg send` 는 AppleEvents 로 Messages 를 구동하는데, **자동화 → 메시지** 권한이 `imsg` 와 iTerm2 에만 허용돼 있고 Claude Code 에는 거부로 박혀 있다. launchd 경유로 돌려야 한다 — 임시 oneshot plist 를 만들어 `kickstart` 하고 로그를 읽은 뒤 `bootout` + 삭제한다(2026-08-03 실행 방식).
|
||||
|
||||
### 2026-07-25 사고: 미발송이 성공으로 기록됨
|
||||
|
||||
7/25 리마인더가 실제로 발송되지 않았는데(`chat.db`: `service=SMS, is_sent=0, error=4`) 시스템은 성공으로 기록했다. 가희주머니 7월 잔액이 안 들어와 8/1 월간 결산에서 빠졌다.
|
||||
|
||||
- **왜 실패했나** — `--service sms` 강제가 이 수신자에게 **3전 3패**였다(5/25 ×2, 7/25 ×1 전부 `error=4`). 살아남은 2건(5/25·6/25)은 Messages 가 임의로 **RCS 로 바꿔** 보낸 운이었고, 7월엔 그 폴백이 안 일어났다. 전체 통계로도 iMessage 137/139 성공 vs SMS 실패 3건(전부 이 리마인더).
|
||||
- **왜 몰랐나** — `imsg send` 는 Messages 에 넘기기만 성공하면 rc=0 이고, 실제 실패는 그 뒤 비동기로 `chat.db` 의 `error` 에 찍힌다. 코드가 rc 만 봐서 성공 처리 → 오탐 텔레그램 → `last_sent_month` 갱신 → 그 달 재시도 차단 → 8월엔 catch-up 이 당월만 보므로 7월분 영구 유실.
|
||||
- **왜 발송 검증을 자동 경로에 안 넣었나** — `is_sent`/`error` 는 `chat.db` 에만 있고 `imsg history` JSON 은 노출하지 않는다(실패한 메시지도 정상 조회됨). 직접 sqlite 조회가 유일한 길인데 **launchd 의 `/usr/bin/python3` 는 FDA 가 없어 `authorization denied` 로 막힌다**(2026-08-03 실측). 그래서 자동 경로는 권한과 무관한 답신 기반 감시를 쓰고, 정밀 확인(`_verify_sent`)은 FDA 가 있는 컨텍스트에서 도는 `--send-now` 에만 붙였다.
|
||||
- `error=4` 의 정확한 의미는 확증 못 함 — 사고 시점 imagent 로그가 이미 롤오프됐다.
|
||||
|
||||
### 수신자 설정
|
||||
|
||||
`/Users/snowoyh/.openclaw/credentials/gahee_imessage.json`:
|
||||
|
||||
@@ -12,13 +12,18 @@
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import sqlite3
|
||||
import subprocess
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import imsg_cli
|
||||
import notify
|
||||
import whooing_balance
|
||||
|
||||
@@ -27,6 +32,13 @@ GAHEE_CRED = Path("/Users/snowoyh/.openclaw/credentials/gahee_imessage.json")
|
||||
STATE_FILE = Path("/Users/snowoyh/.openclaw/agents/budget/workspace/state/gahee_reminder.json")
|
||||
IMSG_TIMEOUT = 20
|
||||
HISTORY_LIMIT = 50
|
||||
# 발신 후 이 기간 안에 가희님 답신이 없으면 발송 실패를 의심하고 관리자님께 1회 알린다.
|
||||
# imsg send 는 Messages 에 넘기기만 성공하면 rc=0 이라 발송 실패를 동기적으로 못 잡는다
|
||||
# (2026-07-25 사고: SMS error=4 로 미발송인데 성공 처리돼 그 달 재시도가 막혔다).
|
||||
# 실측 답신 지연은 3시간·38시간 — 2일이면 오탐이 적다.
|
||||
REPLY_GRACE_DAYS = 2
|
||||
CHAT_DB = Path.home() / "Library" / "Messages" / "chat.db"
|
||||
APPLE_EPOCH = 978307200 # chat.db date 는 2001-01-01 기준 ns
|
||||
# 라벨 + 금액 패턴. 라벨은 한글/영문/괄호/공백/숫자 1~20자.
|
||||
# 콜론 구분 입력은 정수 전체를 허용하고, 공백 구분 입력은 천 단위 콤마가 있을 때만 허용한다.
|
||||
# 일반 안내 문자의 "오전 09" 같은 표현을 잔액으로 오인하지 않기 위함.
|
||||
@@ -77,15 +89,11 @@ def _normalize(handle: str) -> str:
|
||||
|
||||
|
||||
def _imsg_chats() -> list[dict]:
|
||||
try:
|
||||
raw = subprocess.run(
|
||||
["imsg", "chats", "--json"],
|
||||
capture_output=True, text=True, timeout=IMSG_TIMEOUT,
|
||||
)
|
||||
return [json.loads(l) for l in raw.stdout.splitlines() if l.strip()]
|
||||
except Exception as e:
|
||||
print(f"⚠️ 가희 imsg chats 실패: {e}")
|
||||
rows, err = imsg_cli.chats(IMSG_TIMEOUT)
|
||||
if err:
|
||||
print(f"⚠️ 가희 imsg chats 실패: {err}")
|
||||
return []
|
||||
return rows
|
||||
|
||||
|
||||
def _find_gahee_chat_id(handle_norm: str) -> int | None:
|
||||
@@ -97,26 +105,35 @@ def _find_gahee_chat_id(handle_norm: str) -> int | None:
|
||||
|
||||
|
||||
def _imsg_history(chat_id: int, start_iso: str | None) -> list[dict]:
|
||||
cmd = ["imsg", "history", "--chat-id", str(chat_id),
|
||||
args = ["history", "--chat-id", str(chat_id),
|
||||
"--limit", str(HISTORY_LIMIT), "--attachments", "--json"]
|
||||
if start_iso:
|
||||
cmd += ["--start", start_iso]
|
||||
try:
|
||||
raw = subprocess.run(cmd, capture_output=True, text=True, timeout=IMSG_TIMEOUT)
|
||||
return [json.loads(l) for l in raw.stdout.splitlines() if l.strip()]
|
||||
except Exception as e:
|
||||
print(f"⚠️ 가희 imsg history 실패: {e}")
|
||||
args += ["--start", start_iso]
|
||||
rows, err = imsg_cli.run_json(args, IMSG_TIMEOUT)
|
||||
if err:
|
||||
print(f"⚠️ 가희 imsg history 실패: {err}")
|
||||
return []
|
||||
return rows
|
||||
|
||||
|
||||
def _send_imessage(handle: str, text: str, dry_run: bool) -> bool:
|
||||
"""가희님께 리마인더 발신.
|
||||
|
||||
⚠️ rc=0 은 "Messages 에 넘겼다"는 뜻일 뿐 발송 성공이 아니다. 실제 실패는 그 뒤
|
||||
비동기로 chat.db 의 error 칼럼에 찍힌다 — 여기서는 알 수 없다. 발송 여부 확인은
|
||||
_verify_sent()(FDA 필요, CLI 전용) 또는 _check_reply_overdue()(답신 기반)가 맡는다.
|
||||
|
||||
⚠️ service 는 imessage 다. sms 강제는 이 수신자에게 3전 3패였고(5/25 ×2, 7/25 ×1
|
||||
전부 error=4), 살아남은 2건은 Messages 가 임의로 RCS 로 바꿔준 운이었다. 가희님은
|
||||
iMessage 사용자다(답신 2건 모두 iMessage). 2026-08-03 전환.
|
||||
"""
|
||||
if dry_run:
|
||||
print(f"[dry-run] imsg send --to {handle} --text {text!r} --service sms")
|
||||
print(f"[dry-run] imsg send --to {handle} --text {text!r} --service imessage")
|
||||
return True
|
||||
try:
|
||||
result = subprocess.run(
|
||||
["imsg", "send", "--to", handle, "--text", text,
|
||||
"--service", "sms"],
|
||||
"--service", "imessage"],
|
||||
capture_output=True, text=True, timeout=IMSG_TIMEOUT,
|
||||
)
|
||||
if result.returncode != 0:
|
||||
@@ -128,6 +145,46 @@ def _send_imessage(handle: str, text: str, dry_run: bool) -> bool:
|
||||
return False
|
||||
|
||||
|
||||
def _utc_z(dt: datetime) -> str:
|
||||
"""imsg --start / state 워터마크와 같은 UTC Z 포맷."""
|
||||
return dt.astimezone(ZoneInfo("UTC")).isoformat().replace("+00:00", "Z")
|
||||
|
||||
|
||||
def _verify_sent(handle: str, after_unix: float, timeout: int = 20):
|
||||
"""chat.db 직접 조회로 실제 발송 여부 확인. 반환 (verdict, detail).
|
||||
|
||||
verdict True=발송됨 / False=실패 / None=확인 불가.
|
||||
chat.db 는 FDA 를 가진 컨텍스트에서만 읽힌다 — launchd(/usr/bin/python3)에선 못 읽으므로
|
||||
확인 불가(None)로 떨어진다. 이 함수는 CLI 전용이고, 자동 경로는 답신 기반 감시를 쓴다.
|
||||
"""
|
||||
digits = re.sub(r"\D", "", handle)[-8:]
|
||||
after_ns = int((after_unix - APPLE_EPOCH) * 1_000_000_000)
|
||||
deadline = time.time() + timeout
|
||||
detail = None
|
||||
while True:
|
||||
try:
|
||||
con = sqlite3.connect(f"file:{CHAT_DB}?mode=ro", uri=True)
|
||||
row = con.execute(
|
||||
"select m.service, m.is_sent, m.error from message m "
|
||||
"join handle h on m.handle_id = h.rowid "
|
||||
"where h.id like ? and m.is_from_me = 1 and m.date >= ? "
|
||||
"order by m.date desc limit 1",
|
||||
(f"%{digits}", after_ns),
|
||||
).fetchone()
|
||||
con.close()
|
||||
except Exception as e:
|
||||
return None, f"chat.db 조회 불가 ({type(e).__name__}: {e})"
|
||||
if row:
|
||||
detail = f"service={row[0]} is_sent={row[1]} error={row[2]}"
|
||||
if row[2]:
|
||||
return False, detail
|
||||
if row[1]:
|
||||
return True, detail
|
||||
if time.time() >= deadline:
|
||||
return None, detail or "발신 기록이 아직 안 보임"
|
||||
time.sleep(1)
|
||||
|
||||
|
||||
def _parse_balance_text(text: str) -> dict[str, int]:
|
||||
"""가희 답신 텍스트에서 '라벨 : 금액' 페어 추출. 빈 dict면 포맷 오류.
|
||||
|
||||
@@ -234,6 +291,9 @@ def _maybe_send_reminder(state: dict, dry_run: bool) -> bool:
|
||||
|
||||
if not dry_run:
|
||||
state["last_sent_month"] = month_tag
|
||||
# 답신 감시 시작점. 발송 성공 여부는 여기서 알 수 없으므로 답신으로 확인한다.
|
||||
state["last_sent_at"] = _utc_z(now)
|
||||
state.pop("reply_alert_for", None)
|
||||
_save_json(STATE_FILE, state)
|
||||
notify.send(
|
||||
f"📨 <b>가희 잔액 리마인더 발신</b>\n"
|
||||
@@ -243,6 +303,51 @@ def _maybe_send_reminder(state: dict, dry_run: bool) -> bool:
|
||||
return True
|
||||
|
||||
|
||||
def _check_reply_overdue(state: dict, dry_run: bool):
|
||||
"""발신 후 REPLY_GRACE_DAYS 가 지나도 답신이 없으면 관리자님께 1회 알린다.
|
||||
|
||||
발송 실패를 직접 감지할 수 없어서(위 _send_imessage 주석) 결과로 대신 본다.
|
||||
2026-07-25 처럼 미발송이 조용히 넘어가는 걸 막는 유일한 안전망이다.
|
||||
|
||||
⚠️ 재발신은 자동으로 하지 않는다 — 가희님이 늦게 답하는 경우 중복 독촉이 되고,
|
||||
자동 발송 트리거를 늘리지 않는다는 방침에도 어긋난다. 알림 받고 --send-now 로 수동.
|
||||
"""
|
||||
sent_at = state.get("last_sent_at")
|
||||
if not sent_at:
|
||||
return
|
||||
try:
|
||||
sent_dt = datetime.fromisoformat(sent_at.replace("Z", "+00:00"))
|
||||
except ValueError:
|
||||
return
|
||||
if _now_kst() - sent_dt < timedelta(days=REPLY_GRACE_DAYS):
|
||||
return
|
||||
if state.get("reply_alert_for") == sent_at:
|
||||
return # 이번 발신 건은 이미 알림
|
||||
|
||||
handle_norm = _normalize(_gahee_handle())
|
||||
chat_id = _find_gahee_chat_id(handle_norm)
|
||||
if chat_id is None:
|
||||
return
|
||||
if any(_msg_from_gahee(m) for m in _imsg_history(chat_id, sent_at)):
|
||||
# 답신 도착 — 감시 종료
|
||||
if not dry_run:
|
||||
state.pop("last_sent_at", None)
|
||||
state.pop("reply_alert_for", None)
|
||||
_save_json(STATE_FILE, state)
|
||||
return
|
||||
|
||||
days = (_now_kst() - sent_dt).days
|
||||
notify.send(
|
||||
f"⚠️ <b>가희 잔액 리마인더 — {days}일째 답신 없음</b>\n"
|
||||
f"발신: {notify.escape_html(sent_at)}\n"
|
||||
f"발송 자체가 실패했을 수 있어요 (imsg 는 발송 실패를 알려주지 않아요).\n"
|
||||
f"재발신: <code>python3 gahee_reminder.py --send-now</code>"
|
||||
)
|
||||
if not dry_run:
|
||||
state["reply_alert_for"] = sent_at
|
||||
_save_json(STATE_FILE, state)
|
||||
|
||||
|
||||
def _msg_text(msg: dict) -> str:
|
||||
"""imsg history 메시지 객체에서 본문 텍스트 추출. 키 변형(text/body) 모두 시도."""
|
||||
for k in ("text", "body", "message", "content"):
|
||||
@@ -402,9 +507,61 @@ def run(webhook_url: str, post_fn, dry_run: bool = False):
|
||||
_maybe_send_reminder(state, dry_run=dry_run)
|
||||
# 발신 직후 같은 사이클에서 폴링은 무의미하지만, 다음 사이클부터 자연스럽게 시작됨.
|
||||
_poll_replies(state, webhook_url, post_fn, dry_run=dry_run)
|
||||
# 발송 실패가 조용히 넘어가지 않게 하는 안전망. 유예 전이면 API 콜 없이 즉시 반환.
|
||||
_check_reply_overdue(state, dry_run=dry_run)
|
||||
except Exception as e:
|
||||
print(f"❌ gahee_reminder.run 예외 (격리됨): {e}")
|
||||
try:
|
||||
notify.send(f"❌ <b>가희 모듈 예외</b>\n{notify.escape_html(str(e))[:500]}")
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
|
||||
def send_now(dry_run: bool = False) -> int:
|
||||
"""날짜 게이트를 무시하고 리마인더 1회 발신 (수동용).
|
||||
|
||||
발송 실패로 그 달을 통째로 놓쳤을 때 복구 수단. last_sent_month 는 건드리지 않아
|
||||
정규 발신(매월 25일)이 그대로 살아있다.
|
||||
"""
|
||||
state = _load_json(STATE_FILE, None)
|
||||
if not state:
|
||||
print("❌ 가희 state 파일 없음", file=sys.stderr)
|
||||
return 1
|
||||
|
||||
handle = _gahee_handle()
|
||||
template = state.get("message_template") or "가계부 업데이트 날이에요. 계좌잔액 보내주시면 자동으로 반영됩니다."
|
||||
before = time.time()
|
||||
if not _send_imessage(handle, template, dry_run=dry_run):
|
||||
return 1
|
||||
if dry_run:
|
||||
print(f"[dry-run] 수신자={handle} · last_sent_month 는 그대로 유지")
|
||||
return 0
|
||||
|
||||
state["last_sent_at"] = _utc_z(_now_kst())
|
||||
state.pop("reply_alert_for", None)
|
||||
_save_json(STATE_FILE, state)
|
||||
|
||||
verdict, detail = _verify_sent(handle, before)
|
||||
if verdict is True:
|
||||
print(f"✅ 발송 확인 — {detail}")
|
||||
return 0
|
||||
if verdict is False:
|
||||
print(f"❌ 발송 실패 — {detail}", file=sys.stderr)
|
||||
state.pop("last_sent_at", None)
|
||||
_save_json(STATE_FILE, state)
|
||||
return 1
|
||||
# chat.db 를 못 읽는 컨텍스트이거나 아직 판정 전. 실패로 단정하지 않는다.
|
||||
print(f"⚠️ 발송 확인 불가 — {detail}")
|
||||
print(f" 답신이 {REPLY_GRACE_DAYS}일간 없으면 골디가 텔레그램으로 알립니다.")
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
ap = argparse.ArgumentParser(description="가희 잔액 리마인더 (수동 발신용)")
|
||||
ap.add_argument("--send-now", action="store_true",
|
||||
help="날짜 게이트 무시하고 1회 발신. 정규 25일 발신은 유지")
|
||||
ap.add_argument("--dry-run", action="store_true", help="실제 발송 없이 계획만 출력")
|
||||
args = ap.parse_args()
|
||||
if args.send_now:
|
||||
sys.exit(send_now(dry_run=args.dry_run))
|
||||
ap.print_help()
|
||||
|
||||
@@ -0,0 +1,81 @@
|
||||
#!/usr/bin/env python3
|
||||
from __future__ import annotations
|
||||
|
||||
"""imsg CLI 호출 공용 래퍼.
|
||||
|
||||
호출부가 stdout 만 JSON 파싱하고 stderr·returncode 를 버리면, FDA(전체 디스크 접근 권한)
|
||||
누락 같은 권한 오류가 `Expecting value: line 1 column 1 (char 0)` 파싱 에러로 둔갑한다.
|
||||
2026-08-03 골디 오진 사고의 원인 — 실제 원인은 homebrew node 업그레이드로 게이트웨이
|
||||
바이너리 경로가 바뀌어 FDA 승인이 무효화된 것이었다. 판정을 한곳에 모아 사유를 그대로 노출한다.
|
||||
"""
|
||||
import json
|
||||
import subprocess
|
||||
|
||||
# imsg 가 권한 거부 시 내는 문구 (imsg 0.5.0 기준).
|
||||
FDA_MARKERS = ("Full Disk Access", "Cannot access Messages database")
|
||||
FDA_HINT = (
|
||||
"Messages DB 접근 거부 — 전체 디스크 접근 권한(FDA) 누락. "
|
||||
"skills/whooing-sync/SKILL.md 의 'Full Disk Access' 섹션 참고"
|
||||
)
|
||||
|
||||
|
||||
# `imsg chats` 기본값은 최근 20건이라, 오래 조용한 발신번호(현대카드 SMS·신한은행 등)가
|
||||
# 목록에서 빠진다. 그 상태로 chat id 캐시를 다시 만들면 해당 carrier 수집이 조용히 끊긴다.
|
||||
# chat.db 전체 대화가 130개 수준이라 넉넉히 잡는다. (2026-08-03 실측으로 발견)
|
||||
CHATS_LIMIT = 200
|
||||
|
||||
|
||||
def _reason(stderr: str, stdout: str, fallback: str) -> str:
|
||||
"""실패 사유 한 줄. FDA 마커는 stdout/stderr 어느 쪽에 있어도 잡는다."""
|
||||
err = (stderr or "").strip()
|
||||
out = (stdout or "").strip()
|
||||
if any(m in err or m in out for m in FDA_MARKERS):
|
||||
return FDA_HINT
|
||||
detail = err or out
|
||||
if detail:
|
||||
return " ".join(detail.split())[:200]
|
||||
return fallback
|
||||
|
||||
|
||||
def run_json(args: list, timeout: int) -> "tuple[list, str | None]":
|
||||
"""imsg 실행 → (rows, error). 성공 시 (list[dict], None), 실패 시 ([], 사유).
|
||||
|
||||
결과 0건과 실패를 구분한다 — 둘 다 빈 리스트지만 실패에만 error 가 붙는다.
|
||||
"""
|
||||
try:
|
||||
p = subprocess.run(
|
||||
["imsg"] + list(args),
|
||||
capture_output=True, text=True, timeout=timeout,
|
||||
)
|
||||
except FileNotFoundError:
|
||||
return [], "imsg CLI가 설치되어 있지 않습니다"
|
||||
except subprocess.TimeoutExpired:
|
||||
return [], f"타임아웃 ({timeout}s)"
|
||||
except Exception as e:
|
||||
return [], f"{type(e).__name__}: {e}"
|
||||
|
||||
out = p.stdout or ""
|
||||
if p.returncode != 0:
|
||||
return [], _reason(p.stderr, out, f"rc={p.returncode}")
|
||||
|
||||
if not out.strip():
|
||||
# stderr 만 있고 stdout 이 비면 실패. 둘 다 비면 정상적으로 결과 0건.
|
||||
if (p.stderr or "").strip():
|
||||
return [], _reason(p.stderr, "", "빈 출력")
|
||||
return [], None
|
||||
|
||||
rows = []
|
||||
for line in out.splitlines():
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
try:
|
||||
rows.append(json.loads(line))
|
||||
except json.JSONDecodeError:
|
||||
return [], _reason(p.stderr, line, "JSON 파싱 실패")
|
||||
return rows, None
|
||||
|
||||
|
||||
def chats(timeout: int) -> "tuple[list, str | None]":
|
||||
"""대화 목록 조회 → (rows, error). CHATS_LIMIT 만큼 넓게 훑는다."""
|
||||
return run_json(["chats", "--limit", str(CHATS_LIMIT), "--json"], timeout)
|
||||
@@ -74,6 +74,22 @@ SHINHAN_APPROVE_RE = re.compile(
|
||||
)
|
||||
|
||||
|
||||
# 신한카드 자동납부 형식은 위 승인 SMS와 금액/상호 순서가 반대다:
|
||||
# "[신한카드] 자동납부 정상승인 방효원님 08/06 (일시불) 14,000원 삼천리도시가스"
|
||||
# SHINHAN_APPROVE_RE 를 느슨하게 고치는 대신 별도 패턴으로 먼저 시도한다 —
|
||||
# 느슨하게 고치면 merchant 자리에 "08/06 (일시불)" 이 잡힌다.
|
||||
# kind 대안 순서 주의: `정상승인`·`승인취소` 가 `승인` 보다 앞에 와야 한다(왼쪽 우선).
|
||||
SHINHAN_AUTOPAY_RE = re.compile(
|
||||
r"\[?신한카드\]?\s*자동납부\s*(?P<kind>정상승인|승인취소|매입취소|승인|취소)\s+"
|
||||
r"(?P<who>\S+?님)\s+"
|
||||
r"\d{2}/\d{2}\s+"
|
||||
r"(?:\([^)]*\)\s+)?" # (일시불) / (3개월) — 없는 변형도 통과
|
||||
r"(?P<amount>[\d,]+)\s*원\s+"
|
||||
r"(?P<merchant>[^\n]+)",
|
||||
re.DOTALL,
|
||||
)
|
||||
|
||||
|
||||
SHINHAN_BANK_RE = re.compile(
|
||||
r"\[Web발신\]\s*\n"
|
||||
r"신한\s*(?P<md>\d{2}/\d{2})\s+(?P<hm>\d{2}:\d{2})\s*\n"
|
||||
@@ -107,7 +123,7 @@ def parse_shinhan_bank(raw: str, created_at: str) -> "dict | None":
|
||||
|
||||
def parse_shinhan_card(raw: str, created_at: str) -> "dict | None":
|
||||
text = _normalize(raw).replace("[Web발신]", "")
|
||||
m = SHINHAN_APPROVE_RE.search(text)
|
||||
m = SHINHAN_AUTOPAY_RE.search(text) or SHINHAN_APPROVE_RE.search(text)
|
||||
if not m:
|
||||
return None
|
||||
kind_raw = m.group("kind")
|
||||
@@ -135,8 +151,32 @@ KAKAOBANK_RE = re.compile(
|
||||
)
|
||||
|
||||
|
||||
KAKAOBANK_CARD_RE = re.compile(
|
||||
r"\[Web발신\]\s*\[카카오뱅크\]\s+카드결제\s+"
|
||||
r"(?P<card>\S+)\s+"
|
||||
r"(?P<md>\d{2}/\d{2})\s+(?P<hm>\d{2}:\d{2})\s+"
|
||||
r"(?P<amount>[\d,]+)원\s+"
|
||||
r"(?P<merchant>[^\n]+?)"
|
||||
r"(?:\s+잔액\s+(?P<balance>[\d,]+)원?)?\s*$",
|
||||
re.DOTALL,
|
||||
)
|
||||
|
||||
|
||||
def parse_kakao_bank(raw: str, created_at: str) -> "dict | None":
|
||||
text = _normalize(raw)
|
||||
card = KAKAOBANK_CARD_RE.search(text)
|
||||
if card:
|
||||
result = {
|
||||
"kind": "withdrawal",
|
||||
"entry_date": _iso_to_kst_date(created_at),
|
||||
"amount": int(card.group("amount").replace(",", "")),
|
||||
"merchant": _normalize(card.group("merchant")).split("\n")[0].strip() or "(메모없음)",
|
||||
"raw": raw,
|
||||
}
|
||||
if card.group("balance"):
|
||||
result["balance"] = int(card.group("balance").replace(",", ""))
|
||||
return result
|
||||
|
||||
m = KAKAOBANK_RE.search(text)
|
||||
if not m:
|
||||
return None
|
||||
@@ -155,15 +195,16 @@ def parse_kakao_bank(raw: str, created_at: str) -> "dict | None":
|
||||
return result
|
||||
|
||||
|
||||
# 현대카드 승인 형식 (취소는 별도 샘플 확보 후 추가):
|
||||
# 현대카드 블루멤버스 승인
|
||||
# 방*원
|
||||
# 5,170원 일시불
|
||||
# 04/25 11:34
|
||||
# 쿠팡
|
||||
# 누적1,466,011원
|
||||
HYUNDAI_CARD_APPROVE_RE = re.compile(
|
||||
r"^\s*현대카드[^\n]*승인\s*\n"
|
||||
# 현대카드 승인/취소 형식 (취소도 헤더 단어만 다르고 본문 구조는 같다):
|
||||
# 현대카드 블루멤버스 승인 현대카드 블루멤버스 취소
|
||||
# 방*원 방*원
|
||||
# 5,170원 일시불 150,000원 일시불
|
||||
# 04/25 11:34 08/02 13:06
|
||||
# 쿠팡 현대가스
|
||||
# 누적1,466,011원 누적4,696,608원
|
||||
# 앞의 `현대카드[^\n]*` 가 greedy 라 "승인취소" 형태도 kind=취소 로 잡힌다.
|
||||
HYUNDAI_CARD_RE = re.compile(
|
||||
r"^\s*현대카드[^\n]*(?P<kind>승인|취소)\s*\n"
|
||||
r"(?P<who>[^\n]+)\s*\n"
|
||||
r"(?P<amount>[\d,]+)\s*원[^\n]*\n"
|
||||
r"\d{2}/\d{2}\s+\d{2}:\d{2}\s*\n"
|
||||
@@ -174,8 +215,8 @@ HYUNDAI_CARD_APPROVE_RE = re.compile(
|
||||
|
||||
# RCS/MAAP 형식은 한 줄로 들어온다:
|
||||
# [Web발신] 현대카드 블루멤버스 승인 방*원 84,000원 일시불 05/16 11:57 네이버페이 누적820,000원
|
||||
HYUNDAI_CARD_APPROVE_INLINE_RE = re.compile(
|
||||
r"현대카드[^\n]*승인\s+"
|
||||
HYUNDAI_CARD_INLINE_RE = re.compile(
|
||||
r"현대카드[^\n]*(?P<kind>승인|취소)\s+"
|
||||
r"(?P<who>\S+)\s+"
|
||||
r"(?P<amount>[\d,]+)\s*원[^\n]*?"
|
||||
r"\d{2}/\d{2}\s+\d{2}:\d{2}\s+"
|
||||
@@ -187,13 +228,13 @@ HYUNDAI_CARD_APPROVE_INLINE_RE = re.compile(
|
||||
|
||||
def parse_hyundai_card(raw: str, created_at: str) -> "dict | None":
|
||||
text = _normalize(raw).replace("[Web발신]", "").strip()
|
||||
m = HYUNDAI_CARD_APPROVE_RE.search(text) or HYUNDAI_CARD_APPROVE_INLINE_RE.search(text)
|
||||
m = HYUNDAI_CARD_RE.search(text) or HYUNDAI_CARD_INLINE_RE.search(text)
|
||||
if not m:
|
||||
return None
|
||||
amount = int(m.group("amount").replace(",", ""))
|
||||
merchant = re.sub(r"\s+", " ", m.group("merchant").strip()) or "(가맹점없음)"
|
||||
result = {
|
||||
"kind": "card_approval",
|
||||
"kind": "card_cancel" if m.group("kind") == "취소" else "card_approval",
|
||||
"entry_date": _iso_to_kst_date(created_at),
|
||||
"amount": amount,
|
||||
"merchant": merchant,
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
#!/usr/bin/env python3
|
||||
"""후잉 OpenAPI 잔액(bs.json) 조회.
|
||||
"""후잉 OpenAPI 클라이언트 — 잔액(bs.json) 조회 + 거래(entries.json) 조회·감액.
|
||||
|
||||
Usage:
|
||||
whooing_balance.py # 모든 섹션의 현재 잔액
|
||||
@@ -11,11 +11,13 @@ from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import secrets
|
||||
import sys
|
||||
import time
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
from datetime import datetime, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
CRED_PATH = Path("/Users/snowoyh/.openclaw/credentials/whooing.json")
|
||||
@@ -41,6 +43,130 @@ def api_get(endpoint: str, api_key: str, params: dict | None = None) -> dict:
|
||||
return data["results"]
|
||||
|
||||
|
||||
def api_key_from_cred() -> str:
|
||||
"""credentials 에서 API 키 문자열 1회 생성."""
|
||||
api_cfg = json.loads(CRED_PATH.read_text())["api"]
|
||||
return build_api_key(api_cfg["app_id"], api_cfg["token"], api_cfg["signature"])
|
||||
|
||||
|
||||
def api_request(method: str, endpoint: str, api_key: str,
|
||||
params: dict | None = None, body: dict | None = None) -> dict:
|
||||
"""후잉 OpenAPI 호출. GET 은 쿼리스트링, PUT 은 본문으로 파라미터를 보낸다.
|
||||
|
||||
⚠️ DELETE 는 쓸 수 없다. 후잉 서버가 DELETE 요청의 파라미터를 쿼리·본문(urlencoded/JSON)·
|
||||
쿠키·경로 어디에서도 읽지 못해 항상 `section_id parameter is required` 로 실패한다
|
||||
(2026-08-04 전수 실측. 같은 본문을 PUT 으로 보내면 정상이라 후잉 쪽 문제다).
|
||||
거래를 지우는 대신 PUT 으로 금액을 줄이는 이유가 이것이다.
|
||||
"""
|
||||
url = f"{BASE}/{endpoint}"
|
||||
if params:
|
||||
url += "?" + urllib.parse.urlencode(params)
|
||||
data = None
|
||||
if body:
|
||||
# 후잉은 '+' 를 공백으로 디코드하지 않는다. quote_via=quote 로 공백을 %20 으로 보낸다.
|
||||
data = urllib.parse.urlencode(body, quote_via=urllib.parse.quote).encode()
|
||||
req = urllib.request.Request(url, data=data, method=method, headers={"X-API-KEY": api_key})
|
||||
if data:
|
||||
req.add_header("Content-Type", "application/x-www-form-urlencoded")
|
||||
with urllib.request.urlopen(req, timeout=15) as resp:
|
||||
parsed = json.loads(resp.read().decode("utf-8"))
|
||||
if parsed.get("code") != 200:
|
||||
raise RuntimeError(
|
||||
f"후잉 API error {parsed.get('code')}: {parsed.get('message')} "
|
||||
f"{parsed.get('error_parameters') or ''} ({method} {endpoint})"
|
||||
)
|
||||
return parsed["results"]
|
||||
|
||||
|
||||
def _section_list(api_key: str) -> list:
|
||||
sections = api_request("GET", "sections.json", api_key)
|
||||
if isinstance(sections, dict):
|
||||
return sections.get("sections") or sections.get("rows") or list(sections.values())
|
||||
return sections
|
||||
|
||||
|
||||
def _name_to_account_id(api_key: str, section_id) -> dict[str, str]:
|
||||
raw = api_request("GET", "accounts.json", api_key, {"section_id": section_id})
|
||||
out: dict[str, str] = {}
|
||||
for acc_list in raw.values():
|
||||
if not isinstance(acc_list, list):
|
||||
continue
|
||||
for a in acc_list:
|
||||
aid = str(a.get("account_id"))
|
||||
out[a.get("title") or aid] = aid
|
||||
return out
|
||||
|
||||
|
||||
def _memo_has_merchant(memo: str, merchant: str) -> bool:
|
||||
"""memo 에 merchant 가 토큰 단위로 들어있는지.
|
||||
|
||||
단순 substring 이면 '쿠팡' 이 '쿠팡페이주' 승인까지 잡아 엉뚱한 거래를 감액한다
|
||||
(2026-08-04 실제로 두 상호가 같은 날 같은 금액으로 있었다). 카드 SMS 는 상호를
|
||||
줄바꿈·공백으로 구분하므로 앞뒤가 공백이거나 문자열 끝일 때만 인정한다.
|
||||
"""
|
||||
if not memo or not merchant:
|
||||
return False
|
||||
for m in re.finditer(re.escape(merchant), memo):
|
||||
before = memo[m.start() - 1] if m.start() > 0 else " "
|
||||
after = memo[m.end()] if m.end() < len(memo) else " "
|
||||
if before.isspace() and after.isspace():
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def find_card_entries(card_account: str, money: int, merchant: str,
|
||||
on_date: str, window_days: int = 30) -> list[dict]:
|
||||
"""카드 취소의 원본 승인 거래 후보를 찾는다.
|
||||
|
||||
card_account 로 결제된 거래 중 memo 에 merchant 가 들어있고 금액이 취소액 이상인 것을
|
||||
[on_date - window_days, on_date] 구간에서 찾는다. 금액 일치(전액취소)를 우선 반환하고,
|
||||
없으면 초과분(부분취소 후보)을 반환한다.
|
||||
|
||||
⚠️ item 이 아니라 memo 로 매칭한다 — merchant_map 의 contains 룰이 item 을 재작성해서
|
||||
(동행복권→'복권') item 은 상호와 다를 수 있지만, memo 는 항상 승인 SMS 원문이다.
|
||||
⚠️ 판단은 호출측이 한다. 정확히 1건일 때만 손대는 게 안전하다.
|
||||
"""
|
||||
api_key = api_key_from_cred()
|
||||
start = (datetime.strptime(on_date, "%Y%m%d") - timedelta(days=window_days)).strftime("%Y%m%d")
|
||||
exact, over = [], []
|
||||
for sec in _section_list(api_key):
|
||||
sid = sec.get("section_id") or sec.get("id")
|
||||
card_id = _name_to_account_id(api_key, sid).get(card_account)
|
||||
if not card_id:
|
||||
continue
|
||||
rows = api_request("GET", "entries.json", api_key, {
|
||||
"section_id": sid, "start_date": start, "end_date": on_date,
|
||||
})
|
||||
for row in (rows.get("rows") or []):
|
||||
if str(row.get("r_account_id")) != card_id:
|
||||
continue
|
||||
if not _memo_has_merchant(row.get("memo") or "", merchant):
|
||||
continue
|
||||
row_money = row.get("money") or 0
|
||||
if row_money == money:
|
||||
exact.append({**row, "section_id": sid})
|
||||
elif row_money > money:
|
||||
over.append({**row, "section_id": sid})
|
||||
return exact or over
|
||||
|
||||
|
||||
def set_entry_money(entry: dict, money: int) -> None:
|
||||
"""거래 금액을 money 로 바꾼다(PUT). money=0 도 후잉이 받는다(2026-08-04 실측).
|
||||
|
||||
조회한 나머지 필드를 그대로 되돌려보내 보존한다 — 부분 PUT 의 필드 보존 동작에
|
||||
기대지 않는 편이 안전하다. entry_date 는 조회 시 '20260804.0000' 형태라 소수부를 뗀다.
|
||||
"""
|
||||
api_request("PUT", f"entries/{entry['entry_id']}.json", api_key_from_cred(), body={
|
||||
"section_id": entry["section_id"],
|
||||
"entry_date": str(entry.get("entry_date") or "").split(".")[0],
|
||||
"l_account_id": entry.get("l_account_id"),
|
||||
"r_account_id": entry.get("r_account_id"),
|
||||
"item": entry.get("item") or "",
|
||||
"money": str(money),
|
||||
"memo": entry.get("memo") or "",
|
||||
})
|
||||
|
||||
|
||||
def fmt_won(n: int) -> str:
|
||||
return f"{n:,}원"
|
||||
|
||||
|
||||
@@ -12,7 +12,6 @@ from __future__ import annotations
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import sys
|
||||
import urllib.error
|
||||
import urllib.parse
|
||||
@@ -22,6 +21,7 @@ from pathlib import Path
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
import parsers as sms_parsers
|
||||
import imsg_cli
|
||||
import notify
|
||||
import whooing_balance
|
||||
import gahee_reminder
|
||||
@@ -88,42 +88,49 @@ def _format_balance_mismatch(info: dict, sms_b: int, whoo_b: int, diff: int, pre
|
||||
kind_word = "누적사용액" if side == "liability" else "잔액"
|
||||
actual_whoo_b = info.get("actual_whooing_balance", whoo_b)
|
||||
payment_offset = info.get("liability_payment_offset", 0) or 0
|
||||
if payment_offset and actual_whoo_b != whoo_b:
|
||||
whoo_line = (
|
||||
f"• 후잉: <b>{actual_whoo_b:,}원</b>"
|
||||
f" + 카드대금 보정 <b>{payment_offset:,}원</b>"
|
||||
f" → <b>{whoo_b:,}원</b>"
|
||||
)
|
||||
matched_word = "후잉(카드대금 보정 후)"
|
||||
else:
|
||||
whoo_line = f"• 후잉: <b>{whoo_b:,}원</b>"
|
||||
matched_word = "후잉"
|
||||
has_offset = bool(payment_offset and actual_whoo_b != whoo_b)
|
||||
matched_word = "후잉(카드대금 보정 후)" if has_offset else "후잉"
|
||||
|
||||
if diff == 0:
|
||||
recovered = abs(prev_diff) if prev_diff is not None else 0
|
||||
recovered_line = f"\n회복 금액: <b>{recovered:,}원</b>" if recovered else ""
|
||||
hint_line = f"\n반영 항목: <b>{notify.escape_html(recovery_hint)}</b>" if recovery_hint else ""
|
||||
return (
|
||||
f"✅ <b>{kind_word} 정합 회복</b>\n\n"
|
||||
f"<b>{label}</b> ({acct})\n"
|
||||
f"SMS / {matched_word} 모두 <b>{sms_b:,}원</b> 일치"
|
||||
f"{recovered_line}"
|
||||
f"{hint_line}"
|
||||
)
|
||||
lines = [
|
||||
f"✅ <b>{kind_word} 정합 회복</b>",
|
||||
"",
|
||||
f"📌 <b>{label}</b> ({acct})",
|
||||
f"• SMS · {matched_word}: <b>{sms_b:,}원</b> (일치)",
|
||||
]
|
||||
if recovered:
|
||||
lines.append(f"• 불일치 해소: <b>{recovered:,}원</b>")
|
||||
if recovery_hint:
|
||||
lines.append("─────────────")
|
||||
lines.append(f"• 마지막 반영 거래: <b>{notify.escape_html(recovery_hint)}</b>")
|
||||
return "\n".join(lines)
|
||||
|
||||
sign = "+" if diff > 0 else ""
|
||||
if side == "liability":
|
||||
direction = "결제 누락 의심" if diff > 0 else "사용 거래 누락 의심"
|
||||
else:
|
||||
direction = "출금 누락 또는 입금 중복" if diff > 0 else "입금 누락 의심"
|
||||
body = (
|
||||
f"⚠️ <b>{kind_word} 불일치</b>\n\n"
|
||||
f"<b>{label}</b> ({acct})\n"
|
||||
f"• SMS: <b>{sms_b:,}원</b>\n"
|
||||
f"{whoo_line}\n"
|
||||
f"• 차이: <b>{sign}{diff:,}원</b> ({direction})"
|
||||
lines = [
|
||||
f"⚠️ <b>{kind_word} 불일치</b>",
|
||||
"",
|
||||
f"📌 <b>{label}</b> ({acct})",
|
||||
f"• SMS {kind_word}: <b>{sms_b:,}원</b>",
|
||||
]
|
||||
if has_offset:
|
||||
lines.append(
|
||||
f"• 후잉 {kind_word}: <b>{actual_whoo_b:,}원</b>"
|
||||
f" + 카드대금 보정 <b>{payment_offset:,}원</b>"
|
||||
f" = <b>{whoo_b:,}원</b>"
|
||||
)
|
||||
else:
|
||||
lines.append(f"• 후잉 {kind_word}: <b>{whoo_b:,}원</b>")
|
||||
lines.append(f"• 차이: <b>{sign}{diff:,}원</b> → {direction}")
|
||||
if prev_diff is not None and prev_diff != diff:
|
||||
body += f"\n <i>이전 차이: {prev_diff:+,}원 → 변동</i>"
|
||||
return body + "\n\n<i>SMS 누락·잘못 분개·기간 외 거래 등 점검 필요.</i>"
|
||||
lines.append(f"• 직전 차이: {prev_diff:+,}원 (변동)")
|
||||
lines.append("")
|
||||
lines.append("<i>ℹ️ SMS 누락·잘못 분개·기간 외 거래 등 점검이 필요해요.</i>")
|
||||
return "\n".join(lines)
|
||||
|
||||
|
||||
def _format_sync_failure(f: dict) -> str:
|
||||
@@ -202,7 +209,11 @@ MONEY_AMOUNT_RE = re.compile(r"(?:\d[\d,]*\s*원|(?:입금|출금)\s+\d[\d,]*)")
|
||||
|
||||
# 주유소 카드 결제는 보통 150,000원 선승인 → 실제 주유금액 승인 → 150,000원 승인취소 순서로 온다.
|
||||
# 선승인/취소는 후잉에 기록하지 않고, 실제 결제만 차량유지비/주유비로 남긴다.
|
||||
FUEL_KEYWORDS = ("석유", "주유소", "주유")
|
||||
# "현대가스"·"한경에너"는 상호에 주유/석유가 안 들어가는 충전소라 직접 등록 (2026-08-03 관리자님 확인).
|
||||
# 새 주유소를 만나면 여기와 whooing_merchant_map.json contains **양쪽에** 상호를 추가한다 —
|
||||
# 이 상수는 선승인/취소 스킵, merchant_map 은 실제 주유 결제 분류로 한 쌍이다.
|
||||
# ⚠️ 한경에너는 선승인이 149,900원이라 FUEL_PREAUTH_AMOUNT 정확일치엔 안 걸린다(분류만 적용).
|
||||
FUEL_KEYWORDS = ("석유", "주유소", "주유", "현대가스", "한경에너")
|
||||
FUEL_PREAUTH_AMOUNT = 150_000
|
||||
|
||||
|
||||
@@ -213,7 +224,7 @@ def _is_fuel_text(text: str) -> bool:
|
||||
def _should_skip_fuel_preauth(parsed: dict | None, text: str) -> bool:
|
||||
"""주유소 15만원 선승인/취소 스킵.
|
||||
|
||||
parsed 가 있으면 구조화 필드 기준으로 판단한다. 현대카드 취소처럼 아직 파서가 없는 형식은
|
||||
parsed 가 있으면 구조화 필드 기준으로 판단한다. 파서가 못 읽은 형식은 폴백으로
|
||||
raw 텍스트에서 '취소' + '150,000원' + 주유 키워드 조합만 보수적으로 스킵한다.
|
||||
"""
|
||||
if parsed:
|
||||
@@ -274,39 +285,33 @@ def resolve_chat_ids(carriers):
|
||||
needed = set(carriers.keys())
|
||||
if needed.issubset(cached_keys):
|
||||
return {k: cached[k] for k in needed}
|
||||
try:
|
||||
chats_raw = subprocess.run(
|
||||
["imsg", "chats", "--json"],
|
||||
capture_output=True, text=True, timeout=IMSG_TIMEOUT,
|
||||
)
|
||||
chats = [json.loads(l) for l in chats_raw.stdout.splitlines() if l.strip()]
|
||||
except FileNotFoundError:
|
||||
print("❌ imsg CLI가 설치되어 있지 않습니다.", file=sys.stderr)
|
||||
sys.exit(3)
|
||||
except Exception as e:
|
||||
print(f"❌ imsg chats 실행 실패: {e}", file=sys.stderr)
|
||||
chats, err = imsg_cli.chats(IMSG_TIMEOUT)
|
||||
if err:
|
||||
print(f"❌ imsg chats 실행 실패: {err}", file=sys.stderr)
|
||||
sys.exit(3)
|
||||
result = {}
|
||||
for sender in carriers.keys():
|
||||
ids = [c["id"] for c in chats if c.get("identifier") == sender and c.get("id") is not None]
|
||||
result[sender] = ids
|
||||
# 전 carrier 가 빈 리스트면 조회 자체가 실패한 것으로 본다. 이 상태를 캐시에 저장하면
|
||||
# 이후 모든 실행(launchd 포함)이 캐시에 적중해 조용히 0건 수집을 영구 반복한다.
|
||||
# 일부만 비는 건 정상 — 메시지 이력이 없는 carrier 가 있을 수 있다.
|
||||
if not any(result.values()):
|
||||
print("❌ imsg chats 결과에 매핑된 발신번호가 하나도 없습니다 — 캐시 저장 안 함", file=sys.stderr)
|
||||
sys.exit(3)
|
||||
save_json(CHAT_IDS_CACHE, result)
|
||||
return result
|
||||
|
||||
|
||||
def fetch_messages(chat_id, since):
|
||||
cmd = ["imsg", "history", "--chat-id", str(chat_id), "--limit", str(HISTORY_LIMIT), "--json"]
|
||||
args = ["history", "--chat-id", str(chat_id), "--limit", str(HISTORY_LIMIT), "--json"]
|
||||
if since:
|
||||
cmd += ["--start", since]
|
||||
try:
|
||||
raw = subprocess.run(cmd, capture_output=True, text=True, timeout=IMSG_TIMEOUT)
|
||||
return [json.loads(l) for l in raw.stdout.splitlines() if l.strip()]
|
||||
except subprocess.TimeoutExpired:
|
||||
print(f"⚠️ chat-id {chat_id} history 타임아웃", file=sys.stderr)
|
||||
return []
|
||||
except Exception as e:
|
||||
print(f"⚠️ chat-id {chat_id} history 실패: {e}", file=sys.stderr)
|
||||
args += ["--start", since]
|
||||
rows, err = imsg_cli.run_json(args, IMSG_TIMEOUT)
|
||||
if err:
|
||||
print(f"⚠️ chat-id {chat_id} history 실패: {err}", file=sys.stderr)
|
||||
return []
|
||||
return rows
|
||||
|
||||
|
||||
# --- 룰 엔진 (whooing_overrides.json) -----------------------------------------
|
||||
@@ -510,8 +515,9 @@ def build_structured(parsed, sender_info, accounts, merchant_map):
|
||||
return {**base, "left": cat, "right": carrier_acct}
|
||||
return {**base, "left": "기타비용", "right": carrier_acct}
|
||||
|
||||
if kind == "card_cancel":
|
||||
return None # raw 폴백 (후잉이 원거래 찾아 상쇄)
|
||||
# card_cancel 은 여기서 payload 를 만들지 않는다 — 처리 루프의 _handle_card_cancel 이
|
||||
# 원본 승인 거래를 찾아 PUT 으로 감액한다. 좌우를 뒤집은 역분개는 후잉이 거부한다
|
||||
# (비용 계정은 차변 전용 → `r_account 잘못된 값입니다`) — 2026-08-03 회귀의 원인.
|
||||
|
||||
if kind == "withdrawal":
|
||||
if rule:
|
||||
@@ -542,6 +548,38 @@ def build_structured(parsed, sender_info, accounts, merchant_map):
|
||||
return None
|
||||
|
||||
|
||||
def _handle_card_cancel(parsed, sender_info, accounts, dry_run=False):
|
||||
"""카드 취소 → 원본 승인 거래를 찾아 취소액만큼 감액.
|
||||
|
||||
반환 (ok, detail). ok=False 면 원본을 특정하지 못한 것이니 호출측이 raw 폴백으로 넘긴다.
|
||||
⚠️ 폴백은 자동 처리가 아니다 — 후잉은 취소 문자를 받아도 원본을 지워주지 않으므로
|
||||
(공식 FAQ 도 환불은 수동 처리하라고 안내한다) 관리자님이 후잉 UI 에서 손봐야 한다.
|
||||
그래서 폴백 건은 raw 폴백 알림에 그대로 실어 보낸다.
|
||||
|
||||
전액취소면 금액이 0 이 되어 줄은 남는다. 후잉 API 로는 거래를 지울 수 없기 때문이다
|
||||
(whooing_balance.api_request 주석 참고). 잔액·합계에는 영향이 없다.
|
||||
"""
|
||||
carrier_acct = accounts.get("carrier_to_account", {}).get(sender_info.get("carrier"), "")
|
||||
if not carrier_acct:
|
||||
return False, "카드 계정 매핑 없음"
|
||||
|
||||
money = parsed["amount"]
|
||||
cands = whooing_balance.find_card_entries(
|
||||
carrier_acct, money, parsed["merchant"], parsed["entry_date"]
|
||||
)
|
||||
if len(cands) != 1:
|
||||
return False, f"원본 승인 후보 {len(cands)}건 — 1건일 때만 감액"
|
||||
|
||||
orig = cands[0]
|
||||
new_money = (orig.get("money") or 0) - money
|
||||
detail = (f"{orig.get('item')} {orig.get('money'):,}원 → {new_money:,}원 "
|
||||
f"(취소 {money:,}원, entry {orig['entry_id']})")
|
||||
if dry_run:
|
||||
return True, f"(dry-run) {detail}"
|
||||
whooing_balance.set_entry_money(orig, new_money)
|
||||
return True, detail
|
||||
|
||||
|
||||
def _parse_iso_utc(iso: str) -> datetime:
|
||||
return datetime.fromisoformat(iso.replace("Z", "+00:00"))
|
||||
|
||||
@@ -737,6 +775,7 @@ def main():
|
||||
sent_transfer = 0
|
||||
sent_structured = 0
|
||||
sent_raw = 0
|
||||
sent_cancel = 0
|
||||
failed = 0
|
||||
new_failures = []
|
||||
new_raw = [] # raw 폴백으로 성공 처리된 건 (구조화 실패 신호) — 텔레그램 알림용
|
||||
@@ -794,8 +833,42 @@ def main():
|
||||
blocked_at = c["created_at"]
|
||||
break
|
||||
|
||||
# 카드 취소는 상쇄 줄을 더하지 않고 원본 승인 거래를 감액한다.
|
||||
# 원본을 못 찾으면 아래 raw 폴백으로 흘러간다(build_structured 가 None 을 준다).
|
||||
if parsed and parsed.get("kind") == "card_cancel":
|
||||
try:
|
||||
cancel_ok, cancel_detail = _handle_card_cancel(
|
||||
parsed, c["info"], accounts, args.dry_run
|
||||
)
|
||||
except Exception as e:
|
||||
failed += 1
|
||||
detail = f"{type(e).__name__}: {e}"
|
||||
new_failures.append({
|
||||
"sender": c["sender"], "label": c["info"]["label"],
|
||||
"created_at": c["created_at"], "text": c["text"],
|
||||
"mode": "cancel_reduce", "payload": {},
|
||||
"status": 0, "response": detail[:500],
|
||||
"failed_at": datetime.now(KST).isoformat(),
|
||||
})
|
||||
print(f" ❌ [cancel] {c['info']['label']} {c['created_at']} | {detail[:120]}")
|
||||
blocked_at = c["created_at"]
|
||||
break
|
||||
if cancel_ok:
|
||||
sent_cancel += 1
|
||||
carrier_key = c["info"].get("carrier")
|
||||
if carrier_key:
|
||||
recovery_hints[carrier_key] = cancel_detail
|
||||
print(f" ➖ [cancel] {c['info']['label']} {c['created_at']} | {cancel_detail}")
|
||||
if c["created_at"] > (latest or ""):
|
||||
latest = c["created_at"]
|
||||
continue
|
||||
print(f" ↩︎ [cancel→raw] {c['info']['label']} {c['created_at']} | {cancel_detail}")
|
||||
|
||||
# card_cancel 이 여기까지 오면 감액 실패 → raw 폴백만 남았다.
|
||||
# apply_overrides 는 match 에 kind 가 없는 룰을 모든 kind 에 적용하므로, 그런 룰이
|
||||
# 추가되면 취소가 좌우 뒤집힌 payload 로 새어나갈 수 있어 여기서 끊는다.
|
||||
structured = None
|
||||
if parsed:
|
||||
if parsed and parsed.get("kind") != "card_cancel":
|
||||
structured = apply_overrides(overrides, parsed, c["info"], accounts, merchant_map, c["created_at"])
|
||||
if structured is None:
|
||||
structured = build_structured(parsed, c["info"], accounts, merchant_map)
|
||||
@@ -921,17 +994,27 @@ def main():
|
||||
if info.get("side") == "liability":
|
||||
liability_payment_offset = int(liability_payment_offsets.get(info["account"], 0) or 0)
|
||||
whoo_b = actual_whoo_b + liability_payment_offset
|
||||
# 카드사 누적사용액이 카드대금 상환을 반영하는지는 문자 형식/시점에 따라 다르다.
|
||||
# 실제 후잉 잔액이 보정 후 값보다 SMS에 더 가깝다면 보정치를 소진된 것으로 본다.
|
||||
if (
|
||||
liability_payment_offset
|
||||
and abs(actual_whoo_b - sms_b) < abs(whoo_b - sms_b)
|
||||
):
|
||||
liability_payment_offsets[info["account"]] = 0
|
||||
liability_payment_offset = 0
|
||||
whoo_b = actual_whoo_b
|
||||
changed = True
|
||||
diff = whoo_b - sms_b
|
||||
prev = carriers_state.get(carrier, {})
|
||||
prev_diff = prev.get("last_diff")
|
||||
|
||||
# 카뱅 자동 이자/캐시백 보정: 자산 + 후잉이 SMS보다 적고(deposit 누락), 차이 ≤ 5,000원.
|
||||
# 은행 자동 이자/캐시백 보정: 자산 + 후잉이 SMS보다 적고(deposit 누락), 차이 ≤ 5,000원.
|
||||
# 횟수·날짜 제한 없이 매번 자동 분개. 매 발화마다 텔레그램 알림으로 누적 가시성 확보.
|
||||
# 정상 SMS가 와서 deposit이 후잉에 들어가면 diff>=0이 되어 안전하게 미발화.
|
||||
cur_month = datetime.now(KST).strftime("%Y-%m")
|
||||
if (
|
||||
info.get("side") == "asset"
|
||||
and carrier == "kakaobank"
|
||||
and carrier in {"kakaobank", "shinhan_bank", "hana_bank"}
|
||||
and diff < 0
|
||||
and abs(diff) <= 5000
|
||||
):
|
||||
@@ -947,7 +1030,7 @@ def main():
|
||||
ok, status, body = post_to_whooing(webhook_url, interest_payload, dry_run=False)
|
||||
if ok:
|
||||
notify.send(
|
||||
f"💰 <b>카뱅 은행이자 자동 분개</b>\n"
|
||||
f"💰 <b>{notify.escape_html(info['label'])} 은행이자 자동 분개</b>\n"
|
||||
f"+{interest_amount:,}원 ({notify.escape_html(info['account'])} ← 기타수익)"
|
||||
)
|
||||
carriers_state[carrier] = {
|
||||
@@ -1111,9 +1194,9 @@ def main():
|
||||
save_json(SYNC_STATE_FILE, sync_state)
|
||||
|
||||
if blocked_at:
|
||||
print(f"⚠️ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, raw {sent_raw}건, 실패 {failed}건 — {blocked_at} 에서 중단(다음 cron 재시도)")
|
||||
print(f"⚠️ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, raw {sent_raw}건, 취소감액 {sent_cancel}건, 실패 {failed}건 — {blocked_at} 에서 중단(다음 cron 재시도)")
|
||||
else:
|
||||
print(f"✅ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, raw {sent_raw}건, 실패 {failed}건 (last={final_latest or latest})")
|
||||
print(f"✅ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, raw {sent_raw}건, 취소감액 {sent_cancel}건, 실패 {failed}건 (last={final_latest or latest})")
|
||||
|
||||
# 가희 잔액 리마인더 & 답신 자동 분개 (격리 — 실패해도 결제 sync 결과는 위에서 이미 출력됨)
|
||||
run_gahee_reminder()
|
||||
|
||||
@@ -42,17 +42,20 @@
|
||||
| 라벨 (`ai.openclaw.stock.`) | 일정 | 스크립트 | 핵심 비고 |
|
||||
|---|---|---|---|
|
||||
| `watchlist-monitor` | 평일 10·12·14시 (휴장일 self-skip) | `watchlist_monitor.py check` | buy/target/stop 감지 시 텔레그램 요약 + HTML 메일 1통. 2026-05-12 15분 간격 → 3회 축소 (관리자님 요청) |
|
||||
| `surge-monitor` | 평일 09:00–15:35 **매 1분** (`StartCalendarInterval` 396엔트리, 스크립트 self-skip) | `surge_monitor.py check` | **급등락 알림** (2026-08-04 도입). 자산웹 🔔 토글 켜진 종목만(`state/behive_surge_toggles.json`). 조회·알림 전용이라 `feedback_no_trade_auto_triggers` 예외 아님(주문 API 경로 없음). **세 기준 병행**: 거래소 **상·하한가 도달**(2026-08-06 추가, 그날 끝까지 간 것이라 무엇에도 가리지 않음) + 거래소 **VI 발동**(급등락 여부를 거래소가 판정 → 문턱 불필요) + **자기 이력 분위수**(장중 이탈폭 ≥ 그 종목 과거 이탈폭 `SURGE_PCTL` p90, 확대는 p98). ⚠️ **고정 %를 쓰자는 제안은 거절할 근거가 있다** — 실측(관심·감시 65종목 × 280거래일, 2026-08-04) 장중 이탈폭 중간값 3.8%라 ±3%가 평범한 날이고, 종목별 변동성이 **22배 차**(ATR14 1.0~22.3%)라 ±5% 문턱이면 KODEX 미국S&P500 발생 0회 / SK이터닉스 75회다. 같은 5%가 한쪽엔 도달 불가·한쪽엔 노이즈. ⚠️ **ATR 배수도 폐기됐다 — 2026-08-04 관리자님 지적**("하루 최대 폭이 −30%~+30%인데"). 국내 가격제한폭이 ±30%인데 ATR 배수는 상한이 없어 문턱이 제한폭 밖으로 밀려난다: 1차(ATR×1.5) 5/65종목, 확대(ATR×3.0) **31/65(48%)**가 발동 불가였다. 분위수는 실제 관측값이라 구조적으로 제한폭을 못 넘고(p90~p99 전부 30% 초과 0종목) 알림량이 정의상 (1−p)로 확정된다(p90 = 종목당 연 25회). **ATR 배수 재제안 금지.** ⚠️ 평시 사이클 **키움 콜 0** — behive_web `/api/realtime/quotes` 1콜이 현재가와 VI를 함께 준다(VI 1h는 시장 전역 broadcast라 구독 무관). 구독 상한에 걸려 빠진 종목만 ka10095 배치 1콜 폴백. ⚠️ **문턱은 하루 1회만 계산**(`state/surge_thresholds.json`) — `daily_candles_cache.get_candles`가 stale 캐시에 ka10081을 때리므로 매분 × 종목수면 폭주. ⚠️ **ka10081 유량 초당 5건** — 70종목 일괄 산출 시 26종목이 429로 실패(실측). 사이클당 12개·0.35s 간격으로 나눠 계산하고(70종목 ≈ 6분) **조회 실패는 캐시하지 않는다**(이력부족과 같이 `{}`로 굳히면 429 한 번에 그 종목이 하루 내내 VI만 감시). ⚠️ **VI 레그는 behive_web 프로세스 의존** — 죽으면 VI 알림이 조용히 사라지고 stderr 경고만(백업 트리거는 `feedback_no_unsanctioned_failover`대로 의도적 부재). ⚠️ **상·하한가·VI 중 문턱을 넘으면 생략이 아니라 보류**(2026-08-06 관리자님 요청) — `surge_alerts.json`의 `__pending__`에 이탈폭 최대 시점을 적어뒀다가 가림이 풀린 사이클에 방출한다. 그전엔 버려져서 **VI 중 돌파 후 해제 시점에 되밀리면 알림이 아예 없었다**. 가림 여부는 보류 목록이 비었는지가 아니라 `evaluate`의 **가림사유 반환값**으로 판단해야 한다(VI 중 되밀림도 목록이 비어 조기 방출됨). 방출분은 **발송 성공 시에만** 보류에서 제거. VI가 마감까지 안 풀리면 그날 보류분은 방출 안 됨(강제 flush 없음). ⚠️ **상·하한가는 ka10095 `upl_pric`/`lst_pric`(거래소 계산값)** — 제한폭은 기준가 호가단위로 절사 후 ±하는 규칙이라 직접 계산하면 ETF·가격대별 표를 재현해야 해 틀린다. 장중 불변이라 `state/surge_limits.json`에 하루 1콜 캐시, 일봉 이력 불필요라 **이력 부족 종목도 감시됨**. dedup `state/surge_alerts.json` = 분위수 방향별 1회 + 확대 1회 + 상·하한가 1회, VI는 `vi:<발동시각>`이라 발동 건마다 1회(하루 상한 없음). 로그 `logs/stock-surge-monitor.{log,err.log}` |
|
||||
| `trailing-monitor` | 평일 09:00–15:30 **매 1분** (`StartCalendarInterval` 391엔트리, 스크립트 self-skip) | `trailing_monitor.py check` | **트레일링 스톱 감시** (2026-07-30 도입). ⚠️ **매매 API를 자동 호출하는 유일한 트리거** — `feedback_no_trade_auto_triggers` 예외로 관리자님이 명시 승인. 허용 근거: 호출하는 건 `kiwoom_order.modify_order` **하나뿐**이고 신규 발주·수량·방향 변경 경로가 없음. PIN 승인 시 계좌·종목·수량·트레일 폭이 확정되고, 감시는 이미 승인된 스톱주문의 조건단가를 **상향만** 정정. 예약 0건이면 즉시 종료(API 콜 0). 상태 `state/trailing_stops.json`, 로그 `logs/stock-trailing-monitor.{log,err.log}`. ⚠️ **cadence 이력 2분→30초→1분**(전부 2026-07-30 관리자님 지시). launchd 최소 단위가 1분이라 30초는 프로세스 내부 `--repeat 2 --gap 30`(1분 발화 × 30초 간격 2회)으로 구현했고 **CLI 옵션은 살아있다** — 다시 30초로 갈 땐 plist ProgramArguments에 인자만 추가. `StartInterval=30`은 GUI idle 시 발화 보류라 사용 금지(sim-scan이 같은 이유로 캘린더 전환). ⚠️ **스톱주문은 장 마감 후 소멸한다 — 2026-07-30 실증 완료**(가정이 틀렸음). 첫 실주문 TRL-A2Z4(제닉스로보틱스 1주, 14:35 등록, 손절선 4,370→4,455 3회 상향)가 **체결 없이** 사라졌다: 당일매매일지 매도 기록 0건 · 보유수량 3,338주 불변 · 미체결 0건. 감지 시각 **18:21**(15:30 장 마감 즉시가 아니라 몇 시간 뒤 — 감시는 그 사이 매분 정상 발화했고 로그가 조용했으니 주문은 18:20까지 조회에 살아있었다. NXT 시간대엔 손절선이 실제로 유효했던 셈. 1회 관측이라 매일 같은 시각인지는 미확인). ⚠️ **자동 재등록 안 한다**(관리자님 결정) — 알림만 보내고 재등록은 자산웹에서 수동. 소멸 알림에 사유 구분 있음(아래). ⚠️ **예약 종료 알림 3갈래**(`_fill_check`+`_notify_gone`): 미체결 조회에서 사라진 것만으로는 체결·취소·소멸을 구분할 수 없어(셋 다 목록에서 빠짐) 예약이 사라질 때만 ka10170 1콜 추가로 판정 — ✅체결(당일 매도기록 있음, 수량·평균가·실현손익 표시. 관리자님 수동 매도와는 구분 불가라 단정 안 함) / ⚠️소멸(매도기록 없음 = 체결 안 됨 확정 + 재등록 안내) / 🎯판정불가(일지 조회 실패). **조회 실패를 '체결 안 됨'으로 단정하면 안 된다** — `_fill_check`가 (기록, 성공여부) 튜플을 반환하는 이유. ⚠️ **초기 고점 = 등록 시점 현재가 고정**, 이후 갱신도 **현재가로만**(당일고가를 쓰면 등록 전 고가 때문에 즉시 발동). ⚠️ **고점 기준 선택 옵션은 2026-07-30 제거 — 다시 넣지 말 것**(`peak_basis`/`52주 전고점`/`매수후 고점`). 과거 고점 기준은 손절선이 현재가 위로 올라가 `TRAIL_IMMEDIATE` 거부되는데, **손실 종목은 등록 자체가 불가**(실측 제닉스로보틱스 현재가 4,805 · 매수후 고점 6,890 → 필요 폭 30.3% / 52주 19,940 → 75.9%, 상한 30% 초과)고 **이익 종목은 과거 고점 ≈ 현재가라 결과가 동일**. 차이 날 때 못 쓰고 쓸 수 있을 때 차이 없어 폐기. ⚠️ **최저 매도가**(`min_sell_price`)로 손절선 하한 지정 가능 — `cond_uv = max(트레일, 최저가)`. 트레일 폭을 넓게 잡아도 이 가격 아래로 안 내려간다. 고점이 올라 트레일이 추월하면 그 뒤론 트레일 지배(전환점 = 최저가÷(1−pct)). 1분 간격이라 그 사이 스파이크는 놓친다(손절선이 덜 올라가는 방향 — 손실 위험 아님). ⚠️ **정밀도 보완 안 함으로 결론**(2026-07-30 관리자님): 최저 매도가로 하한이 통제되니 1분 해상도 누락은 감당 범위. `entry_day_high` 기준선 / `realtime_hub` WS 틱 추적 **둘 다 채택 안 함 — 재제안 금지** |
|
||||
| `briefing` | 평일 20:10 (휴장일 self-skip) | `stock_portfolio_report.py send` | 메일만 발송. 텔레그램 리포트 요약은 2026-05-14 관리자님 요청으로 비활성화. 실패 시 자가 알림 |
|
||||
| `briefing-fallback-2030` | 평일 20:30 (휴장일 self-skip) | `briefing_fallback.py retry` | 스냅샷 있으면 skip(idempotent), 없으면 send 재실행. 알림 없음 |
|
||||
| `briefing-fallback-2100` | 평일 21:00 (휴장일 self-skip) | `briefing_fallback.py final` | 마지막 폴백. 실패 시 레이 텔레그램 알림 |
|
||||
| `send-balance` | 매월 1일 04:30 | `send_balance_to_budget.py` | 본인 계좌(가희 제외) → 골디 inbox `securities_balance`. 골디 결산 30분 전 |
|
||||
| `ipo-calendar-sync` | 매주 금요일 17:00 | `ipo_calendar_sync.py` | IPO 청약·상장 일정 → Google Calendar |
|
||||
| `fomc-calendar-sync` | 매월 1일 09:10 | `fomc_calendar_sync.py` | 연준 FOMC 회의 일정 → Google Calendar `[FOMC] YYYY-MM 회의`(+` (SEP)`). 2026-07-29 신설. **캘린더엔 2026-03-23 관리자님이 2027-12까지 11건을 이미 손으로 등록해 두셨고 날짜도 정확** — 스크립트는 그 표기를 승계해 흡수했으므로 당분간 실제 신규 등록은 2028년분부터. **이벤트 기간 = 회의 시작일(ET) ~ 발표일(KST)** 3일 — 성명 발표가 KST로는 회의 종료 다음날 새벽(EDT 03:00·EST 04:00)이라, ET 날짜만 넣으면 한국 장이 결과를 반영하는 날에 캘린더가 비어 브리핑 '오늘 일정'에 안 뜬다(2026-07-29 관리자님 지적으로 수정). colorId 9 보존(`--event-color` 미지정). 삭제 루프가 `old_start <= today`를 건너뛰어 지난 회의는 안 지움. `--list`=파싱만(gog 미호출) |
|
||||
| `holiday-sync` | 매주 일요일 03:00 | `holiday_sync.py` | investing.com → `state/market_holidays.json`. 실패 시 기존 파일 보존 |
|
||||
| `behive-web` | 상시 (`KeepAlive`) | `behive_web.py serve` | 3-탭 워치리스트 웹뷰. Tailscale `100.75.148.12:18790` → `https://stock.hyowons.net/`(Synology reverse proxy). 코드 변경 후 bootout/bootstrap 필요 |
|
||||
| `trade-journal` | 평일 21:00 (스크립트가 휴장일 self-skip) | `trade_journal.py collect` | ka10170 당일매매일지 4계좌 → `state/trade_journal.jsonl` 누적. NXT 야간 마감 후 발화. 키움이 기간 거래내역 API 미제공이라 일자별 적재만이 유일. `briefing-fallback-2100`(21:00)과 같은 시각이지만 둘 다 read-only 충돌 없음. 재실행 시 (date,account) 단위 idempotent. **시드**: 2026-05-13 1회 `trade_journal.py seed` 로 적재 시작일 이전 보유분을 현재 평단가×(qty - tdy_buyq + tdy_sellq)로 단일 시드 행 압축(28건, seed=true 플래그, `*` 마커). 시드는 가중평균이라 과거 매수 단가와 정확히 일치 X. CLI: `collect`/`seed`/`show <code>`/`query --from --to --account --code` |
|
||||
| `sim-scan` | 평일 09–15:30 매 15분 (`StartInterval` 900s, 엔진이 장외/휴장 self-skip) | `python3 -m sim scan` (내부 `scan_all` — 메인+병렬변이 동시) | **자동매매 시뮬(페이퍼)** 1회 스캔. 가상자본 1천만, 규칙 엔진(LLM 미경유). universe=비하이브 워치+관심+보유. 방향=애널 약한게이트+가점, 타이밍=수급·기술. 매수=돌파 즉시/눌림목 지정가, 매도=손절·2:1 후 트레일링·추세수급 이탈. 결과 `state/sim/`(portfolio.json·trades.jsonl·last_scan.json). 실주문 `orders/` 불가침. 일봉은 캐시 우선 읽기(ka10081 rate limit 회피). cwd=`agents/stock/workspace` |
|
||||
| `sim-web` | 상시 (`KeepAlive`) | `python3 -m sim.sim_web serve` | 시뮬 대시보드 **별도 서버 포트 18792** (behive-web 18790과 분리). `sim.hyowons.net` → mac:18792 (Synology reverse proxy, **관리자님 수동 등록 대기**). Tailnet 한정 무인증. ⚠️ 18791은 node 점유라 18792. **5탭**: 내 계좌·관심종목·시장(지수/ADR/투자자)·튜닝(파라미터 저장 → `params.json`)·백테스트(스윕 순위표+적용). 읽기전용 원칙이나 `do_POST /save_params`만 쓰기. 시장 탭은 네이버 지수 60s 캐시 fetch(유일한 네트워크) |
|
||||
| (트리거 없음) | on-demand | `python3 -m sim {sweep\|backtest}` | 튜닝 비교용 백테스트 스윕. signals.py 재사용·과거 일봉 되감기. 4핵심(RR·STOP_ATR·SMA_LONG·PULLBACK_ATR) 81조합 학습/검증 분리 → `state/sim/backtest_results.json`. ⚠️ 종가체결·현 워치리스트(생존편향) → 절대수익 아닌 **상대순위**로만. 수급은 `backfill_flow.py`(ka10059 다년치 → `flow_history.sqlite`, 2026-06-08 54종목 3만행 적재)로 반영됨(`flow_used:true`). 런타임 튜닝은 `params.json`이 config 기본값 오버라이드(엔진 매 스캔 새프로세스라 즉시 반영). **병렬 페이퍼**: `variants.json`+`state/sim/variants/<id>/` — 스윕 상위 튜닝을 각자 가상계좌로 실시간 동시 운영, 같은 라이브 시세에 다른 파라미터(애널 게이트까지 실반영), `variants_compare.json`→웹 비교 탭. `python3 -m sim variants seed N`. sim-scan이 매 스캔 메인+변이 함께 갱신 |
|
||||
| `trade-journal` | 평일 21:00 (스크립트가 휴장일 self-skip) | `trade_journal.py collect` | ka10170 당일매매일지 4계좌 → `state/trade_journal.jsonl` 누적. NXT 야간 마감 후 발화. 키움이 기간 거래내역 API 미제공이라 일자별 적재만이 유일. `briefing-fallback-2100`(21:00)과 같은 시각이지만 둘 다 read-only 충돌 없음. 재실행 시 (date,account) 단위 idempotent. **시드**: 2026-05-13 1회 `trade_journal.py seed` 로 적재 시작일 이전 보유분을 현재 평단가×(qty - tdy_buyq + tdy_sellq)로 단일 시드 행 압축(28건, seed=true 플래그, `*` 마커). 시드는 가중평균이라 과거 매수 단가와 정확히 일치 X. CLI: `collect`/`seed`/`show <code>`/`query --from --to --account --code`. **2026-06-15 4번째 명령 추가**: `python3 -m sim universe all` — sim 관찰목록 자동편입/제외. 키움 순위정보(ka90009 외인·기관순매수 + ka10023 거래량급증)에서 ETF·하락·급증률 이상치 거르고 각 15·총 120 상한 편입(origin='auto'), origin=auto·미보유·10거래일 무신호만 자동제외(보유/watch/interest/manual 불가침). 신호추적=scan_all `universe.mark_signals`→`auto_seen.json` |
|
||||
| `sim-scan` | 평일 09:00–15:30 **매 2분** (`StartCalendarInterval` 196엔트리, 엔진이 장외/휴장 self-skip) ⚠️2026-06-09 15분→5분, 2026-06-17 5분→2분 단축(스캔 1회 실측 ~3.6초라 2분 cadence 오버랩·rate limit 여유, 1분이 캘린더 한계지만 일봉 신호라 2분 충분) + `StartInterval` 900s→`StartCalendarInterval` 전환(StartInterval은 GUI세션 idle/디스플레이 sleep 시 timer coalescing으로 발화 보류돼 장중 안 돎. calendar는 git-autopush가 새벽 02:00 정상발화로 검증됨) | `python3 -m sim scan` (내부 `scan_all` — 메인+병렬변이 동시) | **자동매매 시뮬(페이퍼)** 1회 스캔. 가상자본 1억(2026-06-10 1천만→1억), 규칙 엔진(LLM 미경유). universe=비하이브 워치+관심+보유(**ETF/ETN은 2026-06-09부터 자동매수 제외** — 애널 방향성 부재로 전략 부정합, `universe.is_etf()` 프리픽스 판별, 보유분은 청산까지 추적). 방향=애널 약한게이트+가점, 타이밍=수급·기술(2026-06-09 시장강약 필터: 하드차단→소프트게이트+장중 실시간 상승비율 + **지수추세 이중확인**). **2026-06-09 4종 추가**: 리스크 기반 사이징(`signals.target_value` 수량=자산×`RISK_PER_TRADE_PCT`÷손절폭, 균등비중 캡)·RSI 필터(돌파 과열/눌림목 과매도 보류)·**시장 국면 6단계**(`market_regime_map`→`engine.REGIME`: 🔥강세·📈반등·🌤완만상승=매수허용 / ➖혼조·📉약세·❄️급락=보류. 상승비율+지수추세+당일등락 조합. market_ok·시장탭 공용. 강세/약세 2단계가 84% 반등을 약세로 오판해 세분화)·**약세장 매수모드**(`BEAR_ENTRY_MODE` 0현금화/1돌파만/2눌림허용, market_ok False일 때 signals 분기. backtest는 시장중립이라 무영향→병렬변이로 라이브 비교. 2026-06-10 **유형36×모드3=108변이 풀매트릭스**로 확장, 첫 라이브 2026-06-11)·시간손절(`MAX_HOLD_DAYS` 미진전 청산)·**추세 질 보강**(2026-06-09 trend_ok 게이트에 ①20일선 우상향 기울기 ②5>60 중기정배열 추가〔종목데이터, backtest 반영〕 + ③상대강도〔종목−지수 N일수익률, 라이브 전용 체크〕). 사이징·시간손절은 엔진·백테스트 공용 헬퍼. TUNABLE 27개. **2026-06-10 코드리뷰 보강**: ①수급DB 일일증분(trade-journal 21시 묶음 3번째 명령 `-m sim.backfill_flow --pages 1 --force` — stale시 백테스트 수급게이트 중립화됨) ②일별 성과이력 `state/sim/equity_history.json`(EOD 덮어쓰기, ph=파라미터해시) ③당일 재진입 쿨다운(`Portfolio.last_exit`, backtest 동일) ④장중 거래량 하루치 환산(`vol_time_frac` — 이전엔 오전 돌파 불가). ⑤백테스트 체결 현실화(당일종가 판단→다음날 시가 체결 pending큐 + `BT_SLIPPAGE` 0.2% — 낙관분 ~5%p 제거) ⑥3분할 꾸준함 순위(`worst_ret` 1순위 — 한 구간 운빨 배제) ⑧**기준전략(M) 폐지**(2026-06-10 — scan_all 메인 패스 execute=False 판단전용·계좌 동결, 비교/매매는 변이 36개만, 메인 제외 규칙 삭제, 마킹 아이콘 6종 `favorites.json {아이콘:vid}`+`/fav_set`〔2026-06-11 ☆토글→아이콘 피커, 아이콘당 전략 1개〕, 관심종목 기본 시각=첫 마킹→1위) ⑦비교군 동기화는 **수동 전용**(2026-06-10 자동 동기화 끔 — sweep은 결과 파일만 갱신, 비교군 변경은 관리자님 명시 요청 시만 `python3 -m sim variants sync`. `sync_label_tops`=유형(~36종)별 1위 동기화, 동일params 계좌 유지. 백테스트 탭은 유형별 대표 읽기전용 요약, 수동 추가/제거·튜닝적용 버튼 제거). 잔여 한계: 검증 데이터가 여전히 ~1년 강세 위주(진짜 하락장 검증은 라이브 누적)·생존편향 universe(의도된 설계). 매수=돌파 즉시/눌림목 지정가, 매도=손절·2:1 후 트레일링·추세수급 이탈. 결과 `state/sim/`(portfolio.json·trades.jsonl·last_scan.json). 실주문 `orders/` 불가침. 일봉은 캐시 우선 읽기(ka10081 rate limit 회피). cwd=`agents/stock/workspace` |
|
||||
| `sim-web` | 상시 (`KeepAlive`) | `python3 -m sim.sim_web serve` | 시뮬 대시보드 **별도 서버 포트 18792** (behive-web 18790과 분리). `sim.hyowons.net` → mac:18792 (Synology reverse proxy, **관리자님 수동 등록 대기**). Tailnet 한정 무인증. ⚠️ 18791은 node 점유라 18792. **3탭**(2026-06-10~11 개편, 내계좌·튜닝 탭 삭제): **전략**(기본=비교만, 서브탭 버튼 없음 — 백테스트 순위표는 [📊 모의결과보기] 토글)·**관심종목**(전 전략 합산 상태그룹 + 시각 드롭다운 + 👁토스트 맨 위 '▶ 시각' 판단 표시)·**시장**(지수/ADR/투자자). 비교 행 표기: 순위배지 `N위` → 약세장대처 칩(회피/안정/적극 — 2026-06-11 '돌파'→'안정' 개명, 칩 클릭=설명 토스트) → 고유번호 `#N` → 짧은 유형명(`상승장·빠른·공격·추세추종`) → 마킹 아이콘(6종 ⭐🔥💎🎯👀🚀, **아이콘당 전략 1개**, `favorites.json {아이콘:vid}`, `/fav_set`). 펼침 body: 유형(ⓘ=시장적합)→약세장대처(ⓘ)→성적→모의평가(`btN위/36` — 약세모드 3형제는 같은 bt등수 공유). **108변이 = 유형36 × 약세모드3**(2026-06-10 풀매트릭스, v37/38=bt1위의 회피/적극 쌍 순서). 새로고침 탭 보존(라디오↔URL 동기화 + `Cache-Control: no-store`, 2026-06-11). 읽기전용 원칙, 쓰기는 `do_POST` save_params/run_sweep/variants_*/watch_*/fav_set만. 시장 탭은 장중엔 네이버 m.stock 실시간(지수+상승하락·ADR·투자자 순매수, `_get_live_market` 60s 캐시), 장외엔 EOD jsonl 폴백 (2026-06-09: 이전엔 상승하락·투자자가 EOD 고정이라 장중 안 바뀌던 것 수정) |
|
||||
| (트리거 없음) | on-demand | `python3 -m sim {sweep\|backtest}` | 튜닝 비교용 백테스트 스윕. signals.py 재사용·과거 일봉 되감기. 9파라미터(RR·STOP·SMA·PULLBACK·VOLUME + RSI과열/과매도·시간손절·리스크비율) 1152조합 학습/검증 분리 → `state/sim/backtest_results.json`. ⚡멀티프로세싱(2026-06-10 spawn, 워커=코어−2)+일봉/수급 프로세스 메모이즈 → 1152조합 44분→~5-7분. 데이터는 sqlite캐시 전용(키움API 0), 병목은 지표 재계산이라 캐싱 아닌 병렬화가 답. GRID 곱셈 폭발 주의. ⚠️ 종가체결·생존편향 → **상대순위**로만. 2026-06-09 스윕: 핵심 레버 `VOLUME_BREAKOUT=1.3`, 신규4종은 강세창선 미미(하락장 보험). 균형값 params.json 적용(RISK 0.01 유지). 수급은 `backfill_flow.py`(ka10059 다년치 → `flow_history.sqlite`, 2026-06-08 54종목 3만행 적재)로 반영됨(`flow_used:true`). 런타임 튜닝은 `params.json`이 config 기본값 오버라이드(엔진 매 스캔 새프로세스라 즉시 반영). **병렬 페이퍼**: `variants.json`+`state/sim/variants/<id>/` — 스윕 상위 튜닝을 각자 가상계좌로 실시간 동시 운영, 같은 라이브 시세에 다른 파라미터(애널 게이트까지 실반영), `variants_compare.json`→웹 비교 탭. `python3 -m sim variants seed N`. sim-scan이 매 스캔 메인+변이 함께 갱신 |
|
||||
|
||||
휴장일 self-skip·당일 평가손익 ground truth·3-탭 개편 배경은 일지(2026-05-04·05-06)와 `behive_web.py` 주석 참조. 사고 이력은 `memory/2026-05-07-behive-dup-mail.md` 등.
|
||||
|
||||
|
||||
@@ -0,0 +1,66 @@
|
||||
# Session: 2026-07-20 09:12:03 GMT+9
|
||||
|
||||
- **Session Key**: agent:stock:telegram:direct:8443122995
|
||||
- **Session ID**: cb10d003-728f-4145-92ec-22ca9663e308
|
||||
- **Source**: telegram
|
||||
|
||||
## Conversation Summary
|
||||
|
||||
user: Conversation info (untrusted metadata):
|
||||
```json
|
||||
{
|
||||
"chat_id": "telegram:8443122995",
|
||||
"message_id": "1064",
|
||||
"sender_id": "8443122995",
|
||||
"sender": "snowoyh bang",
|
||||
"timestamp": "Mon 2026-07-20 09:11 GMT+9",
|
||||
"inbound_event_kind": "user_request"
|
||||
}
|
||||
```
|
||||
|
||||
Sender (untrusted metadata):
|
||||
```json
|
||||
{
|
||||
"label": "snowoyh bang (8443122995)",
|
||||
"id": "8443122995",
|
||||
"name": "snowoyh bang",
|
||||
"username": "snowoyh"
|
||||
}
|
||||
```
|
||||
|
||||
Conversation context (untrusted, chronological, selected for current message):
|
||||
#1048 Tue 2026-07-14 22:53 GMT+9 snowoyh bang: 당일종가랑 현재가가 달라
|
||||
#1050 Tue 2026-07-14 22:54 GMT+9 snowoyh bang: 1928000은 무슨가격이야?
|
||||
#1052 Tue 2026-07-14 22:57 GMT+9 snowoyh bang: 1941000이 종가고 현재가가 1928000으로 나와
|
||||
|
||||
관리자 가희 계좌 통틀어서 삼성전자 하이닉스 제외하고 계좌상태 고려해서 3천만원 예수금 만들려면 뭐를 파는세 좋아?
|
||||
assistant: [assistant turn failed before producing content]
|
||||
user: Conversation info (untrusted metadata):
|
||||
```json
|
||||
{
|
||||
"chat_id": "telegram:8443122995",
|
||||
"message_id": "1064",
|
||||
"sender_id": "8443122995",
|
||||
"sender": "snowoyh bang",
|
||||
"timestamp": "Mon 2026-07-20 09:11 GMT+9",
|
||||
"inbound_event_kind": "user_request"
|
||||
}
|
||||
```
|
||||
|
||||
Sender (untrusted metadata):
|
||||
```json
|
||||
{
|
||||
"label": "snowoyh bang (8443122995)",
|
||||
"id": "8443122995",
|
||||
"name": "snowoyh bang",
|
||||
"username": "snowoyh"
|
||||
}
|
||||
```
|
||||
|
||||
Conversation context (untrusted, chronological, selected for current message):
|
||||
#1048 Tue 2026-07-14 22:53 GMT+9 snowoyh bang: 당일종가랑 현재가가 달라
|
||||
#1050 Tue 2026-07-14 22:54 GMT+9 snowoyh bang: 1928000은 무슨가격이야?
|
||||
#1052 Tue 2026-07-14 22:57 GMT+9 snowoyh bang: 1941000이 종가고 현재가가 1928000으로 나와
|
||||
|
||||
관리자 가희 계좌 통틀어서 삼성전자 하이닉스 제외하고 계좌상태 고려해서 3천만원 예수금 만들려면 뭐를 파는세 좋아?
|
||||
assistant: ⚠️ Something went wrong while processing your request. Please try again, or use /new to start a fresh session.
|
||||
@@ -0,0 +1,5 @@
|
||||
{
|
||||
"version": 1,
|
||||
"bootstrapSeededAt": "2026-04-17T03:21:06.738Z",
|
||||
"setupCompletedAt": "2026-04-17T05:20:30.244Z"
|
||||
}
|
||||
@@ -5,6 +5,7 @@
|
||||
- 한국어, 존댓말, 관리자님 호칭.
|
||||
- 4개 섹션 순서·제목 그대로 사용 (▣ 최근 가격 흐름 / ▣ 수급 해석 / ▣ 거래량·체결 강도 / ▣ 주의 포인트 / 리스크).
|
||||
- 각 섹션 5문장 이상, 수치 근거 인용.
|
||||
- 각 섹션에서 가장 중요한 핵심 수치·키워드 1~2곳만 `**...**`로 감싸 강조하세요(붉은 글씨로 표시됨). 남발 금지 — 한 문장에 하나 이하, 정말 중요한 곳만.
|
||||
- 비교업체(peers) 데이터는 종목의 기본정보(가격·PER/PBR/ROE 등 재무비율) 관련 맥락에서만 간단히 짚어주시고, 4개 분석 섹션(가격 흐름·수급·거래량·주의 포인트) 안에서는 비교 코멘트를 넣지 마세요.
|
||||
- 마지막에 한줄요약·투자의견 JSON을 정확한 형식으로 출력 (파서가 읽음).
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,341 @@
|
||||
#!/usr/bin/env python3
|
||||
"""미 연준 FOMC 회의 일정 → Google 캘린더 동기화 (조회+등록 전용).
|
||||
|
||||
출처: federalreserve.gov 공식 FOMC 일정표. 회의 날짜는 미 동부 기준 그대로 등록한다
|
||||
(기존 수동 등록분·시황 자막 관례와 동일).
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import json
|
||||
import re
|
||||
import subprocess
|
||||
import urllib.request
|
||||
from dataclasses import dataclass
|
||||
from datetime import date, datetime, timedelta
|
||||
from pathlib import Path
|
||||
from zoneinfo import ZoneInfo
|
||||
|
||||
KST = ZoneInfo('Asia/Seoul')
|
||||
ET = ZoneInfo('America/New_York')
|
||||
CALENDAR_ID = 'mini.snowoyh@gmail.com'
|
||||
WORKSPACE = Path('/Users/snowoyh/.openclaw/agents/stock/workspace')
|
||||
STATE_DIR = WORKSPACE / 'state'
|
||||
STATE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
STATE_FILE = STATE_DIR / 'fomc_calendar_sync.json'
|
||||
SOURCE_URL = 'https://www.federalreserve.gov/monetarypolicy/fomccalendars.htm'
|
||||
|
||||
MONTHS = {
|
||||
'january': 1, 'february': 2, 'march': 3, 'april': 4, 'may': 5, 'june': 6,
|
||||
'july': 7, 'august': 8, 'september': 9, 'october': 10, 'november': 11, 'december': 12,
|
||||
}
|
||||
|
||||
YEAR_PANEL_RE = re.compile(r'(\d{4})\s+FOMC\s+Meetings')
|
||||
MEETING_ROW_RE = re.compile(
|
||||
r'fomc-meeting__month[^>]*>\s*(?:<strong>)?(.*?)(?:</strong>)?\s*</div>'
|
||||
r'.*?fomc-meeting__date[^>]*>\s*(.*?)\s*</div>',
|
||||
re.S,
|
||||
)
|
||||
|
||||
|
||||
@dataclass
|
||||
class Meeting:
|
||||
start_date: date # 회의 시작 (미 동부)
|
||||
end_date: date # 회의 종료 (미 동부, inclusive)
|
||||
is_sep: bool
|
||||
|
||||
@property
|
||||
def state_key(self) -> str:
|
||||
# FOMC는 한 달에 두 번 열리지 않으므로 시작월이 고유 키
|
||||
return f'{self.start_date:%Y-%m}'
|
||||
|
||||
@property
|
||||
def summary(self) -> str:
|
||||
base = f'[FOMC] {self.state_key} 회의'
|
||||
return f'{base} (SEP)' if self.is_sep else base
|
||||
|
||||
@property
|
||||
def announce_kst(self) -> datetime:
|
||||
"""성명 발표 = 회의 마지막날 미 동부 14:00. 서머타임은 zoneinfo가 처리."""
|
||||
et = datetime(self.end_date.year, self.end_date.month, self.end_date.day, 14, 0, tzinfo=ET)
|
||||
return et.astimezone(KST)
|
||||
|
||||
@property
|
||||
def cal_start(self) -> date:
|
||||
return self.start_date
|
||||
|
||||
@property
|
||||
def cal_end(self) -> date:
|
||||
"""캘린더 이벤트 마지막날 = 발표일(KST). 미 동부 회의 종료 다음날이라
|
||||
한국 장이 결과를 반영하는 날까지 일정이 덮인다."""
|
||||
return self.announce_kst.date()
|
||||
|
||||
@property
|
||||
def description(self) -> str:
|
||||
if self.start_date == self.end_date:
|
||||
days = self.start_date.isoformat()
|
||||
else:
|
||||
days = f'{self.start_date.isoformat()} ~ {self.end_date.isoformat()}'
|
||||
lines = [
|
||||
f'회의일(미 동부): {days}',
|
||||
f'성명 발표: {self.announce_kst:%Y-%m-%d %H:%M} KST (한국 장 반영일)',
|
||||
]
|
||||
if self.is_sep:
|
||||
lines.append('경제전망(SEP)·점도표 공개 회의')
|
||||
lines.append(f'출처: {SOURCE_URL}')
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def run(cmd: list[str]) -> str:
|
||||
p = subprocess.run(cmd, capture_output=True, text=True)
|
||||
if p.returncode != 0:
|
||||
raise RuntimeError(p.stderr.strip() or p.stdout.strip() or 'command failed')
|
||||
return p.stdout
|
||||
|
||||
|
||||
def fetch(url: str) -> str:
|
||||
req = urllib.request.Request(url, headers={'User-Agent': 'Mozilla/5.0'})
|
||||
with urllib.request.urlopen(req, timeout=30) as r:
|
||||
return r.read().decode('utf-8', 'ignore')
|
||||
|
||||
|
||||
def parse_meetings(html: str, after: date) -> list[Meeting]:
|
||||
"""연도 패널별로 회의 행을 훑어 캘린더 기간이 아직 안 끝난 회의만 반환.
|
||||
|
||||
기준을 회의 시작일이 아니라 `cal_end`(발표일 KST)로 두는 이유: 미 동부 회의가
|
||||
끝났어도 한국 장 반영일이 남아 있으면 아직 관리 대상이다.
|
||||
"""
|
||||
panels = [(m.group(1), m.start()) for m in YEAR_PANEL_RE.finditer(html)]
|
||||
if not panels:
|
||||
return []
|
||||
bounds = panels + [('', len(html))]
|
||||
|
||||
meetings: list[Meeting] = []
|
||||
for (year_raw, start), (_, end) in zip(bounds[:-1], bounds[1:]):
|
||||
year = int(year_raw)
|
||||
if year < after.year:
|
||||
continue
|
||||
for row in MEETING_ROW_RE.finditer(html[start:end]):
|
||||
month_txt = re.sub(r'<[^>]+>', '', row.group(1)).strip()
|
||||
day_txt = re.sub(r'<[^>]+>', '', row.group(2)).strip()
|
||||
m = parse_row(year, month_txt, day_txt)
|
||||
if m and m.cal_end > after:
|
||||
meetings.append(m)
|
||||
meetings.sort(key=lambda m: m.start_date)
|
||||
return meetings
|
||||
|
||||
|
||||
def parse_row(year: int, month_txt: str, day_txt: str) -> Meeting | None:
|
||||
"""'April/May' + '28-1*' 같은 월 경계 표기까지 처리."""
|
||||
months = [MONTHS[p.strip().lower()] for p in month_txt.split('/') if p.strip().lower() in MONTHS]
|
||||
if not months:
|
||||
return None
|
||||
|
||||
is_sep = '*' in day_txt
|
||||
days = [int(d) for d in re.findall(r'\d+', day_txt)]
|
||||
if not days:
|
||||
return None
|
||||
|
||||
start_month = months[0]
|
||||
end_month = months[-1]
|
||||
start_year = year
|
||||
end_year = year if end_month >= start_month else year + 1 # 12월/1월 회의 대비
|
||||
|
||||
try:
|
||||
start = date(start_year, start_month, days[0])
|
||||
end = date(end_year, end_month, days[-1])
|
||||
except ValueError:
|
||||
return None
|
||||
if end < start:
|
||||
return None
|
||||
return Meeting(start, end, is_sep)
|
||||
|
||||
|
||||
def load_state() -> dict:
|
||||
if STATE_FILE.exists():
|
||||
try:
|
||||
return json.loads(STATE_FILE.read_text())
|
||||
except Exception:
|
||||
return {}
|
||||
return {}
|
||||
|
||||
|
||||
def save_state(state: dict):
|
||||
STATE_FILE.write_text(json.dumps(state, ensure_ascii=False, indent=2))
|
||||
|
||||
|
||||
def state_key_from_summary(summary: str) -> str | None:
|
||||
m = re.match(r'\[FOMC\]\s*(\d{4}-\d{2})\b', (summary or '').strip())
|
||||
return m.group(1) if m else None
|
||||
|
||||
|
||||
def fetch_existing_events(start_date: date, end_date: date) -> dict[str, list[dict]]:
|
||||
start_dt = datetime(start_date.year, start_date.month, start_date.day, 0, 0, tzinfo=KST)
|
||||
end_dt = datetime(end_date.year, end_date.month, end_date.day, 0, 0, tzinfo=KST)
|
||||
out = run([
|
||||
'gog', 'calendar', 'events', CALENDAR_ID,
|
||||
'--from', start_dt.isoformat(), '--to', end_dt.isoformat(),
|
||||
'--all-pages', '--max', '250', '--json'
|
||||
])
|
||||
data = json.loads(out)
|
||||
existing: dict[str, list[dict]] = {}
|
||||
for ev in data.get('events', []):
|
||||
key = state_key_from_summary(ev.get('summary', ''))
|
||||
if key:
|
||||
existing.setdefault(key, []).append(ev)
|
||||
return existing
|
||||
|
||||
|
||||
def create_event(m: Meeting, dry_run: bool = False):
|
||||
start = m.cal_start.isoformat()
|
||||
end = (m.cal_end + timedelta(days=1)).isoformat() # 종일 이벤트의 end는 exclusive
|
||||
if dry_run:
|
||||
print(json.dumps({'create': m.summary, 'from': start, 'to': m.cal_end.isoformat()}, ensure_ascii=False))
|
||||
return
|
||||
# --event-color 미지정: 기존 이벤트에 지정된 색을 덮어쓰지 않는다
|
||||
run([
|
||||
'gog', 'calendar', 'create', CALENDAR_ID,
|
||||
'--summary', m.summary,
|
||||
'--description', m.description,
|
||||
'--from', start,
|
||||
'--to', end,
|
||||
'--all-day',
|
||||
])
|
||||
|
||||
|
||||
def update_event(event_id: str, m: Meeting, dry_run: bool = False) -> str:
|
||||
start = m.cal_start.isoformat()
|
||||
end = (m.cal_end + timedelta(days=1)).isoformat()
|
||||
if dry_run:
|
||||
print(json.dumps({'update': m.summary, 'event_id': event_id, 'from': start, 'to': m.cal_end.isoformat()}, ensure_ascii=False))
|
||||
return 'updated'
|
||||
try:
|
||||
run([
|
||||
'gog', 'calendar', 'update', CALENDAR_ID, event_id,
|
||||
'--summary', m.summary,
|
||||
'--description', m.description,
|
||||
'--from', start,
|
||||
'--to', end,
|
||||
'--all-day',
|
||||
])
|
||||
return 'updated'
|
||||
except Exception:
|
||||
run(['gog', 'calendar', 'delete', CALENDAR_ID, event_id, '--force', '--no-input'])
|
||||
create_event(m, dry_run=False)
|
||||
return 'recreated'
|
||||
|
||||
|
||||
def delete_event(event_id: str, dry_run: bool = False):
|
||||
if dry_run:
|
||||
print(json.dumps({'delete_event_id': event_id}, ensure_ascii=False))
|
||||
return
|
||||
run(['gog', 'calendar', 'delete', CALENDAR_ID, event_id, '--force', '--no-input'])
|
||||
|
||||
|
||||
def event_date_range(ev: dict) -> tuple[str, str]:
|
||||
start_info = ev.get('start', {})
|
||||
end_info = ev.get('end', {})
|
||||
start = start_info.get('date') or start_info.get('dateTime', '')[:10]
|
||||
end_excl = end_info.get('date') or end_info.get('dateTime', '')[:10]
|
||||
end = ''
|
||||
if end_excl:
|
||||
end = (date.fromisoformat(end_excl) - timedelta(days=1)).isoformat()
|
||||
return start, end
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument('--dry-run', action='store_true')
|
||||
parser.add_argument('--list', action='store_true', help='파싱 결과만 출력 (캘린더 미접근)')
|
||||
args = parser.parse_args()
|
||||
|
||||
today = datetime.now(KST).date()
|
||||
meetings = parse_meetings(fetch(SOURCE_URL), today)
|
||||
|
||||
if args.list:
|
||||
print(json.dumps({
|
||||
'today': today.isoformat(),
|
||||
'total': len(meetings),
|
||||
'meetings': [
|
||||
{'key': m.state_key, 'summary': m.summary,
|
||||
'meeting_et': f'{m.start_date.isoformat()}~{m.end_date.isoformat()}',
|
||||
'announce_kst': m.announce_kst.strftime('%Y-%m-%d %H:%M'),
|
||||
'cal_start': m.cal_start.isoformat(), 'cal_end': m.cal_end.isoformat()}
|
||||
for m in meetings
|
||||
],
|
||||
}, ensure_ascii=False, indent=2))
|
||||
return
|
||||
|
||||
state = load_state()
|
||||
end_date = max((m.cal_end for m in meetings), default=today) + timedelta(days=1)
|
||||
# 스크래핑 실패 시 기존 일정이 몰살되는 사고 방지 — meetings 비면 cleanup 스킵
|
||||
# 조회 시작이 today인 건 오늘 걸쳐 있는 진행 중 회의도 갱신 대상이기 때문
|
||||
existing = {} if not meetings else fetch_existing_events(today, end_date)
|
||||
|
||||
created, updated, recreated, deleted, duplicates_removed = [], [], [], [], []
|
||||
unchanged = 0
|
||||
changes = []
|
||||
keys = {m.state_key for m in meetings}
|
||||
|
||||
for m in meetings:
|
||||
existing_list = existing.get(m.state_key, [])
|
||||
# 같은 키로 여러 건이면 가장 최근 created를 남기고 나머지 삭제
|
||||
if len(existing_list) > 1:
|
||||
existing_list.sort(key=lambda e: e.get('created', ''), reverse=True)
|
||||
for dup in existing_list[1:]:
|
||||
delete_event(dup['id'], dry_run=args.dry_run)
|
||||
duplicates_removed.append(m.state_key)
|
||||
changes.append({'key': m.state_key, 'action': 'duplicate_removed', 'event_id': dup['id']})
|
||||
|
||||
existing_ev = existing_list[0] if existing_list else None
|
||||
|
||||
if not existing_ev:
|
||||
create_event(m, dry_run=args.dry_run)
|
||||
created.append(m.state_key)
|
||||
changes.append({'key': m.state_key, 'action': 'created',
|
||||
'new_date': f'{m.cal_start.isoformat()}~{m.cal_end.isoformat()}'})
|
||||
continue
|
||||
|
||||
existing_start, existing_end = event_date_range(existing_ev)
|
||||
desired_start, desired_end = m.cal_start.isoformat(), m.cal_end.isoformat()
|
||||
same_summary = (existing_ev.get('summary') or '').strip() == m.summary
|
||||
same_desc = (existing_ev.get('description') or '').strip() == m.description.strip()
|
||||
|
||||
if existing_start != desired_start or existing_end != desired_end or not same_summary or not same_desc:
|
||||
result = update_event(existing_ev['id'], m, dry_run=args.dry_run)
|
||||
(recreated if result == 'recreated' else updated).append(m.state_key)
|
||||
changes.append({'key': m.state_key, 'action': result,
|
||||
'old_date': f'{existing_start}~{existing_end}',
|
||||
'new_date': f'{desired_start}~{desired_end}'})
|
||||
else:
|
||||
unchanged += 1
|
||||
|
||||
# 연준 일정표에서 사라진 미래 회의는 캘린더에서도 삭제 (meetings 비면 existing이 빈 dict라 자동 스킵)
|
||||
for key, existing_list in existing.items():
|
||||
if key in keys:
|
||||
continue
|
||||
for stale in existing_list:
|
||||
old_start, old_end = event_date_range(stale)
|
||||
# 오늘 진행 중이거나 지난 회의는 parse 대상(오늘 이후)에서 빠져 있을 뿐이므로 삭제 금지
|
||||
if old_start and old_start <= today.isoformat():
|
||||
continue
|
||||
delete_event(stale['id'], dry_run=args.dry_run)
|
||||
deleted.append(key)
|
||||
changes.append({'key': key, 'action': 'deleted', 'event_id': stale['id'],
|
||||
'old_date': f'{old_start}~{old_end}'})
|
||||
|
||||
state['last_changes'] = changes
|
||||
state['last_run_at'] = datetime.now(KST).isoformat()
|
||||
if not args.dry_run:
|
||||
save_state(state)
|
||||
|
||||
print(json.dumps({
|
||||
'today': today.isoformat(), 'total_found': len(meetings),
|
||||
'newly_created': len(created), 'updated': len(updated), 'recreated': len(recreated),
|
||||
'deleted': len(deleted), 'duplicates_removed': len(duplicates_removed),
|
||||
'unchanged': unchanged, 'dry_run': args.dry_run, 'changes': changes,
|
||||
}, ensure_ascii=False))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
@@ -0,0 +1,449 @@
|
||||
#!/usr/bin/env python3
|
||||
"""투자원금(순입금) 집계 — 조회 전용.
|
||||
|
||||
투자원금 = 계좌 개설 이후 누적 입금 − 누적 출금. "내 돈 얼마 넣었나"이며,
|
||||
`총 매입금액`(현재 보유종목 매입원가)이나 `예수금`(남은 현금)과 전혀 다른 값이다.
|
||||
이 값이 있어야 `순자산 − 투자원금 = 진짜 총수익`(실현+미실현+배당)이 나온다.
|
||||
키움 kt00018의 평가손익은 현재 보유분 미실현만 잡아 누적 실현손익·배당을 놓친다.
|
||||
|
||||
데이터원은 kt00016(일별계좌수익률상세현황)의 기간내총입금·총출금.
|
||||
⚠️ kt00016은 **조회기간 1년 제한**이라 연도별 창으로 쪼개 누적한다.
|
||||
|
||||
캐시 `state/investment_principal.json`:
|
||||
- frozen : 지난 연도 = 확정값. 한 번 적재 후 재조회 안 함 (0인 연도는 저장 생략)
|
||||
- current: 올해 창(0101~오늘) 누적. 갱신 대상은 이것뿐 → 계좌당 1콜
|
||||
- seen : 마지막 갱신 시점의 "당일 입출금" 스냅샷 — 이벤트 감지 기준
|
||||
|
||||
갱신은 별도 트리거 없이 behive_web 렌더 경로에서 이벤트로만 일어난다.
|
||||
당일 입출금(이미 kt00015로 조회 중)이 seen과 다를 때만 올해 창을 재조회하므로
|
||||
입출금 없는 평시에는 kt00016 호출이 0이다. 안전망으로 7일 초과 시 강제 갱신.
|
||||
|
||||
CLI: python3 scripts/investment_principal.py {bootstrap|refresh|show}
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import sys
|
||||
import time
|
||||
from contextlib import contextmanager
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parent))
|
||||
|
||||
import kiwoom_client as kc
|
||||
|
||||
KST = timezone(timedelta(hours=9))
|
||||
WORKSPACE = Path('/Users/snowoyh/.openclaw/agents/stock/workspace')
|
||||
STATE_FILE = WORKSPACE / 'state' / 'investment_principal.json'
|
||||
|
||||
# 부트스트랩 하한 연도. 계좌 개설 전 기간은 kt00016이 에러 없이 전 필드 0을 주므로
|
||||
# 넉넉히 잡아도 안전하다 (현재 최고(最古) 계좌는 2018년 개설).
|
||||
FLOOR_YEAR = 2010
|
||||
PACE_SEC = 0.35 # 연속 조회 rate limit 페이싱
|
||||
STALE_DAYS = 7 # 이벤트 감지가 못 잡은 경우의 안전망
|
||||
|
||||
# 적요에 이 중 하나가 들어가면 '내가 넣은/뺀 돈'(원금 반영), 아니면 투자 성과(원금 무관).
|
||||
# 원금 반영 : 이체입금(지급결제)·이체오픈뱅킹입금·이체입금·대체입금·소액이체인증입금
|
||||
# ·ISA가입인증입금 / 이체출금·대체출금
|
||||
# 원금 무관 : 배당금입금·수익분배금입금·예탁금이용료(이자)입금·공모주환불금입금
|
||||
# ·쿠폰현금지급(국내)입금·단주매각대금입금·대여수수료입금
|
||||
# / 공모불입출금·청약수수료출금
|
||||
# ⚠️ 추측이 아니라 실증된 규칙 — 이 분류의 합이 kt00016 기간내총입금/총출금과
|
||||
# 4계좌 18개 (계좌,연도) 구간 전부에서 오차 0으로 일치했다(2026-07-29).
|
||||
# 새 적요가 등장하면 reconciled=False로 드러나므로 조용히 틀리지 않는다.
|
||||
_PRINCIPAL_RMRK_KEYS = ('이체', '대체', '인증')
|
||||
|
||||
|
||||
def is_principal_flow(rmrk: str) -> bool:
|
||||
"""적요가 투자원금에 반영되는 외부 입출금인지. 배당·이자 등은 False."""
|
||||
return any(k in (rmrk or '') for k in _PRINCIPAL_RMRK_KEYS)
|
||||
|
||||
|
||||
# ---- 캐시 I/O ----
|
||||
|
||||
@contextmanager
|
||||
def _lock():
|
||||
"""STATE_FILE 직렬화 — behive_web _stock_notes_lock 과 동일 패턴, 별도 lock 파일."""
|
||||
import fcntl
|
||||
lock_path = STATE_FILE.with_suffix(STATE_FILE.suffix + '.lock')
|
||||
lock_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
f = open(lock_path, 'a')
|
||||
try:
|
||||
fcntl.flock(f.fileno(), fcntl.LOCK_EX)
|
||||
yield
|
||||
finally:
|
||||
try:
|
||||
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
|
||||
def _load() -> dict | None:
|
||||
"""캐시 로드. 파일 없거나 깨졌으면 None (호출측이 '미집계'로 처리)."""
|
||||
if not STATE_FILE.exists():
|
||||
return None
|
||||
try:
|
||||
d = json.loads(STATE_FILE.read_text())
|
||||
except Exception:
|
||||
return None
|
||||
if not isinstance(d, dict) or 'current' not in d:
|
||||
return None
|
||||
d.setdefault('frozen', {})
|
||||
d.setdefault('seen', {})
|
||||
d['current'].setdefault('labels', {})
|
||||
return d
|
||||
|
||||
|
||||
def _save(d: dict) -> None:
|
||||
d['refreshed_at'] = datetime.now(KST).isoformat(timespec='seconds')
|
||||
STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
|
||||
tmp = STATE_FILE.with_suffix('.json.tmp')
|
||||
tmp.write_text(json.dumps(d, ensure_ascii=False, indent=2))
|
||||
os.replace(tmp, STATE_FILE)
|
||||
|
||||
|
||||
# ---- 조회 ----
|
||||
|
||||
def _today_str() -> str:
|
||||
return datetime.now(KST).strftime('%Y%m%d')
|
||||
|
||||
|
||||
def _this_year() -> int:
|
||||
return datetime.now(KST).year
|
||||
|
||||
|
||||
def _window(year: int) -> tuple[str, str]:
|
||||
"""연도별 조회 창. 올해는 오늘까지, 지난 연도는 12/31까지 (1년 제한 내)."""
|
||||
if year == _this_year():
|
||||
return f'{year}0101', _today_str()
|
||||
return f'{year}0101', f'{year}1231'
|
||||
|
||||
|
||||
def _fetch_year(label: str, year: int) -> dict:
|
||||
"""한 (계좌, 연도) 창의 합계(kt00016) + 입출금 행(kt00015). 2콜.
|
||||
|
||||
flows 행의 `pr`은 원금 반영 여부. 분류 합이 kt00016 합계와 맞는지 `rec`에 남겨
|
||||
새 적요가 등장해 분류가 어긋나면 화면에서 드러나게 한다.
|
||||
"""
|
||||
fr, to = _window(year)
|
||||
r = kc.get_period_return(label, fr, to)
|
||||
time.sleep(PACE_SEC)
|
||||
try:
|
||||
raw = kc.get_cash_flow(label, strt_dt=fr, end_dt=to)
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'cash flow {label} {year} 실패: {e}\n')
|
||||
raw = None
|
||||
flows = None if raw is None else [
|
||||
{'d': f['date'], 'io': f['io_tp'], 'amt': f['amount'],
|
||||
'rk': f['rmrk'], 'pr': is_principal_flow(f['rmrk'])}
|
||||
for f in raw
|
||||
]
|
||||
rec = None
|
||||
if flows is not None:
|
||||
pin = sum(f['amt'] for f in flows if f['io'] == 'IN' and f['pr'])
|
||||
pout = sum(f['amt'] for f in flows if f['io'] == 'OUT' and f['pr'])
|
||||
rec = (pin == r['cash_in'] and pout == r['cash_out'])
|
||||
return {
|
||||
'in': r['cash_in'], 'out': r['cash_out'],
|
||||
'qin': r['qty_in'], 'qout': r['qty_out'],
|
||||
'nf': r['net_fr'], 'nt': r['net_to'], 'pl': r['eval_pl'],
|
||||
'flows': flows, 'rec': rec,
|
||||
}
|
||||
|
||||
|
||||
def _is_empty(y: dict) -> bool:
|
||||
"""계좌 개설 전(또는 전면 무활동) 연도 — 저장 생략 대상."""
|
||||
return not any(y[k] for k in ('in', 'out', 'qin', 'qout', 'nf', 'nt', 'pl'))
|
||||
|
||||
|
||||
def _labels(labels: list[str] | None = None) -> list[str]:
|
||||
all_lb = [a['label'] for a in kc.list_accounts()]
|
||||
if labels is None:
|
||||
return all_lb
|
||||
wanted = set(labels)
|
||||
return [lb for lb in all_lb if lb in wanted]
|
||||
|
||||
|
||||
def _flow_totals(cash_flow_by_label: dict) -> dict:
|
||||
"""behive_web의 kt00015 당일 입출금 → {label: {'in': n, 'out': n}}."""
|
||||
out: dict[str, dict] = {}
|
||||
for lb, flows in (cash_flow_by_label or {}).items():
|
||||
ci = sum(f['amount'] for f in (flows or []) if f.get('io_tp') == 'IN')
|
||||
co = sum(f['amount'] for f in (flows or []) if f.get('io_tp') == 'OUT')
|
||||
out[lb] = {'in': ci, 'out': co}
|
||||
return out
|
||||
|
||||
|
||||
# ---- 공개 API ----
|
||||
|
||||
def bootstrap(labels: list[str] | None = None) -> dict:
|
||||
"""FLOOR_YEAR ~ 올해 전수 조회로 캐시를 새로 만든다 (계좌×연도, 4×17≈68콜 ≈ 25초).
|
||||
|
||||
조기 종료 없음 — 잔고가 0으로 비었던 휴면 연도가 중간에 끼어도 그 앞 연도를 놓치지 않는다.
|
||||
⚠️ 1회성 CLI 전용. 렌더 경로에서 절대 호출하지 말 것.
|
||||
"""
|
||||
lbs = _labels(labels)
|
||||
this_year = _this_year()
|
||||
frozen: dict[str, dict] = {}
|
||||
current: dict[str, dict] = {}
|
||||
for lb in lbs:
|
||||
frozen[lb] = {}
|
||||
for year in range(FLOOR_YEAR, this_year + 1):
|
||||
y = _fetch_year(lb, year)
|
||||
time.sleep(PACE_SEC)
|
||||
if year == this_year:
|
||||
current[lb] = y
|
||||
elif not _is_empty(y):
|
||||
frozen[lb][year_key(year)] = y
|
||||
with _lock():
|
||||
d = _load() or {}
|
||||
d['frozen'] = {**(d.get('frozen') or {}), **frozen}
|
||||
cur = d.get('current') or {}
|
||||
if cur.get('year') != this_year:
|
||||
cur = {'year': this_year, 'labels': {}}
|
||||
cur['labels'] = {**(cur.get('labels') or {}), **current}
|
||||
d['current'] = cur
|
||||
d['seen'] = {**(d.get('seen') or {}), **_seen_now(lbs)}
|
||||
_save(d)
|
||||
return _load()
|
||||
|
||||
|
||||
def year_key(year: int) -> str:
|
||||
return str(year)
|
||||
|
||||
|
||||
def _seen_now(labels: list[str]) -> dict:
|
||||
"""현재 당일 입출금을 seen 형식으로. (CLI refresh/bootstrap 용 — kt00015 계좌당 1콜)"""
|
||||
today = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
totals = _flow_totals(kc.get_cash_flow_all(None, labels))
|
||||
return {lb: {'date': today, **totals.get(lb, {'in': 0, 'out': 0})} for lb in labels}
|
||||
|
||||
|
||||
def refresh_current(labels: list[str], cash_flow_by_label: dict | None = None) -> None:
|
||||
"""올해 창만 재조회 (라벨당 1콜) + 연도 롤오버 시 작년을 확정값으로 이관.
|
||||
|
||||
cash_flow_by_label: 호출측이 이미 들고 있는 kt00015 당일 입출금.
|
||||
None이면 직접 조회. seen 기록에 쓴다 — kt00016 호출 **전** 시점의 값이어야
|
||||
그 사이 들어온 입금이 seen에 앞서 반영돼 영구 미갱신되는 일이 없다.
|
||||
"""
|
||||
lbs = _labels(labels)
|
||||
if not lbs:
|
||||
return
|
||||
if cash_flow_by_label is None:
|
||||
seen = _seen_now(lbs)
|
||||
else:
|
||||
today = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
totals = _flow_totals(cash_flow_by_label)
|
||||
seen = {lb: {'date': today, **totals.get(lb, {'in': 0, 'out': 0})} for lb in lbs}
|
||||
|
||||
this_year = _this_year()
|
||||
with _lock():
|
||||
d = _load()
|
||||
if d is None:
|
||||
return # 부트스트랩 전 — 렌더 경로를 68콜로 막지 않는다
|
||||
cur = d['current']
|
||||
prev_year = cur.get('year')
|
||||
# 연도 롤오버: current에 담긴 작년치는 to_dt가 12/31이 아니라 미완결이므로
|
||||
# 전체 창(0101~1231)으로 다시 받아 확정 이관한다.
|
||||
if prev_year and prev_year != this_year:
|
||||
for lb in lbs:
|
||||
y = _fetch_year(lb, prev_year)
|
||||
time.sleep(PACE_SEC)
|
||||
if not _is_empty(y):
|
||||
d['frozen'].setdefault(lb, {})[year_key(prev_year)] = y
|
||||
cur = {'year': this_year, 'labels': {}}
|
||||
for lb in lbs:
|
||||
cur['labels'][lb] = _fetch_year(lb, this_year)
|
||||
time.sleep(PACE_SEC)
|
||||
cur['year'] = this_year
|
||||
d['current'] = cur
|
||||
d['seen'].update(seen)
|
||||
_save(d)
|
||||
|
||||
|
||||
def needs_refresh(labels: list[str], cash_flow_by_label: dict) -> bool:
|
||||
"""올해 창 재조회가 필요한지 판정 — 순수 캐시 읽기(키움 콜 0).
|
||||
|
||||
캐시가 없으면 False — 부트스트랩 미실행 상태에서 페이지 로드를 68콜로 막지 않는다.
|
||||
"""
|
||||
d = _load()
|
||||
if d is None:
|
||||
return False
|
||||
if d['current'].get('year') != _this_year():
|
||||
return True
|
||||
today = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
totals = _flow_totals(cash_flow_by_label)
|
||||
for lb in labels:
|
||||
if lb not in totals:
|
||||
continue # owner 부분 갱신 — 조회 안 된 계좌는 판단 보류
|
||||
s = d['seen'].get(lb) or {}
|
||||
base = s if s.get('date') == today else {'in': 0, 'out': 0}
|
||||
if totals[lb]['in'] != base.get('in', 0) or totals[lb]['out'] != base.get('out', 0):
|
||||
return True
|
||||
ts = d.get('refreshed_at')
|
||||
if not ts:
|
||||
return True
|
||||
try:
|
||||
age = datetime.now(KST) - datetime.fromisoformat(ts)
|
||||
except Exception:
|
||||
return True
|
||||
return age > timedelta(days=STALE_DAYS)
|
||||
|
||||
|
||||
def get_principal(labels: list[str]) -> dict:
|
||||
"""캐시만 읽어 누적 원금 산출 (키움 콜 0).
|
||||
|
||||
반환 principal이 None이면 '미집계' — 요청 라벨 중 부트스트랩 안 된 계좌가 있다는 뜻.
|
||||
(0으로 떨어뜨리면 그 계좌 입금이 조용히 빠져 원금이 과소계상된다.)
|
||||
qty_flow=True는 주식 입출고(타사대체) 이력 — 현금 기준 원금이 과소계상됨을 알림.
|
||||
by_label은 계좌별 순입금 {label: 원} — 자세히보기 토스트용.
|
||||
"""
|
||||
miss = {'principal': None, 'cash_in': None, 'cash_out': None,
|
||||
'qty_flow': False, 'by_label': {}}
|
||||
d = _load()
|
||||
if d is None:
|
||||
return miss
|
||||
cur = d['current']['labels']
|
||||
total_in = total_out = 0
|
||||
qty_flow = False
|
||||
by_label: dict[str, int] = {}
|
||||
for lb in labels:
|
||||
if lb not in cur:
|
||||
return miss
|
||||
recs = list((d['frozen'].get(lb) or {}).values()) + [cur[lb]]
|
||||
lb_in = lb_out = 0
|
||||
for y in recs:
|
||||
lb_in += y.get('in', 0)
|
||||
lb_out += y.get('out', 0)
|
||||
qty_flow = qty_flow or bool(y.get('qin') or y.get('qout'))
|
||||
by_label[lb] = lb_in - lb_out
|
||||
total_in += lb_in
|
||||
total_out += lb_out
|
||||
return {
|
||||
'principal': total_in - total_out,
|
||||
'cash_in': total_in,
|
||||
'cash_out': total_out,
|
||||
'qty_flow': qty_flow,
|
||||
'by_label': by_label,
|
||||
}
|
||||
|
||||
|
||||
def get_flows(labels: list[str]) -> dict:
|
||||
"""입출금 내역 (최신순) — 캐시만 읽는다 (키움 콜 0).
|
||||
|
||||
반환:
|
||||
- rows: [{date, io('IN'|'OUT'), amount, rmrk, principal(bool), label}] 최신순
|
||||
- other_in / other_out: 원금 무관 입출금 합계 (배당·이자 등)
|
||||
- reconciled: 전 구간에서 적요 분류 합이 kt00016 합계와 일치했는지
|
||||
False면 새 적요가 등장해 분류가 어긋났다는 신호
|
||||
- available: 내역이 캐시에 있는지 (부트스트랩 전 or 조회 실패 시 False)
|
||||
"""
|
||||
d = _load()
|
||||
if d is None:
|
||||
return {'rows': [], 'other_in': 0, 'other_out': 0,
|
||||
'reconciled': True, 'available': False}
|
||||
cur = d['current']['labels']
|
||||
rows: list[dict] = []
|
||||
reconciled = True
|
||||
available = False
|
||||
for lb in labels:
|
||||
recs = list((d['frozen'].get(lb) or {}).values())
|
||||
if lb in cur:
|
||||
recs.append(cur[lb])
|
||||
for y in recs:
|
||||
flows = y.get('flows')
|
||||
if flows is None:
|
||||
continue
|
||||
available = True
|
||||
if y.get('rec') is False:
|
||||
reconciled = False
|
||||
for f in flows:
|
||||
rows.append({'date': f['d'], 'io': f['io'], 'amount': f['amt'],
|
||||
'rmrk': f['rk'], 'principal': f['pr'], 'label': lb})
|
||||
rows.sort(key=lambda r: (r['date'], r['label']), reverse=True)
|
||||
return {
|
||||
'rows': rows,
|
||||
'other_in': sum(r['amount'] for r in rows if r['io'] == 'IN' and not r['principal']),
|
||||
'other_out': sum(r['amount'] for r in rows if r['io'] == 'OUT' and not r['principal']),
|
||||
'reconciled': reconciled,
|
||||
'available': available,
|
||||
}
|
||||
|
||||
|
||||
# ---- CLI ----
|
||||
|
||||
def _show() -> int:
|
||||
d = _load()
|
||||
if d is None:
|
||||
print(f'캐시 없음: {STATE_FILE}\n → python3 scripts/investment_principal.py bootstrap')
|
||||
return 1
|
||||
from stock_portfolio_report import derive_owner
|
||||
|
||||
print(f'갱신: {d.get("refreshed_at")} (올해 창 {d["current"].get("year")})\n')
|
||||
lbs = list(d['current']['labels'].keys())
|
||||
bad = 0
|
||||
for lb in lbs:
|
||||
years = sorted((d['frozen'].get(lb) or {}).items())
|
||||
years.append((year_key(d['current']['year']), d['current']['labels'][lb]))
|
||||
print(f'===== {lb} =====')
|
||||
tin = tout = 0
|
||||
for yk, y in years:
|
||||
# 항등식: 순자산초 + 입금 − 출금 + 평가손익 = 순자산말
|
||||
err = y['nf'] + y['in'] - y['out'] + y['pl'] - y['nt']
|
||||
bad += 1 if err else 0
|
||||
tin += y['in']
|
||||
tout += y['out']
|
||||
q = f' 입고 {y["qin"]:,} 출고 {y["qout"]:,}' if (y['qin'] or y['qout']) else ''
|
||||
nf = len(y.get('flows') or []) if y.get('flows') is not None else None
|
||||
rc = {True: '분류OK', False: '분류불일치!', None: '내역없음'}[y.get('rec')]
|
||||
print(f' {yk}: 입금 {y["in"]:>12,} 출금 {y["out"]:>11,} '
|
||||
f'순자산 {y["nf"]:>12,}→{y["nt"]:>12,} 손익 {y["pl"]:>12,} '
|
||||
f'항등식오차 {err:,} 내역 {nf if nf is not None else "-":>3}행 {rc}{q}')
|
||||
print(f' >> 누적 입금 {tin:,} − 출금 {tout:,} = 순입금 {tin - tout:,}\n')
|
||||
|
||||
print('항등식 검증:', '전 행 오차 0 ✅' if not bad else f'⚠️ 오차 있는 행 {bad}개')
|
||||
fl = get_flows(lbs)
|
||||
print(f'적요 분류 검증: {"전 구간 일치 ✅" if fl["reconciled"] else "⚠️ 불일치 구간 있음 — 새 적요 확인 필요"}'
|
||||
f' (내역 {len(fl["rows"])}행, 원금무관 입금 {fl["other_in"]:,}원 / 출금 {fl["other_out"]:,}원)')
|
||||
|
||||
# 라이브 교차검증 — 원금 대비 총수익 vs 실제 순자산
|
||||
print('\n===== 원금 대비 총수익 (라이브 교차검증) =====')
|
||||
owners: dict[str, list[str]] = {}
|
||||
for lb in lbs:
|
||||
owners.setdefault(derive_owner(lb), []).append(lb)
|
||||
for owner, olbs in owners.items():
|
||||
pr = get_principal(olbs)
|
||||
net = 0
|
||||
for lb in olbs:
|
||||
net += sum(p['evlt_amt'] for p in kc.get_positions(lb)) + kc.get_balance(lb)['d2_entra']
|
||||
p = pr['principal']
|
||||
ret = net - p
|
||||
warn = ' ⚠️ 주식 입출고 있음(원금 과소계상)' if pr['qty_flow'] else ''
|
||||
print(f'[{owner}] 투자원금 {p:,}원 (입금 {pr["cash_in"]:,} − 출금 {pr["cash_out"]:,}){warn}')
|
||||
print(f' 순자산 {net:,}원 → 총수익 {ret:+,}원 ({ret / p * 100:+.2f}%)' if p else ' 원금 0')
|
||||
return 0 if not bad else 1
|
||||
|
||||
|
||||
def main(argv: list[str]) -> int:
|
||||
cmd = argv[1] if len(argv) > 1 else 'show'
|
||||
if cmd == 'bootstrap':
|
||||
lbs = _labels()
|
||||
n = len(lbs) * (_this_year() - FLOOR_YEAR + 1)
|
||||
print(f'{len(lbs)}계좌 × {_this_year() - FLOOR_YEAR + 1}년 = {n}콜 (약 {n * PACE_SEC:.0f}초)...')
|
||||
bootstrap()
|
||||
print(f'완료 → {STATE_FILE}\n')
|
||||
return _show()
|
||||
if cmd == 'refresh':
|
||||
refresh_current(_labels())
|
||||
print(f'올해 창 갱신 완료 → {STATE_FILE}\n')
|
||||
return _show()
|
||||
if cmd == 'show':
|
||||
return _show()
|
||||
print(__doc__)
|
||||
return 2
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
raise SystemExit(main(sys.argv))
|
||||
@@ -13,9 +13,12 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import http.client
|
||||
import socket
|
||||
import sys
|
||||
import threading
|
||||
import time
|
||||
import urllib.error
|
||||
import urllib.request
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from pathlib import Path
|
||||
@@ -32,9 +35,11 @@ ENDPOINT_ACNT = '/api/dostk/acnt'
|
||||
ENDPOINT_STKINFO = '/api/dostk/stkinfo'
|
||||
ENDPOINT_MRKCOND = '/api/dostk/mrkcond' # 시세(market condition) — ka10004 호가 등
|
||||
ENDPOINT_CHART = '/api/dostk/chart' # 차트 — ka10081 일봉
|
||||
ENDPOINT_RKINFO = '/api/dostk/rkinfo' # 순위정보 — ka10023 거래량급증, ka90009 외인기관매매상위
|
||||
TR_DEPOSIT = 'kt00001' # 예수금상세현황요청
|
||||
TR_ACNT_EVAL = 'kt00004' # 계좌평가현황요청 (acnt_nm·brch_nm 포함)
|
||||
TR_TRUST_TRADE = 'kt00015' # 위탁종합거래내역요청 (tp='1' 입출금 — 당일 추가입금/인출 추출용)
|
||||
TR_ACNT_RETURN = 'kt00016' # 일별계좌수익률상세현황요청 (기간내총입금·총출금 — 투자원금 산출용)
|
||||
TR_POSITIONS = 'kt00018' # 계좌평가잔고내역요청 (종목별 상세, 수수료·세금 포함)
|
||||
TR_TRADE_DIARY = 'ka10170' # 당일매매일지요청 (round-trip·풀매도 포함, 잔고에 없는 거래도 잡힘)
|
||||
TR_ORDER_EXEC = 'kt00007' # 계좌별주문체결내역상세 (주문번호·시각·체결가·체결수량 단위, REST/영웅문 출처 구분)
|
||||
@@ -47,6 +52,8 @@ TR_MINUTE_CHART = 'ka10080' # 주식분봉차트조회 (1/3/5/10/15/30/45/60분
|
||||
TR_INVESTOR_FLOW = 'ka10059' # 종목별투자자기관별 (외국인·기관 일별 매매)
|
||||
|
||||
STOCK_CODES_CACHE = STATE_DIR / 'stock_codes.json'
|
||||
_HTTP_TRANSIENT_RETRIES = 2
|
||||
_HTTP_TRANSIENT_BACKOFF_SEC = 0.8
|
||||
|
||||
|
||||
def load_credentials() -> dict:
|
||||
@@ -85,6 +92,15 @@ def _http_post_full(url: str, body: dict, headers: dict | None = None) -> tuple[
|
||||
if headers:
|
||||
h.update(headers)
|
||||
req = urllib.request.Request(url, data=data, method='POST', headers=h)
|
||||
transient_errors = (
|
||||
ConnectionResetError,
|
||||
TimeoutError,
|
||||
socket.timeout,
|
||||
urllib.error.URLError,
|
||||
http.client.RemoteDisconnected,
|
||||
http.client.IncompleteRead,
|
||||
)
|
||||
for attempt in range(_HTTP_TRANSIENT_RETRIES + 1):
|
||||
try:
|
||||
with urllib.request.urlopen(req, timeout=15) as r:
|
||||
resp_headers = {k.lower(): v for k, v in r.headers.items()}
|
||||
@@ -92,6 +108,12 @@ def _http_post_full(url: str, body: dict, headers: dict | None = None) -> tuple[
|
||||
except urllib.error.HTTPError as e:
|
||||
body_text = e.read().decode('utf-8', 'ignore')
|
||||
raise RuntimeError(f'HTTP {e.code} {url}: {body_text}') from e
|
||||
except transient_errors:
|
||||
if attempt >= _HTTP_TRANSIENT_RETRIES:
|
||||
raise
|
||||
time.sleep(_HTTP_TRANSIENT_BACKOFF_SEC * (attempt + 1))
|
||||
|
||||
raise RuntimeError(f'HTTP POST failed unexpectedly: {url}')
|
||||
|
||||
|
||||
def _token_cache_path(label: str) -> Path:
|
||||
@@ -410,25 +432,39 @@ def get_trade_journal_all(base_dt: str | None = None, labels: list[str] | None =
|
||||
return {a['label']: get_trade_journal(a['label'], base_dt) for a in accs}
|
||||
|
||||
|
||||
def get_cash_flow(account_label: str, base_dt: str | None = None) -> list[dict]:
|
||||
"""당일 입출금 내역 (kt00015 tp='1').
|
||||
def get_cash_flow(account_label: str, base_dt: str | None = None,
|
||||
strt_dt: str | None = None, end_dt: str | None = None) -> list[dict]:
|
||||
"""입출금 내역 (kt00015 tp='1').
|
||||
|
||||
base_dt: YYYYMMDD (None이면 KST 오늘). 시작/종료 동일 → 그날치만.
|
||||
strt_dt/end_dt: 둘 다 주면 기간 조회 (base_dt 무시).
|
||||
⚠️ **조회기간 1년 제한** — 넘기면 `[2000](501058:조회기간은 1년 이내로만 가능합니다.)`.
|
||||
다년치는 연도별로 쪼개 호출한다 (investment_principal.py 참조).
|
||||
tp='1'(입출금)·gds_tp='0'(전체)로 매매·환전 등은 제외. KRW만 필터.
|
||||
|
||||
⚠️ tp='1' 입금에는 **배당금·예탁금이용료(이자)·수익분배금·공모주환불금·단주매각대금**이
|
||||
섞여 들어온다. 이건 '내가 넣은 돈'이 아니므로 투자원금 합산에 그대로 쓰면 과대계상된다.
|
||||
kt00016의 기간내총입금/총출금은 이걸 이미 제외한 순수 외부 이체액이다 (전 계좌·연도 실증).
|
||||
적요 기준 분류는 `investment_principal.is_principal_flow`.
|
||||
|
||||
반환 행:
|
||||
- date: 'YYYYMMDD' (trde_dt)
|
||||
- time: 'HH:MM:SS' (proc_tm 앞 8자리)
|
||||
- io_tp: 'IN' | 'OUT'
|
||||
- amount: 거래금액 (원, 양수)
|
||||
- signed: +amount (입금) / -amount (출금) — 합산으로 net cash flow 산출
|
||||
- rmrk: 적요명 (예: '타사대체입금', '은행이체출금')
|
||||
- rmrk: 적요명 (예: '이체입금(지급결제)', '배당금입금', '이체출금')
|
||||
- balance: 거래 후 예수금잔고 (entra_remn)
|
||||
"""
|
||||
if strt_dt and end_dt:
|
||||
fr, to = strt_dt, end_dt
|
||||
else:
|
||||
if base_dt is None:
|
||||
base_dt = datetime.now(KST).strftime('%Y%m%d')
|
||||
fr = to = base_dt
|
||||
body = {
|
||||
'strt_dt': base_dt,
|
||||
'end_dt': base_dt,
|
||||
'strt_dt': fr,
|
||||
'end_dt': to,
|
||||
'tp': '1',
|
||||
'stk_cd': '',
|
||||
'crnc_cd': '',
|
||||
@@ -457,6 +493,7 @@ def get_cash_flow(account_label: str, base_dt: str | None = None) -> list[dict]:
|
||||
continue
|
||||
proc_tm = (it.get('proc_tm') or '').strip()
|
||||
out.append({
|
||||
'date': (it.get('trde_dt') or '').strip(),
|
||||
'time': proc_tm[:8],
|
||||
'io_tp': io_tp,
|
||||
'amount': amount,
|
||||
@@ -476,6 +513,38 @@ def get_cash_flow_all(base_dt: str | None = None, labels: list[str] | None = Non
|
||||
return {a['label']: get_cash_flow(a['label'], base_dt) for a in accs}
|
||||
|
||||
|
||||
def get_period_return(account_label: str, fr_dt: str, to_dt: str) -> dict:
|
||||
"""기간 계좌수익률 상세 (kt00016) — 기간내 총입금·총출금 포함.
|
||||
|
||||
⚠️ **조회기간 1년 제한** — 넘기면 `[2000](505221:조회기간은 1년이내로만 가능합니다.)`.
|
||||
전체기간 투자원금은 연도별 창으로 쪼개 누적해야 한다 (investment_principal.py 참조).
|
||||
|
||||
⚠️ 응답의 `invt_bsamt`는 "투자원금**평잔**"(기간 평균잔고)이라 누적 투자원금이 아니다 —
|
||||
이름이 비슷해 오용하기 쉬우니 반환하지 않는다. 누적 원금은 cash_in − cash_out.
|
||||
|
||||
계좌 개설 전 기간은 에러 없이 전 필드 0으로 응답한다.
|
||||
항등식 `net_fr + cash_in − cash_out + eval_pl == net_to` 가 성립 (자체 검증용).
|
||||
|
||||
반환:
|
||||
- cash_in/cash_out: 기간내 총입금/총출금 (원)
|
||||
- qty_in/qty_out: 기간내 총입고/총출고 (주식 대체 — 0이 아니면 현금 기준 원금이 과소계상)
|
||||
- net_fr/net_to: 순자산액계 기초/기말
|
||||
- eval_pl: 평가손익
|
||||
"""
|
||||
resp = _call(account_label, TR_ACNT_RETURN, {'fr_dt': fr_dt, 'to_dt': to_dt})
|
||||
return {
|
||||
'label': account_label,
|
||||
'cash_in': _to_int(resp.get('termin_tot_trns')), # 기간내총입금
|
||||
'cash_out': _to_int(resp.get('termin_tot_pymn')), # 기간내총출금
|
||||
'qty_in': _to_int(resp.get('termin_tot_inq')), # 기간내총입고
|
||||
'qty_out': _to_int(resp.get('termin_tot_outq')), # 기간내총출고
|
||||
'net_fr': _to_int(resp.get('tot_amt_fr')), # 순자산액계_초
|
||||
'net_to': _to_int(resp.get('tot_amt_to')), # 순자산액계_말
|
||||
'eval_pl': _to_int(resp.get('evltv_prft')), # 평가손익
|
||||
'raw': resp,
|
||||
}
|
||||
|
||||
|
||||
def get_order_executions(account_label: str, base_dt: str | None = None) -> list[dict]:
|
||||
"""계좌별 주문체결내역 (kt00007) — 주문번호·시각 단위 행 리스트.
|
||||
|
||||
@@ -615,6 +684,11 @@ def get_open_orders(account_label: str, code: str = '',
|
||||
'order_price': _to_int(it.get('ord_pric')),
|
||||
'unfilled_qty': _to_int(it.get('oso_qty')),
|
||||
'order_type': (it.get('trde_tp') or '').strip(),
|
||||
# 스톱지정가(trde_tp=28) 주문의 조건단가. 일반 주문은 0.
|
||||
# 실측 확인: ka10075 응답에 stop_pric 로 실려 온다 (2026-07-30).
|
||||
'stop_price': _to_int(it.get('stop_pric')),
|
||||
# 현재가 — 조건단가까지 얼마 남았는지 계산용. 부호 포함 문자열('-4805')이라 abs.
|
||||
'cur_price': abs(_to_int(it.get('cur_prc'))),
|
||||
'exchange': (it.get('stex_tp_txt') or '').strip(),
|
||||
'exchange_code': ex_code,
|
||||
'routing_suffix': _EXCHANGE_CODE_TO_SUFFIX.get(ex_code, ''),
|
||||
@@ -722,11 +796,13 @@ def get_stock_quote(code: str, account_label: str | None = None, exchange: str =
|
||||
}
|
||||
|
||||
|
||||
WATCHLIST_BATCH_MAX = 40 # ka10095 한 콜 종목 수 한도 — 초과 시 "허용된 요청 개수 초과[1634]" (2026-06-17, universe 120개에서 발견)
|
||||
|
||||
|
||||
def get_watchlist_quotes(codes: list[str], account_label: str | None = None,
|
||||
exchange: str = 'AL') -> dict[str, dict]:
|
||||
"""ka10095 관심종목정보요청 — 다종목 시세 batch (한 콜로 N개).
|
||||
"""ka10095 관심종목정보요청 — 다종목 시세 batch. 종목 수가 한도(WATCHLIST_BATCH_MAX) 초과 시 자동 분할 호출.
|
||||
|
||||
19종목 ~0.05s. ka10001×N 대비 rate limit 영향 없음.
|
||||
반환: {clean_code: {price, change, change_pct, name}}. 빈 codes면 빈 dict.
|
||||
"""
|
||||
clean_codes = [_clean_code(c) for c in codes if c]
|
||||
@@ -734,8 +810,16 @@ def get_watchlist_quotes(codes: list[str], account_label: str | None = None,
|
||||
return {}
|
||||
label = account_label or _default_account_label()
|
||||
suffix = f'_{exchange}' if exchange in ('NX', 'AL') else ''
|
||||
stk_cd_param = '|'.join(f'{c}{suffix}' for c in clean_codes)
|
||||
out: dict[str, dict] = {}
|
||||
for i in range(0, len(clean_codes), WATCHLIST_BATCH_MAX):
|
||||
chunk = clean_codes[i:i + WATCHLIST_BATCH_MAX]
|
||||
stk_cd_param = '|'.join(f'{c}{suffix}' for c in chunk)
|
||||
resp = _call(label, TR_WATCHLIST_INFO, {'stk_cd': stk_cd_param}, endpoint=ENDPOINT_STKINFO)
|
||||
out.update(_parse_watchlist_rows(resp))
|
||||
return out
|
||||
|
||||
|
||||
def _parse_watchlist_rows(resp: dict) -> dict[str, dict]:
|
||||
out: dict[str, dict] = {}
|
||||
for row in resp.get('atn_stk_infr') or []:
|
||||
raw_code = (row.get('stk_cd') or '').strip()
|
||||
@@ -754,11 +838,16 @@ def get_watchlist_quotes(codes: list[str], account_label: str | None = None,
|
||||
'high': abs(_to_int(row.get('high_pric') or '0')),
|
||||
'low': abs(_to_int(row.get('low_pric') or '0')),
|
||||
'volume': _to_int(row.get('trde_qty') or '0'),
|
||||
# 거래소가 계산한 가격제한폭. 기준가(전일종가)로 정해져 장중 불변.
|
||||
# 제한폭은 기준가의 호가단위로 절사한 뒤 ±하는 규칙이라 직접 계산하면
|
||||
# ETF·가격대별 호가단위 표를 재현해야 해 틀릴 여지가 있다 → 응답값 그대로 쓴다.
|
||||
'upper_limit': abs(_to_int(row.get('upl_pric') or '0')),
|
||||
'lower_limit': abs(_to_int(row.get('lst_pric') or '0')),
|
||||
}
|
||||
return out
|
||||
|
||||
|
||||
def get_quote_book(code: str, account_label: str | None = None) -> dict:
|
||||
def get_quote_book(code: str, account_label: str | None = None) -> dict: # noqa: E302
|
||||
"""주식호가 조회 (ka10004) — 10단계 매도/매수 호가 + 잔량.
|
||||
|
||||
매매 아님 — 조회 전용. 호가창 표시·체결 가능성 판단에 사용.
|
||||
@@ -948,18 +1037,21 @@ def get_daily_candles(code: str, count: int = 250, base_dt: str | None = None,
|
||||
|
||||
|
||||
def get_minute_candles(code: str, tic_scope: int = 5, today_only: bool = True,
|
||||
account_label: str | None = None) -> list[dict]:
|
||||
account_label: str | None = None, exchange: str = 'KRX') -> list[dict]:
|
||||
"""주식 분봉 차트 (ka10080). 수정주가 기준.
|
||||
|
||||
tic_scope: 1/3/5/10/15/30/45/60 분. 한 호출에 ~900봉 (5분봉 ≈ 11일치).
|
||||
today_only: True 면 오늘 봉만 추출.
|
||||
exchange: 'KRX'=KRX 단독(기본) / 'NX'=NXT 단독 / 'AL'=통합(KRX→NXT 연속).
|
||||
NX/AL은 stk_cd에 suffix를 붙여 NXT 시간대(15:30~20:00)에도 분봉이 이어진다.
|
||||
|
||||
반환: 시간 오름차순 list of dict — {date, time, open, high, low, close, volume}
|
||||
date='YYYYMMDD', time='HHMMSS'.
|
||||
"""
|
||||
label = account_label or _default_account_label()
|
||||
suffix = f'_{exchange}' if exchange in ('NX', 'AL') else ''
|
||||
body = {
|
||||
'stk_cd': _clean_code(code),
|
||||
'stk_cd': _clean_code(code) + suffix,
|
||||
'tic_scope': str(tic_scope),
|
||||
'upd_stkpc_tp': '1',
|
||||
}
|
||||
@@ -1051,6 +1143,49 @@ def _load_code_cache() -> dict:
|
||||
return {}
|
||||
|
||||
|
||||
def get_volume_surge(account_label: str | None = None, market: str = '000',
|
||||
min_qty: str = '50') -> list[dict]:
|
||||
"""거래량 급증 종목 (ka10023). 급증률 정렬·ETF+ETN+스팩 제외·5천원↑·KRX.
|
||||
반환 [{code, name, price, flu_rt(등락률%), surge_rt(급증률%)}] — 조회 전용."""
|
||||
label = account_label or _default_account_label()
|
||||
body = {'mrkt_tp': market, 'sort_tp': '2', 'tm_tp': '2', 'trde_qty_tp': min_qty,
|
||||
'tm': '', 'stk_cnd': '20', 'pric_tp': '6', 'stex_tp': '1'} # stk_cnd 20=ETF+ETN+스팩제외
|
||||
resp = _call(label, 'ka10023', body, ENDPOINT_RKINFO)
|
||||
out = []
|
||||
for x in resp.get('trde_qty_sdnin', []) or []:
|
||||
code = _clean_code(x.get('stk_cd', ''))
|
||||
if not code:
|
||||
continue
|
||||
out.append({'code': code, 'name': x.get('stk_nm', ''),
|
||||
'price': abs(_to_int(x.get('cur_prc'))),
|
||||
'flu_rt': _to_float(x.get('flu_rt')),
|
||||
'surge_rt': _to_float(x.get('sdnin_rt'))})
|
||||
return out
|
||||
|
||||
|
||||
def get_foreign_inst_netbuy(account_label: str | None = None, market: str = '000',
|
||||
date: str | None = None) -> dict:
|
||||
"""외국인·기관 순매수 상위 (ka90009). 금액(천만) 기준.
|
||||
반환 {'foreign': [{code,name,amt}], 'inst': [{code,name,amt}]} — 조회 전용."""
|
||||
label = account_label or _default_account_label()
|
||||
if not date:
|
||||
date = datetime.now(KST).strftime('%Y%m%d')
|
||||
body = {'mrkt_tp': market, 'amt_qty_tp': '1', 'qry_dt_tp': '1', 'date': date, 'stex_tp': '1'}
|
||||
resp = _call(label, 'ka90009', body, ENDPOINT_RKINFO)
|
||||
rows = resp.get('frgnr_orgn_trde_upper', []) or []
|
||||
foreign, inst = [], []
|
||||
for x in rows:
|
||||
fc = _clean_code(x.get('for_netprps_stk_cd', ''))
|
||||
if fc:
|
||||
foreign.append({'code': fc, 'name': x.get('for_netprps_stk_nm', ''),
|
||||
'amt': _to_int(x.get('for_netprps_amt'))})
|
||||
ic = _clean_code(x.get('orgn_netprps_stk_cd', ''))
|
||||
if ic:
|
||||
inst.append({'code': ic, 'name': x.get('orgn_netprps_stk_nm', ''),
|
||||
'amt': _to_int(x.get('orgn_netprps_amt'))})
|
||||
return {'foreign': foreign, 'inst': inst}
|
||||
|
||||
|
||||
def refresh_stock_codes(account_label: str | None = None) -> dict:
|
||||
"""ka10099로 KOSPI+KOSDAQ 전체 상장종목 리스트 캐싱. 페이지네이션 처리.
|
||||
|
||||
|
||||
@@ -50,6 +50,11 @@ def _pct(p: float, digits: int = 2) -> str:
|
||||
return f'{sign}{p:.{digits}f}%'
|
||||
|
||||
|
||||
def _num(p) -> str:
|
||||
"""계단 비율 표기 — 10.0 은 '10', 10.5 는 '10.5' 로. 불필요한 .0 을 지운다."""
|
||||
return f'{float(p or 0):g}'
|
||||
|
||||
|
||||
def format_card(request: dict, market_data: dict, card_id: str,
|
||||
estimate: Optional[dict] = None,
|
||||
budget_conversion: Optional[dict] = None,
|
||||
@@ -66,6 +71,10 @@ def format_card(request: dict, market_data: dict, card_id: str,
|
||||
type_marker = f' {cfg["warning_emoji"]} 시장가'
|
||||
elif request['order_type'] == 'AGGRESSIVE_LIMIT':
|
||||
type_marker = f' {cfg["warning_emoji"]} 공격적 지정가'
|
||||
elif request['order_type'] == 'STOP_LIMIT':
|
||||
type_marker = f' {cfg["warning_emoji"]} 스톱지정가(예약)'
|
||||
elif request['order_type'] == 'TRAILING_STOP':
|
||||
type_marker = f' {cfg["warning_emoji"]} 트레일링 스톱(예약)'
|
||||
amend_marker = ' ✏️ 수정됨' if amended else ''
|
||||
|
||||
lines = [f'{side_emoji} {_md_bold(side_word + " 미리보기")} [#{card_id}]{type_marker}{spouse_marker}{amend_marker}', '']
|
||||
@@ -83,6 +92,41 @@ def format_card(request: dict, market_data: dict, card_id: str,
|
||||
ratio = (request['price'] - market_data['prev_close']) / market_data['prev_close'] * 100
|
||||
price_part += f' (전일종가 {_pct(ratio)})'
|
||||
lines.append(f'{marker} 가격: {price_part}')
|
||||
elif request['order_type'] == 'STOP_LIMIT':
|
||||
stop_p = request.get('stop_price') or 0
|
||||
cur = market_data.get('current_price')
|
||||
cur_part = f' (현재가 {_money(cur)})' if cur else ''
|
||||
lines.append(f'{marker} 조건: {_md_bold(_money(stop_p) + " 도달 시")}{cur_part}')
|
||||
lines.append(f'{marker} 매도가격: {_md_bold(_money(request["price"]))} (지정가)')
|
||||
elif request['order_type'] == 'TRAILING_STOP':
|
||||
# 승인 대상은 "계단 정의" — 각 계단의 조건단가는 고점이 오르면 제 하락률을 유지하며
|
||||
# 함께 따라 올라간다. 계단이 1개면 종전의 단일 트레일링과 같다.
|
||||
cur = market_data.get('current_price')
|
||||
cur_part = f' (현재가 {_money(cur)})' if cur else ''
|
||||
# 초기 고점은 항상 등록 시점 현재가 — 과거 고점 기준 옵션은 2026-07-30 제거됨.
|
||||
peak_v = request.get('trail_peak') or 0
|
||||
steps = request.get('trail_steps') or []
|
||||
lines.append(f'{marker} 시작 고점: {_md_bold(_money(peak_v))} (등록 시점){cur_part}')
|
||||
min_sell = request.get('min_sell_price')
|
||||
if min_sell:
|
||||
# 최저 매도가가 손절선을 결정했는지(=트레일보다 높았는지) 명시 — 둘 중 어느 게
|
||||
# 지배했는지 안 보이면 관리자님이 값을 잘못 읽는다.
|
||||
tied = sum(1 for s in steps if s.get('floor_applied'))
|
||||
who = f'{tied}개 계단 적용' if tied else '미적용 (트레일이 더 높음)'
|
||||
lines.append(f'{marker} 최저 매도가: {_md_bold(_money(min_sell))} ({who})')
|
||||
lines.append('')
|
||||
lines.append(f'{marker} 매도 계단 {len(steps)}단')
|
||||
for s in steps:
|
||||
cum = s.get('cum', 0)
|
||||
cum_part = '전량' if cum >= 100 else f'누적 {_num(cum)}%'
|
||||
lines.append(f' {s["n"]}단계 −{_num(s["pct"])}% '
|
||||
f'{_md_bold(_money(s["cond_uv"]) + " 도달")} → '
|
||||
f'{s["qty"]:,}주 ({cum_part})')
|
||||
rest = request['qty'] - sum(s['qty'] for s in steps)
|
||||
if rest > 0:
|
||||
lines.append(f' ↳ 나머지 {rest:,}주는 스톱 없음 (계속 보유)')
|
||||
lines.append('')
|
||||
lines.append(f'{marker} 고점이 오르면 계단이 통째로 따라 올라갑니다 (내려가지 않음)')
|
||||
elif request['order_type'] == 'MARKET':
|
||||
lines.append(f'{marker} 가격: {_md_bold("시장가")}')
|
||||
else:
|
||||
@@ -153,6 +197,47 @@ def format_card(request: dict, market_data: dict, card_id: str,
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def format_card_multi(legs: list, side: str, symbol: str, symbol_name: str,
|
||||
order_type: str, price: Optional[int], card_id: str,
|
||||
state_warning: Optional[str] = None) -> str:
|
||||
"""복수 계좌 동시 주문 카드 — 레그별 계좌·수량·예상회수 나열.
|
||||
|
||||
legs: [{'account': str, 'qty': int, 'position_qty': int?}, ...]
|
||||
"""
|
||||
cfg = _limits()['card']
|
||||
side_word = '매수' if side == 'BUY' else '매도'
|
||||
side_emoji = cfg['buy_emoji'] if side == 'BUY' else cfg['sell_emoji']
|
||||
marker = cfg['highlight_marker']
|
||||
spouse_marker = ' 🔐 가희 계좌' if any(_is_spouse(l['account']) for l in legs) else ''
|
||||
type_marker = f' {cfg["warning_emoji"]} 시장가' if order_type == 'MARKET' else ''
|
||||
|
||||
lines = [f'{side_emoji} {_md_bold(side_word + " 미리보기")} [#{card_id}]{type_marker}{spouse_marker}'
|
||||
f' · 계좌 {len(legs)}개 동시', '']
|
||||
lines.append(f'{marker} {_md_bold(side_word)}')
|
||||
lines.append(f'{marker} 종목: {_md_bold(symbol_name)} ({symbol})')
|
||||
if state_warning:
|
||||
lines.append(state_warning)
|
||||
if order_type == 'LIMIT':
|
||||
lines.append(f'{marker} 가격: {_md_bold(_money(price))}')
|
||||
else:
|
||||
lines.append(f'{marker} 가격: {_md_bold("시장가")}')
|
||||
lines.append('')
|
||||
total = 0
|
||||
for l in legs:
|
||||
part = f'{marker} {_md_bold(_account_display(l["account"]))}: {l["qty"]:,}주'
|
||||
if l.get('position_qty'):
|
||||
part += f' (보유 {l["position_qty"]:,}주)'
|
||||
if order_type == 'LIMIT' and price:
|
||||
part += f' → {_money(price * l["qty"])}'
|
||||
total += price * l['qty']
|
||||
lines.append(part)
|
||||
if order_type == 'LIMIT' and price:
|
||||
money_label = '예상 금액 합계' if side == 'BUY' else '예상 회수 합계'
|
||||
lines.append(f'{money_label}: {_money(total)}')
|
||||
lines.append(f'{_limits()["pin"]["expiry_seconds"]}초 후 만료')
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def format_pin_message(pin: str) -> str:
|
||||
return pin
|
||||
|
||||
@@ -174,6 +259,40 @@ def format_submitted(card_id: str, side: str, symbol_name: str, qty: int,
|
||||
return f'📨 [#{card_id}] {side_word} 접수: {symbol_name} {qty:,}주 @ {price_str}\n주문번호: {ord_no}'
|
||||
|
||||
|
||||
def format_trailing_submitted(info: dict) -> str:
|
||||
"""트레일링 계단 접수 결과 — 몇 단이 걸렸고 감시가 붙었는지를 한 화면에 담는다.
|
||||
|
||||
계단 일부만 접수될 수 있어(레그 독립 제출) 성공·실패를 나란히 적는다.
|
||||
실패분을 요약해 버리면 방어선이 몇 개인지 모르는 채로 남게 된다.
|
||||
"""
|
||||
placed = info.get('placed') or []
|
||||
failed = info.get('failed') or []
|
||||
acct = _account_display(info.get('account', ''))
|
||||
head = '🧪 [모의] 트레일링' if info.get('dry_run') else '✅ 트레일링'
|
||||
lines = [f'{head} {len(placed)}단 등록: {info["symbol_name"]}',
|
||||
f'[{acct}] 총 {info["total_qty"]:,}주 · 시작 고점 {_money(info["peak"])}']
|
||||
if info.get('min_sell_price'):
|
||||
lines.append(f'최저 매도가 {_money(info["min_sell_price"])}')
|
||||
for s in placed:
|
||||
cum = s.get('cum', 0)
|
||||
cum_part = '전량' if cum >= 100 else f'누적 {_num(cum)}%'
|
||||
no = f' · 주문 {s["ord_no"]}' if s.get('ord_no') else ''
|
||||
lines.append(f'{s["n"]}단계 −{_num(s["pct"])}% {_money(s["cond_uv"])} 도달 → '
|
||||
f'{s["qty"]:,}주 ({cum_part}){no}')
|
||||
rest = info['total_qty'] - sum(s['qty'] for s in placed)
|
||||
if rest > 0:
|
||||
lines.append(f'↳ 나머지 {rest:,}주는 스톱 없음 (계속 보유)')
|
||||
for s in failed:
|
||||
lines.append(f'⚠️ {s["n"]}단계 −{_num(s["pct"])}% {s["qty"]:,}주 접수 실패 '
|
||||
f'({s.get("reason")}) {s.get("error", "")}'.rstrip())
|
||||
if info.get('register_error'):
|
||||
lines.append('⚠️ 주문은 접수됐지만 트레일링 등록 실패 — 손절선이 따라 올라가지 않습니다. '
|
||||
f'({info["register_error"]})')
|
||||
elif info.get('res_id'):
|
||||
lines.append(f'감시 시작 ({info["res_id"]}) — 고점이 오르면 계단이 함께 올라갑니다')
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def format_expired(card_id: str, side: str) -> str:
|
||||
side_word = '매수' if side == 'BUY' else '매도'
|
||||
return f'⏱️ [#{card_id}] 승인 만료. {side_word}가 취소되었습니다.'
|
||||
@@ -251,6 +370,10 @@ def format_card_locked(active: Optional[dict] = None) -> str:
|
||||
price_str = '시장가'
|
||||
elif order_type == 'AGGRESSIVE_LIMIT':
|
||||
price_str = f'공격적 지정가 {_money(price)}' if price else '공격적 지정가'
|
||||
elif order_type == 'TRAILING_STOP':
|
||||
steps = active.get('trail_steps') or []
|
||||
pcts = '/'.join(f'−{_num(s["pct"])}%' for s in steps)
|
||||
price_str = f'트레일링 {len(steps)}단 {pcts} (1단계 손절 {_money(active.get("stop_price"))})'
|
||||
else:
|
||||
price_str = _money(price) if price is not None else '지정가'
|
||||
|
||||
|
||||
@@ -156,21 +156,37 @@ def collect_market_data(account_label: str, symbol: str, side: str, qty: int) ->
|
||||
'stock_meta': stock_meta,
|
||||
}
|
||||
|
||||
try:
|
||||
open_orders = kc.get_open_orders(account_label)
|
||||
except Exception:
|
||||
open_orders = []
|
||||
|
||||
if side == 'BUY':
|
||||
try:
|
||||
bal = kc.get_balance(account_label)
|
||||
md['balance_d2'] = _to_int(bal.get('d2_entra'))
|
||||
d2 = _to_int(bal.get('d2_entra'))
|
||||
# d2_entra는 미체결 매수 지정가로 묶인 예수금을 아직 포함 → 실제 가용액에서 차감.
|
||||
locked = sum(_to_int(o.get('order_price')) * _to_int(o.get('unfilled_qty'))
|
||||
for o in open_orders
|
||||
if o.get('side') == 'BUY' and _to_int(o.get('order_price')) > 0)
|
||||
md['balance_d2'] = max(0, d2 - locked)
|
||||
except Exception:
|
||||
md['balance_d2'] = 0
|
||||
else:
|
||||
try:
|
||||
positions = kc.get_positions(account_label)
|
||||
md['position_qty'] = next(
|
||||
(_to_int(p.get('trde_able_qty') or p.get('qty') or p.get('hold_qty') or p.get('rmnd_qty'))
|
||||
for p in positions
|
||||
pos = next((p for p in positions
|
||||
if (p.get('code') == symbol) or (p.get('symbol') == symbol) or (p.get('stk_cd') == symbol)),
|
||||
0,
|
||||
)
|
||||
None)
|
||||
if pos:
|
||||
hold = _to_int(pos.get('qty') or pos.get('hold_qty') or pos.get('rmnd_qty'))
|
||||
trde_able = _to_int(pos.get('trde_able_qty') or hold)
|
||||
pend_sell = sum(_to_int(o.get('unfilled_qty')) for o in open_orders
|
||||
if o.get('side') == 'SELL' and o.get('code') == symbol)
|
||||
# trde_able이 미체결 매도 제외 여부 불확실 → min으로 이중차감 방지 (check 핸들러와 동일).
|
||||
md['position_qty'] = max(0, min(trde_able, hold - pend_sell))
|
||||
else:
|
||||
md['position_qty'] = 0
|
||||
except Exception:
|
||||
md['position_qty'] = 0
|
||||
|
||||
|
||||
@@ -503,7 +503,8 @@ def validate_request(request: dict, market_data: dict) -> Result:
|
||||
return r
|
||||
if request['side'] not in ('BUY', 'SELL'):
|
||||
return Result.REJECT('INVALID_SIDE', f'잘못된 방향: {request["side"]}')
|
||||
if request['order_type'] not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT'):
|
||||
if request['order_type'] not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT', 'STOP_LIMIT',
|
||||
'TRAILING_STOP'):
|
||||
return Result.REJECT('INVALID_ORDER_TYPE', f'잘못된 주문방식: {request["order_type"]}')
|
||||
r = validate_trading_hours(market_data['now'], market_data.get('is_holiday', False),
|
||||
market_data.get('nxt_eligible', False))
|
||||
@@ -525,6 +526,28 @@ def validate_request(request: dict, market_data: dict) -> Result:
|
||||
market_data['upper_limit'], market_data['lower_limit'])
|
||||
if not r.ok:
|
||||
return r
|
||||
if request['order_type'] in ('STOP_LIMIT', 'TRAILING_STOP'):
|
||||
# 스톱지정가: 지정가(체결가)·조건단가(트리거) 둘 다 가격제한 이내 + 매도 전용.
|
||||
# 보호매도(하락 시 매도)라 트리거는 현재가보다 낮아야 함 — 아니면 즉시 발동돼 스톱 의미 없음.
|
||||
# 트레일링도 키움엔 스톱지정가로 나가므로 같은 검증을 받는다 (조건단가는 자동 계산값).
|
||||
if request['side'] != 'SELL':
|
||||
return Result.REJECT('STOP_SELL_ONLY', '스톱지정가는 현재 매도만 지원')
|
||||
stop_price = request.get('stop_price')
|
||||
if not stop_price or stop_price <= 0:
|
||||
return Result.REJECT('STOP_PRICE_REQUIRED', '조건단가(트리거 가격)를 입력하세요')
|
||||
r = validate_price_band(request['side'], request['price'],
|
||||
market_data['upper_limit'], market_data['lower_limit'])
|
||||
if not r.ok:
|
||||
return r
|
||||
r = validate_price_band(request['side'], stop_price,
|
||||
market_data['upper_limit'], market_data['lower_limit'])
|
||||
if not r.ok:
|
||||
return r
|
||||
cur = market_data.get('current_price') or 0
|
||||
if cur and stop_price >= cur:
|
||||
return Result.REJECT('STOP_TRIGGER_NOT_BELOW',
|
||||
f'조건단가 {stop_price:,}원 ≥ 현재가 {cur:,}원 — '
|
||||
f'하락 시 매도(스톱)는 현재가보다 낮게 설정해야 함')
|
||||
if request['side'] == 'BUY':
|
||||
basis = None
|
||||
if request['order_type'] == 'MARKET':
|
||||
|
||||
@@ -35,7 +35,7 @@ if str(_PARENT) not in sys.path:
|
||||
|
||||
import kiwoom_client as kc # noqa: E402
|
||||
|
||||
from . import card, datasource, fill_watcher, guards, kiwoom_order, ledger, pin, sidecar # noqa: E402
|
||||
from . import card, datasource, fill_watcher, guards, kiwoom_order, ledger, pin, sidecar, trailing # noqa: E402
|
||||
|
||||
LIMITS_FILE = Path(__file__).resolve().parent / 'limits.json'
|
||||
OPENCLAW_CONFIG = Path.home() / '.openclaw' / 'openclaw.json'
|
||||
@@ -164,16 +164,58 @@ def propose_trade(
|
||||
price: Optional[int] = None,
|
||||
routing_force: Optional[str] = None,
|
||||
budget: Optional[int] = None,
|
||||
stop_price: Optional[int] = None,
|
||||
trail_steps: Optional[list] = None,
|
||||
min_sell_price: Optional[int] = None,
|
||||
) -> dict:
|
||||
sidecar.guard_or_raise()
|
||||
_sweep_expired_and_notify()
|
||||
|
||||
if order_type not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT'):
|
||||
if order_type not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT', 'STOP_LIMIT', 'TRAILING_STOP'):
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_ORDER_TYPE', f'잘못된 주문방식: {order_type}')}
|
||||
if side not in ('BUY', 'SELL'):
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_SIDE', f'잘못된 방향: {side}')}
|
||||
if order_type == 'STOP_LIMIT':
|
||||
if side != 'SELL':
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('STOP_SELL_ONLY', '스톱지정가는 현재 매도만 지원')}
|
||||
if not price or price <= 0 or not stop_price or stop_price <= 0:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('STOP_INPUT',
|
||||
'스톱지정가는 지정가와 조건단가(트리거)가 모두 필요')}
|
||||
norm_steps = None
|
||||
if order_type == 'TRAILING_STOP':
|
||||
# 트레일링은 계단 정의(하락률·누적 비중)만 입력받고, 계단별 조건단가·지정가·주수는
|
||||
# 현재가와 보유수량 기준으로 자동 계산한다 (md 수집 후).
|
||||
if side != 'SELL':
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('STOP_SELL_ONLY', '트레일링 스톱은 매도 전용')}
|
||||
try:
|
||||
norm_steps = trailing.normalize_steps(trail_steps or [])
|
||||
except (ValueError, KeyError, TypeError) as e:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('TRAIL_STEPS', f'계단 정의 오류: {e}')}
|
||||
if budget is not None:
|
||||
# 계단별 주수는 보유수량을 나눠 만든다 — 예산 환산이 끼면 기준이 두 개가 된다.
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('TRAIL_BUDGET',
|
||||
'트레일링은 수량으로만 지정 (예산 환산 불가)')}
|
||||
if min_sell_price is not None and min_sell_price <= 0:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('TRAIL_MIN_PRICE',
|
||||
'최저 매도가는 0보다 커야 함 (제한 없으면 비우세요)')}
|
||||
dup = trailing.find_by_symbol(account, symbol)
|
||||
if dup:
|
||||
dup_steps = dup.get('steps') or []
|
||||
top_uv = max((s['cond_uv'] for s in dup_steps), default=0)
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
'TRAIL_DUPLICATE',
|
||||
f'{symbol_name or symbol} 트레일링 예약이 이미 있음 '
|
||||
f'({dup["id"]} · {len(dup_steps)}단 · 1단계 손절 {top_uv:,}원) '
|
||||
f'— 먼저 취소하세요')}
|
||||
if budget is not None and qty is not None:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('AMBIGUOUS_INPUT',
|
||||
@@ -186,6 +228,46 @@ def propose_trade(
|
||||
# collect_market_data 의 잔고/보유 조회는 qty 와 무관.
|
||||
md = datasource.collect_market_data(account, symbol, side, qty or 0)
|
||||
|
||||
trail_final = None
|
||||
trail_peak = None
|
||||
if order_type == 'TRAILING_STOP':
|
||||
# 현재가를 못 받으면 손절선을 정할 수 없어 진행 불가 (호가 fallback 금지 — 기준이 흔들림).
|
||||
cur = md.get('current_price') or 0
|
||||
if cur <= 0:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('TRAIL_NO_PRICE',
|
||||
'현재가를 못 받아 트레일링 손절선을 정할 수 없음')}
|
||||
# 초기 고점은 등록 시점 현재가로 고정. 과거 고점(52주·매수후)을 쓰면 손절선이 현재가
|
||||
# 위로 올라가 등록 즉시 발동한다 — 손실 종목은 아예 등록 불가, 이익 종목은 현재가와
|
||||
# 결과가 같아 옵션 자체를 제거했다(2026-07-30 실측 근거로 관리자님 결정).
|
||||
trail_peak = cur
|
||||
try:
|
||||
leveled = trailing.compute_step_levels(trail_peak, norm_steps, min_sell_price)
|
||||
except ValueError as e:
|
||||
return {'ok': False, 'message': card.format_rejected('TRAIL_LEVEL', str(e))}
|
||||
# 계단별 주수 배분. 수량이 적어 0주가 된 계단은 발주할 수 없으니 떨어낸다 —
|
||||
# 단계 번호(n)는 그대로 두어 "몇 단계가 빠졌는지" 가 카드에서 보이게 한다.
|
||||
qtys = trailing.allocate_step_qty(qty, [s['weight'] for s in norm_steps])
|
||||
trail_final = [dict(s, qty=q) for s, q in zip(leveled, qtys) if q > 0]
|
||||
if not trail_final:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
'TRAIL_QTY', f'{qty:,}주로는 계단을 나눌 수 없음 — 수량을 늘리거나 계단을 줄이세요')}
|
||||
# 가장 얕은 계단이 제일 먼저 발동한다. 이게 현재가 이상이면 등록하는 순간 터진다.
|
||||
# 고점=현재가로 고정된 뒤로는 최저 매도가가 현재가보다 높은 경우만 남는다
|
||||
# (트레일 폭은 항상 현재가 아래로 내려감).
|
||||
top = trail_final[0]
|
||||
if top['cond_uv'] >= cur:
|
||||
if top['floor_applied']:
|
||||
msg = (f'최저 매도가 {min_sell_price:,}원이 현재가 {cur:,}원보다 높아 '
|
||||
f'등록 즉시 발동됩니다 — 현재가보다 낮게 설정하세요')
|
||||
else:
|
||||
msg = (f'1단계 손절선 {top["cond_uv"]:,}원이 현재가 {cur:,}원 이상이라 '
|
||||
f'등록 즉시 발동됩니다')
|
||||
return {'ok': False, 'message': card.format_rejected('TRAIL_IMMEDIATE', msg)}
|
||||
price = top['ord_uv']
|
||||
stop_price = top['cond_uv']
|
||||
|
||||
budget_conversion = None
|
||||
if budget is not None:
|
||||
conv = guards.convert_budget_to_qty(side, budget, md.get('orderbook'),
|
||||
@@ -211,6 +293,13 @@ def propose_trade(
|
||||
}
|
||||
if order_type == 'LIMIT':
|
||||
request['price'] = price
|
||||
elif order_type in ('STOP_LIMIT', 'TRAILING_STOP'):
|
||||
request['price'] = price
|
||||
request['stop_price'] = stop_price
|
||||
if order_type == 'TRAILING_STOP':
|
||||
request['trail_steps'] = trail_final
|
||||
request['min_sell_price'] = min_sell_price
|
||||
request['trail_peak'] = trail_peak
|
||||
|
||||
r = guards.validate_request(request, md)
|
||||
if not r.ok:
|
||||
@@ -254,6 +343,15 @@ def propose_trade(
|
||||
'account': account, 'side': side, 'symbol': symbol, 'symbol_name': symbol_name,
|
||||
'qty': qty, 'price': final_price, 'order_type': order_type, 'routing_suffix': suffix,
|
||||
}
|
||||
if order_type == 'STOP_LIMIT':
|
||||
payload['stop_price'] = stop_price
|
||||
elif order_type == 'TRAILING_STOP':
|
||||
# 승인 시점에 확정되는 것: 계좌·종목·계단별 수량·하락률·최저 매도가.
|
||||
# 이후 감시 루프는 계단별 조건단가만 올린다 (수량·계단 구성은 불변).
|
||||
payload['stop_price'] = stop_price
|
||||
payload['trail_steps'] = trail_final
|
||||
payload['trail_peak'] = trail_peak
|
||||
payload['min_sell_price'] = min_sell_price
|
||||
|
||||
try:
|
||||
pending = _pin_store.issue(account, payload)
|
||||
@@ -280,6 +378,117 @@ def propose_trade(
|
||||
}
|
||||
|
||||
|
||||
def propose_trade_multi(
|
||||
legs: list,
|
||||
side: str,
|
||||
symbol: str,
|
||||
symbol_name: str,
|
||||
order_type: str,
|
||||
price: Optional[int] = None,
|
||||
) -> dict:
|
||||
"""복수 계좌 동시 주문 — 같은 종목·방향·가격을 여러 계좌에서 카드 1장 + PIN 1개로.
|
||||
|
||||
legs: [{'account': str, 'qty': int}, ...] (2개 이상)
|
||||
웹 거래 모달 '두 계좌 모두 매도' 진입점. SELL + LIMIT/MARKET 만 지원.
|
||||
레그별 검증은 propose_trade 와 동일 경로(collect_market_data + validate_request),
|
||||
하나라도 거부면 전체 거부. PIN 형식 일관성을 위해 같은 소유자 그룹 계좌만 허용.
|
||||
"""
|
||||
sidecar.guard_or_raise()
|
||||
_sweep_expired_and_notify()
|
||||
|
||||
if side != 'SELL':
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_SIDE', '복수 계좌 동시 주문은 매도만 지원')}
|
||||
if order_type not in ('LIMIT', 'MARKET'):
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_ORDER_TYPE', f'잘못된 주문방식: {order_type}')}
|
||||
if not legs or len(legs) < 2:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_LEGS', '계좌 2개 이상 필요')}
|
||||
accounts = [str(l.get('account') or '') for l in legs]
|
||||
if len(set(accounts)) != len(accounts):
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_LEGS', '계좌 중복')}
|
||||
limits = _limits()
|
||||
owners, spouses = set(limits['owner_accounts']), set(limits['spouse_accounts'])
|
||||
if not (all(a in owners for a in accounts) or all(a in spouses for a in accounts)):
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('INVALID_LEGS', '같은 소유자 그룹 계좌만 동시 주문 가능')}
|
||||
|
||||
validated = []
|
||||
state_warning = None
|
||||
suffix = None
|
||||
for leg in legs:
|
||||
account = leg['account']
|
||||
try:
|
||||
qty = int(leg.get('qty') or 0)
|
||||
except (TypeError, ValueError):
|
||||
qty = 0
|
||||
if qty <= 0:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('MISSING_QTY', f'[{account}] 수량 필요')}
|
||||
md = datasource.collect_market_data(account, symbol, side, qty)
|
||||
request = {'account': account, 'side': side, 'symbol': symbol,
|
||||
'symbol_name': symbol_name, 'qty': qty, 'order_type': order_type}
|
||||
if order_type == 'LIMIT':
|
||||
request['price'] = price
|
||||
r = guards.validate_request(request, md)
|
||||
if not r.ok:
|
||||
ledger.append('rejected', {'account': account, 'side': side, 'symbol': symbol,
|
||||
'qty': qty, 'price': price, 'reason': r.code,
|
||||
'message': r.message, 'multi': True})
|
||||
return {'ok': False, 'message': card.format_rejected(r.code, f'[{account}] {r.message}')}
|
||||
state_eval = guards.evaluate_stock_state(md.get('stock_meta'))
|
||||
if not state_eval['result'].ok:
|
||||
sr = state_eval['result']
|
||||
ledger.append('rejected', {'account': account, 'side': side, 'symbol': symbol,
|
||||
'qty': qty, 'price': price, 'reason': sr.code,
|
||||
'message': sr.message, 'multi': True,
|
||||
'stock_state': state_eval['state'],
|
||||
'order_warning': state_eval['order_warning']})
|
||||
return {'ok': False, 'message': card.format_rejected(sr.code, sr.message)}
|
||||
if state_eval['warning']:
|
||||
state_warning = state_eval['warning']
|
||||
if suffix is None:
|
||||
suffix = guards.determine_routing(md['now'], md['nxt_eligible'], None)
|
||||
validated.append({'account': account, 'qty': qty,
|
||||
'position_qty': md.get('position_qty', 0)})
|
||||
|
||||
payload = {
|
||||
'multi': True,
|
||||
'side': side, 'symbol': symbol, 'symbol_name': symbol_name,
|
||||
'order_type': order_type, 'price': price, 'routing_suffix': suffix,
|
||||
'legs': [{'account': v['account'], 'qty': v['qty']} for v in validated],
|
||||
# 단일 payload 필드(account/qty)를 읽는 경로(format_card_locked 등) 호환용 요약
|
||||
'account': '+'.join(accounts),
|
||||
'qty': sum(v['qty'] for v in validated),
|
||||
}
|
||||
|
||||
try:
|
||||
pending = _pin_store.issue(accounts[0], payload)
|
||||
except RuntimeError:
|
||||
active = _pin_store.peek()
|
||||
info = _active_card_info(active) if active else None
|
||||
return {'ok': False, 'message': card.format_card_locked(info)}
|
||||
|
||||
card_msg = card.format_card_multi(validated, side, symbol, symbol_name, order_type,
|
||||
price, pending.card_id, state_warning)
|
||||
pin_msg = card.format_pin_message(pending.pin)
|
||||
|
||||
ledger.append('card_issued', {'card_id': pending.card_id, **payload})
|
||||
ledger.append('pin_issued', {'card_id': pending.card_id, 'account': accounts[0],
|
||||
'pin_length': len(pending.pin)})
|
||||
|
||||
return {
|
||||
'ok': True,
|
||||
'card_id': pending.card_id,
|
||||
'card_message': card_msg,
|
||||
'pin_message': pin_msg,
|
||||
'expiry_seconds': pending.expiry_seconds,
|
||||
'is_spouse': pending.account_label in spouses,
|
||||
}
|
||||
|
||||
|
||||
def propose_and_send(account, side, symbol, symbol_name, qty, order_type,
|
||||
price=None, routing_force=None, budget=None) -> dict:
|
||||
"""propose_trade 후 카드+PIN 을 텔레그램에 분리 발송. skill / launchd 진입점용."""
|
||||
@@ -325,6 +534,11 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
p = card_obj.payload
|
||||
ledger.append('approved', {'card_id': card_obj.card_id, **p})
|
||||
|
||||
if p.get('multi'):
|
||||
return _submit_multi_legs(card_obj, dry_run)
|
||||
if p['order_type'] == 'TRAILING_STOP':
|
||||
return _submit_trailing_steps(card_obj, dry_run)
|
||||
|
||||
submit_order_type = 'LIMIT' if p['order_type'] == 'AGGRESSIVE_LIMIT' else p['order_type']
|
||||
res = kiwoom_order.submit(
|
||||
account_label=p['account'],
|
||||
@@ -336,6 +550,7 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
routing_suffix=p['routing_suffix'],
|
||||
dry_run=dry_run,
|
||||
card_id=card_obj.card_id,
|
||||
stop_price=p.get('stop_price'),
|
||||
)
|
||||
|
||||
if res['ok']:
|
||||
@@ -346,9 +561,9 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
msg = card.format_submitted(card_obj.card_id, p['side'],
|
||||
p.get('symbol_name', p['symbol']),
|
||||
p['qty'], p.get('price'), ord_no)
|
||||
if ord_no:
|
||||
# 키움에서 ord_no 받으면 백그라운드 체결 추적 시작 (kt00007 폴링).
|
||||
# 부분체결·완전체결·사후거절·30분 미체결 시 텔레그램 자동 알림.
|
||||
if ord_no:
|
||||
fill_watcher.watch(
|
||||
ord_no=ord_no, account=p['account'], side=p['side'],
|
||||
symbol=p['symbol'], symbol_name=p.get('symbol_name', p['symbol']),
|
||||
@@ -361,6 +576,131 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
'detail': res}
|
||||
|
||||
|
||||
def _submit_trailing_steps(card_obj, dry_run: bool) -> dict:
|
||||
"""트레일링 계단 카드 — 계단마다 스톱주문을 내고 예약 1건으로 묶어 등록한다.
|
||||
|
||||
키움엔 스톱지정가(trde_tp=28)로 나간다 — 트레일링은 우리 쪽 개념이다.
|
||||
얕은 계단(먼저 발동할 것)부터 접수해, 중간에 막히더라도 가장 가까운 방어선이 먼저 걸리게 한다.
|
||||
|
||||
한 레그가 실패해도 나머지는 계속 시도하고, 접수된 레그만 예약에 등록한다. 이미 나간 주문을
|
||||
되돌리지 않는 이유는 취소 자체도 실패할 수 있어 상태가 더 불분명해지기 때문이다 —
|
||||
대신 몇 단이 걸리고 몇 단이 실패했는지를 메시지에 그대로 드러낸다.
|
||||
|
||||
fill_watcher 는 걸지 않는다. 스톱 예약은 조건 도달까지 미체결로 남는 게 정상이라
|
||||
30분 미체결 알림이 오탐이 된다 — 생존·체결 감시는 trailing_monitor 가 담당한다.
|
||||
"""
|
||||
p = card_obj.payload
|
||||
steps = p.get('trail_steps') or []
|
||||
name = p.get('symbol_name', p['symbol'])
|
||||
placed, failed, details = [], [], []
|
||||
|
||||
for s in steps:
|
||||
res = kiwoom_order.submit(
|
||||
account_label=p['account'],
|
||||
side='SELL',
|
||||
symbol=p['symbol'],
|
||||
qty=s['qty'],
|
||||
price=s['ord_uv'],
|
||||
order_type='STOP_LIMIT',
|
||||
routing_suffix=p['routing_suffix'],
|
||||
dry_run=dry_run,
|
||||
card_id=card_obj.card_id,
|
||||
stop_price=s['cond_uv'],
|
||||
)
|
||||
details.append(res)
|
||||
if res['ok']:
|
||||
# dry_run 은 주문번호가 없다 — 예약 등록 없이 접수될 내용만 확인한다.
|
||||
placed.append(dict(s, ord_no=res.get('ord_no', '')))
|
||||
else:
|
||||
failed.append(dict(s, reason=res.get('reason', 'UNKNOWN'),
|
||||
error=str(res.get('error', ''))))
|
||||
|
||||
if not placed:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
(failed[0]['reason'] if failed else 'UNKNOWN'),
|
||||
f'{name} 계단 {len(steps)}단 전부 접수 실패 — '
|
||||
+ (failed[0]['error'] if failed else '')),
|
||||
'detail': details}
|
||||
|
||||
info = {'card_id': card_obj.card_id, 'symbol_name': name, 'account': p['account'],
|
||||
'total_qty': p['qty'], 'peak': p['trail_peak'],
|
||||
'min_sell_price': p.get('min_sell_price'),
|
||||
'placed': placed, 'failed': failed, 'dry_run': dry_run,
|
||||
'res_id': None, 'register_error': None}
|
||||
|
||||
if not dry_run:
|
||||
registerable = [s for s in placed if s['ord_no']]
|
||||
if not registerable:
|
||||
# 접수는 됐는데 주문번호를 못 받았다 — 감시가 붙을 수 없으니 반드시 알린다.
|
||||
ledger.append('trailing_register_failed',
|
||||
{'card_id': card_obj.card_id, 'error': 'no ord_no', **p})
|
||||
info['register_error'] = '주문번호를 못 받아 감시를 걸지 못했습니다'
|
||||
else:
|
||||
try:
|
||||
res_trl = trailing.register_steps(
|
||||
account=p['account'], symbol=p['symbol'], symbol_name=name,
|
||||
total_qty=p['qty'], peak=p['trail_peak'], steps=registerable,
|
||||
routing_suffix=p['routing_suffix'], card_id=card_obj.card_id,
|
||||
min_sell_price=p.get('min_sell_price'),
|
||||
)
|
||||
info['res_id'] = res_trl['id']
|
||||
except Exception as e:
|
||||
# 주문은 이미 접수됨 — 등록 실패를 숨기면 트레일링이 안 도는 걸 모른다.
|
||||
ledger.append('trailing_register_failed',
|
||||
{'card_id': card_obj.card_id, 'error': repr(e), **p})
|
||||
info['register_error'] = str(e)
|
||||
|
||||
return {'ok': True, 'message': card.format_trailing_submitted(info), 'detail': details}
|
||||
|
||||
|
||||
def _submit_multi_legs(card_obj, dry_run: bool) -> dict:
|
||||
"""multi 카드(propose_trade_multi)의 레그별 키움 제출 — 레그 독립 실행·독립 보고.
|
||||
|
||||
한 레그가 실패해도 나머지 레그는 계속 시도. ok = 한 레그라도 접수 성공.
|
||||
접수된 레그는 각각 fill_watcher 추적 (큐 기반이라 동시 다건 OK).
|
||||
"""
|
||||
p = card_obj.payload
|
||||
submit_order_type = 'LIMIT' if p['order_type'] == 'AGGRESSIVE_LIMIT' else p['order_type']
|
||||
msgs = []
|
||||
details = []
|
||||
any_ok = False
|
||||
for leg in p.get('legs') or []:
|
||||
res = kiwoom_order.submit(
|
||||
account_label=leg['account'],
|
||||
side=p['side'],
|
||||
symbol=p['symbol'],
|
||||
qty=leg['qty'],
|
||||
price=p.get('price'),
|
||||
order_type=submit_order_type,
|
||||
routing_suffix=p['routing_suffix'],
|
||||
dry_run=dry_run,
|
||||
card_id=card_obj.card_id,
|
||||
)
|
||||
details.append(res)
|
||||
acc_disp = card.ACCOUNT_DISPLAY.get(leg['account'], leg['account'])
|
||||
if res['ok']:
|
||||
any_ok = True
|
||||
if dry_run:
|
||||
msgs.append(f'[{acc_disp}] ' + card.format_dryrun(res.get('payload', {})))
|
||||
continue
|
||||
ord_no = res.get('ord_no', '')
|
||||
msgs.append(f'[{acc_disp}] ' + card.format_submitted(
|
||||
card_obj.card_id, p['side'], p.get('symbol_name', p['symbol']),
|
||||
leg['qty'], p.get('price'), ord_no))
|
||||
if ord_no:
|
||||
fill_watcher.watch(
|
||||
ord_no=ord_no, account=leg['account'], side=p['side'],
|
||||
symbol=p['symbol'], symbol_name=p.get('symbol_name', p['symbol']),
|
||||
order_qty=leg['qty'], price=p.get('price'),
|
||||
order_type=p['order_type'], card_id=card_obj.card_id,
|
||||
)
|
||||
else:
|
||||
msgs.append(f'[{acc_disp}] ' + card.format_rejected(
|
||||
res.get('reason', 'UNKNOWN'), str(res.get('error', ''))))
|
||||
return {'ok': any_ok, 'message': '\n'.join(msgs), 'detail': details}
|
||||
|
||||
|
||||
def cancel_active_card() -> dict:
|
||||
sidecar.guard_or_raise()
|
||||
card_obj = _pin_store.cancel()
|
||||
|
||||
@@ -31,6 +31,7 @@ TR_CANCEL = 'kt10003'
|
||||
# 매매구분 코드
|
||||
TRDE_TP_LIMIT = '0' # 보통가 (지정가)
|
||||
TRDE_TP_MARKET = '3' # 시장가
|
||||
TRDE_TP_STOP = '28' # 스톱지정가 — cond_uv(조건단가) 도달 시 ord_uv(지정가)로 발주
|
||||
|
||||
# 거래소 코드 (라우팅 suffix → API 거래소 구분)
|
||||
_EXCHANGE_BY_SUFFIX = {
|
||||
@@ -52,27 +53,38 @@ def _exchange_for(suffix: str) -> str:
|
||||
|
||||
def submit(account_label: str, side: str, symbol: str, qty: int,
|
||||
price: Optional[int], order_type: str, routing_suffix: str,
|
||||
dry_run: bool = True, card_id: Optional[str] = None) -> dict:
|
||||
dry_run: bool = True, card_id: Optional[str] = None,
|
||||
stop_price: Optional[int] = None) -> dict:
|
||||
sidecar.guard_or_raise()
|
||||
|
||||
if side not in ('BUY', 'SELL'):
|
||||
raise ValueError(f'invalid side: {side}')
|
||||
if order_type not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT'):
|
||||
if order_type not in ('LIMIT', 'MARKET', 'AGGRESSIVE_LIMIT', 'STOP_LIMIT'):
|
||||
raise ValueError(f'invalid order_type: {order_type}')
|
||||
if order_type in ('LIMIT', 'AGGRESSIVE_LIMIT') and not price:
|
||||
raise ValueError(f'{order_type} requires price')
|
||||
if order_type == 'STOP_LIMIT' and (not price or not stop_price):
|
||||
raise ValueError('STOP_LIMIT requires price(지정가) and stop_price(조건단가)')
|
||||
|
||||
tr_id = TR_BUY if side == 'BUY' else TR_SELL
|
||||
exchange = _exchange_for(routing_suffix)
|
||||
is_market = order_type == 'MARKET'
|
||||
is_stop = order_type == 'STOP_LIMIT'
|
||||
|
||||
if is_market:
|
||||
trde_tp = TRDE_TP_MARKET
|
||||
elif is_stop:
|
||||
trde_tp = TRDE_TP_STOP
|
||||
else:
|
||||
trde_tp = TRDE_TP_LIMIT
|
||||
|
||||
body = {
|
||||
'dmst_stex_tp': exchange,
|
||||
'stk_cd': symbol,
|
||||
'ord_qty': str(qty),
|
||||
'ord_uv': '' if is_market else str(price),
|
||||
'trde_tp': TRDE_TP_MARKET if is_market else TRDE_TP_LIMIT,
|
||||
'cond_uv': '',
|
||||
'trde_tp': trde_tp,
|
||||
'cond_uv': str(stop_price) if is_stop else '',
|
||||
}
|
||||
|
||||
payload = {
|
||||
@@ -82,6 +94,7 @@ def submit(account_label: str, side: str, symbol: str, qty: int,
|
||||
'symbol': symbol,
|
||||
'qty': qty,
|
||||
'price': price,
|
||||
'stop_price': stop_price if is_stop else None,
|
||||
'order_type': order_type,
|
||||
'routing_suffix': routing_suffix,
|
||||
'exchange': exchange,
|
||||
@@ -199,13 +212,18 @@ def cancel_order(account_label: str, orig_ord_no: str, symbol: str,
|
||||
def modify_order(account_label: str, orig_ord_no: str, symbol: str,
|
||||
modify_qty: int, modify_price: int,
|
||||
routing_suffix: str = '',
|
||||
dry_run: bool = True, card_id: Optional[str] = None) -> dict:
|
||||
dry_run: bool = True, card_id: Optional[str] = None,
|
||||
modify_cond_price: Optional[int] = None) -> dict:
|
||||
"""미체결 주문 정정 (kt10002).
|
||||
|
||||
modify_qty / modify_price 둘 다 필수 — 키움 명세상 mdfy_qty/mdfy_uv 모두 Required.
|
||||
수량만 바꿀 땐 기존 가격, 가격만 바꿀 땐 기존 수량을 그대로 전달.
|
||||
시장가 주문은 정정 불가 (mdfy_uv 가 가격이라 0 불가) — 호출 전에 차단.
|
||||
routing_suffix 는 원주문의 거래소와 동일해야 함.
|
||||
|
||||
modify_cond_price: 스톱지정가(trde_tp=28) 주문의 조건단가 정정용 (mdfy_cond_uv).
|
||||
트레일링 스톱이 고점 갱신 시 조건단가를 올리는 데 사용. 일반 주문은 None.
|
||||
⚠️ 정정 응답의 ord_no 는 신규 주문번호 — 다음 정정은 그 번호를 orig_ord_no 로 써야 함.
|
||||
"""
|
||||
sidecar.guard_or_raise()
|
||||
|
||||
@@ -217,6 +235,8 @@ def modify_order(account_label: str, orig_ord_no: str, symbol: str,
|
||||
raise ValueError(f'modify_qty must be > 0 (got {modify_qty})')
|
||||
if modify_price <= 0:
|
||||
raise ValueError(f'modify_price must be > 0 — 시장가 주문은 정정 불가, 취소 후 신규 발주')
|
||||
if modify_cond_price is not None and modify_cond_price <= 0:
|
||||
raise ValueError(f'modify_cond_price must be > 0 (got {modify_cond_price})')
|
||||
|
||||
exchange = _exchange_for(routing_suffix)
|
||||
body = {
|
||||
@@ -225,7 +245,7 @@ def modify_order(account_label: str, orig_ord_no: str, symbol: str,
|
||||
'stk_cd': symbol,
|
||||
'mdfy_qty': str(modify_qty),
|
||||
'mdfy_uv': str(modify_price),
|
||||
'mdfy_cond_uv': '',
|
||||
'mdfy_cond_uv': str(modify_cond_price) if modify_cond_price else '',
|
||||
}
|
||||
|
||||
payload = {
|
||||
@@ -235,6 +255,7 @@ def modify_order(account_label: str, orig_ord_no: str, symbol: str,
|
||||
'orig_ord_no': orig_ord_no,
|
||||
'modify_qty': modify_qty,
|
||||
'modify_price': modify_price,
|
||||
'modify_cond_price': modify_cond_price,
|
||||
'routing_suffix': routing_suffix,
|
||||
'exchange': exchange,
|
||||
'tr_id': TR_MODIFY,
|
||||
|
||||
@@ -0,0 +1,363 @@
|
||||
"""계단식 트레일링 단위테스트 (2026-07-31).
|
||||
|
||||
세 층을 본다:
|
||||
1. 순수 함수 — 누적→추가 환산, 수량 배분, 계단별 손절선, 상향 판단
|
||||
2. 감시 루프 — 레그 체결/소멸 판정과 알림 (키움 호출은 전부 stub, 상태파일은 임시경로로 격리)
|
||||
3. JS 대조 — 렌더된 페이지의 미리보기 계산이 서버 계산과 같은 값을 내는지 (node 있을 때만)
|
||||
|
||||
3번이 특히 중요하다. 미리보기와 발주값이 어긋나면 관리자님이 본 것과 다른 주문이 나간다.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import random
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from orders import trailing as t
|
||||
|
||||
|
||||
class NormalizeStepsTests(unittest.TestCase):
|
||||
"""입력한 누적 비중 → 내부 추가 비중."""
|
||||
|
||||
def test_cumulative_to_incremental(self):
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
self.assertEqual([s['weight'] for s in st], [20.0, 30.0, 50.0])
|
||||
self.assertEqual([s['n'] for s in st], [1, 2, 3])
|
||||
self.assertEqual([s['pct'] for s in st], [10.0, 20.0, 30.0])
|
||||
|
||||
def test_single_step(self):
|
||||
st = t.normalize_steps([{'pct': 8, 'cum': 100}])
|
||||
self.assertEqual([(s['pct'], s['weight']) for s in st], [(8.0, 100.0)])
|
||||
|
||||
def test_partial_liquidation_allowed(self):
|
||||
"""마지막 누적이 100 미만이어도 통과 — 일부만 계단 청산하고 나머지는 계속 보유."""
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 30}, {'pct': 20, 'cum': 60}])
|
||||
self.assertEqual([s['weight'] for s in st], [30.0, 30.0])
|
||||
|
||||
def test_rejects(self):
|
||||
cases = [
|
||||
('빈 입력', [], '비어'),
|
||||
('계단 초과', [{'pct': i, 'cum': i * 10} for i in range(1, 7)], '최대'),
|
||||
('하락률 역순', [{'pct': 20, 'cum': 30}, {'pct': 10, 'cum': 60}], '깊지 않음'),
|
||||
('하락률 동일', [{'pct': 10, 'cum': 30}, {'pct': 10, 'cum': 60}], '깊지 않음'),
|
||||
('누적 역순', [{'pct': 10, 'cum': 60}, {'pct': 20, 'cum': 30}], '크지 않음'),
|
||||
('누적 100 초과', [{'pct': 10, 'cum': 50}, {'pct': 20, 'cum': 120}], '100'),
|
||||
('하락률 상한 초과', [{'pct': 40, 'cum': 100}], '범위'),
|
||||
('하락률 하한 미만', [{'pct': 0.1, 'cum': 100}], '범위'),
|
||||
]
|
||||
for label, raw, needle in cases:
|
||||
with self.subTest(label):
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
t.normalize_steps(raw)
|
||||
self.assertIn(needle, str(cm.exception))
|
||||
|
||||
|
||||
class AllocateStepQtyTests(unittest.TestCase):
|
||||
"""계단별 주수 배분 — 최대잔여법."""
|
||||
|
||||
def test_exact(self):
|
||||
self.assertEqual(t.allocate_step_qty(100, [20, 30, 50]), [20, 30, 50])
|
||||
self.assertEqual(t.allocate_step_qty(1943, [20, 30, 50]), [389, 583, 971])
|
||||
|
||||
def test_remainder_goes_to_largest_fraction(self):
|
||||
self.assertEqual(t.allocate_step_qty(7, [20, 30, 50]), [1, 2, 4])
|
||||
|
||||
def test_small_qty_keeps_shallow_step_alive(self):
|
||||
"""2주를 3계단에 나누면 [0,1,1] — '마지막에 몰아주기'였다면 [0,0,2]로 1계단만 남는다."""
|
||||
self.assertEqual(t.allocate_step_qty(2, [20, 30, 50]), [0, 1, 1])
|
||||
self.assertEqual(t.allocate_step_qty(1, [20, 30, 50]), [0, 0, 1])
|
||||
self.assertEqual(t.allocate_step_qty(0, [20, 30, 50]), [0, 0, 0])
|
||||
|
||||
def test_sum_preserved_exhaustive(self):
|
||||
"""전량(합 100%) 조합은 배분 합이 정확히 보유수량이어야 한다."""
|
||||
for total in range(1, 400):
|
||||
for w in ([20, 30, 50], [30, 30, 40], [10, 20, 30, 40], [50, 50], [100]):
|
||||
got = t.allocate_step_qty(total, w)
|
||||
self.assertEqual(sum(got), total, f'total={total} w={w} → {got}')
|
||||
self.assertTrue(all(x >= 0 for x in got))
|
||||
|
||||
def test_partial_never_exceeds_holding(self):
|
||||
for total in range(1, 400):
|
||||
self.assertLessEqual(sum(t.allocate_step_qty(total, [30, 30])), total)
|
||||
|
||||
|
||||
class ComputeLevelsTests(unittest.TestCase):
|
||||
def test_step_prices(self):
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
lv = t.compute_step_levels(5000, st)
|
||||
self.assertEqual([x['cond_uv'] for x in lv], [4500, 4000, 3500])
|
||||
self.assertEqual([x['ord_uv'] for x in lv], [4490, 3990, 3490]) # 각 2틱 아래
|
||||
|
||||
def test_float_noise_removed(self):
|
||||
"""5500×(1−30/100) 이 3849.9999999999995 라 int() 가 3849 로 깎고
|
||||
호가내림이 3845 까지 끌어내리던 버그(2026-07-31 수정). 의도는 3850."""
|
||||
self.assertEqual(t.compute_levels(5500, 30)['cond_uv'], 3850)
|
||||
self.assertEqual(t.compute_levels(5500, 10)['cond_uv'], 4950)
|
||||
self.assertEqual(t.compute_levels(4870, 10)['cond_uv'], 4380)
|
||||
|
||||
def test_no_tick_loss_when_exact(self):
|
||||
"""정수로 딱 떨어지는 (고점,폭)은 호가단위 내림 결과와 정확히 같아야 한다."""
|
||||
for peak in range(1000, 300000, 977):
|
||||
for pct in (5, 10, 15, 20, 25, 30):
|
||||
exact = peak * (100 - pct) / 100.0
|
||||
if abs(exact - round(exact)) > 1e-9:
|
||||
continue
|
||||
want = t.floor_to_tick(int(round(exact)))
|
||||
self.assertEqual(t.compute_levels(peak, pct)['cond_uv'], want,
|
||||
f'peak={peak} pct={pct}')
|
||||
|
||||
def test_floor_ties_all_steps_then_they_spread(self):
|
||||
"""최저 매도가는 모든 계단에 같은 하한 → 처음엔 뭉치고, 고점이 오르면 다시 벌어진다.
|
||||
(그래서 주문을 병합하면 안 된다 — 정정만으로는 다시 못 쪼갠다.)"""
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
tied = t.compute_step_levels(5000, st, min_sell_price=4600)
|
||||
self.assertEqual([x['cond_uv'] for x in tied], [4600, 4600, 4600])
|
||||
self.assertTrue(all(x['floor_applied'] for x in tied))
|
||||
spread = t.compute_step_levels(6000, st, min_sell_price=4600)
|
||||
self.assertEqual([x['cond_uv'] for x in spread], [5400, 4800, 4600])
|
||||
|
||||
|
||||
class NextStepLevelsTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
self.res = {'peak': 5000, 'min_sell_price': None,
|
||||
'steps': [dict(s, cond_uv=c, ord_uv=o) for s, c, o in
|
||||
zip(st, [4500, 4000, 3500], [4490, 3990, 3490])]}
|
||||
|
||||
def test_no_new_high(self):
|
||||
for price in (0, 4900, 5000):
|
||||
self.assertIsNone(t.next_step_levels(self.res, price))
|
||||
|
||||
def test_all_steps_raise(self):
|
||||
up = t.next_step_levels(self.res, 6000)
|
||||
self.assertEqual(up['peak'], 6000)
|
||||
self.assertEqual([(s['n'], s['cond_uv']) for s in up['steps']],
|
||||
[(1, 5400), (2, 4800), (3, 4200)])
|
||||
|
||||
def test_peak_updates_even_when_no_step_moves(self):
|
||||
"""호가단위 내림 탓에 올릴 조건단가가 없어도 고점은 갱신돼야 한다(정정 콜은 0)."""
|
||||
res = {'peak': 5000, 'min_sell_price': None,
|
||||
'steps': [{'n': 1, 'pct': 10.0, 'cum': 100.0, 'weight': 100.0,
|
||||
'cond_uv': 4500, 'ord_uv': 4490}]}
|
||||
up = t.next_step_levels(res, 5001)
|
||||
self.assertEqual(up['peak'], 5001)
|
||||
self.assertEqual(up['steps'], [])
|
||||
|
||||
def test_floor_dominant_then_overtaken(self):
|
||||
res = {'peak': 5000, 'min_sell_price': 4600,
|
||||
'steps': [{'n': 1, 'pct': 10.0, 'cum': 100.0, 'weight': 100.0,
|
||||
'cond_uv': 4600, 'ord_uv': 4590}]}
|
||||
self.assertEqual(t.next_step_levels(res, 5050)['steps'], []) # 아직 floor 지배
|
||||
self.assertEqual([(s['n'], s['cond_uv'])
|
||||
for s in t.next_step_levels(res, 5200)['steps']], [(1, 4680)])
|
||||
|
||||
def test_stop_never_moves_down(self):
|
||||
"""무작위 시세에도 손절선은 단조 증가여야 한다 (상향 전용 불변식)."""
|
||||
cur = {'peak': 5000, 'min_sell_price': None,
|
||||
'steps': [{'n': 1, 'pct': 10.0, 'cum': 100.0, 'weight': 100.0,
|
||||
'cond_uv': 4500, 'ord_uv': 4490}]}
|
||||
rnd = random.Random(7)
|
||||
prev = 4500
|
||||
for _ in range(3000):
|
||||
nx = t.next_step_levels(cur, rnd.randint(3000, 9000))
|
||||
if nx is None:
|
||||
continue
|
||||
cur['peak'] = nx['peak']
|
||||
for s in nx['steps']:
|
||||
self.assertGreaterEqual(s['cond_uv'], prev)
|
||||
prev = s['cond_uv']
|
||||
cur['steps'][0]['cond_uv'] = s['cond_uv']
|
||||
|
||||
|
||||
class MonitorFlowTests(unittest.TestCase):
|
||||
"""감시 루프 — 레그 단위 생존 판정·정정·알림. 키움 호출은 stub."""
|
||||
|
||||
def setUp(self):
|
||||
self.tmp = Path(tempfile.mkdtemp()) / 'trailing_stops.json'
|
||||
self._orig = (t.STATE_FILE, t._LOCK_FILE)
|
||||
t.STATE_FILE = self.tmp
|
||||
t._LOCK_FILE = self.tmp.with_suffix('.json.lock')
|
||||
|
||||
import trailing_monitor as tm
|
||||
self.tm = tm
|
||||
self.sent = []
|
||||
self.state = {'open': {}, 'quote': 0, 'execs': [], 'modify': []}
|
||||
self._orig_fns = (tm.kc.get_open_orders, tm.kc.get_watchlist_quotes,
|
||||
tm.kc.get_order_executions, tm.kiwoom_order.modify_order,
|
||||
tm.send_telegram)
|
||||
tm.kc.get_open_orders = lambda acct, side=None: list(self.state['open'].get(acct, []))
|
||||
tm.kc.get_watchlist_quotes = lambda codes, exchange='AL': {
|
||||
c: {'price': self.state['quote']} for c in codes}
|
||||
tm.kc.get_order_executions = lambda acct: list(self.state['execs'])
|
||||
tm.kiwoom_order.modify_order = self._fake_modify
|
||||
tm.send_telegram = lambda msg, parse_mode=None: self.sent.append(msg)
|
||||
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
lv = t.compute_step_levels(5500, st, None)
|
||||
qtys = t.allocate_step_qty(1943, [s['weight'] for s in st])
|
||||
legs = [dict(s, qty=q, ord_no=f'A{s["n"]:04d}') for s, q in zip(lv, qtys)]
|
||||
self.res = t.register_steps(account='일반', symbol='381620',
|
||||
symbol_name='제닉스로보틱스', total_qty=1943,
|
||||
peak=5500, steps=legs)
|
||||
self.state['open']['일반'] = [{'ord_no': s['ord_no'], 'unfilled_qty': s['qty'],
|
||||
'routing_suffix': ''} for s in legs]
|
||||
|
||||
def tearDown(self):
|
||||
(self.tm.kc.get_open_orders, self.tm.kc.get_watchlist_quotes,
|
||||
self.tm.kc.get_order_executions, self.tm.kiwoom_order.modify_order,
|
||||
self.tm.send_telegram) = self._orig_fns
|
||||
t.STATE_FILE, t._LOCK_FILE = self._orig
|
||||
shutil.rmtree(self.tmp.parent, ignore_errors=True)
|
||||
|
||||
def _fake_modify(self, account_label, orig_ord_no, symbol, modify_qty, modify_price,
|
||||
routing_suffix='', dry_run=False, card_id=None, modify_cond_price=None):
|
||||
self.state['modify'].append({'orig': orig_ord_no, 'cond': modify_cond_price})
|
||||
new_no = f'N{len(self.state["modify"]):04d}'
|
||||
for row in self.state['open'].get(account_label, []):
|
||||
if row['ord_no'] == orig_ord_no:
|
||||
row['ord_no'] = new_no # 정정하면 키움이 새 주문번호를 발급한다
|
||||
return {'ok': True, 'new_ord_no': new_no}
|
||||
|
||||
def test_registered_shape(self):
|
||||
r = t.get(self.res['id'])
|
||||
self.assertEqual([s['cond_uv'] for s in r['steps']], [4950, 4400, 3850])
|
||||
self.assertEqual(sum(s['qty'] for s in r['steps']), 1943)
|
||||
|
||||
def test_price_drop_does_nothing(self):
|
||||
self.state['quote'] = 5200
|
||||
self.tm.check(force=True)
|
||||
self.assertEqual(self.state['modify'], [])
|
||||
self.assertEqual(t.get(self.res['id'])['peak'], 5500)
|
||||
self.assertEqual(self.sent, [])
|
||||
|
||||
def test_new_high_raises_every_leg_and_rotates_ord_no(self):
|
||||
self.state['quote'] = 6000
|
||||
self.tm.check(force=True)
|
||||
self.assertEqual([c['cond'] for c in self.state['modify']], [5400, 4800, 4200])
|
||||
r = t.get(self.res['id'])
|
||||
self.assertEqual(r['peak'], 6000)
|
||||
# ord_no 를 갱신하지 않으면 다음 정정이 전부 실패한다 — 최대 함정
|
||||
self.assertEqual([s['ord_no'] for s in r['steps']], ['N0001', 'N0002', 'N0003'])
|
||||
self.assertEqual([s['modify_count'] for s in r['steps']], [1, 1, 1])
|
||||
self.assertEqual(self.sent, []) # 상향은 조용히
|
||||
|
||||
def test_one_leg_fills_others_keep_watching(self):
|
||||
self.state['quote'] = 5500
|
||||
gone = self.state['open']['일반'].pop(0)
|
||||
self.state['execs'] = [{'ord_no': gone['ord_no'], 'cntr_qty': 389, 'cntr_uv': 4948}]
|
||||
self.tm.check(force=True)
|
||||
r = t.get(self.res['id'])
|
||||
self.assertEqual([s['n'] for s in r['steps']], [2, 3])
|
||||
self.assertEqual(len(self.sent), 1)
|
||||
self.assertIn('체결 389주', self.sent[0])
|
||||
self.assertIn('남은 계단 2개', self.sent[0])
|
||||
|
||||
def test_expiry_not_misread_as_fill(self):
|
||||
"""1단계가 체결된 날 나머지가 장 마감으로 소멸 — 종목 매도기록이 있어도 소멸로 갈려야 한다.
|
||||
(종목 단위 ka10170 으로 판정하면 여기서 '체결'로 오판한다.)"""
|
||||
self.state['quote'] = 5500
|
||||
self.state['execs'] = [{'ord_no': 'A0001', 'cntr_qty': 389, 'cntr_uv': 4948}]
|
||||
self.state['open']['일반'] = []
|
||||
self.tm.check(force=True)
|
||||
self.assertIsNone(t.get(self.res['id']))
|
||||
self.assertEqual(len(self.sent), 1) # 레그마다가 아니라 예약 단위 1건
|
||||
self.assertIn('미체결 소멸', self.sent[0])
|
||||
self.assertIn('다시 등록', self.sent[0])
|
||||
|
||||
def test_open_order_query_failure_preserves_reservation(self):
|
||||
"""조회 실패를 '사라짐'으로 단정하면 살아있는 예약을 지운다."""
|
||||
def boom(acct, side=None):
|
||||
raise RuntimeError('조회 실패')
|
||||
self.tm.kc.get_open_orders = boom
|
||||
self.tm.check(force=True)
|
||||
self.assertEqual(len(t.get(self.res['id'])['steps']), 3)
|
||||
self.assertEqual(self.sent, [])
|
||||
|
||||
|
||||
def _node_available() -> bool:
|
||||
return shutil.which('node') is not None
|
||||
|
||||
|
||||
@unittest.skipUnless(_node_available(), 'node 없음 — JS 대조 생략')
|
||||
class JsParityTests(unittest.TestCase):
|
||||
"""렌더된 페이지의 미리보기 계산 == 서버 발주 계산.
|
||||
|
||||
손으로 옮긴 사본이 아니라 실제 페이지에서 함수 소스를 뽑아 돌린다.
|
||||
어긋나면 관리자님이 화면에서 본 것과 다른 주문이 나간다.
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
import behive_web
|
||||
cls.html = behive_web.render_html()
|
||||
|
||||
def _grab(self, name: str) -> str:
|
||||
i = self.html.index(f'function {name}(')
|
||||
depth, j, started = 0, i, False
|
||||
while j < len(self.html):
|
||||
if self.html[j] == '{':
|
||||
depth += 1
|
||||
started = True
|
||||
elif self.html[j] == '}':
|
||||
depth -= 1
|
||||
if started and depth == 0:
|
||||
return self.html[i:j + 1]
|
||||
j += 1
|
||||
raise AssertionError(f'{name} 추출 실패 — 함수명이 바뀌었나?')
|
||||
|
||||
def test_parity(self):
|
||||
src = '\n'.join(self._grab(f) for f in
|
||||
('tickSize', 'floorTick', 'trailCondPrice',
|
||||
'allocStepQty', 'trailWeights'))
|
||||
cond_cases = [{'peak': p, 'pct': c, 'floor': f}
|
||||
for p in (1000, 1943, 4805, 4870, 5500, 12345, 55500, 262500, 1718000)
|
||||
for c in (0.5, 1, 3, 5, 7.5, 10, 15, 20, 25, 30)
|
||||
for f in (0, 4500, 5000, 250000)]
|
||||
qty_cases = [{'total': q, 'w': w}
|
||||
for q in (1, 2, 3, 7, 19, 100, 218, 1395, 1943)
|
||||
for w in ([20, 30, 50], [30, 30, 40], [10, 20, 30, 40],
|
||||
[50, 50], [100], [30, 30])]
|
||||
cum_cases = [[20, 50, 100], [30, 70, 100], [25, 50, 100], [100]]
|
||||
|
||||
js = src + f'''
|
||||
const out = {{
|
||||
cond: {json.dumps(cond_cases)}.map(c => {{
|
||||
const r = trailCondPrice(c.peak, c.pct, c.floor); return [r.cond, r.floorApplied]; }}),
|
||||
qty: {json.dumps(qty_cases)}.map(c => allocStepQty(c.total, c.w)),
|
||||
cum: {json.dumps(cum_cases)}.map(cs => trailWeights(cs.map(x => ({{cum: x}})))),
|
||||
}};
|
||||
console.log(JSON.stringify(out));
|
||||
'''
|
||||
proc = subprocess.run([shutil.which('node'), '-e', js],
|
||||
capture_output=True, text=True)
|
||||
self.assertEqual(proc.returncode, 0, proc.stderr)
|
||||
got = json.loads(proc.stdout)
|
||||
|
||||
for c, (jcond, jfloor) in zip(cond_cases, got['cond']):
|
||||
lv = t.compute_levels(c['peak'], c['pct'], c['floor'] or None)
|
||||
self.assertEqual((lv['cond_uv'], bool(lv['floor_applied'])),
|
||||
(jcond, bool(jfloor)),
|
||||
f"손절선 peak={c['peak']} pct={c['pct']} floor={c['floor']}")
|
||||
for c, jq in zip(qty_cases, got['qty']):
|
||||
self.assertEqual(t.allocate_step_qty(c['total'], c['w']), jq,
|
||||
f"수량배분 total={c['total']} w={c['w']}")
|
||||
for cums, jw in zip(cum_cases, got['cum']):
|
||||
raw = [{'pct': (i + 1) * 3, 'cum': v} for i, v in enumerate(cums)]
|
||||
self.assertEqual([s['weight'] for s in t.normalize_steps(raw)], jw,
|
||||
f'비중환산 {cums}')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
|
||||
unittest.main(verbosity=2)
|
||||
@@ -0,0 +1,401 @@
|
||||
"""트레일링 스톱 예약 상태 관리 (계단식 분할 매도).
|
||||
|
||||
키움에 REST 트레일링 주문 TR 이 없어서, 스톱지정가(trde_tp=28) 주문을 실제로 걸어두고
|
||||
고점이 갱신될 때마다 조건단가를 kt10002 정정으로 올려 트레일링을 구현한다.
|
||||
|
||||
**예약 1건 = 계단(레그) N개 = 키움 스톱주문 N건.** 고점 대비 하락률이 깊어질수록 더 많이
|
||||
파는 계단식 청산이다 (예: −10% 20% / −20% 50% / −30% 전량). 계단별로 수량과 조건단가가
|
||||
다른 스톱주문을 동시에 걸어두고, 고점이 오르면 살아있는 레그를 전부 상향 정정한다.
|
||||
|
||||
주문이 키움 서버에 있으므로 감시 루프가 죽어도 계단별 손절선은 살아있다.
|
||||
감시 루프가 하는 일은 "이미 승인된 주문의 조건단가 상향"뿐 — 신규 발주·수량 변경 없음.
|
||||
|
||||
⚠️ 계단 비중은 관리자님이 **누적**으로 입력하고(20/50/100 = 전량), 내부에는 계단별
|
||||
**추가분**(20/30/50)으로 환산해 저장한다. 주문 수량이 곧 추가분이기 때문이다.
|
||||
|
||||
⚠️ 한 계단이 체결된 뒤 반등해 신고점을 찍어도 **남은 계단만 새 고점 기준으로 따라 올린다**.
|
||||
남은 수량을 계단 비율대로 재배치하려면 기존 주문 취소 + 신규 발주가 필요한데, 그러면
|
||||
감시 루프에 자동 발주 경로가 생긴다(매매 자동 트리거 금지). 2026-07-31 관리자님 결정.
|
||||
|
||||
⚠️ kt10002 정정 응답의 ord_no 는 신규 주문번호다. 정정할 때마다 ord_no 를 갱신하지 않으면
|
||||
두 번째 정정부터 orig_ord_no 가 틀려서 전부 실패한다. commit_step_modify 가 이걸 담당.
|
||||
|
||||
상태는 파일(state/trailing_stops.json)에 저장 — 웹·감시 루프가 각각 다른 프로세스라
|
||||
같은 예약 목록을 봐야 한다. 동시성은 fcntl flock 으로 직렬화 (pin.py 와 같은 패턴).
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import fcntl
|
||||
import json
|
||||
import os
|
||||
import secrets
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
from typing import Optional
|
||||
|
||||
from .guards import tick_size
|
||||
|
||||
WORKSPACE_ROOT = Path(__file__).resolve().parent.parent.parent
|
||||
STATE_FILE = WORKSPACE_ROOT / 'state' / 'trailing_stops.json'
|
||||
|
||||
KST = timezone(timedelta(hours=9))
|
||||
|
||||
# 트레일 폭 허용 범위 (%). 너무 좁으면 정상 출렁임에 즉시 털리고, 너무 넓으면 스톱 의미가 없다.
|
||||
# ⚠️ 상한을 바꾸면 **세 곳**이 같이 움직여야 한다 — 여기(서버 검증) /
|
||||
# behive_web 트레일 폭 드롭다운 옵션 / behive_web `trailBlockReason` 의 범위 체크.
|
||||
# 하나만 고치면 드롭다운에서 고를 수 있는데 서버가 거부하거나 그 반대가 된다.
|
||||
MIN_TRAIL_PCT = 0.5
|
||||
MAX_TRAIL_PCT = 30.0
|
||||
|
||||
# 지정가(ord_uv) = 조건단가(cond_uv) 보다 이 틱수만큼 아래.
|
||||
# 조건단가와 같게 두면 발동 후 그 가격 아래로는 안 팔려 미체결로 남는다.
|
||||
# 반대로 너무 벌리면 급락 시 헐값 매도가 되니 2틱.
|
||||
ORD_UV_GAP_TICKS = 2
|
||||
|
||||
# 계단 개수 상한. 고점이 오를 때마다 살아있는 레그를 전부 정정하므로 정정 콜이 계단 수에
|
||||
# 비례한다 (예약 3건 × 5계단 = 분당 15콜). 키움 rate limit 여유를 보고 5로 둔다.
|
||||
MAX_STEPS = 5
|
||||
|
||||
|
||||
def _now_iso() -> str:
|
||||
return datetime.now(KST).isoformat(timespec='seconds')
|
||||
|
||||
|
||||
def floor_to_tick(price: int) -> int:
|
||||
"""호가단위로 내림. 매도 조건단가·지정가는 내림이 안전(더 빨리 발동/체결)."""
|
||||
t = tick_size(price)
|
||||
return price - (price % t)
|
||||
|
||||
|
||||
def compute_levels(peak: int, trail_pct: float, min_sell_price: Optional[int] = None) -> dict:
|
||||
"""고점·트레일 폭(·최저 매도가) → 조건단가(트리거)·지정가(체결가).
|
||||
|
||||
cond_uv = max(peak × (1 − pct/100), min_sell_price) 를 호가단위 내림
|
||||
ord_uv = cond_uv − ORD_UV_GAP_TICKS 틱
|
||||
|
||||
min_sell_price(최저 매도가) = 손절선의 하한. 트레일 폭을 넓게 잡아도 이 가격 아래로는
|
||||
손절선이 내려가지 않는다 — 초기 구간 손실 제한용. 고점이 올라 트레일 손절선이 이 값을
|
||||
추월하면 그 뒤로는 트레일이 지배한다(최저가는 자연히 무의미해짐).
|
||||
"""
|
||||
if peak <= 0:
|
||||
raise ValueError(f'peak must be > 0 (got {peak})')
|
||||
if not (MIN_TRAIL_PCT <= trail_pct <= MAX_TRAIL_PCT):
|
||||
raise ValueError(f'trail_pct out of range: {trail_pct}')
|
||||
# round(_, 6) 은 부동소수점 잡음만 걷어낸다 — 5500×(1−30/100) 이 3849.9999999999995 로
|
||||
# 나오는 탓에 int() 가 3849 로 깎고 호가단위 내림이 3845 까지 끌어내리던 버그가 있었다
|
||||
# (의도는 3850). 잡음을 없앤 뒤 내림하므로 "정확히 그 폭 아래" 성격은 그대로다.
|
||||
cond_uv = floor_to_tick(int(round(peak * (1 - trail_pct / 100), 6)))
|
||||
floor_applied = False
|
||||
if min_sell_price:
|
||||
if min_sell_price <= 0:
|
||||
raise ValueError(f'min_sell_price must be > 0 (got {min_sell_price})')
|
||||
floor_uv = floor_to_tick(int(min_sell_price))
|
||||
if floor_uv > cond_uv:
|
||||
cond_uv = floor_uv
|
||||
floor_applied = True
|
||||
ord_uv = floor_to_tick(cond_uv - ORD_UV_GAP_TICKS * tick_size(cond_uv))
|
||||
if cond_uv <= 0 or ord_uv <= 0:
|
||||
raise ValueError(f'computed level <= 0 (peak={peak}, pct={trail_pct})')
|
||||
return {'cond_uv': cond_uv, 'ord_uv': ord_uv, 'floor_applied': floor_applied}
|
||||
|
||||
|
||||
def normalize_steps(raw: list) -> list:
|
||||
"""입력한 계단 정의(누적 비중)를 내부 표현(추가 비중)으로 환산·검증한다.
|
||||
|
||||
입력 [{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50}, {'pct': 30, 'cum': 100}]
|
||||
출력 [{'n': 1, 'pct': 10.0, 'cum': 20.0, 'weight': 20.0}, ... weight 30, 50]
|
||||
|
||||
cum(누적 비중)은 "이 하락률에 닿았을 때 최초 보유의 몇 %가 팔려 있어야 하는가"다.
|
||||
주문 수량은 계단마다의 추가분이므로 weight = cum − 직전 cum 으로 환산한다.
|
||||
|
||||
마지막 cum 이 100 미만이어도 허용한다(일부만 계단 청산하고 나머지는 계속 보유).
|
||||
남는 수량은 스톱이 걸리지 않으므로 호출측이 화면에 표시해 준다.
|
||||
"""
|
||||
if not raw:
|
||||
raise ValueError('계단이 비어 있음')
|
||||
if len(raw) > MAX_STEPS:
|
||||
raise ValueError(f'계단은 최대 {MAX_STEPS}개 (입력 {len(raw)}개)')
|
||||
steps = []
|
||||
prev_pct = 0.0
|
||||
prev_cum = 0.0
|
||||
for i, s in enumerate(raw, start=1):
|
||||
pct = float(s['pct'])
|
||||
cum = float(s['cum'])
|
||||
if not (MIN_TRAIL_PCT <= pct <= MAX_TRAIL_PCT):
|
||||
raise ValueError(f'{i}단계 하락률 {pct}% 는 {MIN_TRAIL_PCT}~{MAX_TRAIL_PCT}% 범위를 벗어남')
|
||||
if pct <= prev_pct:
|
||||
raise ValueError(f'{i}단계 하락률 {pct}% 가 앞 계단({prev_pct}%)보다 깊지 않음')
|
||||
if cum <= prev_cum:
|
||||
raise ValueError(f'{i}단계 누적 비중 {cum}% 가 앞 계단({prev_cum}%)보다 크지 않음')
|
||||
if cum > 100:
|
||||
raise ValueError(f'{i}단계 누적 비중 {cum}% 가 100% 를 넘음')
|
||||
steps.append({'n': i, 'pct': pct, 'cum': cum, 'weight': cum - prev_cum})
|
||||
prev_pct, prev_cum = pct, cum
|
||||
return steps
|
||||
|
||||
|
||||
def allocate_step_qty(total_qty: int, weights: list) -> list:
|
||||
"""계단별 추가 비중(%) → 정수 주수. 최대잔여법(Hare quota).
|
||||
|
||||
내림으로 나눈 뒤 남는 주를 소수부가 큰 계단부터 1주씩 배분한다.
|
||||
"내림 후 마지막 계단에 몰아주기" 보다 얕은 계단이 0주로 죽는 일이 적다
|
||||
(2주 · 20/30/50 → 최대잔여 [0,1,1] 2계단 생존 / 몰아주기 [0,0,2] 1계단).
|
||||
|
||||
수량이 적어 0주가 되는 계단은 그대로 0 을 반환한다 — 발주할 수 없으므로
|
||||
호출측이 걸러내고 "몇 계단으로 줄었는지" 를 사용자에게 알린다.
|
||||
"""
|
||||
if total_qty <= 0 or not weights:
|
||||
return [0] * len(weights)
|
||||
exact = [total_qty * w / 100.0 for w in weights]
|
||||
base = [int(x) for x in exact]
|
||||
remain = int(round(sum(exact))) - sum(base)
|
||||
order = sorted(range(len(weights)), key=lambda i: exact[i] - base[i], reverse=True)
|
||||
for i in order[:max(0, remain)]:
|
||||
base[i] += 1
|
||||
return base
|
||||
|
||||
|
||||
def compute_step_levels(peak: int, steps: list, min_sell_price: Optional[int] = None) -> list:
|
||||
"""고점 + 계단 정의 → 계단별 조건단가·지정가.
|
||||
|
||||
최저 매도가는 모든 계단에 같은 하한으로 걸린다. 그래서 초기에는 여러 계단이 같은
|
||||
가격으로 뭉칠 수 있다(전부 최저 매도가). 그래도 주문을 병합하지 않는 이유는, 고점이
|
||||
올라 트레일 손절선이 최저 매도가를 추월하면 각 계단이 제 하락률대로 다시 벌어지기
|
||||
때문이다 — 병합해 버리면 정정만으로는 다시 쪼갤 수 없다(신규 발주가 필요해진다).
|
||||
"""
|
||||
out = []
|
||||
for s in steps:
|
||||
lv = compute_levels(peak, s['pct'], min_sell_price)
|
||||
out.append({**s, 'cond_uv': lv['cond_uv'], 'ord_uv': lv['ord_uv'],
|
||||
'floor_applied': lv['floor_applied']})
|
||||
return out
|
||||
|
||||
|
||||
def next_step_levels(res: dict, cur_price: int) -> Optional[dict]:
|
||||
"""현재가가 고점을 넘었으면 새 고점과 상향 대상 레그를 반환 (순수 함수 — 단위테스트 대상).
|
||||
|
||||
반환 {'peak': 새 고점, 'steps': [{'n', 'cond_uv', 'ord_uv'}, ...]}.
|
||||
고점이 안 올랐으면 None.
|
||||
|
||||
steps 가 빈 리스트일 수 있다 — 고점은 올랐지만 호가단위 내림이나 최저 매도가 지배로
|
||||
조건단가가 하나도 안 올라간 경우다. 이때 호출측은 정정 API 없이 고점만 갱신한다
|
||||
(불필요한 콜 0, 화면의 고점 표시는 정확하게 유지).
|
||||
"""
|
||||
if cur_price <= 0 or cur_price <= res['peak']:
|
||||
return None
|
||||
ups = []
|
||||
for s in res.get('steps') or []:
|
||||
lv = compute_levels(cur_price, s['pct'], res.get('min_sell_price'))
|
||||
if lv['cond_uv'] > s['cond_uv']:
|
||||
ups.append({'n': s['n'], 'cond_uv': lv['cond_uv'], 'ord_uv': lv['ord_uv']})
|
||||
return {'peak': cur_price, 'steps': ups}
|
||||
|
||||
|
||||
class _FileLock:
|
||||
def __init__(self, path: Path):
|
||||
self.path = path
|
||||
self._fp = None
|
||||
|
||||
def __enter__(self):
|
||||
self.path.parent.mkdir(parents=True, exist_ok=True)
|
||||
self._fp = open(self.path, 'w')
|
||||
fcntl.flock(self._fp, fcntl.LOCK_EX)
|
||||
return self
|
||||
|
||||
def __exit__(self, *args):
|
||||
try:
|
||||
fcntl.flock(self._fp, fcntl.LOCK_UN)
|
||||
finally:
|
||||
self._fp.close()
|
||||
|
||||
|
||||
_LOCK_FILE = STATE_FILE.with_suffix(STATE_FILE.suffix + '.lock')
|
||||
|
||||
|
||||
def _read() -> list:
|
||||
if not STATE_FILE.exists():
|
||||
return []
|
||||
try:
|
||||
data = json.loads(STATE_FILE.read_text(encoding='utf-8'))
|
||||
except (OSError, ValueError):
|
||||
return []
|
||||
return data.get('reservations') or []
|
||||
|
||||
|
||||
def _write(reservations: list) -> None:
|
||||
STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
|
||||
tmp = STATE_FILE.with_suffix(STATE_FILE.suffix + '.tmp')
|
||||
tmp.write_text(json.dumps({'reservations': reservations}, ensure_ascii=False, indent=2),
|
||||
encoding='utf-8')
|
||||
os.replace(tmp, STATE_FILE)
|
||||
|
||||
|
||||
def list_active() -> list:
|
||||
"""등록된 예약 전체 (락 없이 읽기 — 감시 루프의 스냅샷용)."""
|
||||
return _read()
|
||||
|
||||
|
||||
def get(res_id: str) -> Optional[dict]:
|
||||
for r in _read():
|
||||
if r['id'] == res_id:
|
||||
return r
|
||||
return None
|
||||
|
||||
|
||||
def find_by_symbol(account: str, symbol: str) -> Optional[dict]:
|
||||
"""같은 계좌·종목의 기존 예약. 중복 등록 차단용."""
|
||||
for r in _read():
|
||||
if r['account'] == account and r['symbol'] == symbol:
|
||||
return r
|
||||
return None
|
||||
|
||||
|
||||
def register_steps(account: str, symbol: str, symbol_name: str, total_qty: int,
|
||||
peak: int, steps: list, routing_suffix: str = '',
|
||||
card_id: Optional[str] = None,
|
||||
min_sell_price: Optional[int] = None) -> dict:
|
||||
"""키움에 계단별 스톱주문이 접수된 직후 호출 — 레그 목록을 예약 1건으로 등록.
|
||||
|
||||
steps 각 항목은 접수 결과까지 채워져 있어야 한다:
|
||||
{'n', 'pct', 'cum', 'weight', 'qty', 'ord_no', 'cond_uv', 'ord_uv'}
|
||||
|
||||
접수에 실패한 레그는 호출측이 빼고 넘긴다 — 여기 등록된 것은 전부 키움에 살아있는
|
||||
주문이어야 감시 루프의 생존 판정이 성립한다.
|
||||
|
||||
초기 고점(peak)은 등록 시점 현재가다. 과거 고점(52주·매수후) 기준 옵션은 손절선이
|
||||
현재가 위로 올라가 즉시 발동하는 구조라 2026-07-30 제거됐다.
|
||||
"""
|
||||
if not steps:
|
||||
raise ValueError('등록할 계단이 없음 — 접수 성공한 레그가 하나도 없다')
|
||||
for s in steps:
|
||||
if not s.get('ord_no'):
|
||||
raise ValueError(f'{s.get("n")}단계 ord_no 없음 — 접수 확인된 주문만 등록')
|
||||
res = {
|
||||
'id': 'TRL-' + ''.join(secrets.choice('ABCDEFGHJKLMNPQRSTUVWXYZ23456789') for _ in range(4)),
|
||||
'account': account,
|
||||
'symbol': symbol,
|
||||
'symbol_name': symbol_name,
|
||||
'qty': total_qty,
|
||||
'min_sell_price': min_sell_price,
|
||||
'peak': peak,
|
||||
'steps': [{'n': s['n'], 'pct': s['pct'], 'cum': s['cum'], 'weight': s['weight'],
|
||||
'qty': s['qty'], 'ord_no': s['ord_no'],
|
||||
'cond_uv': s['cond_uv'], 'ord_uv': s['ord_uv'],
|
||||
'entry_cond_uv': s['cond_uv'], 'modify_count': 0} for s in steps],
|
||||
'routing_suffix': routing_suffix,
|
||||
'card_id': card_id,
|
||||
'created_at': _now_iso(),
|
||||
'updated_at': _now_iso(),
|
||||
'entry_peak': peak,
|
||||
}
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
reservations.append(res)
|
||||
_write(reservations)
|
||||
return res
|
||||
|
||||
|
||||
def commit_peak(res_id: str, peak: int) -> Optional[dict]:
|
||||
"""고점만 갱신 (정정할 레그가 없었던 경우). 화면의 고점 표시를 정확하게 유지한다."""
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for r in reservations:
|
||||
if r['id'] == res_id:
|
||||
r['peak'] = peak
|
||||
r['updated_at'] = _now_iso()
|
||||
_write(reservations)
|
||||
return r
|
||||
return None
|
||||
|
||||
|
||||
def commit_step_modify(res_id: str, step_n: int, new_ord_no: str, peak: int,
|
||||
cond_uv: int, ord_uv: int) -> Optional[dict]:
|
||||
"""레그 정정 성공 후 상태 갱신. new_ord_no 는 kt10002 응답의 신규 주문번호.
|
||||
|
||||
⚠️ ord_no 갱신이 이 함수의 핵심 — 안 하면 그 레그의 다음 정정이 전부 실패한다.
|
||||
고점은 예약 단위라 레그마다 같은 값으로 덮어써도 무해하다.
|
||||
"""
|
||||
if not new_ord_no:
|
||||
raise ValueError('new_ord_no required')
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for r in reservations:
|
||||
if r['id'] != res_id:
|
||||
continue
|
||||
for s in r.get('steps') or []:
|
||||
if s['n'] != step_n:
|
||||
continue
|
||||
s['ord_no'] = new_ord_no
|
||||
s['cond_uv'] = cond_uv
|
||||
s['ord_uv'] = ord_uv
|
||||
s['modify_count'] = s.get('modify_count', 0) + 1
|
||||
r['peak'] = peak
|
||||
r['updated_at'] = _now_iso()
|
||||
_write(reservations)
|
||||
return r
|
||||
return None
|
||||
return None
|
||||
|
||||
|
||||
def remove_step(res_id: str, step_n: int, reason: str = '') -> Optional[dict]:
|
||||
"""레그 하나를 예약에서 제거 (체결·취소·소멸). 마지막 레그면 예약 자체를 지운다.
|
||||
|
||||
반환 {'step': 제거된 레그, 'reservation': 예약 스냅샷, 'remaining': 남은 레그 수,
|
||||
'reservation_removed': bool} — 알림 메시지 조립용.
|
||||
"""
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for i, r in enumerate(reservations):
|
||||
if r['id'] != res_id:
|
||||
continue
|
||||
steps = r.get('steps') or []
|
||||
hit = next((s for s in steps if s['n'] == step_n), None)
|
||||
if hit is None:
|
||||
return None
|
||||
steps.remove(hit)
|
||||
hit['removed_reason'] = reason
|
||||
snapshot = json.loads(json.dumps(r))
|
||||
if not steps:
|
||||
reservations.pop(i)
|
||||
_write(reservations)
|
||||
return {'step': hit, 'reservation': snapshot, 'remaining': 0,
|
||||
'reservation_removed': True}
|
||||
r['updated_at'] = _now_iso()
|
||||
_write(reservations)
|
||||
return {'step': hit, 'reservation': snapshot, 'remaining': len(steps),
|
||||
'reservation_removed': False}
|
||||
return None
|
||||
|
||||
|
||||
def should_notify_failure(res_id: str, now_ts: float, cooldown_sec: int) -> bool:
|
||||
"""정정 실패 알림을 보낼지. 보낸다고 판단하면 그 시점을 기록한다 (락 안에서 원자적).
|
||||
|
||||
NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 실패가 반복된다 —
|
||||
쿨다운 없이 알리면 20:00까지 매분 텔레그램이 쏟아진다.
|
||||
"""
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for r in reservations:
|
||||
if r['id'] != res_id:
|
||||
continue
|
||||
last = r.get('last_fail_notice_ts') or 0
|
||||
if now_ts - last < cooldown_sec:
|
||||
return False
|
||||
r['last_fail_notice_ts'] = now_ts
|
||||
_write(reservations)
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def remove(res_id: str, reason: str = '') -> Optional[dict]:
|
||||
"""예약 종료 (체결·취소·소멸). 반환값은 제거된 예약 — 알림 메시지용."""
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for i, r in enumerate(reservations):
|
||||
if r['id'] == res_id:
|
||||
gone = reservations.pop(i)
|
||||
_write(reservations)
|
||||
gone['removed_reason'] = reason
|
||||
return gone
|
||||
return None
|
||||
@@ -45,6 +45,8 @@ _BACKOFF_MAX = 30.0
|
||||
_MAX_CONN_AGE = 25 * 60
|
||||
# recv 타임아웃 — 이 시간 내 아무것도 안 오면 루프 돌며 stop/age 체크
|
||||
_RECV_TIMEOUT = 5.0
|
||||
# VI 배지 자동 만료 (초) — 해제 1h 메시지 미수신 대비. VI 단일가 2분 + 임의연장 ≤30초 + 여유 30초.
|
||||
_VI_ACTIVE_TTL = 180.0
|
||||
# 장 마감 시간대 대기 — 개장 임박(평일 07:00~08:00)엔 1분, 그 외엔 다음 영업일 07:00까지 자되 6시간 상한.
|
||||
_PREOPEN_POLL_SEC = 60.0 # 개장 임박: 1분마다 → 08:00 개장을 1분 안에 포착
|
||||
_CLOSED_WAIT_CAP = 6 * 3600.0 # 밤·주말·휴장: 다음 개장까지 자되 이 상한(자가교정용 — 날짜 계산 오류 시에도 6h마다 재확인)
|
||||
@@ -68,7 +70,7 @@ class RealtimeHub:
|
||||
def __init__(self, account_label: str | None = None):
|
||||
self._label = account_label or kc._default_account_label()
|
||||
self._lock = threading.Lock()
|
||||
self._quotes: dict[str, dict] = {} # code -> {price, change, pct, ts, exchange}
|
||||
self._quotes: dict[str, dict] = {} # code -> {price, change, pct, open, high, low, ts, exchange}
|
||||
self._vi: dict[str, dict] = {} # code -> {active, kind, trigger_price, ...}
|
||||
self._subs: set[str] = set() # 현재 구독 종목코드(정규화)
|
||||
self._ws: websocket.WebSocket | None = None
|
||||
@@ -97,11 +99,31 @@ class RealtimeHub:
|
||||
def get_vi(self, code: str) -> dict | None:
|
||||
with self._lock:
|
||||
v = self._vi.get(kc._clean_code(code))
|
||||
return dict(v) if v else None
|
||||
return self._vi_expired(v) if v else None
|
||||
|
||||
def active_vis(self) -> dict[str, dict]:
|
||||
with self._lock:
|
||||
return {c: dict(v) for c, v in self._vi.items() if v.get('active')}
|
||||
out = {}
|
||||
for c, v in self._vi.items():
|
||||
ev = self._vi_expired(v)
|
||||
if ev.get('active'):
|
||||
out[c] = ev
|
||||
return out
|
||||
|
||||
@staticmethod
|
||||
def _vi_expired(v: dict) -> dict:
|
||||
"""VI 자동 만료 — 해제(1h) 메시지가 안 오는 경우 대비.
|
||||
VI 단일가는 2분 + 임의연장 ≤30초라, 발동 후 _VI_ACTIVE_TTL 초과 시 읽기 시점에 active=False.
|
||||
저장 상태는 건드리지 않는다(실증·디버깅용 원본 유지)."""
|
||||
ev = dict(v)
|
||||
if ev.get('active') and ev.get('ts'):
|
||||
try:
|
||||
age = (datetime.now(KST) - datetime.fromisoformat(ev['ts'])).total_seconds()
|
||||
if age > _VI_ACTIVE_TTL:
|
||||
ev['active'] = False
|
||||
except Exception:
|
||||
pass
|
||||
return ev
|
||||
|
||||
def is_connected(self) -> bool:
|
||||
return self._connected.is_set()
|
||||
@@ -261,17 +283,23 @@ class RealtimeHub:
|
||||
return
|
||||
self._ws.send(json.dumps(payload))
|
||||
|
||||
@staticmethod
|
||||
def _al(codes: list[str]) -> list[str]:
|
||||
# 통합(SOR) 거래소코드 `_AL` 접미사 — 정규장 KRX 체결 + NXT 시간대 NXT 체결을
|
||||
# 한 구독으로 수신. bare 코드는 KRX 단독이라 NXT(15:30~20:00)에 시세가 끊긴다. (PDF 0B/1h 스펙)
|
||||
return [f'{c}_AL' for c in codes]
|
||||
|
||||
def _send_reg(self, codes: list[str]) -> None:
|
||||
# 0B(체결) + 1h(VI) 동시 등록. refresh=1 → 기존 구독 유지하며 추가.
|
||||
self._send({
|
||||
'trnm': 'REG', 'grp_no': '1', 'refresh': '1',
|
||||
'data': [{'item': codes, 'type': ['0B', '1h']}],
|
||||
'data': [{'item': self._al(codes), 'type': ['0B', '1h']}],
|
||||
})
|
||||
|
||||
def _send_remove(self, codes: list[str]) -> None:
|
||||
self._send({
|
||||
'trnm': 'REMOVE', 'grp_no': '1',
|
||||
'data': [{'item': codes, 'type': ['0B', '1h']}],
|
||||
'data': [{'item': self._al(codes), 'type': ['0B', '1h']}],
|
||||
})
|
||||
|
||||
# ---- 수신 처리 ----
|
||||
@@ -302,7 +330,9 @@ class RealtimeHub:
|
||||
|
||||
def _handle_real(self, blk: dict) -> None:
|
||||
typ = blk.get('type')
|
||||
code = kc._clean_code(blk.get('item') or '')
|
||||
# 통합(_AL)·NXT(_NX) 구독은 item이 `039490_AL` 형태로 echo됨 → 거래소 접미사를 떼고
|
||||
# bare 코드로 저장해야 get_quotes(bare) 매칭이 유지된다. 키움 종목코드엔 '_'가 없다.
|
||||
code = kc._clean_code((blk.get('item') or '').split('_')[0])
|
||||
vals = blk.get('values') or {}
|
||||
if not code:
|
||||
return
|
||||
@@ -312,21 +342,32 @@ class RealtimeHub:
|
||||
'price': _abs_int(vals.get('10')),
|
||||
'change': kc._to_int(vals.get('11')),
|
||||
'pct': kc._to_float(vals.get('12')),
|
||||
'open': _abs_int(vals.get('16')), # 시가
|
||||
'high': _abs_int(vals.get('17')), # 고가
|
||||
'low': _abs_int(vals.get('18')), # 저가
|
||||
'volume': _abs_int(vals.get('13')), # 누적거래량 (RVOL 배지용)
|
||||
'exchange': (vals.get('9081') or '').strip(),
|
||||
'ts': datetime.now(KST).isoformat(),
|
||||
}
|
||||
elif typ == '1h': # VI 발동/해제
|
||||
# active 판정: 9068 VI발동구분. 해제시각(1224) 유무와 함께 실증 확인 예정(A단계).
|
||||
# 매핑 실증 완료 (2026-06-12 사이드카 날 VI 폭주 ~1,000건 관찰):
|
||||
# - 9068 = VI 종류 (1=정적, 2=동적, 3=동적+정적) — 발동/해제 구분 아님
|
||||
# - 1223 = 발동시각, 1224 = 해제시각. 발동 이벤트는 1224='000000', 해제 이벤트는 시각이 참
|
||||
# - 1h는 구독 무관 시장 전역 broadcast (모든 종목 VI가 들어옴)
|
||||
# 해제 메시지 유실 대비 백스톱으로 읽기 시점 TTL(_vi_expired)은 유지.
|
||||
kind_raw = (vals.get('9068') or '').strip()
|
||||
release_t = (vals.get('1224') or '').strip()
|
||||
with self._lock:
|
||||
self._vi[code] = {
|
||||
'active': kind_raw not in ('', '0', '2'), # ⚠️ 매핑 실증 확인 필요
|
||||
'vi_gubun': kind_raw,
|
||||
'active': release_t in ('', '000000'), # 해제시각 없음 = 발동 중
|
||||
'vi_gubun': kind_raw, # VI 종류 (1정적/2동적/3동적+정적)
|
||||
'apply_kind': (vals.get('1225') or '').strip(), # 정적/동적/동적+정적
|
||||
'trigger_price': _abs_int(vals.get('1221')),
|
||||
'trigger_pct': kc._to_float(vals.get('1489')),
|
||||
'release_time': (vals.get('1224') or '').strip(),
|
||||
'trigger_time': (vals.get('1223') or '').strip(),
|
||||
'release_time': release_t,
|
||||
'direction': (vals.get('9069') or '').strip(),
|
||||
'count': kc._to_int(vals.get('1490')), # 당일 VI 발동 횟수
|
||||
'ts': datetime.now(KST).isoformat(),
|
||||
}
|
||||
|
||||
|
||||
@@ -1,7 +1,8 @@
|
||||
#!/usr/bin/env python3
|
||||
"""매월 1일 04:30 — 본인 계좌 잔액을 골디 inbox에 envelope로 떨어뜨린다.
|
||||
"""매월 1일 04:30 — 본인+가희 계좌 잔액을 골디 inbox에 envelope로 떨어뜨린다.
|
||||
|
||||
가희 계좌는 제외 (label prefix '가희_'). 본인 계좌별 평가액(kt00018)·예수금(kt00001)·총자산을 집계.
|
||||
소유자별(본인 self / 가희 gahee, label prefix '가희_'로 판별)로 평가액(kt00018)·예수금(kt00001)·
|
||||
총자산을 집계해 payload.by_owner에 담는다. 골디는 self→증권(효원), gahee→증권(가희)로 reconcile.
|
||||
LLM 불필요 — launchd로 실행. 실패 시 레이 텔레그램으로 자가 알림.
|
||||
"""
|
||||
from __future__ import annotations
|
||||
@@ -26,7 +27,7 @@ INBOX_DIR = Path('/Users/snowoyh/.openclaw/agents/budget/inbox/incoming')
|
||||
CONFIG_PATH = Path('/Users/snowoyh/.openclaw/openclaw.json')
|
||||
TELEGRAM_ACCOUNT = 'stock'
|
||||
TOPIC = 'securities_balance'
|
||||
SCHEMA_VERSION = 1
|
||||
SCHEMA_VERSION = 2
|
||||
GAHEE_PREFIX = '가희_'
|
||||
|
||||
|
||||
@@ -60,13 +61,12 @@ def send_telegram(text: str) -> bool:
|
||||
return ok
|
||||
|
||||
|
||||
def collect_owner_accounts() -> list[dict]:
|
||||
def collect_accounts() -> list[dict]:
|
||||
accounts = kw.list_accounts()
|
||||
out = []
|
||||
for a in accounts:
|
||||
label = a['label']
|
||||
if label.startswith(GAHEE_PREFIX):
|
||||
continue
|
||||
owner = 'gahee' if label.startswith(GAHEE_PREFIX) else 'self'
|
||||
balance = kw.get_balance(label)
|
||||
positions = kw.get_positions(label)
|
||||
eval_amount = sum(p.get('evlt_amt', 0) for p in positions)
|
||||
@@ -75,6 +75,7 @@ def collect_owner_accounts() -> list[dict]:
|
||||
deposit = balance.get('d2_entra', 0)
|
||||
out.append({
|
||||
'label': label,
|
||||
'owner': owner,
|
||||
'account_no': a.get('account_no', ''),
|
||||
'deposit': deposit,
|
||||
'eval_amount': eval_amount,
|
||||
@@ -86,6 +87,12 @@ def collect_owner_accounts() -> list[dict]:
|
||||
|
||||
def build_message(accounts: list[dict]) -> dict:
|
||||
now = datetime.now(KST)
|
||||
by_owner: dict[str, dict] = {}
|
||||
for a in accounts:
|
||||
o = by_owner.setdefault(a['owner'], {'deposit': 0, 'eval_amount': 0, 'total': 0})
|
||||
o['deposit'] += a['deposit']
|
||||
o['eval_amount'] += a['eval_amount']
|
||||
o['total'] += a['total']
|
||||
return {
|
||||
'message_id': str(uuid.uuid4()),
|
||||
'from': 'stock',
|
||||
@@ -95,8 +102,9 @@ def build_message(accounts: list[dict]) -> dict:
|
||||
'schema_version': SCHEMA_VERSION,
|
||||
'payload': {
|
||||
'as_of': now.strftime('%Y-%m-%d'),
|
||||
'owner_scope': 'self_only',
|
||||
'owner_scope': 'self_and_gahee',
|
||||
'accounts': accounts,
|
||||
'by_owner': by_owner,
|
||||
'totals': {
|
||||
'deposit': sum(a['deposit'] for a in accounts),
|
||||
'eval_amount': sum(a['eval_amount'] for a in accounts),
|
||||
@@ -117,9 +125,9 @@ def write_message(msg: dict) -> Path:
|
||||
|
||||
def main() -> int:
|
||||
try:
|
||||
accounts = collect_owner_accounts()
|
||||
accounts = collect_accounts()
|
||||
if not accounts:
|
||||
raise RuntimeError('본인 계좌 0개 — 자격증명 또는 prefix 필터 점검 필요')
|
||||
raise RuntimeError('계좌 0개 — 자격증명 점검 필요')
|
||||
msg = build_message(accounts)
|
||||
path = write_message(msg)
|
||||
total = msg['payload']['totals']['total']
|
||||
|
||||
@@ -18,6 +18,7 @@ from __future__ import annotations
|
||||
|
||||
import json
|
||||
import os
|
||||
import re
|
||||
import sys
|
||||
import subprocess
|
||||
import threading
|
||||
@@ -47,7 +48,7 @@ REPORTS_DIR.mkdir(parents=True, exist_ok=True)
|
||||
PROMPT_FILE = WORKSPACE / 'prompts' / 'stock_analysis.md'
|
||||
ALIAS_FILE = WORKSPACE / 'prompts' / 'name_aliases.json'
|
||||
|
||||
LLM_MODEL = 'openai-codex/gpt-5.5'
|
||||
LLM_MODEL = 'openai/gpt-5.5'
|
||||
LLM_TIMEOUT_SEC = 120
|
||||
|
||||
|
||||
@@ -61,6 +62,59 @@ def now_kst() -> datetime:
|
||||
return datetime.now()
|
||||
|
||||
|
||||
def session_vol_frac(candles_asc: list[dict]) -> float | None:
|
||||
"""마지막 봉이 오늘·정규장(09:00~15:30) 진행형이면 세션경과 비율(0.15~1.0), 아니면 None.
|
||||
장중 누적 거래량을 하루치로 환산(RVOL·회전율)하는 분모. 휴장/주말은 오늘 봉이 없어 자연 배제.
|
||||
NXT(15:30~) 시간대는 KRX 마감 후라 완성봉 취급(None)."""
|
||||
if not candles_asc:
|
||||
return None
|
||||
now = now_kst()
|
||||
if candles_asc[-1].get('date') != now.strftime('%Y%m%d'):
|
||||
return None
|
||||
hm = now.hour * 60 + now.minute
|
||||
if not (9 * 60 <= hm < 15 * 60 + 30):
|
||||
return None
|
||||
return min(1.0, max(0.15, (hm - 9 * 60) / 390.0)) # 09:00~15:30 = 390분
|
||||
|
||||
|
||||
def turnover_today(candles_asc: list[dict], vol_time_frac: float | None = None) -> tuple[float | None, bool]:
|
||||
"""오늘 회전율(%)과 장중환산 여부. 마지막 봉 turnover_rate 우선, 없으면 최근 완성봉에서
|
||||
상장주식수 역산 → 오늘 거래량으로 산출. vol_time_frac 있으면 오늘 누적을 하루치로 투영('예상').
|
||||
데이터 없으면 (None, scaled)."""
|
||||
if not candles_asc:
|
||||
return None, False
|
||||
scaled = bool(vol_time_frac and 0 < vol_time_frac < 1.0)
|
||||
vols = [c.get('volume') or 0 for c in candles_asc]
|
||||
today_v = vols[-1] if vols else 0
|
||||
proj_v = (today_v / vol_time_frac) if scaled and today_v else today_v
|
||||
last_c = candles_asc[-1]
|
||||
if last_c.get('turnover_rate') and not scaled:
|
||||
return last_c['turnover_rate'], scaled
|
||||
for c in reversed(candles_asc[:-1]):
|
||||
tr, cv = c.get('turnover_rate'), c.get('volume')
|
||||
if tr and cv:
|
||||
listed = cv / (tr / 100.0)
|
||||
return (proj_v / listed * 100.0, scaled) if listed > 0 else (None, scaled)
|
||||
return None, scaled
|
||||
|
||||
|
||||
def rvol_today(candles_asc: list[dict], vol_time_frac: float | None = None) -> tuple[float | None, bool]:
|
||||
"""상대거래량(RVOL) = 오늘 거래량 ÷ 직전 20거래일 평균, 장중환산 여부.
|
||||
vol_time_frac 있으면 오늘 누적을 하루치로 투영('예상'). 데이터<21봉이면 (None, scaled)."""
|
||||
if not candles_asc:
|
||||
return None, False
|
||||
scaled = bool(vol_time_frac and 0 < vol_time_frac < 1.0)
|
||||
vols = [c.get('volume') or 0 for c in candles_asc]
|
||||
if len(vols) < 21:
|
||||
return None, scaled
|
||||
avg20 = sum(vols[-21:-1]) / 20.0
|
||||
if avg20 <= 0:
|
||||
return None, scaled
|
||||
today_v = vols[-1]
|
||||
proj_v = (today_v / vol_time_frac) if scaled and today_v else today_v
|
||||
return proj_v / avg20, scaled
|
||||
|
||||
|
||||
def ts_for_filename() -> str:
|
||||
return now_kst().strftime('%Y-%m-%d_%H-%M-%S')
|
||||
|
||||
@@ -117,6 +171,7 @@ def collect_snapshot(code: str, holding: dict | None = None) -> dict:
|
||||
sma5 = sma(closes, 5)
|
||||
sma20 = sma(closes, 20)
|
||||
sma60 = sma(closes, 60)
|
||||
sma120 = sma(closes, 120)
|
||||
|
||||
flow = kc.get_investor_flow(code, days=20)
|
||||
flow_summary = _summarize_flow(flow)
|
||||
@@ -137,6 +192,7 @@ def collect_snapshot(code: str, holding: dict | None = None) -> dict:
|
||||
'sma5': sma5,
|
||||
'sma20': sma20,
|
||||
'sma60': sma60,
|
||||
'sma120': sma120,
|
||||
'flow': flow,
|
||||
'flow_summary': flow_summary,
|
||||
'holding': holding,
|
||||
@@ -529,7 +585,7 @@ def remove_peer(stock_code: str, peer_code: str) -> bool:
|
||||
# ============================================================================
|
||||
|
||||
CHART_W = 1000
|
||||
CHART_H = 720 # crosshair 박스 영역(상단) + X축 날짜 라벨 영역 확보
|
||||
CHART_H = 660 # X축 날짜 라벨 아래 여백 최소화 (라벨 baseline VOL_BOT+26=642)
|
||||
CHART_PAD_L = 20 # 좌측 라벨 없음 (가격 라벨 우측으로 이동)
|
||||
CHART_PAD_R = 140 # 우측 가격·거래량 라벨 영역 (28px 폰트 = 6자리+쉼표 약 140px)
|
||||
CHART_PAD_T = 60 # SMA legend 영역 (y=4~50). OHLC 팝업은 차트 안 floating tooltip.
|
||||
@@ -543,13 +599,21 @@ VOL_TOP = PRICE_BOT + PANEL_GAP
|
||||
VOL_BOT = VOL_TOP + VOL_PANEL_H
|
||||
|
||||
|
||||
CHART_RANGE_DAYS = {'1Y': 250, '6M': 120, '1M': 21}
|
||||
CHART_RANGE_DAYS = {'1Y': 250, '6M': 120, '3M': 63, '1M': 21}
|
||||
|
||||
# 사용자 수평선 색상 팔레트 — 정렬(내림차순) 인덱스로 순환. SVG·칩 UI가 같은 매핑 사용.
|
||||
# 모두 밝은 톤이라 태그 위 어두운 글자(#1a0f1f) 가독성 확보.
|
||||
HLINE_COLORS = ['#e879f9', '#38bdf8', '#fbbf24', '#4ade80', '#fb7185', '#a78bfa', '#22d3ee', '#facc15']
|
||||
|
||||
|
||||
def render_svg_chart(snap: dict, range_key: str = '1Y') -> str:
|
||||
"""캔들 + SMA 3선 + 거래량 막대 인라인 SVG.
|
||||
def render_svg_chart(snap: dict, range_key: str = '1Y', ref_price: float | None = None,
|
||||
intraday: bool = False, hlines: list | None = None) -> str:
|
||||
"""캔들 + SMA 3선 + 거래량 막대(+일봉 20일 거래량 이동평균선) 인라인 SVG.
|
||||
|
||||
range_key: '1Y' (250일) | '6M' (120일) | '1M' (21일). 같은 snapshot 데이터에서 슬라이스만.
|
||||
range_key: '1Y' (250일) | '6M' (120일) | '3M' (63일) | '1M' (21일). 같은 snapshot 데이터에서 슬라이스만.
|
||||
ref_price: 기준가(전일종가 등) — 지정 시 노란 점선 기준선 + 마지막 종가의 대비 등락률 표시 (분봉용).
|
||||
hlines: 사용자가 등록한 수평선 가격 리스트(지지/저항 등). 표시 구간 안에 드는 값만 그린다(스케일 미확장).
|
||||
회전율 값은 차트에 그리지 않고 caller가 turnover_today()로 별도 표시 (차트 아래).
|
||||
snap: collect_snapshot 결과. candles_asc·sma5/20/60 사용.
|
||||
외부 JS 의존성 0. CSS는 inline.
|
||||
"""
|
||||
@@ -562,14 +626,18 @@ def render_svg_chart(snap: dict, range_key: str = '1Y') -> str:
|
||||
sma5 = (snap.get('sma5') or [])[-n_take:]
|
||||
sma20 = (snap.get('sma20') or [])[-n_take:]
|
||||
sma60 = (snap.get('sma60') or [])[-n_take:]
|
||||
sma120 = (snap.get('sma120') or [])[-n_take:]
|
||||
|
||||
# ---- 스케일 ----
|
||||
highs = [c['high'] for c in candles]
|
||||
lows = [c['low'] for c in candles]
|
||||
# SMA 값도 가격축 범위에 포함 (선이 잘리지 않도록)
|
||||
sma_vals = [v for v in (sma5 + sma20 + sma60) if v is not None]
|
||||
sma_vals = [v for v in (sma5 + sma20 + sma60 + sma120) if v is not None]
|
||||
y_max = max(max(highs), max(sma_vals) if sma_vals else 0)
|
||||
y_min = min(min(lows), min(sma_vals) if sma_vals else float('inf'))
|
||||
if ref_price:
|
||||
y_max = max(y_max, ref_price) # 기준선이 항상 보이게 스케일에 포함
|
||||
y_min = min(y_min, ref_price)
|
||||
if y_min == y_max:
|
||||
y_max = y_min + 1
|
||||
# 위·아래 패딩 5%
|
||||
@@ -607,6 +675,8 @@ def render_svg_chart(snap: dict, range_key: str = '1Y') -> str:
|
||||
],
|
||||
'ymin': y_min,
|
||||
'ymax': y_max,
|
||||
# 분봉일 때만 전일종가(ref_price) — 크로스헤어 툴팁의 '전일대비 등락률'용 (현재 등락율과 일치).
|
||||
'prevClose': (int(ref_price) if (intraday and ref_price) else 0),
|
||||
'priceTop': PRICE_TOP,
|
||||
'priceBot': PRICE_BOT,
|
||||
'volTop': VOL_TOP,
|
||||
@@ -695,19 +765,32 @@ def render_svg_chart(snap: dict, range_key: str = '1Y') -> str:
|
||||
parts.append(sma_path(sma5, '#fbbf24', 'SMA5')) # 노랑
|
||||
parts.append(sma_path(sma20, '#34d399', 'SMA20')) # 초록
|
||||
parts.append(sma_path(sma60, '#a78bfa', 'SMA60')) # 보라
|
||||
parts.append(sma_path(sma120, '#22d3ee', 'SMA120')) # 청록
|
||||
|
||||
# ---- 전일종가 기준선 + 대비 등락률 (ref_price 지정 시 — 분봉) ----
|
||||
if ref_price:
|
||||
ry = price_y(ref_price)
|
||||
parts.append(
|
||||
f'<line x1="{CHART_PAD_L}" y1="{ry:.1f}" x2="{CHART_W-CHART_PAD_R}" y2="{ry:.1f}" '
|
||||
f'stroke="#eab308" stroke-width="1.5" stroke-dasharray="7 5" opacity="0.85"/>'
|
||||
)
|
||||
parts.append(
|
||||
f'<text x="{CHART_W - CHART_PAD_R + 6}" y="{ry-4:.1f}" text-anchor="start" fill="#eab308" font-size="24">전일</text>'
|
||||
)
|
||||
# 우상단 '전일대비 X%' 텍스트는 제거(관리자 요청) — 전일종가 기준선만 유지.
|
||||
|
||||
# SMA 범례
|
||||
legend_y = PRICE_TOP + 14
|
||||
legend_items = [('SMA5', '#fbbf24'), ('SMA20', '#34d399'), ('SMA60', '#a78bfa')]
|
||||
legend_items = [('5일', '#fbbf24'), ('20일', '#34d399'), ('60일', '#a78bfa'), ('120일', '#22d3ee')]
|
||||
lx = CHART_PAD_L + 8
|
||||
for name, color in legend_items:
|
||||
parts.append(
|
||||
f'<rect x="{lx}" y="{legend_y-8}" width="10" height="3" fill="{color}"/>'
|
||||
)
|
||||
parts.append(
|
||||
f'<text x="{lx+14}" y="{legend_y-2}" fill="#cfd5df">{name}</text>'
|
||||
f'<text x="{lx+14}" y="{legend_y-2}" fill="#cfd5df" font-size="20">{name}</text>'
|
||||
)
|
||||
lx += 70
|
||||
lx += 96
|
||||
|
||||
# ---- 거래량 패널 배경 ----
|
||||
parts.append(
|
||||
@@ -728,12 +811,30 @@ def render_svg_chart(snap: dict, range_key: str = '1Y') -> str:
|
||||
f'<rect x="{x-body_w/2:.2f}" y="{bar_top:.2f}" width="{body_w:.2f}" height="{bar_h:.2f}" '
|
||||
f'fill="{color}" opacity="0.7"/>'
|
||||
)
|
||||
# 거래량 20일 이동평균선 — 일봉에서만 (분봉은 '20분 평균'이 돼 의미 없음)
|
||||
vols_full = [c['volume'] for c in candles_full]
|
||||
if not intraday:
|
||||
vma = (sma(vols_full, 20))[-n_take:]
|
||||
vma_pts = [f'{slot_x(i):.2f},{vol_y(v):.2f}' for i, v in enumerate(vma) if v is not None]
|
||||
if len(vma_pts) >= 2:
|
||||
parts.append(
|
||||
f'<polyline points="{" ".join(vma_pts)}" fill="none" stroke="#f5a623" '
|
||||
f'stroke-width="2" opacity="0.9"/>'
|
||||
)
|
||||
|
||||
# 거래량 Y 레이블 (max 만) — 우측
|
||||
parts.append(
|
||||
f'<text x="{CHART_W - CHART_PAD_R + 6}" y="{VOL_TOP+22}" text-anchor="start" fill="#7a8493" font-size="28">'
|
||||
f'{_fmt_vol(v_max)}</text>'
|
||||
)
|
||||
|
||||
# 20MA 범례 (거래량 패널 하단 좌측) — 일봉 전용. RVOL·회전율 텍스트는 차트에 안 그림(차트 아래 표시).
|
||||
if not intraday:
|
||||
parts.append(
|
||||
f'<text x="{CHART_PAD_L+8}" y="{VOL_BOT-8}" text-anchor="start" fill="#f5a623" font-size="24">'
|
||||
f'— 거래량 20일평균</text>'
|
||||
)
|
||||
|
||||
# ---- X축 날짜 (시작·중간·끝) ----
|
||||
for i in (0, n // 2, n - 1):
|
||||
x = slot_x(i)
|
||||
@@ -744,6 +845,64 @@ def render_svg_chart(snap: dict, range_key: str = '1Y') -> str:
|
||||
f'{_fmt_date(candles[i]["date"])}</text>'
|
||||
)
|
||||
|
||||
# ---- 구간 고점선 + 현재가 태그 (고점·현재가 강조) ----
|
||||
# 고점: 표시 구간 내 최고 고가에 노란 점선 + 우측 '고 N' 라벨.
|
||||
hi_price = max(highs)
|
||||
hy = price_y(hi_price)
|
||||
parts.append(
|
||||
f'<line x1="{CHART_PAD_L}" y1="{hy:.1f}" x2="{CHART_W-CHART_PAD_R}" y2="{hy:.1f}" '
|
||||
f'stroke="#fbbf24" stroke-width="1" stroke-dasharray="4 4" opacity="0.55"/>'
|
||||
)
|
||||
# 고가 금액 — 가격패널 좌하단 안 (구간별 최고 고가). 상단 우측 대신 아래로 이동.
|
||||
parts.append(
|
||||
f'<text x="{CHART_PAD_L + 8}" y="{PRICE_BOT - 10:.1f}" text-anchor="start" fill="#fbbf24" '
|
||||
f'font-size="26" font-weight="600">고가 {int(round(hi_price)):,}</text>'
|
||||
)
|
||||
# 현재가(마지막 종가): 얇은 기준선 + 우측 축 강조 태그(상승=빨강/하락=파랑).
|
||||
cur_price = candles[-1]['close']
|
||||
cy = price_y(cur_price)
|
||||
last_up = candles[-1]['close'] >= candles[-1]['open']
|
||||
cur_color = '#ef4444' if last_up else '#3b82f6'
|
||||
parts.append(
|
||||
f'<line x1="{CHART_PAD_L}" y1="{cy:.1f}" x2="{CHART_W-CHART_PAD_R}" y2="{cy:.1f}" '
|
||||
f'stroke="{cur_color}" stroke-width="1" stroke-dasharray="2 3" opacity="0.5"/>'
|
||||
)
|
||||
tag_cy = min(max(cy, PRICE_TOP + 15), PRICE_BOT - 15)
|
||||
parts.append(
|
||||
f'<rect x="{CHART_W - CHART_PAD_R + 2}" y="{tag_cy-15:.1f}" width="{CHART_PAD_R-6}" height="30" '
|
||||
f'fill="{cur_color}" rx="3"/>'
|
||||
)
|
||||
parts.append(
|
||||
f'<text x="{CHART_W - CHART_PAD_R + 8}" y="{tag_cy+8:.1f}" text-anchor="start" fill="#fff" '
|
||||
f'font-size="26" font-weight="700">{int(round(cur_price)):,}</text>'
|
||||
)
|
||||
|
||||
# ---- 사용자 수평선 (hlines) — 지지/저항 등 수동 등록 가격선 ----
|
||||
# 표시 구간(y_min~y_max) 안에 드는 값만 그린다. 스케일은 확장하지 않음(캔들 가독성 우선).
|
||||
# 좌측에 분홍 가격 태그를 둔다(우측은 가격축·현재가 태그가 이미 점유).
|
||||
for _hi, hp in enumerate(hlines or []):
|
||||
try:
|
||||
hp = float(hp)
|
||||
except (TypeError, ValueError):
|
||||
continue
|
||||
if hp < y_min or hp > y_max:
|
||||
continue
|
||||
hcolor = HLINE_COLORS[_hi % len(HLINE_COLORS)]
|
||||
hly = price_y(hp)
|
||||
parts.append(
|
||||
f'<line x1="{CHART_PAD_L}" y1="{hly:.1f}" x2="{CHART_W-CHART_PAD_R}" y2="{hly:.1f}" '
|
||||
f'stroke="{hcolor}" stroke-width="1.6" stroke-dasharray="6 4" opacity="0.9"/>'
|
||||
)
|
||||
htag_y = min(max(hly, PRICE_TOP + 15), PRICE_BOT - 15)
|
||||
parts.append(
|
||||
f'<rect x="{CHART_PAD_L+2}" y="{htag_y-15:.1f}" width="122" height="30" '
|
||||
f'fill="{hcolor}" rx="3" opacity="0.95"/>'
|
||||
)
|
||||
parts.append(
|
||||
f'<text x="{CHART_PAD_L+8}" y="{htag_y+8:.1f}" text-anchor="start" fill="#1a0f1f" '
|
||||
f'font-size="26" font-weight="700">{int(round(hp)):,}</text>'
|
||||
)
|
||||
|
||||
parts.append('</svg>')
|
||||
return ''.join(parts)
|
||||
|
||||
@@ -841,7 +1000,7 @@ def _build_data_block(snap: dict) -> str:
|
||||
lines.append(f'### 종목: {snap["name"]} ({snap["code"]})')
|
||||
lines.append(f'- 현재가: {b["price"]:,}원 ({b["change"]:+,} / {b["change_pct"]:+.2f}%)')
|
||||
lines.append(f'- 오늘 시고저: 시 {b["open"]:,} / 고 {b["high"]:,} / 저 {b["low"]:,}')
|
||||
lines.append(f'- 시가총액: {b["market_cap"]:,} (단위 키움원본) · 상장주식수: {b["listed_shares"]:,}주')
|
||||
lines.append(f'- 시가총액: {_fmt_market_cap(b["market_cap"])} · 상장주식수: {b["listed_shares"]:,}주')
|
||||
lines.append(f'- 52주 고저: 고 {b["high_52w"]:,}원 ({_fmt_date(b["high_52w_dt"])}) / 저 {b["low_52w"]:,}원 ({_fmt_date(b["low_52w_dt"])})')
|
||||
lines.append(f'- 회전율(오늘): {b["turnover_rate"]:.2f}% · 외국인 보유비율: {b["foreign_holding_pct"]:.2f}%')
|
||||
lines.append(f'- PER {b["per"]} · PBR {b["pbr"]} · ROE {b["roe"]} · EPS {b["eps"]:,} · BPS {b["bps"]:,}')
|
||||
@@ -1103,11 +1262,50 @@ def _fmt_pct_signed(v: float) -> str:
|
||||
return f'{v:+.2f}%'
|
||||
|
||||
|
||||
_EM_RE = re.compile(r'\*\*(.+?)\*\*')
|
||||
|
||||
|
||||
def _emphasize(escaped: str) -> str:
|
||||
"""이스케이프된 텍스트의 **강조** → 붉은 강조 글씨. 입력은 이미 _esc 처리된 상태."""
|
||||
return _EM_RE.sub(r'<span class="rpt-em">\1</span>', escaped)
|
||||
|
||||
|
||||
def _fmt_eok_jo(eok) -> str:
|
||||
"""억 단위 금액 → 조 단위. 1,997,447억 → 199.7조. 1조 미만은 소수 둘째자리. 비숫자는 —."""
|
||||
if not isinstance(eok, (int, float)):
|
||||
return '—'
|
||||
jo = eok / 10000
|
||||
return f'{jo:,.2f}조' if abs(jo) < 1 else f'{jo:,.1f}조'
|
||||
|
||||
|
||||
def _fmt_market_cap(eok) -> str:
|
||||
"""키움 mac(억원) → 사람이 읽는 '2,084조 1,983억원'. 0/None은 '—'."""
|
||||
if not isinstance(eok, (int, float)) or eok <= 0:
|
||||
return '—'
|
||||
eok = int(eok)
|
||||
jo, rem = divmod(eok, 10000)
|
||||
if jo and rem:
|
||||
return f'{jo:,}조 {rem:,}억원'
|
||||
if jo:
|
||||
return f'{jo:,}조원'
|
||||
return f'{rem:,}억원'
|
||||
|
||||
|
||||
def _fmt_date(s) -> str:
|
||||
"""20260519 → 2026-05-19. 형식 다르면 원본 반환."""
|
||||
"""날짜를 yy/mm/dd로. 20260519 · 2026-05-19 · 2026/05/19 → 26/05/19. 형식 다르면 원본."""
|
||||
s = str(s or '').strip()
|
||||
if len(s) == 8 and s.isdigit():
|
||||
return f'{s[:4]}-{s[4:6]}-{s[6:]}'
|
||||
d = s.replace('-', '').replace('/', '').replace('.', '')
|
||||
if len(d) == 8 and d.isdigit():
|
||||
return f'{d[2:4]}/{d[4:6]}/{d[6:]}'
|
||||
return s
|
||||
|
||||
|
||||
def _fmt_period(s) -> str:
|
||||
"""회계기간 2021/12 · 2021.12 · 202112 → 21/12. 형식 다르면 원본."""
|
||||
s = str(s or '').strip()
|
||||
d = s.replace('-', '').replace('/', '').replace('.', '')
|
||||
if len(d) == 6 and d.isdigit():
|
||||
return f'{d[2:4]}/{d[4:6]}'
|
||||
return s
|
||||
|
||||
|
||||
@@ -1140,9 +1338,9 @@ _KV_HINTS = {
|
||||
'BPS': '주당순자산. 1주당 회사가 가진 순자산 가치(원).',
|
||||
'외국인 보유비율': '전체 발행 주식 중 외국인이 보유한 비율(%).',
|
||||
# ── 성장성·펀더멘털 (FnGuide) ──
|
||||
'매출액(억)': '회사가 1년에 물건·서비스를 팔아 벌어들인 총액(억원). 회사 덩치가 커지는지 보는 지표.',
|
||||
'매출액(조)': '회사가 1년에 물건·서비스를 팔아 벌어들인 총액(조원). 회사 덩치가 커지는지 보는 지표.',
|
||||
'매출증가율': '작년보다 매출이 몇 % 늘었는지. +면 성장, −면 역성장. 꾸준히 +면 좋아요.',
|
||||
'영업이익(억)': '본업으로 번 이익(억원). 매출에서 원가·판관비를 뺀 것. 회사가 장사를 잘하는지.',
|
||||
'영업이익(조)': '본업으로 번 이익(조원). 매출에서 원가·판관비를 뺀 것. 회사가 장사를 잘하는지.',
|
||||
'EPS(원)': '주당순이익. 1주가 1년에 번 순이익(원). 높을수록, 그리고 늘어날수록 좋아요.',
|
||||
'EPS증가율': '작년보다 주당순이익이 몇 % 늘었는지. 이익이 실제로 커지는지 보는 핵심 지표.',
|
||||
'목표주가': '증권사들이 "이 정도까진 오를 만하다"고 본 가격의 평균. 현재가보다 높으면 상승 기대.',
|
||||
@@ -1155,7 +1353,7 @@ _KV_HINTS = {
|
||||
'목표주가 리비전': '최근 3개월간 증권사 목표주가 평균이 오르고(+) 있는지 내리고(−) 있는지. 오르는 중이면 시장 기대가 좋아지는 신호.',
|
||||
'추정치 리비전': '최근 3개월간 예상 실적(EPS 등)이 상향(+)/하향(−)되는 중인지. 상향이면 전망이 밝아지는 거예요.',
|
||||
'서프라이즈': '실제 발표 실적이 직전 예상치보다 잘 나왔으면(+) 어닝 서프라이즈, 못 나왔으면(−) 어닝 쇼크.',
|
||||
'실적(억)': '실제로 확정된 작년 실적 금액(억원). 예상치가 아니라 진짜 나온 숫자.',
|
||||
'실적(조)': '실제로 확정된 작년 실적 금액(조원). 예상치가 아니라 진짜 나온 숫자.',
|
||||
}
|
||||
|
||||
|
||||
@@ -1247,23 +1445,23 @@ def _render_fundamentals_html(fund: dict | None) -> str:
|
||||
roe = r.get('roe')
|
||||
body.append(
|
||||
'<tr>'
|
||||
f'<td>{_esc(r.get("period",""))}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(sales)) if isinstance(sales,(int,float)) else "—"}</td>'
|
||||
f'<td>{_esc(_fmt_period(r.get("period","")))}</td>'
|
||||
f'<td style="text-align:right">{_fmt_eok_jo(sales)}</td>'
|
||||
f'<td style="text-align:right">{_fmt_growth(r.get("sales_growth"))}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(oper)) if isinstance(oper,(int,float)) else "—"}</td>'
|
||||
f'<td style="text-align:right">{_fmt_eok_jo(oper)}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(eps)) if isinstance(eps,(int,float)) else "—"}</td>'
|
||||
f'<td style="text-align:right">{_fmt_growth(r.get("eps_growth"))}</td>'
|
||||
f'<td style="text-align:right">{(str(roe)+"%") if isinstance(roe,(int,float)) else "—"}</td>'
|
||||
'</tr>'
|
||||
)
|
||||
table_html = (
|
||||
'<table class="flowtable">'
|
||||
'<div class="tbl-scroll"><table class="flowtable">'
|
||||
'<thead><tr>'
|
||||
f'<th>기간</th><th>{_lbl("매출액(억)")}</th><th>{_lbl("매출증가율")}</th>'
|
||||
f'<th>{_lbl("영업이익(억)")}</th><th>{_lbl("EPS(원)")}</th>'
|
||||
f'<th>기간</th><th>{_lbl("매출액(조)")}</th><th>{_lbl("매출증가율")}</th>'
|
||||
f'<th>{_lbl("영업이익(조)")}</th><th>{_lbl("EPS(원)")}</th>'
|
||||
f'<th>{_lbl("EPS증가율")}</th><th>{_lbl("ROE")}</th>'
|
||||
'</tr></thead>'
|
||||
'<tbody>' + ''.join(body) + '</tbody></table>'
|
||||
'<tbody>' + ''.join(body) + '</tbody></table></div>'
|
||||
)
|
||||
|
||||
# ---- 컨센서스 카드 ----
|
||||
@@ -1289,7 +1487,7 @@ def _render_fundamentals_html(fund: dict | None) -> str:
|
||||
parts.append(f'<tr><th>{_lbl("참여 기관수")}</th><td>{int(oc)}개</td></tr>')
|
||||
if parts:
|
||||
cdate = consensus.get('date')
|
||||
date_html = (f'<span style="color:#7a8493;font-size:11px"> · 기준 {_esc(cdate)}</span>'
|
||||
date_html = (f'<span style="color:#7a8493;font-size:11px"> · 기준 {_esc(_fmt_date(cdate))}</span>'
|
||||
if cdate else '')
|
||||
cons_html = (
|
||||
f'<h4 style="margin:10px 0 4px">📋 컨센서스{date_html}</h4>'
|
||||
@@ -1354,7 +1552,7 @@ def _render_consensus_html(cons: dict | None) -> str:
|
||||
sup_rows.append(
|
||||
'<tr>'
|
||||
f'<td>{_esc(label)}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(act)) if isinstance(act,(int,float)) else "—"}</td>'
|
||||
f'<td style="text-align:right">{_fmt_eok_jo(act)}</td>'
|
||||
f'<td style="text-align:right">{_fmt_growth(sp)}</td>'
|
||||
'</tr>'
|
||||
)
|
||||
@@ -1364,7 +1562,7 @@ def _render_consensus_html(cons: dict | None) -> str:
|
||||
f'<h4 style="margin:10px 0 4px">🎯 어닝 서프라이즈 '
|
||||
f'<span style="color:#7a8493;font-size:11px">({_esc(any_year)} 실적 vs 직전 컨센서스)</span></h4>'
|
||||
'<table class="flowtable">'
|
||||
f'<thead><tr><th>항목</th><th>{_lbl("실적(억)")}</th><th>{_lbl("서프라이즈")}</th></tr></thead>'
|
||||
f'<thead><tr><th>항목</th><th>{_lbl("실적(조)")}</th><th>{_lbl("서프라이즈")}</th></tr></thead>'
|
||||
'<tbody>' + ''.join(sup_rows) + '</tbody></table>'
|
||||
)
|
||||
|
||||
@@ -1378,10 +1576,10 @@ def _render_consensus_html(cons: dict | None) -> str:
|
||||
sales = r.get('sales'); op = r.get('op'); eps = r.get('eps'); roe = r.get('roe')
|
||||
body.append(
|
||||
'<tr' + (' style="opacity:.85"' if est else '') + '>'
|
||||
f'<td>{_esc(r.get("period",""))}{tag}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(sales)) if isinstance(sales,(int,float)) else "—"}</td>'
|
||||
f'<td>{_esc(_fmt_period(r.get("period","")))}{tag}</td>'
|
||||
f'<td style="text-align:right">{_fmt_eok_jo(sales)}</td>'
|
||||
f'<td style="text-align:right">{_fmt_growth(r.get("sales_yoy"))}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(op)) if isinstance(op,(int,float)) else "—"}</td>'
|
||||
f'<td style="text-align:right">{_fmt_eok_jo(op)}</td>'
|
||||
f'<td style="text-align:right">{_fmt_num(round(eps)) if isinstance(eps,(int,float)) else "—"}</td>'
|
||||
f'<td style="text-align:right">{(str(roe)+"%") if isinstance(roe,(int,float)) else "—"}</td>'
|
||||
'</tr>'
|
||||
@@ -1389,10 +1587,10 @@ def _render_consensus_html(cons: dict | None) -> str:
|
||||
parts.append(
|
||||
'<h4 style="margin:10px 0 4px">📅 연도별 추정 재무 '
|
||||
'<span style="color:#7a8493;font-size:11px">(IFRS연결 · A 실적 / E 추정)</span></h4>'
|
||||
'<table class="flowtable">'
|
||||
f'<thead><tr><th>기간</th><th>{_lbl("매출액(억)")}</th><th>{_lbl("YoY")}</th>'
|
||||
f'<th>{_lbl("영업이익(억)")}</th><th>{_lbl("EPS(원)")}</th><th>{_lbl("ROE")}</th></tr></thead>'
|
||||
'<tbody>' + ''.join(body) + '</tbody></table>'
|
||||
'<div class="tbl-scroll"><table class="flowtable">'
|
||||
f'<thead><tr><th>기간</th><th>{_lbl("매출액(조)")}</th><th>{_lbl("YoY")}</th>'
|
||||
f'<th>{_lbl("영업이익(조)")}</th><th>{_lbl("EPS(원)")}</th><th>{_lbl("ROE")}</th></tr></thead>'
|
||||
'<tbody>' + ''.join(body) + '</tbody></table></div>'
|
||||
)
|
||||
|
||||
if not parts:
|
||||
@@ -1459,6 +1657,12 @@ def build_report_html(snap: dict, parsed: dict) -> str:
|
||||
v = p.get(field)
|
||||
return f'{v:,}{suffix}' if isinstance(v, (int, float)) else '—'
|
||||
|
||||
def _peer_mac(p: dict) -> str:
|
||||
if p.get('error'):
|
||||
return '<span style="color:#ef4444;font-size:11px">조회 실패</span>'
|
||||
v = p.get('market_cap')
|
||||
return _fmt_market_cap(v) if isinstance(v, (int, float)) else '—'
|
||||
|
||||
def _peer_pct(p: dict, field: str) -> str:
|
||||
if p.get('error'):
|
||||
return '<span style="color:#ef4444;font-size:11px">조회 실패</span>'
|
||||
@@ -1483,8 +1687,7 @@ def build_report_html(snap: dict, parsed: dict) -> str:
|
||||
('오늘 시가', f'{b["open"]:,}원', lambda p: _peer_int(p, 'open', '원')),
|
||||
('오늘 고가', f'{b["high"]:,}원', lambda p: _peer_int(p, 'high', '원')),
|
||||
('오늘 저가', f'{b["low"]:,}원', lambda p: _peer_int(p, 'low', '원')),
|
||||
('시가총액', f'{b["market_cap"]:,} <span style="color:#7a8493;font-size:11px">(키움 원본 단위)</span>',
|
||||
lambda p: _peer_int(p, 'market_cap', '')),
|
||||
('시가총액', _fmt_market_cap(b["market_cap"]), _peer_mac),
|
||||
('상장주식수', f'{b["listed_shares"]:,}주', lambda p: _peer_int(p, 'listed_shares', '주')),
|
||||
('52주 최고', f'{b["high_52w"]:,}원 <span style="color:#7a8493;font-size:11px">({_fmt_date(b["high_52w_dt"])})</span>',
|
||||
lambda p: _peer_52w(p, 'high_52w', 'high_52w_dt')),
|
||||
@@ -1534,6 +1737,20 @@ def build_report_html(snap: dict, parsed: dict) -> str:
|
||||
chart_1y = render_svg_chart(snap, '1Y')
|
||||
chart_6m = render_svg_chart(snap, '6M')
|
||||
chart_1m = render_svg_chart(snap, '1M')
|
||||
# 오늘 회전율·RVOL 값 — 차트 아래 표시. 장중 생성 시 종가 기준 환산('예상').
|
||||
_vfrac = session_vol_frac(snap.get('candles_asc') or [])
|
||||
_cands = snap.get('candles_asc') or []
|
||||
_turn, _tscaled = turnover_today(_cands, _vfrac)
|
||||
_rvol, _rscaled = rvol_today(_cands, _vfrac)
|
||||
_cap_bits = []
|
||||
if _rvol is not None:
|
||||
_cap_bits.append(f'<b>RVOL</b> x{_rvol:.1f}')
|
||||
if _turn is not None:
|
||||
_cap_bits.append(f'<b>회전율</b> {_turn:.2f}%')
|
||||
_turn_cap = (
|
||||
f'<div class="chart-cap">{" · ".join(_cap_bits)}{" (예상)" if (_tscaled or _rscaled) else ""}</div>'
|
||||
if _cap_bits else ''
|
||||
)
|
||||
chart_block = (
|
||||
'<div class="chart-tabs">'
|
||||
'<button type="button" data-range="1Y" class="active">1년</button>'
|
||||
@@ -1543,6 +1760,7 @@ def build_report_html(snap: dict, parsed: dict) -> str:
|
||||
f'<div class="chart-panel active" data-range="1Y">{chart_1y}</div>'
|
||||
f'<div class="chart-panel" data-range="6M">{chart_6m}</div>'
|
||||
f'<div class="chart-panel" data-range="1M">{chart_1m}</div>'
|
||||
+ _turn_cap
|
||||
)
|
||||
|
||||
# ---- 외국인/기관 수급 표 (최근 20일) ----
|
||||
@@ -1565,11 +1783,11 @@ def build_report_html(snap: dict, parsed: dict) -> str:
|
||||
'<thead><tr><th>일자</th><th>종가</th><th>외국인</th><th>기관</th><th>개인</th></tr></thead>'
|
||||
'<tbody>' + ''.join(flow_rows) + '</tbody>'
|
||||
'</table>'
|
||||
f'<p class="flowsum">20일 누적 — '
|
||||
f'<p class="flowsum"><b>20일 누적</b><br>'
|
||||
f'<b style="color:{"#ef4444" if fs["foreign_net"]>0 else "#3b82f6"}">외국인 {fs["foreign_net"]*1000:+,}주</b> '
|
||||
f'(매수일 {fs["foreign_buy_days"]}/20) · '
|
||||
f'(매수일 {fs["foreign_buy_days"]}/20)<br>'
|
||||
f'<b style="color:{"#ef4444" if fs["institution_net"]>0 else "#3b82f6"}">기관 {fs["institution_net"]*1000:+,}주</b> '
|
||||
f'(매수일 {fs["institution_buy_days"]}/20) · '
|
||||
f'(매수일 {fs["institution_buy_days"]}/20)<br>'
|
||||
f'개인 {fs["individual_net"]*1000:+,}주</p>'
|
||||
)
|
||||
|
||||
@@ -1598,7 +1816,7 @@ def build_report_html(snap: dict, parsed: dict) -> str:
|
||||
paras = [p.strip() for p in s['body'].split('\n\n') if p.strip()]
|
||||
if not paras:
|
||||
paras = [s['body']]
|
||||
body_html = ''.join(f'<p>{_esc(para).replace(chr(10), "<br>")}</p>' for para in paras)
|
||||
body_html = ''.join(f'<p>{_emphasize(_esc(para)).replace(chr(10), "<br>")}</p>' for para in paras)
|
||||
comment_html_parts.append(
|
||||
f'<div class="rpt-llm-block"><h4>{title}</h4>{body_html}</div>'
|
||||
)
|
||||
@@ -1768,16 +1986,19 @@ body{background:#0f1419;color:#cfd5df;font-family:-apple-system,BlinkMacSystemFo
|
||||
/* 보조 섹션 2단(넓으면 다단) 그리드 — 한 화면에 모이게 */
|
||||
.rpt-cols{display:grid;grid-template-columns:repeat(auto-fit,minmax(340px,1fr));gap:14px;align-items:start;margin:14px 0}
|
||||
.rpt-cols>.rpt-section{margin:0;height:100%}
|
||||
.kvtable{border-collapse:collapse;width:100%}
|
||||
.kvtable th{text-align:left;padding:7px 10px;color:#7a8493;font-weight:500;width:160px;border-bottom:1px solid #1f2937;font-size:13px}
|
||||
.kvtable td{padding:7px 10px;border-bottom:1px solid #1f2937}
|
||||
.flowtable{border-collapse:collapse;width:100%;font-size:13px}
|
||||
.flowtable th{padding:6px 10px;color:#7a8493;border-bottom:1px solid #2a2f3a;text-align:left}
|
||||
.flowtable td{padding:5px 10px;border-bottom:1px solid #1a1f28}
|
||||
.flowsum{margin:10px 0 0;padding:10px;background:#0f1419;border-radius:6px;font-size:13px}
|
||||
.kvtable{border-collapse:collapse;width:100%;font-size:12px}
|
||||
.kvtable th{text-align:left;padding:6px 9px;color:#7a8493;font-weight:500;width:160px;border-bottom:1px solid #1f2937;font-size:12px}
|
||||
.kvtable td{padding:6px 9px;border-bottom:1px solid #1f2937}
|
||||
.tbl-scroll{overflow-x:auto;-webkit-overflow-scrolling:touch}
|
||||
.tbl-scroll>table{min-width:100%;width:max-content}
|
||||
.flowtable{border-collapse:collapse;width:100%;font-size:12px}
|
||||
.flowtable th{padding:5px 9px;color:#7a8493;border-bottom:1px solid #2a2f3a;text-align:left;white-space:nowrap}
|
||||
.flowtable td{padding:5px 9px;border-bottom:1px solid #1a1f28;white-space:nowrap}
|
||||
.flowsum{margin:10px 0 0;padding:10px;background:#0f1419;border-radius:6px;font-size:13px;line-height:1.8}
|
||||
.rpt-llm-block{margin:16px 0;padding:14px;background:#0f1419;border-radius:6px}
|
||||
.rpt-llm-block h4{margin:0 0 10px;color:#fbbf24;font-size:14px}
|
||||
.rpt-llm-block p{margin:8px 0;text-align:justify}
|
||||
.rpt-em{color:#ff6b6b;font-weight:600}
|
||||
.rpt-verdict{background:linear-gradient(135deg,#1f2937 0%,#161b22 100%)}
|
||||
.verdict-line{font-size:16px;font-weight:600;margin:10px 0 6px;color:#fff}
|
||||
.rpt-disclaimer{color:#7a8493;font-size:12px;margin:6px 0 0}
|
||||
@@ -1788,6 +2009,8 @@ body{background:#0f1419;color:#cfd5df;font-family:-apple-system,BlinkMacSystemFo
|
||||
.chart-tabs button.active{background:rgba(251,191,36,0.12);color:#fbbf24;border-color:#fbbf24}
|
||||
.chart-panel{display:none}
|
||||
.chart-panel.active{display:block}
|
||||
.chart-cap{margin:8px 0 4px;padding:8px 10px 0;font-size:9px;line-height:1.5;color:#7a8493;border-top:1px solid #1d222b}
|
||||
.chart-cap b{color:#9aa4b2;font-weight:600}
|
||||
.kvtable th{vertical-align:top}
|
||||
.info-label{cursor:pointer;user-select:none;-webkit-user-select:none;-webkit-touch-callout:none;border-bottom:1px dotted #5b6473;display:inline-flex;align-items:center;gap:4px;color:#7a8493;padding:1px 2px}
|
||||
.info-label::after{content:'ⓘ';font-size:11px;color:#5b6473;font-weight:normal}
|
||||
@@ -1818,8 +2041,8 @@ body{background:#0f1419;color:#cfd5df;font-family:-apple-system,BlinkMacSystemFo
|
||||
.peertable th:not(:first-child){text-align:right}
|
||||
.peertable td{padding:7px 10px;border-bottom:1px solid #1a1f28}
|
||||
.peers-note{margin:10px 0 0;color:#7a8493;font-size:11px}
|
||||
.basicpeertable{border-collapse:collapse;width:100%;font-size:13px;table-layout:fixed}
|
||||
.basicpeertable th.lbl{text-align:left;padding:7px 10px;color:#7a8493;font-weight:500;width:140px;border-bottom:1px solid #1f2937;font-size:13px;vertical-align:top}
|
||||
.basicpeertable{border-collapse:collapse;width:100%;font-size:12px;table-layout:fixed}
|
||||
.basicpeertable th.lbl{text-align:left;padding:6px 9px;color:#7a8493;font-weight:500;width:130px;border-bottom:1px solid #1f2937;font-size:12px;vertical-align:top}
|
||||
.basicpeertable thead th{padding:8px 10px;color:#cfd5df;border-bottom:1px solid #2a2f3a;font-weight:600;text-align:left;background:#0f1419}
|
||||
.basicpeertable thead th:nth-child(2){color:#fbbf24}
|
||||
.basicpeertable td{padding:7px 10px;border-bottom:1px solid #1f2937;vertical-align:top;word-break:break-word}
|
||||
|
||||
@@ -520,14 +520,34 @@ def _render_html_owner(idx: int, owner: str, d: dict, balances: dict, prev_key,
|
||||
)
|
||||
|
||||
# behive_web _render_owner_kpi 와 동일한 순서·라벨로 통일.
|
||||
# 1) 총평가 → 2) 총매입 → 3) 총평가손익 → 4) 당일평가손익 → 5) 예수금 → 6) 순자산 → 7) 보유 종목 → 8) 당일 매매
|
||||
# '총'은 계좌 전체(현금 포함)일 때만: 총자산 = 평가금액 + 예수금.
|
||||
# 총자산 → 매입금액 → 평가금액 → 평가손익 → 예수금 → [당일 입출금] → 보유종목/당일매매 → 당일 평가손익
|
||||
held = [r for r in d['consolidated'] if not r.get('phantom')]
|
||||
parts.append(kpi('총 평가금액', f'{d["total_value"]:,}원'))
|
||||
parts.append(kpi('총 매입금액', f'{d["total_cost"]:,}원'))
|
||||
parts.append(kpi('총자산', f'{d["total_net"]:,}원'))
|
||||
parts.append(kpi('매입금액', f'{d["total_cost"]:,}원'))
|
||||
parts.append(kpi('평가금액', f'{d["total_value"]:,}원'))
|
||||
parts.append(kpi(
|
||||
'총 평가손익',
|
||||
'평가손익',
|
||||
f'{_signed(d["total_profit"])} ({_signed_pct(d["total_profit_rate"])})'
|
||||
))
|
||||
parts.append(kpi('예수금', f'{d["deposit"]:,}원'))
|
||||
# 당일 입출금은 예수금 바로 아래 (현금 잔액 ↔ 그날 현금 이동)
|
||||
cash_in = d.get('cash_in', 0)
|
||||
cash_out = d.get('cash_out', 0)
|
||||
if cash_in or cash_out:
|
||||
net = cash_in - cash_out
|
||||
nsign = '+' if net >= 0 else ''
|
||||
ncolor = '#0a7' if net > 0 else ('#d33' if net < 0 else '#666')
|
||||
# 한쪽만 있으면 순액과 같은 값이라 생략 (둘 다 있을 때만 쪼갠다)
|
||||
detail = ''
|
||||
if cash_in and cash_out:
|
||||
detail = (f' <span style="color:#888;font-size:13px;">'
|
||||
f'· 입금 {cash_in:,}원 · 출금 {cash_out:,}원</span>')
|
||||
parts.append(kpi(
|
||||
'당일 입출금',
|
||||
f'<span style="color:{ncolor};">{nsign}{net:,}원</span>{detail}'
|
||||
))
|
||||
parts.append(kpi('보유종목/당일매매', f'{len(held)}개 / {len(d["traded_today"])}개'))
|
||||
day_pl_total = d.get('day_pl_total')
|
||||
if day_pl_total is None:
|
||||
if prev_key:
|
||||
@@ -540,26 +560,6 @@ def _render_html_owner(idx: int, owner: str, d: dict, balances: dict, prev_key,
|
||||
pct_html = f' ({_signed_pct(pct)})'
|
||||
suffix = f' <span style="color:#888;font-size:13px;">· {prev_key} 대비</span>' if prev_key else ''
|
||||
parts.append(kpi('당일 평가손익', f'{_signed(day_pl_total)}{pct_html}{suffix}'))
|
||||
parts.append(kpi('예수금', f'{d["deposit"]:,}원'))
|
||||
parts.append(kpi('순자산', f'{d["total_net"]:,}원'))
|
||||
cash_in = d.get('cash_in', 0)
|
||||
cash_out = d.get('cash_out', 0)
|
||||
if cash_in or cash_out:
|
||||
net = cash_in - cash_out
|
||||
nsign = '+' if net >= 0 else ''
|
||||
ncolor = '#0a7' if net > 0 else ('#d33' if net < 0 else '#666')
|
||||
detail_parts = []
|
||||
if cash_in:
|
||||
detail_parts.append(f'입금 {cash_in:,}원')
|
||||
if cash_out:
|
||||
detail_parts.append(f'출금 {cash_out:,}원')
|
||||
detail = f' <span style="color:#888;font-size:13px;">· {" · ".join(detail_parts)}</span>' if detail_parts else ''
|
||||
parts.append(kpi(
|
||||
'당일 입출금',
|
||||
f'<span style="color:{ncolor};">{nsign}{net:,}원</span>{detail}'
|
||||
))
|
||||
parts.append(kpi('보유 종목', f'{len(held)}개'))
|
||||
parts.append(kpi('당일 매매', f'{len(d["traded_today"])}개'))
|
||||
realized_pl = d.get('realized_pl_total', 0)
|
||||
realized_fees = d.get('realized_fees_total', 0)
|
||||
if d.get('traded_today') and (realized_pl or realized_fees):
|
||||
@@ -710,13 +710,29 @@ def _render_html_body(owner_data: dict, ordered: list, balances: dict, today_key
|
||||
f'<td style="{S["kpi_value"]}">{value_html}</td></tr>'
|
||||
)
|
||||
|
||||
# behive_web KPI 순서로 통일
|
||||
parts.append(kpi('총 평가금액', f'{grand_value:,}원'))
|
||||
parts.append(kpi('총 매입금액', f'{grand_cost:,}원'))
|
||||
# behive_web KPI 순서·라벨로 통일 (블록 자체가 전체 합산이라 '총' 중복 접두 제거)
|
||||
parts.append(kpi('총자산', f'{grand_net:,}원'))
|
||||
parts.append(kpi('매입금액', f'{grand_cost:,}원'))
|
||||
parts.append(kpi('평가금액', f'{grand_value:,}원'))
|
||||
parts.append(kpi(
|
||||
'총 평가손익',
|
||||
'평가손익',
|
||||
f'{_signed(grand_profit)} ({_signed_pct(grand_rate)})'
|
||||
))
|
||||
parts.append(kpi('예수금', f'{grand_deposit:,}원'))
|
||||
# 당일 입출금은 예수금 바로 아래
|
||||
if grand_cash_in or grand_cash_out:
|
||||
gn = grand_net_cash_flow
|
||||
gsign = '+' if gn >= 0 else ''
|
||||
gcolor = '#0a7' if gn > 0 else ('#d33' if gn < 0 else '#666')
|
||||
# 한쪽만 있으면 순액과 같은 값이라 생략
|
||||
gdetail = ''
|
||||
if grand_cash_in and grand_cash_out:
|
||||
gdetail = (f' <span style="color:#888;font-size:13px;">'
|
||||
f'· 입금 {grand_cash_in:,}원 · 출금 {grand_cash_out:,}원</span>')
|
||||
parts.append(kpi(
|
||||
'당일 입출금',
|
||||
f'<span style="color:{gcolor};">{gsign}{gn:,}원</span>{gdetail}'
|
||||
))
|
||||
if grand_day_pl_total is not None:
|
||||
pct_html = ''
|
||||
if grand_prev_net:
|
||||
@@ -726,22 +742,6 @@ def _render_html_body(owner_data: dict, ordered: list, balances: dict, today_key
|
||||
parts.append(kpi('당일 평가손익', f'{_signed(grand_day_pl_total)}{pct_html}{suffix}'))
|
||||
elif prev_key:
|
||||
parts.append(kpi('당일 평가손익', '<span style="color:#888;">전날 스냅샷 없음</span>'))
|
||||
parts.append(kpi('총 예수금', f'{grand_deposit:,}원'))
|
||||
parts.append(kpi('총 순자산', f'{grand_net:,}원'))
|
||||
if grand_cash_in or grand_cash_out:
|
||||
gn = grand_net_cash_flow
|
||||
gsign = '+' if gn >= 0 else ''
|
||||
gcolor = '#0a7' if gn > 0 else ('#d33' if gn < 0 else '#666')
|
||||
gd = []
|
||||
if grand_cash_in:
|
||||
gd.append(f'입금 {grand_cash_in:,}원')
|
||||
if grand_cash_out:
|
||||
gd.append(f'출금 {grand_cash_out:,}원')
|
||||
gdetail = f' <span style="color:#888;font-size:13px;">· {" · ".join(gd)}</span>'
|
||||
parts.append(kpi(
|
||||
'당일 입출금',
|
||||
f'<span style="color:{gcolor};">{gsign}{gn:,}원</span>{gdetail}'
|
||||
))
|
||||
grand_realized_pl = sum(d.get('realized_pl_total', 0) for d in owner_data.values())
|
||||
grand_realized_fees = sum(d.get('realized_fees_total', 0) for d in owner_data.values())
|
||||
if any(d.get('traded_today') for d in owner_data.values()) and (grand_realized_pl or grand_realized_fees):
|
||||
@@ -767,6 +767,20 @@ def build_report(by_account: bool = False) -> tuple[str, str, str]:
|
||||
raise RuntimeError('키움 REST 응답에 보유종목이 없습니다.')
|
||||
|
||||
today_key = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
|
||||
# 당일 매수 동반 매도행의 pl을 '전일 보유 평단' 기준으로 재계산 (ka10170 round-trip 오표시 교정).
|
||||
# 자산웹과 동일 기준 — 전일 평단은 파일 이력 재생(prev_avg_map, 당일분 제외)에서.
|
||||
try:
|
||||
import trade_journal as tj
|
||||
_prev_avgs = tj.prev_avg_map(today_key)
|
||||
for _lb, _trs in journal_by_label.items():
|
||||
for _t in _trs:
|
||||
_pa = _prev_avgs.get((_lb, _t.get('code')), 0)
|
||||
if (_t.get('sell_qty') or 0) > 0 and (_t.get('buy_qty') or 0) > 0 and _pa > 0:
|
||||
tj._apply_rebase(_t, float(_t.get('sell_avg') or 0), int(_t['sell_qty']), _pa)
|
||||
except Exception as e:
|
||||
print(f'[journal rebase] failed: {e}', file=sys.stderr)
|
||||
|
||||
all_labels = [a['label'] for a in list_accounts()]
|
||||
owner_groups = group_by_owner(all_labels)
|
||||
|
||||
@@ -998,14 +1012,18 @@ def build_report(by_account: bool = False) -> tuple[str, str, str]:
|
||||
title = OWNER_LABELS.get(owner, f'{owner} 자산')
|
||||
labels_disp = ' + '.join(d['labels'])
|
||||
held = [r for r in d['consolidated'] if not r.get('phantom')]
|
||||
# behive_web KPI 순서·라벨로 통일
|
||||
# behive_web KPI 순서·라벨로 통일. 라벨은 표시폭 17칸 정렬(한글 2칸 기준).
|
||||
lines += [
|
||||
'==============================',
|
||||
f"{idx}) {title} ({labels_disp})",
|
||||
'==============================',
|
||||
f'총 평가금액 : {d["total_value"]:,}원',
|
||||
f'총 매입금액 : {d["total_cost"]:,}원',
|
||||
f'총 평가손익 : {d["total_profit"]:+,}원 ({d["total_profit_rate"]:+.2f}%)',
|
||||
f'총자산 : {d["total_net"]:,}원',
|
||||
f'매입금액 : {d["total_cost"]:,}원',
|
||||
f'평가금액 : {d["total_value"]:,}원',
|
||||
f'평가손익 : {d["total_profit"]:+,}원 ({d["total_profit_rate"]:+.2f}%)',
|
||||
f'예수금 : {d["deposit"]:,}원',
|
||||
# '보유종목/당일매매'는 표시폭이 정확히 17칸이라 패딩 없이 콜론이 맞는다.
|
||||
f'보유종목/당일매매: {len(held)}개 / {len(d["traded_today"])}개',
|
||||
]
|
||||
day_pl = d.get('day_pl_total')
|
||||
if day_pl is not None:
|
||||
@@ -1015,10 +1033,6 @@ def build_report(by_account: bool = False) -> tuple[str, str, str]:
|
||||
lines.append(f'당일 평가손익 : {day_pl:+,}원 ({pct:+.2f}%){suffix}')
|
||||
elif prev_key:
|
||||
lines.append(f'당일 평가손익 : 전날 스냅샷 없음 ({prev_key})')
|
||||
lines.append(f'예수금 : {d["deposit"]:,}원')
|
||||
lines.append(f'순자산 : {d["total_net"]:,}원')
|
||||
lines.append(f'보유 종목 : {len(held)}개')
|
||||
lines.append(f'당일 매매 : {len(d["traded_today"])}개')
|
||||
if d.get('traded_today') and (d.get('realized_pl_total', 0) or d.get('realized_fees_total', 0)):
|
||||
fee = d.get('realized_fees_total', 0)
|
||||
fee_part = f' (수수료·세금 {fee:,}원)' if fee else ''
|
||||
@@ -1112,7 +1126,7 @@ def build_report(by_account: bool = False) -> tuple[str, str, str]:
|
||||
tg_lines = [f'📊 주식 리포트 | {today_key} 20:00']
|
||||
tg_lines.append('')
|
||||
tg_lines.append(f'평가 {grand_value:,}원 · 예수금 {grand_deposit:,}원')
|
||||
tg_lines.append(f'순자산 {grand_net:,}원')
|
||||
tg_lines.append(f'총자산 {grand_net:,}원')
|
||||
tg_lines.append(f'{grand_profit:+,}원 ({grand_rate:+.2f}%)')
|
||||
if grand_day_pl_total is not None:
|
||||
tg_lines.append(f'당일 평가손익 {grand_day_pl_total:+,}원 ({prev_key} 대비)')
|
||||
@@ -1121,7 +1135,10 @@ def build_report(by_account: bool = False) -> tuple[str, str, str]:
|
||||
elif owner_data:
|
||||
tg_lines.append('전날 이전 스냅샷 없음')
|
||||
if grand_cash_in or grand_cash_out:
|
||||
tg_lines.append(f'당일 입출금 {grand_net_cash_flow:+,}원 (입금 {grand_cash_in:,}원 · 출금 {grand_cash_out:,}원)')
|
||||
# 한쪽만 있으면 순액과 같은 값이라 괄호 생략
|
||||
_brk = (f' (입금 {grand_cash_in:,}원 · 출금 {grand_cash_out:,}원)'
|
||||
if (grand_cash_in and grand_cash_out) else '')
|
||||
tg_lines.append(f'당일 입출금 {grand_net_cash_flow:+,}원{_brk}')
|
||||
grand_realized_pl = sum(d.get('realized_pl_total', 0) for d in owner_data.values())
|
||||
if any(d.get('traded_today') for d in owner_data.values()) and grand_realized_pl:
|
||||
tg_lines.append(f'당일 실현 {grand_realized_pl:+,}원')
|
||||
@@ -1130,7 +1147,7 @@ def build_report(by_account: bool = False) -> tuple[str, str, str]:
|
||||
for owner in ordered:
|
||||
d = owner_data[owner]
|
||||
title = OWNER_LABELS.get(owner, owner).replace(' 자산', '')
|
||||
tg_lines.append(f'• {title} 순자산 {d["total_net"]:,}원')
|
||||
tg_lines.append(f'• {title} 총자산 {d["total_net"]:,}원')
|
||||
tg_lines.append(f' 평가 {d["total_value"]:,}원 · 예수금 {d["deposit"]:,}원')
|
||||
tg_lines.append(f' {d["total_profit"]:+,}원 ({d["total_profit_rate"]:+.2f}%)')
|
||||
if d.get('day_pl_total') is not None:
|
||||
|
||||
@@ -0,0 +1,591 @@
|
||||
#!/usr/bin/env python3
|
||||
"""토글 켜진 종목의 급등락 감시 → 레이 텔레그램 알림.
|
||||
|
||||
LLM을 깨우지 않음. 세 기준을 병행한다:
|
||||
1. 거래소 상·하한가 도달 — 그날 갈 수 있는 끝까지 간 것. 가장 강한 신호라 무엇에도 가리지 않는다.
|
||||
2. 거래소 VI 발동 — "이건 급등락이다"를 거래소가 공식 판정. 문턱을 우리가 정할 필요가 없다.
|
||||
3. 자기 이력 분위수 — 장중 이탈폭(전일종가 대비)이 그 종목 과거 이탈폭의 p90 을 넘으면 알림.
|
||||
|
||||
고정 %를 쓰지 않는 이유 (실측 관심·감시 65종목 × 280거래일, 2026-08-04):
|
||||
- 장중 이탈폭 중간값이 3.8% → ±3%는 급등락이 아니라 평범한 날
|
||||
- 종목별 변동성이 22배 차(ATR14 1.0%~22.3%). ±5% 문턱이면 KODEX 미국S&P500 은 발생 0회,
|
||||
SK이터닉스는 75회. 같은 5%가 한쪽엔 도달 불가, 한쪽엔 노이즈다.
|
||||
|
||||
⚠️ ATR 배수(ATR% × K)를 쓰지 않는 이유 — 2026-08-04 관리자님 지적으로 교체:
|
||||
국내 주식 하루 가격제한폭이 ±30% 인데 ATR 배수는 상한이 없어 변동성 큰 종목의 문턱이
|
||||
제한폭 밖으로 밀려난다. 실측: 1차(ATR×1.5)가 5/65 종목, 확대(ATR×3.0)가 31/65 종목(48%)에서
|
||||
30% 초과 = **영원히 발동 불가**였다(ATR% 중간값이 10%라 확대는 절반이 죽는다).
|
||||
분위수는 실제로 관측된 이탈폭이라 구조적으로 제한폭을 넘을 수 없다(p90~p99 전부 30% 초과 0종목).
|
||||
덤으로 알림량이 정의상 (1-p) 비율로 확정된다 — p90 = 종목당 연 25회.
|
||||
⚠️ 신규상장 첫날·정리매매는 제한폭 예외지만, 그런 종목은 이력이 없어 애초에 VI만 감시한다.
|
||||
|
||||
데이터원은 behive_web 의 /api/realtime/quotes — 현재가와 VI를 한 번에 주고 키움 호출이 0이다.
|
||||
VI(1h)는 시장 전역 broadcast라 구독이 필요 없고, 현재가(0B)는 구독이 필요한데 behive_web 의
|
||||
_rt_gather_codes() 가 이미 보유+관심+감시를 구독하므로 토글 종목은 그 부분집합이다.
|
||||
구독 상한에 걸려 빠진 종목만 ka10095 배치 1콜로 폴백한다.
|
||||
|
||||
⚠️ 상·하한가·VI 가 걸려 있는 동안 분위수 트리거는 **보류**했다가 풀린 뒤에 내보낸다
|
||||
(2026-08-06 관리자님 요청). 그전엔 조용히 버려져서, VI 중에 문턱을 넘었다가 해제 시점에
|
||||
되밀린 움직임은 알림이 아예 없었다. 같은 사건을 두 번 알리지 않으면서 사실은 잃지 않기 위함.
|
||||
|
||||
state:
|
||||
behive_surge_toggles.json — 감시 대상 (behive_web 의 🔔 토글이 씀)
|
||||
surge_thresholds.json — {date, by_code: {code: {thr, thr_big, prev_close, n}}}. 하루 1회만 계산
|
||||
surge_limits.json — {date, by_code: {code: {upl, lst}}}. 거래소 상·하한가, 하루 1콜
|
||||
surge_alerts.json — {date: {code: [트리거키], __pending__: {code: {키: 보류정보}}}}
|
||||
방향별 1회 + 확대단계 1회 + 상·하한가 1회, VI 는 발동 건마다 1회
|
||||
|
||||
Usage:
|
||||
python3 surge_monitor.py check # 1회 감시 (launchd 용)
|
||||
python3 surge_monitor.py check --force # 장외에도 실행 (테스트용)
|
||||
python3 surge_monitor.py dry-run # 판정만 출력, 텔레그램 발송 없음
|
||||
python3 surge_monitor.py list # 토글 종목의 문턱(%)·발동가 출력
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import fcntl
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
import urllib.parse
|
||||
import urllib.request
|
||||
from contextlib import contextmanager
|
||||
from datetime import datetime, timezone, timedelta
|
||||
from pathlib import Path
|
||||
|
||||
KST = timezone(timedelta(hours=9))
|
||||
WORKSPACE = Path('/Users/snowoyh/.openclaw/agents/stock/workspace')
|
||||
sys.path.insert(0, str(WORKSPACE / 'scripts'))
|
||||
sys.path.insert(0, str(WORKSPACE))
|
||||
import kiwoom_client as kc # noqa: E402
|
||||
|
||||
STATE_DIR = WORKSPACE / 'state'
|
||||
TOGGLES = STATE_DIR / 'behive_surge_toggles.json'
|
||||
THR_CACHE = STATE_DIR / 'surge_thresholds.json'
|
||||
LIMITS_CACHE = STATE_DIR / 'surge_limits.json'
|
||||
ALERTS_STATE = STATE_DIR / 'surge_alerts.json'
|
||||
# 보류 트리거를 담는 예약 키. 종목코드는 6자리라 이 이름과 충돌하지 않는다.
|
||||
PENDING_KEY = '__pending__'
|
||||
CONFIG_PATH = Path('/Users/snowoyh/.openclaw/openclaw.json')
|
||||
|
||||
TELEGRAM_ACCOUNT = 'stock' # 레이 봇
|
||||
|
||||
# 1차 문턱 = 그 종목 과거 장중 이탈폭의 이 분위수. 통수를 정하는 유일한 손잡이 —
|
||||
# 분위수라 알림량이 정의상 (1-p) 비율로 확정된다. 0.90 = 종목당 연 25회(≈2주 1번).
|
||||
SURGE_PCTL = 0.90
|
||||
# 확대 단계 — 1차 알림 후 여기까지 더 벌어지면 한 번 더. 종목당 하루 최대 2통.
|
||||
SURGE_PCTL_BIG = 0.98
|
||||
# 분위수 산출에 필요한 최소 관측일. 미달(신규상장 등)이면 VI만 감시한다.
|
||||
MIN_HISTORY = 60
|
||||
# 이력 조회 봉 수 — sqlite 캐시에서 읽는 양만 늘린다(추가 API 콜 없음).
|
||||
HISTORY_COUNT = 400
|
||||
# 문턱 산출 페이싱 — ka10081 유량이 초당 5건이라 캐시가 stale 한 종목이 많으면 429가 쏟아진다.
|
||||
MAX_COMPUTE_PER_CYCLE = 12
|
||||
COMPUTE_PACE_SEC = 0.35
|
||||
|
||||
# behive_web 실시간 엔드포인트. BIND_HOST='' 라 localhost 로 도달한다.
|
||||
RT_URL = 'http://127.0.0.1:18790/api/realtime/quotes'
|
||||
RT_TIMEOUT = 5
|
||||
|
||||
MARKET_OPEN = (9, 0)
|
||||
MARKET_CLOSE = (15, 35) # 15:30 마감 + 최종 체결 버퍼
|
||||
|
||||
|
||||
def load_json(path: Path, default):
|
||||
if path.exists():
|
||||
try:
|
||||
return json.loads(path.read_text())
|
||||
except Exception:
|
||||
return default
|
||||
return default
|
||||
|
||||
|
||||
def save_json(path: Path, data):
|
||||
path.parent.mkdir(parents=True, exist_ok=True)
|
||||
tmp = path.with_suffix(path.suffix + '.tmp')
|
||||
tmp.write_text(json.dumps(data, ensure_ascii=False, indent=2))
|
||||
tmp.replace(path)
|
||||
|
||||
|
||||
@contextmanager
|
||||
def alerts_lock():
|
||||
"""surge_alerts.json 동시 쓰기 직렬화. watchlist_monitor 와 동일 패턴, 별도 lock 파일."""
|
||||
lock_path = ALERTS_STATE.with_suffix(ALERTS_STATE.suffix + '.lock')
|
||||
lock_path.parent.mkdir(parents=True, exist_ok=True)
|
||||
f = open(lock_path, 'a')
|
||||
try:
|
||||
fcntl.flock(f.fileno(), fcntl.LOCK_EX)
|
||||
yield
|
||||
finally:
|
||||
try:
|
||||
fcntl.flock(f.fileno(), fcntl.LOCK_UN)
|
||||
finally:
|
||||
f.close()
|
||||
|
||||
|
||||
def is_market_hours() -> bool:
|
||||
now = datetime.now(KST)
|
||||
if now.weekday() >= 5:
|
||||
return False
|
||||
# KRX 휴장일도 거래 없음. 데이터 파일 누락이나 import 실패 시엔 평소대로 진행.
|
||||
try:
|
||||
from holiday_sync import is_holiday_today
|
||||
if is_holiday_today():
|
||||
return False
|
||||
except Exception:
|
||||
pass
|
||||
mins = now.hour * 60 + now.minute
|
||||
return (MARKET_OPEN[0] * 60 + MARKET_OPEN[1]) <= mins <= (MARKET_CLOSE[0] * 60 + MARKET_CLOSE[1])
|
||||
|
||||
|
||||
def send_telegram(text: str) -> bool:
|
||||
cfg = json.loads(CONFIG_PATH.read_text())
|
||||
acct = cfg['channels']['telegram']['accounts'][TELEGRAM_ACCOUNT]
|
||||
token = acct['botToken']
|
||||
chat_ids = acct.get('allowFrom') or []
|
||||
if not chat_ids:
|
||||
print('no telegram chat_ids', file=sys.stderr)
|
||||
return False
|
||||
url = f'https://api.telegram.org/bot{token}/sendMessage'
|
||||
ok = True
|
||||
for chat_id in chat_ids:
|
||||
data = urllib.parse.urlencode({
|
||||
'chat_id': chat_id,
|
||||
'text': text[:4000],
|
||||
'disable_web_page_preview': 'true',
|
||||
}).encode()
|
||||
try:
|
||||
req = urllib.request.Request(url, data=data, method='POST')
|
||||
with urllib.request.urlopen(req, timeout=15) as r:
|
||||
if r.status != 200:
|
||||
ok = False
|
||||
print(f'telegram HTTP {r.status}', file=sys.stderr)
|
||||
except Exception as e:
|
||||
print(f'telegram error: {e}', file=sys.stderr)
|
||||
ok = False
|
||||
return ok
|
||||
|
||||
|
||||
# ---------------- 감시 대상 ----------------
|
||||
def load_toggles() -> dict[str, str]:
|
||||
"""{code: name} — behive_web 의 🔔 토글이 켠 종목만."""
|
||||
raw = load_json(TOGGLES, {})
|
||||
by_code = raw.get('by_code') if isinstance(raw, dict) else None
|
||||
if not isinstance(by_code, dict):
|
||||
return {}
|
||||
out: dict[str, str] = {}
|
||||
for code, v in by_code.items():
|
||||
cc = kc._clean_code(code)
|
||||
if not cc or not v:
|
||||
continue
|
||||
# v 는 True(레거시) 또는 {'name': ...}
|
||||
out[cc] = (v.get('name') or '') if isinstance(v, dict) else ''
|
||||
return out
|
||||
|
||||
|
||||
# ---------------- 데이터원 ----------------
|
||||
def fetch_realtime(codes: list[str]) -> tuple[dict, dict, bool]:
|
||||
"""behive_web 실시간 허브에서 (quotes, vi, ok). 키움 호출 0.
|
||||
|
||||
허브가 콜드하거나 behive_web 이 죽어 있으면 ok=False — 호출측이 폴백/경고를 결정한다.
|
||||
"""
|
||||
if not codes:
|
||||
return {}, {}, False
|
||||
url = f'{RT_URL}?codes={",".join(codes)}'
|
||||
try:
|
||||
with urllib.request.urlopen(url, timeout=RT_TIMEOUT) as r:
|
||||
d = json.loads(r.read().decode())
|
||||
except Exception as e:
|
||||
print(f'[warn] behive_web 실시간 조회 실패 ({e}) — VI 감시 불가, ATR만 진행', file=sys.stderr)
|
||||
return {}, {}, False
|
||||
return (d.get('quotes') or {}), (d.get('vi') or {}), bool(d.get('connected'))
|
||||
|
||||
|
||||
def fetch_quotes_fallback(codes: list[str]) -> dict:
|
||||
"""구독 상한에 걸려 허브에 없는 종목만 ka10095 배치 1콜로 보충."""
|
||||
if not codes:
|
||||
return {}
|
||||
try:
|
||||
return kc.get_watchlist_quotes(codes) or {}
|
||||
except Exception as e:
|
||||
print(f'[warn] ka10095 배치 실패: {e}', file=sys.stderr)
|
||||
return {}
|
||||
|
||||
|
||||
# ---------------- 문턱 (자기 이력 분위수) ----------------
|
||||
def _quantile(sorted_vals: list[float], p: float) -> float:
|
||||
"""오름차순 리스트의 p 분위수. 실측 스크립트와 같은 식(nearest-rank)을 써야 값이 일치한다."""
|
||||
return sorted_vals[min(len(sorted_vals) - 1, int(len(sorted_vals) * p))]
|
||||
|
||||
|
||||
def _compute_thresholds(code: str) -> tuple[dict | None, bool]:
|
||||
"""(문턱 dict 또는 None, 재시도해야 하는가).
|
||||
|
||||
장중 이탈폭 = max(|고가−전일종가|, |저가−전일종가|) / 전일종가 × 100.
|
||||
종가 대비가 아니라 **전일종가 대비 장중 최대 이탈폭**을 쓰는 이유 — 실시간 감시가 보는 값이
|
||||
`현재가 vs 전일종가`(키움 pct)라서 같은 축으로 비교해야 한다. 종가기준은 장중 움직임을
|
||||
과소평가해(중간값 3.8% vs 종가기준 1.x%) 문턱이 너무 낮게 잡힌다.
|
||||
|
||||
⚠️ 두 번째 반환값이 필요한 이유 — 조회 실패(429·네트워크)를 이력부족과 같이 취급해
|
||||
빈 dict 로 캐시하면 그 종목이 **하루 내내 조용히 VI만 감시**하게 된다. 실패는 재시도 대상.
|
||||
"""
|
||||
try:
|
||||
import daily_candles_cache as dcc
|
||||
candles = dcc.get_candles(code, HISTORY_COUNT)
|
||||
except Exception as e:
|
||||
print(f'[{code}] 일봉 조회 실패 (다음 사이클 재시도): {e}', file=sys.stderr)
|
||||
return None, True
|
||||
if not candles or len(candles) < MIN_HISTORY:
|
||||
return None, False
|
||||
exc: list[float] = []
|
||||
for i in range(1, len(candles)):
|
||||
pc = candles[i - 1]['close']
|
||||
if not pc:
|
||||
continue
|
||||
exc.append(max(abs(candles[i]['high'] - pc), abs(candles[i]['low'] - pc)) / pc * 100)
|
||||
if len(exc) < MIN_HISTORY:
|
||||
return None, False
|
||||
exc.sort()
|
||||
prev_close = candles[-1]['close']
|
||||
if not prev_close:
|
||||
return None, False
|
||||
return {
|
||||
'thr': round(_quantile(exc, SURGE_PCTL), 2),
|
||||
'thr_big': round(_quantile(exc, SURGE_PCTL_BIG), 2),
|
||||
'prev_close': prev_close,
|
||||
'n': len(exc),
|
||||
}, False
|
||||
|
||||
|
||||
def get_threshold_map(codes: list[str]) -> dict[str, dict]:
|
||||
"""종목별 문턱 맵. 하루 1회만 계산하고 캐시한다.
|
||||
|
||||
⚠️ daily_candles_cache.get_candles 는 캐시 최신봉이 어제보다 오래되면 ka10081 을 때린다.
|
||||
매 사이클(1분) × 종목수만큼 호출하면 폭주하므로 날짜가 바뀔 때와 새 토글이 생길 때만 계산.
|
||||
⚠️ 분위수 파라미터를 바꿨으면 캐시가 옛 값을 들고 있으니 `pctl` 서명이 다르면 재계산한다.
|
||||
⚠️ **ka10081 유량 제한이 초당 5건**이라 종목을 한꺼번에 돌리면 429가 쏟아진다(2026-08-04 실측:
|
||||
70종목 일괄 산출 시 26종목 실패). 그래서 사이클당 `MAX_COMPUTE_PER_CYCLE` 개까지만,
|
||||
`COMPUTE_PACE_SEC` 간격으로 계산한다. 남은 종목은 다음 사이클이 이어받는다(1분 간격 × 396회라
|
||||
장 시작 몇 분 안에 전부 채워진다). 조회 실패는 캐시하지 않아 다음 사이클에 재시도된다.
|
||||
"""
|
||||
today = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
sig = f'{SURGE_PCTL}/{SURGE_PCTL_BIG}'
|
||||
cache = load_json(THR_CACHE, {})
|
||||
fresh = cache.get('date') == today and cache.get('pctl') == sig
|
||||
by_code = cache.get('by_code') if fresh else {}
|
||||
if not isinstance(by_code, dict):
|
||||
by_code = {}
|
||||
missing = [c for c in codes if c not in by_code][:MAX_COMPUTE_PER_CYCLE]
|
||||
if missing:
|
||||
for i, c in enumerate(missing):
|
||||
if i:
|
||||
time.sleep(COMPUTE_PACE_SEC)
|
||||
r, retry = _compute_thresholds(c)
|
||||
if retry:
|
||||
continue # 실패는 기록하지 않는다 — 다음 사이클에 다시 시도
|
||||
by_code[c] = r if r else {}
|
||||
save_json(THR_CACHE, {'date': today, 'pctl': sig, 'by_code': by_code})
|
||||
return {c: v for c, v in by_code.items() if v.get('thr')}
|
||||
|
||||
|
||||
# ---------------- 상·하한가 (거래소 계산값) ----------------
|
||||
def get_limit_map(codes: list[str]) -> dict[str, dict]:
|
||||
"""{code: {'upl', 'lst'}} — 거래소가 계산한 가격제한폭. 하루 1콜(ka10095 배치).
|
||||
|
||||
기준가(전일종가)로 정해져 장중 불변이라 하루 1회면 충분하다. 분위수 문턱과 달리
|
||||
일봉 이력이 필요 없어서 신규상장 등 이력 부족 종목도 이 기준으론 감시된다.
|
||||
⚠️ 배치 호출 자체가 실패하면 캐시하지 않는다 — 문턱 캐시와 같은 이유로, 실패를
|
||||
'제한가 없음'으로 굳히면 그 종목이 하루 내내 조용히 빠진다. 응답에 값이 없는
|
||||
종목만 빈 dict 로 굳혀 매 사이클 재조회를 막는다.
|
||||
"""
|
||||
if not codes:
|
||||
return {}
|
||||
today = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
cache = load_json(LIMITS_CACHE, {})
|
||||
by_code = cache.get('by_code') if cache.get('date') == today else {}
|
||||
if not isinstance(by_code, dict):
|
||||
by_code = {}
|
||||
missing = [c for c in codes if c not in by_code]
|
||||
if missing:
|
||||
try:
|
||||
rows = kc.get_watchlist_quotes(missing) or {}
|
||||
except Exception as e:
|
||||
print(f'[warn] 상하한가 조회 실패 (다음 사이클 재시도): {e}', file=sys.stderr)
|
||||
return {c: v for c, v in by_code.items() if v.get('upl')}
|
||||
for c in missing:
|
||||
r = rows.get(c) or {}
|
||||
upl, lst = r.get('upper_limit') or 0, r.get('lower_limit') or 0
|
||||
by_code[c] = {'upl': upl, 'lst': lst} if (upl and lst) else {}
|
||||
save_json(LIMITS_CACHE, {'date': today, 'by_code': by_code})
|
||||
return {c: v for c, v in by_code.items() if v.get('upl')}
|
||||
|
||||
|
||||
# ---------------- 판정 ----------------
|
||||
def _limit_hit(price: int, limits: dict | None) -> str | None:
|
||||
"""'up'(상한가) | 'down'(하한가) | None. 거래소 제한가와 현재가 비교."""
|
||||
if not limits or not price:
|
||||
return None
|
||||
upl, lst = limits.get('upl') or 0, limits.get('lst') or 0
|
||||
if upl and price >= upl:
|
||||
return 'up'
|
||||
if lst and price <= lst:
|
||||
return 'down'
|
||||
return None
|
||||
|
||||
|
||||
def _quantile_triggers(pct: float, thr: dict | None) -> list[dict]:
|
||||
"""분위수 트리거만 — [{key, reason, word}]."""
|
||||
if not thr or not thr.get('thr'):
|
||||
return []
|
||||
direction = 'up' if pct > 0 else 'down'
|
||||
word = '급등' if pct > 0 else '급락'
|
||||
t1, t2 = thr['thr'], thr.get('thr_big') or 0
|
||||
top1 = round((1 - SURGE_PCTL) * 100)
|
||||
top2 = round((1 - SURGE_PCTL_BIG) * 100)
|
||||
out: list[dict] = []
|
||||
if t2 and abs(pct) >= t2:
|
||||
out.append({'key': f'{direction}2', 'word': word,
|
||||
'reason': f'{thr["n"]}일 중 상위 {top2}% 움직임 (문턱 {t2:.1f}%)'})
|
||||
if abs(pct) >= t1:
|
||||
out.append({'key': direction, 'word': word,
|
||||
'reason': f'{thr["n"]}일 중 상위 {top1}% 움직임 (문턱 {t1:.1f}%)'})
|
||||
return out
|
||||
|
||||
|
||||
def evaluate(pct: float, price: int, thr: dict | None, vi: dict | None,
|
||||
limits: dict | None) -> tuple[list[dict], list[dict], str]:
|
||||
"""(즉시 알릴 트리거, 보류할 트리거, 가림사유).
|
||||
|
||||
거래소 판정(상·하한가·VI)이 걸려 있는 동안 분위수 트리거는 **보류**한다. 같은 사건을
|
||||
두 번 알리지 않으면서도, 그 사이 문턱을 넘은 사실은 버리지 않고 풀린 뒤에 내보내기 위해서다.
|
||||
가림사유가 빈 문자열이면 가린 것이 없다는 뜻 — 호출측은 이때 보류분을 방출한다.
|
||||
⚠️ 가림 여부는 `defer` 가 비었는지로 판단하면 안 된다. VI 중에 주가가 문턱 아래로
|
||||
되밀리면 defer 도 비는데, 그걸 '가림 해제'로 읽으면 VI 도중에 보류분이 새어나간다.
|
||||
"""
|
||||
now: list[dict] = []
|
||||
hit = _limit_hit(price, limits)
|
||||
if hit == 'up':
|
||||
now.append({'key': 'limit_up', 'word': '상한가',
|
||||
'reason': f'거래소 상한가 도달 ({(limits or {}).get("upl", 0):,}원)'})
|
||||
elif hit == 'down':
|
||||
now.append({'key': 'limit_down', 'word': '하한가',
|
||||
'reason': f'거래소 하한가 도달 ({(limits or {}).get("lst", 0):,}원)'})
|
||||
vi_on = bool(vi and vi.get('active'))
|
||||
if vi_on:
|
||||
t = (vi.get('trigger_time') or '').strip() or 'na'
|
||||
kind = (vi.get('apply_kind') or '').strip() or 'VI'
|
||||
now.append({'key': f'vi:{t}', 'word': None, 'reason': f'거래소 VI 발동 ({kind})'})
|
||||
quantile = _quantile_triggers(pct, thr)
|
||||
if hit or vi_on:
|
||||
return now, quantile, ({'up': '상한가', 'down': '하한가'}.get(hit) or 'VI')
|
||||
return now + quantile, [], ''
|
||||
|
||||
|
||||
def build_message(records: list[dict]) -> str:
|
||||
ts = datetime.now(KST).strftime('%m/%d %H:%M')
|
||||
lines = [f'[급등락] {ts}', f'{len(records)}건 감지']
|
||||
for r in records:
|
||||
pct = r['pct']
|
||||
# ⚠️ 아이콘은 pct 가 아니라 방향어에서 파생한다. 보류 방출 건은 돌파 시점 방향(급락)과
|
||||
# 방출 시점 현재가 부호(+)가 어긋날 수 있어, pct 로 고르면 '🚀 급락'이 찍힌다.
|
||||
word = r.get('word') or ('급등' if pct > 0 else '급락')
|
||||
icon = {'상한가': '⏫', '하한가': '⏬', '급등': '🚀', '급락': '🔻'}.get(word, '🚀')
|
||||
label = r['name'] or r['code']
|
||||
lines.append('')
|
||||
lines.append(f'{icon} #{label} {word} ({pct:+.2f}%)')
|
||||
lines.append(f'• 현재가: {r["price"]:,}원')
|
||||
lines.append(f'• 사유: {r["reason"]}')
|
||||
if r.get('vi_price'):
|
||||
lines.append(f'• VI 발동가: {r["vi_price"]:,}원')
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
# ---------------- 실행 ----------------
|
||||
def _prune(state: dict, today: str) -> dict:
|
||||
"""오늘·어제만 남긴다 (무한 증식 방지)."""
|
||||
keep = {today, (datetime.now(KST) - timedelta(days=1)).strftime('%Y-%m-%d')}
|
||||
return {k: v for k, v in state.items() if k in keep}
|
||||
|
||||
|
||||
def run(dry: bool = False, force: bool = False) -> int:
|
||||
if not force and not is_market_hours():
|
||||
print(f'장외 시간 — skip ({datetime.now(KST).strftime("%Y-%m-%d %H:%M")})')
|
||||
return 0
|
||||
toggles = load_toggles()
|
||||
if not toggles:
|
||||
print('감시 대상 없음 — 자산웹에서 🔔 토글을 켜주세요')
|
||||
return 0
|
||||
codes = sorted(toggles)
|
||||
quotes, vi_map, connected = fetch_realtime(codes)
|
||||
missing = [c for c in codes if not (quotes.get(c) or {}).get('price')]
|
||||
if missing:
|
||||
for c, q in fetch_quotes_fallback(missing).items():
|
||||
quotes[kc._clean_code(c)] = {'price': q.get('price'), 'pct': q.get('change_pct'), 'change': q.get('change')}
|
||||
thr_map = get_threshold_map(codes)
|
||||
limit_map = get_limit_map(codes)
|
||||
|
||||
today = datetime.now(KST).strftime('%Y-%m-%d')
|
||||
day_state = load_json(ALERTS_STATE, {}).get(today) or {}
|
||||
already = {f'{c}:{k}' for c, ks in day_state.items() if isinstance(ks, list) for k in ks}
|
||||
# 보류분 — 감시에서 빠진 종목 것은 버린다(토글이 꺼졌으면 방출할 이유가 없다).
|
||||
held = day_state.get(PENDING_KEY) or {}
|
||||
pending = {c: v for c, v in held.items() if c in toggles and isinstance(v, dict)} if isinstance(held, dict) else {}
|
||||
pending_sig = json.dumps(pending, sort_keys=True)
|
||||
|
||||
to_send: list[dict] = []
|
||||
flushed: list[tuple[str, str]] = [] # (code, key) — 발송 성공 시에만 보류에서 지운다
|
||||
|
||||
def _rec(code: str, price: int, pct: float, trig: dict, vi: dict | None) -> dict:
|
||||
r = {
|
||||
'code': code,
|
||||
'name': toggles.get(code) or '',
|
||||
'price': price,
|
||||
'pct': pct,
|
||||
'key': trig['key'],
|
||||
'word': trig.get('word'),
|
||||
'reason': trig['reason'],
|
||||
}
|
||||
if vi and vi.get('active'):
|
||||
r['vi_price'] = vi.get('trigger_price') or 0
|
||||
return r
|
||||
|
||||
for code in codes:
|
||||
q = quotes.get(code) or {}
|
||||
if not q.get('price') or q.get('pct') is None:
|
||||
continue
|
||||
price, pct = int(q['price']), float(q['pct'])
|
||||
vi = vi_map.get(code)
|
||||
now_trigs, defer_trigs, blocked_by = evaluate(
|
||||
pct, price, thr_map.get(code), vi, limit_map.get(code))
|
||||
for trig in now_trigs:
|
||||
if f'{code}:{trig["key"]}' in already:
|
||||
continue
|
||||
to_send.append(_rec(code, price, pct, trig, vi))
|
||||
already.add(f'{code}:{trig["key"]}')
|
||||
if blocked_by:
|
||||
# 가림 중 — 문턱 돌파 사실만 적어둔다. 이탈폭이 가장 컸던 시점을 남긴다.
|
||||
for trig in defer_trigs:
|
||||
if f'{code}:{trig["key"]}' in already:
|
||||
continue
|
||||
cur = (pending.get(code) or {}).get(trig['key']) or {}
|
||||
if abs(pct) > abs(cur.get('pct') or 0):
|
||||
pending.setdefault(code, {})[trig['key']] = {
|
||||
'pct': pct, 'word': trig.get('word'),
|
||||
'reason': trig['reason'], 'via': blocked_by,
|
||||
}
|
||||
continue
|
||||
# 가림 해제 — 보류분 방출. 같은 키를 위에서 이미 즉시 알렸으면 already 가 걸러낸다.
|
||||
for key, d in sorted((pending.get(code) or {}).items()):
|
||||
if f'{code}:{key}' in already:
|
||||
flushed.append((code, key))
|
||||
continue
|
||||
trig = {
|
||||
'key': key, 'word': d.get('word'),
|
||||
'reason': f'{d.get("reason") or "문턱 돌파"} — {d.get("via") or "VI"} 중 최대 {d.get("pct", 0):+.2f}% 도달',
|
||||
}
|
||||
to_send.append(_rec(code, price, pct, trig, vi))
|
||||
already.add(f'{code}:{key}')
|
||||
flushed.append((code, key))
|
||||
|
||||
if dry:
|
||||
print(f'감시 {len(codes)}종목 / 허브연결 {connected} / 문턱 {len(thr_map)}종목 / 제한가 {len(limit_map)}종목')
|
||||
for code in codes:
|
||||
q = quotes.get(code) or {}
|
||||
t = thr_map.get(code) or {}
|
||||
lm = limit_map.get(code) or {}
|
||||
thr = f'{t["thr"]:.1f}% / 확대 {t["thr_big"]:.1f}%' if t.get('thr') else '— (이력부족, VI·제한가만)'
|
||||
lim = f'{lm["upl"]:,}/{lm["lst"]:,}' if lm.get('upl') else '—'
|
||||
print(f' {code} {toggles.get(code) or "":<12} 등락 {q.get("pct")}% / 문턱 {thr} / 상하한 {lim}'
|
||||
f'{" / VI" if (vi_map.get(code) or {}).get("active") else ""}'
|
||||
f'{" / 보류 " + ",".join(sorted(pending[code])) if pending.get(code) else ""}')
|
||||
if to_send:
|
||||
print('--- DRY ---')
|
||||
print(build_message(to_send))
|
||||
print(f'done. watched={len(codes)} triggered={len(to_send)} pending={sum(len(v) for v in pending.values())}')
|
||||
return 0
|
||||
|
||||
ok = send_telegram(build_message(to_send)) if to_send else True
|
||||
if ok:
|
||||
for code, key in flushed:
|
||||
bucket = pending.get(code) or {}
|
||||
bucket.pop(key, None)
|
||||
if not bucket:
|
||||
pending.pop(code, None)
|
||||
if not to_send and json.dumps(pending, sort_keys=True) == pending_sig:
|
||||
print(f'done. watched={len(codes)} triggered=0')
|
||||
return 0
|
||||
|
||||
with alerts_lock():
|
||||
latest = _prune(load_json(ALERTS_STATE, {}), today)
|
||||
day = latest.setdefault(today, {})
|
||||
if ok:
|
||||
for r in to_send:
|
||||
bucket = day.setdefault(r['code'], [])
|
||||
if r['key'] not in bucket:
|
||||
bucket.append(r['key'])
|
||||
print(f'alerted {r["code"]} {r["name"]}:{r["key"]} {r["pct"]:+.2f}% @ {r["price"]:,}원')
|
||||
if pending:
|
||||
day[PENDING_KEY] = pending
|
||||
else:
|
||||
day.pop(PENDING_KEY, None)
|
||||
save_json(ALERTS_STATE, latest)
|
||||
print(f'done. watched={len(codes)} triggered={len(to_send)} pending={sum(len(v) for v in pending.values())}')
|
||||
return 0
|
||||
|
||||
|
||||
def cmd_list() -> int:
|
||||
toggles = load_toggles()
|
||||
if not toggles:
|
||||
print('감시 대상 없음 — 자산웹에서 🔔 토글을 켜주세요')
|
||||
return 0
|
||||
codes = sorted(toggles)
|
||||
thr_map = get_threshold_map(codes)
|
||||
limit_map = get_limit_map(codes)
|
||||
top1 = round((1 - SURGE_PCTL) * 100)
|
||||
top2 = round((1 - SURGE_PCTL_BIG) * 100)
|
||||
print(f'감시 {len(codes)}종목 — 1차=자기이력 상위 {top1}% / 확대=상위 {top2}%')
|
||||
print(f'{"종목":<16}{"전일종가":>10}{"1차":>7}{"급등가":>10}{"급락가":>10}{"확대":>7}'
|
||||
f'{"상한가":>10}{"하한가":>10}')
|
||||
for c in codes:
|
||||
t = thr_map.get(c) or {}
|
||||
lm = limit_map.get(c) or {}
|
||||
name = (toggles[c] or c)[:15]
|
||||
lim = f'{lm["upl"]:>10,}{lm["lst"]:>10,}' if lm.get('upl') else f'{"—":>10}{"—":>10}'
|
||||
if not t.get('thr'):
|
||||
print(f'{name:<16}{"이력 부족 — VI·제한가만":>30}{lim}')
|
||||
continue
|
||||
pv, t1, t2 = t['prev_close'], t['thr'], t['thr_big']
|
||||
print(f'{name:<16}{pv:>10,}{t1:>6.1f}%{round(pv * (1 + t1 / 100)):>10,}'
|
||||
f'{round(pv * (1 - t1 / 100)):>10,}{t2:>6.1f}%{lim}')
|
||||
print(f'\n※ 상·하한가 도달은 문턱과 별개로 항상 알림 (거래소 계산값, 하루 1콜 캐시)')
|
||||
print(f'※ VI 발동은 이 문턱과 별개로 먼저 알림 (정적VI 전일종가 ±10% 부근)')
|
||||
print(f'※ 상·하한가·VI 중 문턱을 넘으면 보류했다가 풀린 뒤 알림 (사실을 버리지 않음)')
|
||||
print(f'※ 문턱은 하루 가격제한폭 ±30% 안에 있음이 보장됨 (실제 관측된 이탈폭의 분위수)')
|
||||
return 0
|
||||
|
||||
|
||||
def main():
|
||||
cmd = sys.argv[1] if len(sys.argv) > 1 else 'help'
|
||||
force = '--force' in sys.argv[2:]
|
||||
try:
|
||||
if cmd == 'check':
|
||||
return run(dry=False, force=force)
|
||||
if cmd == 'dry-run':
|
||||
return run(dry=True, force=True)
|
||||
if cmd == 'list':
|
||||
return cmd_list()
|
||||
print(__doc__, file=sys.stderr)
|
||||
return 2
|
||||
except Exception as e:
|
||||
import traceback
|
||||
tb = traceback.format_exc()
|
||||
print(f'[fatal] {e}\n{tb}', file=sys.stderr)
|
||||
try:
|
||||
send_telegram(f'⚠️ [surge_monitor] 실행 실패\n{type(e).__name__}: {e}')
|
||||
except Exception:
|
||||
pass
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main())
|
||||
@@ -67,6 +67,95 @@ def _save_all(rows: list[dict]) -> None:
|
||||
tmp.replace(JOURNAL)
|
||||
|
||||
|
||||
def _advance(qty: int, avg: float, buy_qty: int, sell_qty: int, buy_avg: float) -> tuple[int, float]:
|
||||
"""running 보유수량·평단 1스텝 진행.
|
||||
|
||||
매도는 **전 보유분 우선 소진**(평단 유지) → 잔여 당일 매수분을 가중평균 블렌딩.
|
||||
이 순서가 '전일 보유 평단' 정의의 핵심 — 당일 매수가 매도 원가에 섞이지 않고,
|
||||
매도로 원물이 다 빠지면 남는 건 당일 매수분 평단이 된다.
|
||||
"""
|
||||
consumed = min(sell_qty, qty)
|
||||
qty -= consumed
|
||||
rem_buy = buy_qty - (sell_qty - consumed) # 당일매수분 중 매도로 안 빠진 잔량
|
||||
if rem_buy > 0:
|
||||
avg = (qty * avg + rem_buy * buy_avg) / (qty + rem_buy)
|
||||
qty += rem_buy
|
||||
qty = max(qty, 0)
|
||||
if qty == 0:
|
||||
avg = 0.0 # 전량 청산 → 평단 리셋 (이후 순수 데이트레이딩을 보유분으로 오인 방지)
|
||||
return qty, avg
|
||||
|
||||
|
||||
def _apply_rebase(row: dict, sell_avg: float, sell_qty: int, pre_avg: float) -> None:
|
||||
"""row의 pl_amt/prft_rt를 '전일 보유 평단(pre_avg)' 기준으로 덮어쓴다 (in-place).
|
||||
|
||||
그로스 = (매도평단 - 전일평단) × 매도수량, pl_amt = 그로스 - 수수료·세금 (ka10170과 동일 net).
|
||||
"""
|
||||
gross = (sell_avg - pre_avg) * sell_qty
|
||||
fee = int(row.get('cmsn_tax') or 0)
|
||||
row['pl_amt'] = round(gross) - fee
|
||||
cost = pre_avg * sell_qty
|
||||
row['prft_rt'] = round(row['pl_amt'] / cost * 100, 2) if cost else 0.0
|
||||
row['_pl_rebased'] = True
|
||||
row['prev_avg'] = round(pre_avg)
|
||||
|
||||
|
||||
def rebase_pl(rows: list[dict]) -> list[dict]:
|
||||
"""매도 실현손익을 '전일 보유 평단' 기준으로 재계산해 **새 리스트** 반환 (파일 미변경, 표시 전용).
|
||||
|
||||
ka10170은 당일 매수+매도가 같이 있으면 당일 매수평단↔매도평단 round-trip으로 pl_amt를 매겨
|
||||
어제까지 보유한 원물의 손익을 가린다 (2026-06-29 0193W0: 6/26 보유 62@24,550 +
|
||||
당일 62@21,875 매수 후 62@21,885 매도 → ka10170 +220원, 실제 원물 손익 약 -165,630원).
|
||||
|
||||
(account, code)별로 날짜순 재생(_advance)하며, **당일 매수가 동반된 매도 행**만
|
||||
당일 매수 전 보유 평단을 원가로 잡아 덮어쓴다. 순수 매도(당일 매수 없음)는 키움 값이
|
||||
정확하므로 건드리지 않는다.
|
||||
|
||||
⚠️ 입력 rows는 각 (account, code)의 **전체 이력**을 포함해야 재생이 정확하다.
|
||||
"""
|
||||
out = [dict(r) for r in rows]
|
||||
by_key: dict[tuple, list[dict]] = {}
|
||||
for r in out:
|
||||
by_key.setdefault((r.get('account'), r.get('code')), []).append(r)
|
||||
for grp in by_key.values():
|
||||
grp.sort(key=lambda r: (r.get('date', ''), r.get('collected_at', '')))
|
||||
qty, avg = 0, 0.0
|
||||
for r in grp:
|
||||
bq = int(r.get('buy_qty') or 0)
|
||||
sq = int(r.get('sell_qty') or 0)
|
||||
ba = float(r.get('buy_avg') or 0)
|
||||
sa = float(r.get('sell_avg') or 0)
|
||||
pre_avg = avg # 당일 매수 반영 전 = 전일 보유 평단
|
||||
if sq > 0 and bq > 0 and pre_avg > 0:
|
||||
_apply_rebase(r, sa, sq, pre_avg)
|
||||
qty, avg = _advance(qty, avg, bq, sq, ba)
|
||||
return out
|
||||
|
||||
|
||||
def prev_avg_map(before_iso: str) -> dict:
|
||||
"""파일 이력 중 before_iso **미만**(전일까지)을 (account, code)별 재생해 시작 평단 맵 반환.
|
||||
|
||||
라이브 journal(당일분)의 round-trip 오염 행을 재계산할 때 원가(전일 보유 평단) 소스.
|
||||
{(account, code): avg}. 보유 0이면 0.
|
||||
"""
|
||||
rows = [r for r in _load_all() if r.get('date', '') < before_iso]
|
||||
by_key: dict[tuple, list[dict]] = {}
|
||||
for r in rows:
|
||||
by_key.setdefault((r.get('account'), r.get('code')), []).append(r)
|
||||
out: dict[tuple, float] = {}
|
||||
for key, grp in by_key.items():
|
||||
grp.sort(key=lambda r: (r.get('date', ''), r.get('collected_at', '')))
|
||||
qty, avg = 0, 0.0
|
||||
for r in grp:
|
||||
qty, avg = _advance(
|
||||
qty, avg,
|
||||
int(r.get('buy_qty') or 0), int(r.get('sell_qty') or 0),
|
||||
float(r.get('buy_avg') or 0),
|
||||
)
|
||||
out[key] = avg
|
||||
return out
|
||||
|
||||
|
||||
def record_trades(all_trades: dict, *, base_dt: str | None = None, quiet: bool = False, tag: str = 'collect') -> dict:
|
||||
"""이미 받은 ka10170 응답({label: [trades]})을 jsonl에 적재 (idempotent).
|
||||
`(iso_date, account in all_trades)` 단위 재적재 — 다른 계좌는 영향 X.
|
||||
|
||||
@@ -0,0 +1,399 @@
|
||||
#!/usr/bin/env python3
|
||||
"""트레일링 스톱 감시 — 고점이 갱신되면 키움 스톱주문의 조건단가를 상향 정정한다.
|
||||
|
||||
**예약 1건 = 계단(레그) N개.** 고점 대비 하락률이 깊어질수록 더 많이 파는 계단식 청산이라
|
||||
계단마다 스톱주문이 따로 걸려 있다. 고점이 오르면 살아있는 레그를 전부 상향 정정한다.
|
||||
|
||||
LLM을 깨우지 않는다. 하는 일은 딱 두 가지:
|
||||
1. 레그가 아직 미체결로 살아있는지 확인 (ka10075) — 사라졌으면 정리+알림
|
||||
2. 현재가가 저장된 고점을 넘었으면 kt10002 정정으로 계단별 조건단가·지정가를 함께 올림
|
||||
|
||||
신규 발주·수량 변경·방향 변경은 하지 않는다. 사람이 PIN으로 승인한 주문의
|
||||
조건단가를 올리는 것뿐이고, 상향 전용이라 손절선이 내려가는 일은 없다.
|
||||
한 계단이 체결돼도 남은 계단을 재배치하지 않는다 — 재배치엔 취소+신규 발주가 필요해
|
||||
감시 루프에 자동 발주 경로가 생긴다(2026-07-31 관리자님 결정).
|
||||
|
||||
⚠️ 레그가 사라진 사유는 **주문번호 단위**인 kt00007 로 판정한다. 종목 단위 집계인
|
||||
당일매매일지(ka10170)를 쓰면 한 계단이 체결된 날 나머지 계단이 장 마감으로 소멸했을 때
|
||||
그 소멸분까지 '체결' 로 오판한다 — 같은 종목 매도 기록이 이미 남아 있기 때문이다.
|
||||
|
||||
⚠️ 정정하면 주문번호가 새로 발급된다 (kt10002 응답 ord_no). trailing.commit_step_modify 가
|
||||
상태파일의 레그별 ord_no 를 갱신하지 않으면 그 레그의 다음 정정부터 전부 실패한다.
|
||||
|
||||
⚠️ 고점은 '현재가' 로만 갱신한다. ka10095 가 당일 고가(high)도 주지만, 등록 시점 이전에
|
||||
찍힌 고가까지 반영되면 등록 직후 손절선이 현재가 위로 올라가 즉시 발동할 수 있다.
|
||||
(예: 오전 15,000 → 14,000 일 때 3% 등록 → 당일고가 기준이면 조건 14,550 > 현재가)
|
||||
감시 간격이 2분이라 현재가 샘플링으로 충분하다.
|
||||
|
||||
현재 launchd cadence 는 1분 1회 (`check`), 08:00~20:00 전 거래 세션.
|
||||
상시 daemon 을 띄우지 않는 이유는 매매 API 를 호출할 수 있는 프로세스를
|
||||
24시간 살려두지 않기 위함.
|
||||
|
||||
⚠️ NXT 시간대(프리 08:00~09:00 / 애프터 15:30~20:00) 감시는 2026-07-30 관리자님 요청으로 추가.
|
||||
**정규장에 등록된 주문(SOR `_AL` 또는 KRX `''`)의 정정이 NXT 단독 시간대에 받아들여지는지
|
||||
실증 안 됨.** 거부되면 고점 갱신마다 실패가 반복되므로 실패 알림에 30분 쿨다운을 걸었다
|
||||
(로그에는 매번 남으니 진단은 logs/stock-trailing-monitor.log 로).
|
||||
|
||||
⚠️ 1분보다 짧게 가려면 --repeat/--gap 을 쓴다. launchd 는 StartCalendarInterval 이
|
||||
분 단위가 최소라 30초 발화를 만들 수 없고, StartInterval=30 은 GUI 세션 idle 시
|
||||
발화가 보류돼(timer coalescing) 장중에 안 도는 문제가 있어 못 쓴다
|
||||
(sim-scan 이 같은 이유로 캘린더로 전환됨). 그래서 30초는 "1분 발화 + 한 프로세스가
|
||||
30초 간격 2회 검사" 로만 가능하다 — plist ProgramArguments 에 인자를 붙이면 된다.
|
||||
(2026-07-30 30초로 운영했다가 관리자님 지시로 1분 복귀. 옵션은 보존)
|
||||
|
||||
Usage:
|
||||
python3 trailing_monitor.py check # 1회 감시 (현재 launchd 설정)
|
||||
python3 trailing_monitor.py check --repeat 2 --gap 30 # 30초 간격 2회
|
||||
python3 trailing_monitor.py check --force # 장외에도 실행 (테스트용)
|
||||
python3 trailing_monitor.py check --dry-run # 정정 API 호출 없이 판단·body 만 출력
|
||||
python3 trailing_monitor.py list # 현재 예약 목록
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime, timedelta, timezone
|
||||
from pathlib import Path
|
||||
|
||||
KST = timezone(timedelta(hours=9))
|
||||
WORKSPACE = Path('/Users/snowoyh/.openclaw/agents/stock/workspace')
|
||||
sys.path.insert(0, str(WORKSPACE / 'scripts'))
|
||||
|
||||
import kiwoom_client as kc # noqa: E402
|
||||
from orders import guards, kiwoom_order, trailing # noqa: E402
|
||||
from orders.handler import send_telegram # noqa: E402
|
||||
|
||||
# 정정 실패 알림 쿨다운 — NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 반복된다.
|
||||
FAIL_NOTICE_COOLDOWN_SEC = 1800
|
||||
|
||||
|
||||
def _log(msg: str) -> None:
|
||||
print(f'[{datetime.now(KST).strftime("%Y-%m-%d %H:%M:%S")}] {msg}', flush=True)
|
||||
|
||||
|
||||
def session_now() -> tuple[bool, str]:
|
||||
"""(감시할 세션인가, 세션명). 주말·휴장일·거래시간 외는 False.
|
||||
|
||||
세션 판정은 orders/limits.json 을 단일 진실 소스로 쓰는 guards.session_at 재사용 —
|
||||
NXT 프리(08:00~09:00) / 정규(09:00~15:20) / 종가단일가(15:20~15:30) /
|
||||
NXT 애프터(15:30~20:00). 시간이 바뀌면 limits.json 만 고치면 된다.
|
||||
"""
|
||||
now = datetime.now(KST)
|
||||
if now.weekday() >= 5:
|
||||
return False, 'WEEKEND'
|
||||
if guards.is_today_holiday(now):
|
||||
return False, 'HOLIDAY'
|
||||
sess = guards.session_at(now)
|
||||
return sess != 'CLOSED', sess
|
||||
|
||||
|
||||
def _pct_s(v) -> str:
|
||||
"""10.0 → '10' — 계단 하락률 표기."""
|
||||
return f'{float(v or 0):g}'
|
||||
|
||||
|
||||
def _leg_fill_check(account: str, ord_no: str, cache: dict) -> tuple:
|
||||
"""레그가 사라진 사유 판정 — kt00007 에서 **그 주문번호의** 체결수량을 본다.
|
||||
|
||||
⚠️ 미체결 조회에서 사라진 것만으로는 체결·취소·소멸을 구분할 수 없다(셋 다 목록에서 빠짐).
|
||||
종목 단위인 당일매매일지(ka10170)로 판정하면 계단 하나가 체결된 날 나머지 계단이
|
||||
장 마감으로 소멸했을 때 그 소멸분까지 '체결' 로 오판한다 — 같은 종목의 매도 기록이
|
||||
이미 남아 있기 때문이다. 주문번호 단위인 kt00007 은 레그마다 정확히 갈린다.
|
||||
|
||||
반환: (체결행 dict 또는 None, 조회 성공 여부).
|
||||
조회 실패와 '체결 안 됨' 을 반드시 구분해야 한다 — 실패를 '체결 안 됨' 으로 단정하면
|
||||
실제로 팔렸는데 안 팔렸다고 알리게 된다.
|
||||
"""
|
||||
if account not in cache:
|
||||
try:
|
||||
cache[account] = kc.get_order_executions(account)
|
||||
except Exception as e:
|
||||
_log(f'주문체결내역 조회 실패 ({account}): {e!r}')
|
||||
cache[account] = None
|
||||
rows = cache[account]
|
||||
if rows is None:
|
||||
return None, False
|
||||
for row in rows:
|
||||
if (row.get('ord_no') or '').strip() == ord_no and (row.get('cntr_qty') or 0) > 0:
|
||||
return row, True
|
||||
return None, True
|
||||
|
||||
|
||||
def _notify_gone_batch(events: list) -> None:
|
||||
"""한 사이클에 사라진 레그들을 예약 단위로 묶어 한 번만 알린다.
|
||||
|
||||
장 마감이면 계단이 통째로 소멸하는데 레그마다 보내면 3~5통이 몰아친다.
|
||||
체결 / 미체결 소멸(장 마감 취소 등)은 관리자님이 취해야 할 행동이 완전히 다르므로
|
||||
계단별로 구분해 한 메시지 안에 나열한다.
|
||||
|
||||
2026-07-30 실측: 스톱주문은 장 마감 후 체결 없이 소멸한다(15:30~18:21 사이).
|
||||
자동 재등록은 하지 않는다(관리자님 지시) — 다시 걸려면 자산웹에서 수동 등록.
|
||||
"""
|
||||
by_res: dict = {}
|
||||
for ev in events:
|
||||
by_res.setdefault(ev['res']['id'], []).append(ev)
|
||||
|
||||
for evs in by_res.values():
|
||||
res = evs[0]['res']
|
||||
remaining = min(e['remaining'] for e in evs)
|
||||
any_filled = any(e['filled'] for e in evs)
|
||||
unknown = any(not e['ok'] for e in evs)
|
||||
if any_filled:
|
||||
icon = '✅'
|
||||
word = '체결'
|
||||
elif unknown:
|
||||
icon = '🎯'
|
||||
word = '종료'
|
||||
else:
|
||||
icon = '⚠️'
|
||||
word = '소멸'
|
||||
lines = [f'{icon} 트레일링 {word} — {res["symbol_name"]} ({res["symbol"]})',
|
||||
f'계좌: {res["account"]} · 고점 {res["peak"]:,}원']
|
||||
if res.get('min_sell_price'):
|
||||
lines.append(f'최저 매도가 {res["min_sell_price"]:,}원')
|
||||
for ev in sorted(evs, key=lambda e: e['step']['n']):
|
||||
s = ev['step']
|
||||
head = (f'{s["n"]}단계 −{_pct_s(s["pct"])}% {s["cond_uv"]:,}원 · {s["qty"]:,}주')
|
||||
if ev['filled']:
|
||||
f = ev['filled']
|
||||
lines.append(f' ✅ {head} → 체결 {f.get("cntr_qty", 0):,}주 '
|
||||
f'@ {f.get("cntr_uv", 0):,}원')
|
||||
elif ev['ok']:
|
||||
lines.append(f' ⚠️ {head} → 미체결 소멸 (보유수량 그대로)')
|
||||
else:
|
||||
lines.append(f' 🎯 {head} → 체결 여부 판정 불가 (체결내역 조회 실패)')
|
||||
if remaining > 0:
|
||||
lines.append(f'남은 계단 {remaining}개 — 감시 계속합니다.')
|
||||
else:
|
||||
lines.append('남은 계단 없음 — 계속 쓰시려면 자산웹에서 다시 등록해주세요 '
|
||||
'(자동 재등록 안 함).')
|
||||
send_telegram('\n'.join(lines), parse_mode=None)
|
||||
|
||||
|
||||
def _notify_modify_failed(res: dict, step: dict, reason: str) -> None:
|
||||
send_telegram(
|
||||
f'⚠️ 트레일링 손절선 상향 실패 — {res["symbol_name"]} ({res["symbol"]})\n'
|
||||
f'계좌: {res["account"]} · {step["n"]}단계 −{_pct_s(step["pct"])}% '
|
||||
f'· 주문번호 {step["ord_no"]}\n'
|
||||
f'현재 손절선 {step["cond_uv"]:,}원은 그대로 유지됩니다.\n'
|
||||
f'사유: {reason}',
|
||||
parse_mode=None)
|
||||
|
||||
|
||||
def _worth_running(force: bool) -> bool:
|
||||
"""예약이 있고 거래 세션인가. 루프 제어와 단발 실행이 같은 기준을 쓰게 분리."""
|
||||
if not trailing.list_active():
|
||||
return False
|
||||
return force or session_now()[0]
|
||||
|
||||
|
||||
def check(force: bool = False, dry_run: bool = False) -> int:
|
||||
reservations = trailing.list_active()
|
||||
if not reservations:
|
||||
return 0
|
||||
ok_sess, sess = session_now()
|
||||
if not force and not ok_sess:
|
||||
_log(f'{sess} — skip ({len(reservations)}건 예약 대기)')
|
||||
return 0
|
||||
# NXT 단독 시간대엔 KRX 호가가 15:30 종가로 고정돼 현재가와 갭이 생긴다 → NXT 시세로 조회.
|
||||
quote_exchange = 'NX' if sess in ('NXT_PRE', 'NXT_AFTER') else 'AL'
|
||||
|
||||
# 계좌별 미체결 스냅샷 (계좌당 1콜). 스톱주문도 조건 도달 전까지 미체결로 잡힌다.
|
||||
open_by_acct: dict[str, list] = {}
|
||||
for acct in sorted({r['account'] for r in reservations}):
|
||||
try:
|
||||
open_by_acct[acct] = kc.get_open_orders(acct, side='sell')
|
||||
except Exception as e:
|
||||
# 한 계좌 조회 실패로 다른 계좌 감시를 멈추지 않는다. 생존 판정은 건너뛴다
|
||||
# (없다고 단정하면 살아있는 예약을 지워버린다).
|
||||
_log(f'미체결 조회 실패 [{acct}]: {e!r}')
|
||||
open_by_acct[acct] = None
|
||||
|
||||
# 레그가 사라질 때만 kt00007 을 계좌당 1콜 추가로 부른다 (평시엔 호출 안 함).
|
||||
exec_cache: dict = {}
|
||||
gone_events = []
|
||||
|
||||
alive = []
|
||||
for r in reservations:
|
||||
rows = open_by_acct.get(r['account'])
|
||||
if rows is None:
|
||||
continue # 조회 실패 계좌 — 이번 사이클 판단 보류
|
||||
live_steps = []
|
||||
for s in list(r.get('steps') or []):
|
||||
row = next((x for x in rows if x['ord_no'] == s['ord_no']), None)
|
||||
if row is not None:
|
||||
live_steps.append((s, row))
|
||||
continue
|
||||
filled, exec_ok = _leg_fill_check(r['account'], s['ord_no'], exec_cache)
|
||||
gone = trailing.remove_step(r['id'], s['n'], 'not_in_open_orders')
|
||||
if filled:
|
||||
why = f'체결 {filled.get("cntr_qty", 0):,}주 @ {filled.get("cntr_uv", 0):,}'
|
||||
elif exec_ok:
|
||||
why = '미체결 소멸 (체결수량 0 — 장 마감 취소 추정)'
|
||||
else:
|
||||
why = '사유 판정 불가 (주문체결내역 조회 실패)'
|
||||
_log(f'레그 종료 {r["id"]}/{s["n"]}단계 {r["symbol_name"]} — {why}')
|
||||
if gone:
|
||||
gone_events.append({'res': gone['reservation'], 'step': gone['step'],
|
||||
'filled': filled, 'ok': exec_ok,
|
||||
'remaining': gone['remaining']})
|
||||
if live_steps:
|
||||
alive.append((r, live_steps))
|
||||
|
||||
if gone_events and not dry_run:
|
||||
try:
|
||||
_notify_gone_batch(gone_events)
|
||||
except Exception as e:
|
||||
_log(f'알림 실패: {e!r}')
|
||||
|
||||
if not alive:
|
||||
return 0
|
||||
|
||||
try:
|
||||
quotes = kc.get_watchlist_quotes([r['symbol'] for r, _ in alive], exchange=quote_exchange)
|
||||
except Exception as e:
|
||||
_log(f'시세 조회 실패 ({quote_exchange}): {e!r}')
|
||||
return 1
|
||||
|
||||
raised = 0
|
||||
for r, live_steps in alive:
|
||||
cur = (quotes.get(r['symbol']) or {}).get('price') or 0
|
||||
# 살아있는 레그만 담은 스냅샷으로 판단 — 이미 빠진 계단은 따라 올릴 대상이 아니다.
|
||||
snap = {'peak': r['peak'], 'min_sell_price': r.get('min_sell_price'),
|
||||
'steps': [s for s, _ in live_steps]}
|
||||
nx = trailing.next_step_levels(snap, cur)
|
||||
if not nx:
|
||||
continue
|
||||
if not nx['steps']:
|
||||
# 고점은 올랐지만 호가단위·최저 매도가 때문에 올릴 조건단가가 없다 → 정정 API 콜 0.
|
||||
if not dry_run:
|
||||
trailing.commit_peak(r['id'], nx['peak'])
|
||||
continue
|
||||
|
||||
for up in nx['steps']:
|
||||
s, row = next(x for x in live_steps if x[0]['n'] == up['n'])
|
||||
# 미체결 잔량으로 정정 — 부분체결됐으면 잔량만 남는다 (저장된 qty 는 최초 주문수량).
|
||||
qty = row.get('unfilled_qty') or s['qty']
|
||||
try:
|
||||
res = kiwoom_order.modify_order(
|
||||
account_label=r['account'],
|
||||
orig_ord_no=s['ord_no'],
|
||||
symbol=r['symbol'],
|
||||
modify_qty=qty,
|
||||
modify_price=up['ord_uv'],
|
||||
routing_suffix=row.get('routing_suffix', ''),
|
||||
dry_run=dry_run,
|
||||
card_id=r.get('card_id'),
|
||||
modify_cond_price=up['cond_uv'],
|
||||
)
|
||||
except Exception as e:
|
||||
# sidecar 비활성(매매 차단) 포함. 손절선은 기존 값이 그대로 살아있다.
|
||||
_log(f'정정 예외 {r["id"]}/{s["n"]}단계 {r["symbol_name"]}: {e!r}')
|
||||
continue
|
||||
|
||||
if dry_run:
|
||||
_log(f'[dry-run] {r["id"]}/{s["n"]}단계 {r["symbol_name"]} '
|
||||
f'고점 {r["peak"]:,}→{nx["peak"]:,} · '
|
||||
f'손절 {s["cond_uv"]:,}→{up["cond_uv"]:,} / 지정 {up["ord_uv"]:,} · '
|
||||
f'body={res.get("body")}')
|
||||
continue
|
||||
|
||||
if res.get('ok'):
|
||||
new_ord_no = res.get('new_ord_no') or ''
|
||||
updated = trailing.commit_step_modify(r['id'], s['n'], new_ord_no,
|
||||
nx['peak'], up['cond_uv'], up['ord_uv'])
|
||||
raised += 1
|
||||
_log(f'손절선 상향 {r["id"]}/{s["n"]}단계 {r["symbol_name"]} '
|
||||
f'{s["cond_uv"]:,}→{up["cond_uv"]:,}원 (고점 {nx["peak"]:,}) '
|
||||
f'ord_no {s["ord_no"]}→{new_ord_no}')
|
||||
if not updated:
|
||||
# 상태 갱신 실패 = 다음 정정이 옛 ord_no 로 나가 실패한다. 반드시 알린다.
|
||||
_log(f'⚠️ 상태 갱신 실패 {r["id"]}/{s["n"]}단계 — ord_no 불일치 위험')
|
||||
try:
|
||||
_notify_modify_failed(r, s, f'정정은 성공했지만 상태 갱신 실패 '
|
||||
f'(새 주문번호 {new_ord_no})')
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
reason = res.get('reason', 'UNKNOWN')
|
||||
detail = (res.get('response') or {}).get('return_msg') or res.get('error') or ''
|
||||
_log(f'정정 실패 {r["id"]}/{s["n"]}단계 {r["symbol_name"]}: '
|
||||
f'{reason} {detail} (세션 {sess})')
|
||||
# NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 반복된다 — 쿨다운으로
|
||||
# 스팸 차단. 쿨다운은 예약 단위다(같은 원인으로 전 계단이 함께 실패하므로
|
||||
# 계단마다 알리면 한 사이클에 3~5통이 된다). 로그에는 매번 남는다.
|
||||
if trailing.should_notify_failure(r['id'], time.time(), FAIL_NOTICE_COOLDOWN_SEC):
|
||||
try:
|
||||
_notify_modify_failed(r, s, f'{reason} {detail}'.strip() + f' · 세션 {sess}')
|
||||
except Exception as e:
|
||||
_log(f'알림 실패: {e!r}')
|
||||
else:
|
||||
_log(f' 알림 생략 (쿨다운 {FAIL_NOTICE_COOLDOWN_SEC}초 내 이미 발송)')
|
||||
|
||||
if raised:
|
||||
_log(f'완료 — {raised}개 계단 상향 / 예약 {len(alive)}건')
|
||||
return 0
|
||||
|
||||
|
||||
def cmd_list() -> int:
|
||||
reservations = trailing.list_active()
|
||||
if not reservations:
|
||||
print('트레일링 예약 없음')
|
||||
return 0
|
||||
for r in reservations:
|
||||
steps = r.get('steps') or []
|
||||
floor_part = f' · 최저 {r["min_sell_price"]:,}' if r.get('min_sell_price') else ''
|
||||
entry_peak = r.get('entry_peak') or 0
|
||||
peak_part = f'고점 {r["peak"]:,}'
|
||||
if entry_peak and r['peak'] > entry_peak:
|
||||
peak_part += f' (등록 시 {entry_peak:,})'
|
||||
print(f'{r["id"]} · {r["symbol_name"]}({r["symbol"]}) · {r["account"]} · '
|
||||
f'{r["qty"]:,}주 · {len(steps)}단')
|
||||
print(f' {peak_part}{floor_part} · 등록 {r["created_at"]} · 갱신 {r["updated_at"]}')
|
||||
for s in steps:
|
||||
cum = s.get('cum', 0)
|
||||
cum_part = '전량' if cum >= 100 else f'누적 {_pct_s(cum)}%'
|
||||
print(f' {s["n"]}단계 −{_pct_s(s["pct"])}% · 손절 {s["cond_uv"]:,} / '
|
||||
f'지정 {s["ord_uv"]:,} · {s["qty"]:,}주 ({cum_part}) · '
|
||||
f'ord_no {s["ord_no"]} · 상향 {s.get("modify_count", 0)}회')
|
||||
return 0
|
||||
|
||||
|
||||
def _int_opt(argv: list[str], name: str, default: int) -> int:
|
||||
if name not in argv:
|
||||
return default
|
||||
i = argv.index(name)
|
||||
if i + 1 >= len(argv):
|
||||
return default
|
||||
try:
|
||||
return int(argv[i + 1])
|
||||
except ValueError:
|
||||
return default
|
||||
|
||||
|
||||
def main(argv: list[str]) -> int:
|
||||
cmd = argv[1] if len(argv) > 1 else 'check'
|
||||
if cmd == 'list':
|
||||
return cmd_list()
|
||||
if cmd == 'check':
|
||||
force = '--force' in argv
|
||||
dry_run = '--dry-run' in argv
|
||||
repeat = max(1, _int_opt(argv, '--repeat', 1))
|
||||
gap = max(1, _int_opt(argv, '--gap', 30))
|
||||
rc = 0
|
||||
for i in range(repeat):
|
||||
rc = check(force=force, dry_run=dry_run) or rc
|
||||
if i >= repeat - 1:
|
||||
break
|
||||
# 예약 0건이거나 장 마감이면 남은 sweep 을 버린다 — 빈 sleep 으로 프로세스가
|
||||
# 살아있을 이유가 없다. sleep '전에' 확인해야 한다.
|
||||
if not _worth_running(force):
|
||||
break
|
||||
time.sleep(gap)
|
||||
return rc
|
||||
print(__doc__, file=sys.stderr)
|
||||
return 2
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(main(sys.argv))
|
||||
@@ -3,7 +3,8 @@
|
||||
python3 -m sim scan [--force] # 1회 스캔 (launchd/cron 진입점)
|
||||
python3 -m sim status # 가상계좌 요약
|
||||
python3 -m sim report [N] # 최근 거래 N건 (기본 20)
|
||||
python3 -m sim reset [--yes] # 가상계좌 초기화 (1천만 리셋)
|
||||
python3 -m sim reset [--yes] # 가상계좌 초기화
|
||||
python3 -m sim variants sync # 비교군을 백테스트 유형별 1위로 동기화 (수동 전용)
|
||||
"""
|
||||
from __future__ import annotations
|
||||
|
||||
@@ -107,12 +108,22 @@ def _cmd_variants(argv):
|
||||
print(f'변이 {len(vs)}개 등록:')
|
||||
for v in vs:
|
||||
print(' ', v['id'], v['name'])
|
||||
elif sub == 'sync':
|
||||
import json as _json
|
||||
from . import config as _cfg
|
||||
res = _json.loads((_cfg.STATE_DIR / 'backtest_results.json').read_text())
|
||||
print('동기화:', variants.sync_label_tops(res))
|
||||
elif sub == 'reset':
|
||||
variants.reset_all()
|
||||
print('변이 계좌 초기화 (정의 유지)')
|
||||
elif sub == 'clear':
|
||||
variants.clear()
|
||||
print('변이 정의·계좌 전부 삭제')
|
||||
elif sub == 'philosophy':
|
||||
res = variants.add_philosophy_presets()
|
||||
print(f"철학별 전략 추가: 신규 {len(res['added'])}개 · 중복 {res['skipped']}개 · 총 {res['total']}개")
|
||||
for v in res['added']:
|
||||
print(' ', v['id'], v['name'])
|
||||
else:
|
||||
vs = variants.load_variants()
|
||||
print(f'변이 {len(vs)}개:')
|
||||
@@ -130,13 +141,23 @@ def _cmd_reset(argv):
|
||||
print(f'초기화 완료 — 가상자본 {config.INITIAL_CAPITAL:,}원')
|
||||
|
||||
|
||||
def _cmd_universe(argv):
|
||||
"""관찰목록 자동편입/제외 — 매일 장 마감 후 1회. 'import'=주도주 편입, 'prune'=무신호 auto 제외, 둘 다 기본."""
|
||||
from . import universe
|
||||
sub = argv[0] if argv else 'all'
|
||||
if sub in ('import', 'all'):
|
||||
print('자동편입:', universe.auto_import())
|
||||
if sub in ('prune', 'all'):
|
||||
print('자동제외:', universe.auto_prune())
|
||||
|
||||
|
||||
def main():
|
||||
argv = sys.argv[1:]
|
||||
cmd = argv[0] if argv else 'status'
|
||||
rest = argv[1:]
|
||||
{'scan': _cmd_scan, 'status': _cmd_status, 'report': _cmd_report,
|
||||
'sweep': _cmd_sweep, 'backtest': _cmd_backtest, 'backfill': _cmd_backfill,
|
||||
'backfill-index': _cmd_backfill_index,
|
||||
'backfill-index': _cmd_backfill_index, 'universe': _cmd_universe,
|
||||
'variants': _cmd_variants, 'reset': _cmd_reset}.get(cmd, lambda a: print(__doc__))(rest)
|
||||
|
||||
|
||||
|
||||
@@ -14,9 +14,22 @@ from __future__ import annotations
|
||||
import math
|
||||
import sqlite3
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
from . import config, signals
|
||||
|
||||
|
||||
def _cal_days(entry_date: str | None, cur_date: str) -> int | None:
|
||||
"""두 'YYYYMMDD' 사이 달력 일수 — 시간손절용. 파싱 실패 시 None."""
|
||||
if not entry_date:
|
||||
return None
|
||||
try:
|
||||
d0 = datetime.strptime(entry_date, '%Y%m%d')
|
||||
d1 = datetime.strptime(cur_date, '%Y%m%d')
|
||||
return max(0, (d1 - d0).days)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
sys.path.insert(0, str(config.SCRIPTS))
|
||||
import daily_candles_cache as dcc # noqa: E402
|
||||
|
||||
@@ -51,6 +64,24 @@ def load_flow(code: str) -> dict | None:
|
||||
return None
|
||||
|
||||
|
||||
# 프로세스 메모이즈 — 같은 sweep(한 프로세스) 안에서 종목당 sqlite를 1회만 읽는다.
|
||||
# backtest.run 은 sweep CLI 프로세스에서만 호출되므로(엔진/웹은 apply_params만 씀) stale 위험 없음.
|
||||
_HIST_MEMO: dict = {}
|
||||
_FLOW_MEMO: dict = {}
|
||||
|
||||
|
||||
def _hist_cached(code: str) -> list[dict]:
|
||||
if code not in _HIST_MEMO:
|
||||
_HIST_MEMO[code] = load_history(code)
|
||||
return _HIST_MEMO[code]
|
||||
|
||||
|
||||
def _flow_cached(code: str):
|
||||
if code not in _FLOW_MEMO:
|
||||
_FLOW_MEMO[code] = load_flow(code)
|
||||
return _FLOW_MEMO[code]
|
||||
|
||||
|
||||
def _flow_net_upto(flow: dict | None, dates_seen: list[str]) -> dict:
|
||||
"""최근 FLOW_DAYS 일 외국인·기관 누적. flow 없으면 중립(둘 다 +1 → 수급 통과)."""
|
||||
if flow is None:
|
||||
@@ -69,12 +100,12 @@ def run(overrides: dict | None, codes: list[str], date_from: str = '', date_to:
|
||||
|
||||
hist = {}
|
||||
for code in codes:
|
||||
h = [c for c in load_history(code) if date_from <= c['date'] <= date_to]
|
||||
h = [c for c in _hist_cached(code) if date_from <= c['date'] <= date_to]
|
||||
if len(h) > config.SMA_LONG + config.ATR_PERIOD + 5:
|
||||
hist[code] = h
|
||||
if not hist:
|
||||
return {'error': 'no_data', 'trades': 0}
|
||||
flows = {code: load_flow(code) for code in hist}
|
||||
flows = {code: _flow_cached(code) for code in hist}
|
||||
|
||||
# code별 date→index, 전체 거래일 축
|
||||
idx_map = {code: {c['date']: i for i, c in enumerate(h)} for code, h in hist.items()}
|
||||
@@ -86,6 +117,7 @@ def run(overrides: dict | None, codes: list[str], date_from: str = '', date_to:
|
||||
wins = closed = 0
|
||||
gross_win = gross_loss = 0.0
|
||||
peak_eq = capital
|
||||
exited: dict[str, str] = {} # code → 전량청산일 (당일 재진입 금지)
|
||||
max_dd = 0.0
|
||||
comm, tax = config.COMMISSION_RATE, config.SELL_TAX_RATE
|
||||
|
||||
@@ -95,9 +127,82 @@ def run(overrides: dict | None, codes: list[str], date_from: str = '', date_to:
|
||||
def _qty_for(fill, value):
|
||||
return int(value // (fill * (1 + comm)))
|
||||
|
||||
slip = getattr(config, 'BT_SLIPPAGE', 0.002)
|
||||
pending: list[dict] = [] # 전일 종가 신호 → 오늘 시가 체결 주문 (look-ahead 제거)
|
||||
|
||||
for day in all_dates:
|
||||
day_prices = {}
|
||||
# ---- 보유 판단 (당일 종가 기준): 손절/익절(전량·분할) → 추격매수 ----
|
||||
|
||||
# ---- 0. 전일 큐잉 주문을 오늘 시가에 체결 (+슬리피지: 매수 비싸게/매도 싸게) ----
|
||||
for od in pending:
|
||||
code = od['code']
|
||||
i = idx_map.get(code, {}).get(day)
|
||||
if i is None:
|
||||
continue # 오늘 거래 없으면 주문 소멸 — 신호 지속 시 다음 종가에 재큐잉됨
|
||||
open_px = hist[code][i].get('open') or hist[code][i]['close']
|
||||
kind = od['kind']
|
||||
if kind in ('sell', 'scale_out'):
|
||||
pos = positions.get(code)
|
||||
if not pos:
|
||||
continue
|
||||
fill = open_px * (1 - slip)
|
||||
total = pos['qty']
|
||||
qty = total if od.get('frac', 1.0) >= 1.0 else max(1, int(total * od['frac']))
|
||||
qty = min(qty, total)
|
||||
proceeds = qty * fill * (1 - comm - tax)
|
||||
cost = qty * pos['entry_price'] * (1 + comm)
|
||||
pnl = proceeds - cost
|
||||
cash += proceeds
|
||||
realized += pnl
|
||||
if qty >= total:
|
||||
positions.pop(code)
|
||||
exited[code] = day # 당일 재진입 금지 (엔진과 동일 규칙)
|
||||
closed += 1
|
||||
if pnl > 0:
|
||||
wins += 1
|
||||
else:
|
||||
pos['qty'] = total - qty
|
||||
if pnl > 0:
|
||||
gross_win += pnl
|
||||
else:
|
||||
gross_loss += -pnl
|
||||
elif kind == 'add':
|
||||
pos = positions.get(code)
|
||||
if not pos:
|
||||
continue
|
||||
fill = open_px * (1 + slip)
|
||||
tranche_val = pos.get('tranche_value') or (pos['entry_price'] * pos['qty'])
|
||||
qty = _qty_for(fill, tranche_val)
|
||||
cost = qty * fill * (1 + comm)
|
||||
if qty >= 1 and cost <= cash:
|
||||
new_qty = pos['qty'] + qty
|
||||
pos['entry_price'] = (pos['entry_price'] * pos['qty'] + fill * qty) / new_qty
|
||||
pos['qty'] = new_qty
|
||||
pos['tranches'] = pos.get('tranches', 1) + 1
|
||||
pos['last_add_price'] = fill
|
||||
cash -= cost
|
||||
nstop, ntarget = signals.compute_stop_target(pos['entry_price'], od['atr'], od['recent_low'])
|
||||
pos['stop'] = nstop if od.get('add_kind') == 'down' else max(pos['stop'], nstop)
|
||||
pos['target'] = ntarget
|
||||
elif kind == 'buy':
|
||||
if code in positions or len(positions) >= config.MAX_POSITIONS or exited.get(code) == day:
|
||||
continue
|
||||
fill = open_px * (1 + slip)
|
||||
stop, target = signals.compute_stop_target(fill, od['atr'], od['recent_low'])
|
||||
eq = equity(day_prices)
|
||||
tranche_val = signals.target_value(eq, fill, stop) / max(1, config.ENTRY_TRANCHES)
|
||||
qty = _qty_for(fill, tranche_val)
|
||||
cost = qty * fill * (1 + comm)
|
||||
if qty < 1 or cost > cash:
|
||||
continue
|
||||
cash -= cost
|
||||
positions[code] = {'code': code, 'name': code, 'qty': qty, 'entry_price': fill,
|
||||
'stop': stop, 'target': target, 'peak': fill, 'trailing_on': False,
|
||||
'scaled_out': False, 'tranches': 1, 'tranche_value': tranche_val,
|
||||
'last_add_price': fill, 'entry_date': day}
|
||||
pending = []
|
||||
|
||||
# ---- 1. 보유 판단 (당일 종가 기준) → 내일 시가 주문 큐잉 ----
|
||||
for code in list(positions.keys()):
|
||||
h = hist.get(code)
|
||||
i = idx_map[code].get(day)
|
||||
@@ -111,50 +216,22 @@ def run(overrides: dict | None, codes: list[str], date_from: str = '', date_to:
|
||||
dates_seen = [c['date'] for c in h[:i + 1]]
|
||||
flow = _flow_net_upto(flows.get(code), dates_seen)
|
||||
pos = positions[code]
|
||||
dec = signals.evaluate_holding(pos, ind, flow, None)
|
||||
dec = signals.evaluate_holding(pos, ind, flow, None,
|
||||
held_days=_cal_days(pos.get('entry_date'), day))
|
||||
pos.update(dec['position_update'])
|
||||
act = dec['action']
|
||||
if act in ('sell', 'scale_out'):
|
||||
fill = ind['price']
|
||||
total = pos['qty']
|
||||
qty = total if dec.get('sell_frac', 1.0) >= 1.0 else max(1, int(total * dec['sell_frac']))
|
||||
qty = min(qty, total)
|
||||
proceeds = qty * fill * (1 - comm - tax)
|
||||
cost = qty * pos['entry_price'] * (1 + comm)
|
||||
pnl = proceeds - cost
|
||||
cash += proceeds
|
||||
realized += pnl
|
||||
if qty >= total:
|
||||
positions.pop(code)
|
||||
closed += 1
|
||||
if pnl > 0:
|
||||
wins += 1
|
||||
else:
|
||||
pos['qty'] = total - qty
|
||||
if pnl > 0:
|
||||
gross_win += pnl
|
||||
else:
|
||||
gross_loss += -pnl
|
||||
pending.append({'kind': act, 'code': code, 'frac': dec.get('sell_frac', 1.0)})
|
||||
elif act == 'add':
|
||||
fill = ind['price']
|
||||
tranche_val = pos.get('tranche_value') or (pos['entry_price'] * pos['qty'])
|
||||
qty = _qty_for(fill, tranche_val)
|
||||
cost = qty * fill * (1 + comm)
|
||||
if qty >= 1 and cost <= cash:
|
||||
new_qty = pos['qty'] + qty
|
||||
pos['entry_price'] = (pos['entry_price'] * pos['qty'] + fill * qty) / new_qty
|
||||
pos['qty'] = new_qty
|
||||
pos['tranches'] = pos.get('tranches', 1) + 1
|
||||
pos['last_add_price'] = fill
|
||||
cash -= cost
|
||||
nstop, ntarget = signals.compute_stop_target(pos['entry_price'], ind['atr'], ind['recent_low'])
|
||||
pos['stop'] = max(pos['stop'], nstop)
|
||||
pos['target'] = ntarget
|
||||
pending.append({'kind': 'add', 'code': code, 'add_kind': dec.get('add_kind'),
|
||||
'atr': ind['atr'], 'recent_low': ind['recent_low']})
|
||||
|
||||
# ---- 신규 매수 판단 (1차 트랜치) ----
|
||||
# ---- 2. 신규 매수 판단 (당일 종가) → 내일 시가 주문 큐잉 ----
|
||||
for code, h in hist.items():
|
||||
if code in positions or len(positions) >= config.MAX_POSITIONS:
|
||||
continue
|
||||
if exited.get(code) == day: # 당일 청산 종목 재매수 금지
|
||||
continue
|
||||
i = idx_map[code].get(day)
|
||||
if i is None:
|
||||
continue
|
||||
@@ -169,19 +246,8 @@ def run(overrides: dict | None, codes: list[str], date_from: str = '', date_to:
|
||||
flow = _flow_net_upto(flows.get(code), dates_seen)
|
||||
dec = signals.evaluate_candidate(code, code, [], ind, flow, None, True)
|
||||
if dec['action'] == 'buy':
|
||||
fill = dec['buy_price']
|
||||
eq = equity(day_prices)
|
||||
tranche_val = (eq / config.MAX_POSITIONS) / max(1, config.ENTRY_TRANCHES)
|
||||
qty = _qty_for(fill, tranche_val)
|
||||
cost = qty * fill * (1 + comm)
|
||||
if qty < 1 or cost > cash:
|
||||
continue
|
||||
stop, target = signals.compute_stop_target(fill, ind['atr'], ind['recent_low'])
|
||||
cash -= cost
|
||||
positions[code] = {'code': code, 'name': code, 'qty': qty, 'entry_price': fill,
|
||||
'stop': stop, 'target': target, 'peak': fill, 'trailing_on': False,
|
||||
'scaled_out': False, 'tranches': 1, 'tranche_value': tranche_val,
|
||||
'last_add_price': fill}
|
||||
pending.append({'kind': 'buy', 'code': code,
|
||||
'atr': ind['atr'], 'recent_low': ind['recent_low']})
|
||||
|
||||
eq = equity(day_prices)
|
||||
if eq > peak_eq:
|
||||
|
||||
@@ -22,17 +22,28 @@ LAST_SCAN_PATH = STATE_DIR / 'last_scan.json'
|
||||
OWNER_ACCOUNT_LABELS = ['일반', 'ISA']
|
||||
|
||||
# ---- 자본·체결·비용 ----
|
||||
INITIAL_CAPITAL = 10_000_000 # 가상 자본
|
||||
INITIAL_CAPITAL = 100_000_000 # 가상 자본 (기초 예수금 1억)
|
||||
COMMISSION_RATE = 0.00015 # 매매 수수료 (편도, 키움 ~0.015%)
|
||||
SELL_TAX_RATE = 0.0018 # 매도 증권거래세 (~0.18%)
|
||||
BT_SLIPPAGE = 0.002 # 백테스트 슬리피지 (편도 0.2% — 매수는 비싸게, 매도는 싸게. 라이브는 호가 체결이라 미적용)
|
||||
|
||||
# ---- 포지션 사이징 ----
|
||||
MAX_POSITIONS = 8 # 동시 보유 최대 종목수
|
||||
# 종목당 목표 비중 = 자산 / MAX_POSITIONS
|
||||
# 종목당 목표 비중 = 자산 / MAX_POSITIONS (= 균등비중 상한)
|
||||
RISK_PER_TRADE_PCT = 0.01 # 리스크 기반 사이징: 종목당 손실 위험 = 자산 × 이 값. 수량 = 자산×이값 ÷ (진입가−손절가), 균등비중 상한으로 캡. 0=끔(순수 균등비중)
|
||||
|
||||
# ---- 지표 기간 ----
|
||||
SMA_SHORT = 5
|
||||
SMA_LONG = 20
|
||||
SMA_MID = 60 # 중기 추세선 — 정배열 확인(5>20>60). 데이터 부족 시 게이트 미적용
|
||||
TREND_SLOPE_DAYS = 5 # 20일선 기울기 판정: 현재 20일선 vs N일 전 20일선(우상향 여부)
|
||||
REL_STRENGTH_DAYS = 20 # 상대강도: 종목 N일 수익률 − 시장지수 N일 수익률 (라이브 전용)
|
||||
TREND_SLOPE_GATE = 1 # 추세 게이트 ① 장기선 우상향 요구 (1=요구/0=완화). 보수성 완화 변이 실험용
|
||||
MID_ARRAY_GATE = 1 # 추세 게이트 ② 5일선>중기선(60) 요구 (1=요구/0=완화)
|
||||
IMMEDIATE_ENTRY = 0 # 즉시매수: 조건 통과 종목이 돌파·눌림목 둘 다 아니어도 강세장이면 현재가 즉시 매수 (1=켜기). 꾸준한 상승 종목 놓침 방지 실험용
|
||||
AVERAGING_ENTRY = 0 # 물타기(애버리징): 보유 중 직전매수가 대비 하락 시 손절 대신 추가매수로 평단↓ (1=켜기). 종목당 10% 한도 내, 급락·약세장 제외
|
||||
AVERAGING_DROP_PCT = 0.10 # 물타기 트리거 — 직전 매수가 대비 이 비율 하락 시 추가 (0.10=-10%마다)
|
||||
CRASH_DROP_PCT = 0.10 # 당일 단일 하락이 이 비율 이상이면 물타기 말고 손절 (그림 #3, 0.10=-10%↓)
|
||||
ATR_PERIOD = 14
|
||||
BREAKOUT_LOOKBACK = 20 # 돌파 판정용 최근 고점 구간
|
||||
SWING_LOW_LOOKBACK = 10 # 손절선 후보 스윙 저점 구간
|
||||
@@ -44,6 +55,9 @@ VOLUME_BREAKOUT_MULT = 1.5 # 돌파 매수: 거래량 ≥ 평균 × 이
|
||||
TURNOVER_BREAKOUT_MULT = 1.5 # 돌파 확인: 오늘 회전율 ≥ 20일 평균 회전율 × 이 배수 (데이터 없으면 통과)
|
||||
TURNOVER_OVERHEAT_MULT = 3.0 # 과열 보류: 오늘 회전율 ≥ 평균 × 이 배수면 신규매수 보류 (돌파 배수보다 높게)
|
||||
PULLBACK_ATR_MULT = 1.0 # 눌림목 지정가 = 전일종가 − ATR × 이 배수 (20일선과 비교 후 위쪽)
|
||||
RSI_PERIOD = 14 # RSI 계산 기간 (고정 상수 — 튜닝 비노출)
|
||||
RSI_OVERBOUGHT = 78.0 # 돌파 매수 시 RSI ≥ 이 값이면 과열 추격으로 보고 보류
|
||||
RSI_OVERSOLD = 25.0 # 눌림목 매수 시 RSI < 이 값이면 낙하 중(떨어지는 칼)으로 보고 보류
|
||||
|
||||
# ---- 분할매수·추격매수 ----
|
||||
ENTRY_TRANCHES = 2 # 종목당 목표비중을 이 횟수로 나눠 진입 (1=전량 1회). 1차 = 목표/이 값
|
||||
@@ -55,6 +69,7 @@ RR_RATIO = 2.0 # 목표 = 진입가 + (진입가−손절) ×
|
||||
SCALE_OUT_FRAC = 0.0 # 분할매도: 목표 도달 시 보유량의 이 비율 익절 후 잔량 트레일링 (0=분할매도 끔, 목표 도달 시 전량 트레일링 전환)
|
||||
TRAIL_ATR_MULT = 1.5 # 트레일링: 고점 − ATR × 이 배수
|
||||
TRAIL_ATR_MULT_TIGHT = 1.0 # 컨센 목표가 부근에서 트레일링 강화
|
||||
MAX_HOLD_DAYS = 20 # 시간손절: 보유 N일(달력) 경과 & 미진전(트레일링 전 + 진입가 이하)이면 청산해 자본 회전. 0=끔
|
||||
|
||||
# ---- 애널리스트 게이트 (약한 게이트) ----
|
||||
ANALYST_MIN_UPSIDE_PCT = 5.0 # 컨센 목표주가 상승여력 < 이 값이면 신규매수 제외
|
||||
@@ -62,6 +77,8 @@ ANALYST_SELL_OPINION_MAX = 2.5 # 투자의견(1매도~5매수) 평균이 이
|
||||
|
||||
# ---- 시장 필터 (소프트) ----
|
||||
MARKET_BREADTH_MIN = 0.15 # 해당 시장 당일 상승비율 < 이 값이면 그 시장 신규매수 보류
|
||||
MARKET_BREADTH_STRONG = 0.60 # 상승비율 ≥ 이 값이면 지수가 20일선 아래여도 강세 인정 (지수추세 소프트 완화)
|
||||
BEAR_ENTRY_MODE = 1 # 약세 국면(혼조·약세·급락) 신규매수: 0=완전 현금화(돌파도 보류) / 1=돌파만 허용 / 2=눌림목도 허용
|
||||
|
||||
# ---- 운영 시간 (KST) ----
|
||||
MARKET_OPEN = (9, 0)
|
||||
@@ -76,6 +93,11 @@ PARAMS_PATH = STATE_DIR / 'params.json'
|
||||
TUNABLE = [
|
||||
{'key': 'SMA_SHORT', 'label': '단기 이동평균(일)', 'type': 'int', 'min': 2, 'max': 60, 'step': 1, 'group': '추세'},
|
||||
{'key': 'SMA_LONG', 'label': '장기 이동평균(일)', 'type': 'int', 'min': 5, 'max': 200, 'step': 1, 'group': '추세'},
|
||||
{'key': 'TREND_SLOPE_GATE', 'label': '장기선 우상향 요구', 'type': 'int', 'min': 0, 'max': 1, 'step': 1, 'group': '추세'},
|
||||
{'key': 'MID_ARRAY_GATE', 'label': '중기 정배열(5>60) 요구', 'type': 'int', 'min': 0, 'max': 1, 'step': 1, 'group': '추세'},
|
||||
{'key': 'IMMEDIATE_ENTRY', 'label': '즉시매수(눌림 안 기다림)', 'type': 'int', 'min': 0, 'max': 1, 'step': 1, 'group': '매수'},
|
||||
{'key': 'AVERAGING_ENTRY', 'label': '물타기(하락 시 추가매수)', 'type': 'int', 'min': 0, 'max': 1, 'step': 1, 'group': '매도'},
|
||||
{'key': 'AVERAGING_DROP_PCT', 'label': '물타기 하락 트리거', 'type': 'float', 'min': 0.03, 'max': 0.3, 'step': 0.01, 'group': '매도'},
|
||||
{'key': 'ATR_PERIOD', 'label': 'ATR 기간(일)', 'type': 'int', 'min': 5, 'max': 60, 'step': 1, 'group': '변동성·기간'},
|
||||
{'key': 'BREAKOUT_LOOKBACK', 'label': '돌파 고점 구간(일)', 'type': 'int', 'min': 5, 'max': 120, 'step': 1, 'group': '변동성·기간'},
|
||||
{'key': 'SWING_LOW_LOOKBACK', 'label': '스윙 저점 구간(일)', 'type': 'int', 'min': 3, 'max': 60, 'step': 1, 'group': '변동성·기간'},
|
||||
@@ -87,15 +109,20 @@ TUNABLE = [
|
||||
{'key': 'PULLBACK_ATR_MULT', 'label': '눌림목 ATR 배수', 'type': 'float', 'min': 0.0, 'max': 3.0, 'step': 0.1, 'group': '매수'},
|
||||
{'key': 'ENTRY_TRANCHES', 'label': '분할매수 횟수', 'type': 'int', 'min': 1, 'max': 5, 'step': 1, 'group': '매수'},
|
||||
{'key': 'ADD_ATR_MULT', 'label': '추격매수 ATR 배수', 'type': 'float', 'min': 0.3, 'max': 3.0, 'step': 0.1, 'group': '매수'},
|
||||
{'key': 'RSI_OVERBOUGHT', 'label': 'RSI 과열 컷(돌파)', 'type': 'float', 'min': 50.0, 'max': 95.0, 'step': 1.0, 'group': '매수'},
|
||||
{'key': 'RSI_OVERSOLD', 'label': 'RSI 과매도 컷(눌림목)', 'type': 'float', 'min': 5.0, 'max': 50.0, 'step': 1.0, 'group': '매수'},
|
||||
{'key': 'STOP_ATR_MULT', 'label': '손절 ATR 배수', 'type': 'float', 'min': 0.5, 'max': 5.0, 'step': 0.1, 'group': '매도'},
|
||||
{'key': 'RR_RATIO', 'label': '손익비(목표/손절)', 'type': 'float', 'min': 1.0, 'max': 5.0, 'step': 0.1, 'group': '매도'},
|
||||
{'key': 'SCALE_OUT_FRAC', 'label': '분할매도 익절 비율', 'type': 'float', 'min': 0.0, 'max': 1.0, 'step': 0.05, 'group': '매도'},
|
||||
{'key': 'TRAIL_ATR_MULT', 'label': '트레일링 ATR 배수', 'type': 'float', 'min': 0.5, 'max': 5.0, 'step': 0.1, 'group': '매도'},
|
||||
{'key': 'TRAIL_ATR_MULT_TIGHT', 'label': '트레일링 강화 배수', 'type': 'float', 'min': 0.3, 'max': 3.0, 'step': 0.1, 'group': '매도'},
|
||||
{'key': 'MAX_HOLD_DAYS', 'label': '시간손절(보유 최대 일)', 'type': 'int', 'min': 0, 'max': 120, 'step': 1, 'group': '매도'},
|
||||
{'key': 'ANALYST_MIN_UPSIDE_PCT', 'label': '최소 상승여력(%)', 'type': 'float', 'min': -50.0, 'max': 100.0, 'step': 1.0, 'group': '애널·시장'},
|
||||
{'key': 'ANALYST_SELL_OPINION_MAX', 'label': '매도의견 컷(1~5)', 'type': 'float', 'min': 1.0, 'max': 5.0, 'step': 0.1, 'group': '애널·시장'},
|
||||
{'key': 'MARKET_BREADTH_MIN', 'label': '시장 상승비율 하한', 'type': 'float', 'min': 0.0, 'max': 1.0, 'step': 0.01, 'group': '애널·시장'},
|
||||
{'key': 'BEAR_ENTRY_MODE', 'label': '약세장 매수(0현금/1돌파/2눌림)', 'type': 'int', 'min': 0, 'max': 2, 'step': 1, 'group': '애널·시장'},
|
||||
{'key': 'MAX_POSITIONS', 'label': '동시 보유 최대 종목', 'type': 'int', 'min': 1, 'max': 20, 'step': 1, 'group': '포지션'},
|
||||
{'key': 'RISK_PER_TRADE_PCT', 'label': '종목당 리스크 비율', 'type': 'float', 'min': 0.0, 'max': 0.1, 'step': 0.005, 'group': '포지션'},
|
||||
]
|
||||
|
||||
# 오버라이드 적용 전 원본 기본값 캡처 (튜닝 화면의 '기본값' 표시·복원용)
|
||||
|
||||
@@ -88,14 +88,19 @@ def _flow_cache_path(code: str):
|
||||
|
||||
|
||||
def investor_flow(code: str, days: int = config.FLOW_DAYS) -> list[dict]:
|
||||
"""최근 days 일 외국인·기관·개인 순매수 (최신순). 60분 TTL 캐시."""
|
||||
"""최근 days 일 외국인·기관·개인 순매수 (최신순). 60분 TTL 캐시 + 스캔 내 메모."""
|
||||
mk = (code, days)
|
||||
if mk in _FLOW_MEMO_SCAN:
|
||||
return _FLOW_MEMO_SCAN[mk]
|
||||
path = _flow_cache_path(code)
|
||||
now = time.time()
|
||||
if path.exists():
|
||||
try:
|
||||
cached = json.loads(path.read_text())
|
||||
if now - cached.get('ts', 0) < FLOW_TTL_SEC:
|
||||
return cached.get('rows', [])[:days]
|
||||
rows = cached.get('rows', [])[:days]
|
||||
_FLOW_MEMO_SCAN[mk] = rows
|
||||
return rows
|
||||
except Exception:
|
||||
pass
|
||||
try:
|
||||
@@ -105,6 +110,7 @@ def investor_flow(code: str, days: int = config.FLOW_DAYS) -> list[dict]:
|
||||
return []
|
||||
FLOW_CACHE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(json.dumps({'ts': now, 'rows': rows}, ensure_ascii=False))
|
||||
_FLOW_MEMO_SCAN[mk] = rows[:days]
|
||||
return rows[:days]
|
||||
|
||||
|
||||
@@ -116,11 +122,15 @@ def flow_net(rows: list[dict]) -> dict:
|
||||
|
||||
|
||||
def analyst(code: str, price: int) -> dict | None:
|
||||
"""애널 게이트/가점용. 캐시 미스(네트워크 발생) 시에만 페이싱 — 연속 크롤링 차단 회피."""
|
||||
"""애널 게이트/가점용. 캐시 미스(네트워크 발생) 시에만 페이싱 + 스캔 내 메모."""
|
||||
if code in _ANL_MEMO_SCAN:
|
||||
return _ANL_MEMO_SCAN[code]
|
||||
fresh = (_cache_fresh(FNGUIDE_CACHE_DIR / f'{code}.json')
|
||||
and _cache_fresh(WISEREPORT_CACHE_DIR / f'{code}.json'))
|
||||
try:
|
||||
return _analyst_query(code, price)
|
||||
out = _analyst_query(code, price)
|
||||
_ANL_MEMO_SCAN[code] = out
|
||||
return out
|
||||
finally:
|
||||
if not fresh:
|
||||
time.sleep(ANALYST_PACING_SEC)
|
||||
@@ -168,10 +178,27 @@ def _analyst_query(code: str, price: int) -> dict | None:
|
||||
}
|
||||
|
||||
|
||||
# 스캔 1회 동안 호가 공유 — 같은 스캔에서 같은 종목은 같은 체결가 (선수 간 체결 공정성 + API 절감).
|
||||
# engine._gather 가 스캔 시작마다 reset.
|
||||
_BOOK_MEMO: dict = {}
|
||||
_FLOW_MEMO_SCAN: dict = {} # 스캔 1회 동안 종목별 수급 공유 (파라미터 무관)
|
||||
_ANL_MEMO_SCAN: dict = {} # 스캔 1회 동안 종목별 애널 공유 (파라미터 무관)
|
||||
|
||||
|
||||
def reset_book_memo():
|
||||
_BOOK_MEMO.clear()
|
||||
_FLOW_MEMO_SCAN.clear()
|
||||
_ANL_MEMO_SCAN.clear()
|
||||
|
||||
|
||||
def quote_book(code: str) -> dict | None:
|
||||
"""체결가용 호가 (매도1/매수1). 실패 시 None."""
|
||||
"""체결가용 호가 (매도1/매수1). 스캔 내 종목당 1회 조회 후 공유. 실패 시 None."""
|
||||
if code in _BOOK_MEMO:
|
||||
return _BOOK_MEMO[code]
|
||||
try:
|
||||
return kc.get_quote_book(code)
|
||||
book = kc.get_quote_book(code)
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[data] quote_book {code} 실패: {e}\n')
|
||||
return None
|
||||
book = None
|
||||
_BOOK_MEMO[code] = book
|
||||
return book
|
||||
|
||||
@@ -7,12 +7,117 @@ from __future__ import annotations
|
||||
|
||||
import json
|
||||
import sys
|
||||
import time
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from . import config, data, signals, universe
|
||||
from . import benchmark, config, data, signals, universe
|
||||
from .portfolio import Portfolio
|
||||
|
||||
|
||||
def _held_days(position, now) -> int | None:
|
||||
"""보유 경과 일수(달력) — entry_at 기준. 시간손절 판단용. 파싱 실패 시 None."""
|
||||
ts = position.get('entry_at')
|
||||
if not ts:
|
||||
return None
|
||||
try:
|
||||
return max(0, (now - datetime.fromisoformat(ts)).days)
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def _index_trend_ok() -> dict:
|
||||
"""지수별 추세 — 지수 종가가 자기 SMA_LONG 위면 True. 데이터 부족 시 True(비차단)."""
|
||||
out = {}
|
||||
for mk in ('KOSPI', 'KOSDAQ'):
|
||||
store = benchmark.series(mk)
|
||||
if not store:
|
||||
continue
|
||||
closes = [v for _, v in sorted(store.items())]
|
||||
if len(closes) < config.SMA_LONG + 1:
|
||||
out[mk] = True
|
||||
continue
|
||||
sma = sum(closes[-config.SMA_LONG:]) / config.SMA_LONG
|
||||
out[mk] = closes[-1] >= sma
|
||||
return out
|
||||
|
||||
|
||||
def _session_elapsed_frac(now) -> float:
|
||||
"""장 시작 후 경과 비율 (0.15~1.0) — 장중 부분 거래량을 하루치로 환산하는 분모.
|
||||
장외면 1.0(완성봉 그대로). 하한 0.15는 장 초반 과대 환산 폭주 방지."""
|
||||
if not is_market_session(now):
|
||||
return 1.0
|
||||
o = now.replace(hour=config.MARKET_OPEN[0], minute=config.MARKET_OPEN[1], second=0, microsecond=0)
|
||||
c = now.replace(hour=config.MARKET_CLOSE[0], minute=config.MARKET_CLOSE[1], second=0, microsecond=0)
|
||||
total = (c - o).total_seconds()
|
||||
return min(1.0, max(0.15, (now - o).total_seconds() / total))
|
||||
|
||||
|
||||
def _watching(snap) -> list:
|
||||
"""스캔 시점 '매수로 노리는' 종목 — 즉시매수(BUY)·추격(ADD)·눌림목 대기(WAIT+지정가). 비교탭 표시용."""
|
||||
out = []
|
||||
for d in snap.get('decisions', []):
|
||||
st = d.get('state')
|
||||
if st in ('BUY', 'ADD') or (st == 'WAIT' and d.get('watch_price')):
|
||||
out.append({'name': d.get('name'), 'code': d.get('code'), 'state': st,
|
||||
'reason': d.get('reason', ''), 'price': d.get('price'),
|
||||
'watch_price': d.get('watch_price')})
|
||||
return out
|
||||
|
||||
|
||||
def _index_return(mk: str, days: int):
|
||||
"""지수 N거래일 수익률(%) — 상대강도 비교용. 데이터 부족 시 None."""
|
||||
s = sorted(benchmark.series(mk).items())
|
||||
if len(s) > days and s[-(days + 1)][1]:
|
||||
return (s[-1][1] / s[-(days + 1)][1] - 1) * 100
|
||||
return None
|
||||
|
||||
|
||||
def _index_daily_change() -> dict:
|
||||
"""지수별 당일 등락률(%) — 전일 종가 대비. 데이터 부족 시 키 없음."""
|
||||
out = {}
|
||||
for mk in ('KOSPI', 'KOSDAQ'):
|
||||
s = sorted(benchmark.series(mk).items())
|
||||
if len(s) >= 2 and s[-2][1]:
|
||||
out[mk] = (s[-1][1] / s[-2][1] - 1) * 100
|
||||
return out
|
||||
|
||||
|
||||
# 시장 국면 6단계 — (이모지, 라벨, 매수허용, 설명, 색상). market_ok·시장탭 배지 공용.
|
||||
REGIME = {
|
||||
'strong': ('🔥', '강세', True, '상승 종목 많고 지수도 20일선 위 — 추세 양호', '#16a34a'),
|
||||
'rebound': ('📈', '반등', True, '상승 종목 많지만 지수는 아직 20일선 아래 — 약세 탈출 시도', '#22c55e'),
|
||||
'mild': ('🌤', '완만 상승', True, '상승이 우위지만 강하진 않음', '#65a30d'),
|
||||
'mixed': ('➖', '혼조', False, '상승·하락 비슷 — 방향 불명, 신규매수 보류', '#6b7280'),
|
||||
'weak': ('📉', '약세', False, '하락 종목 우위 — 신규매수 보류', '#ef4444'),
|
||||
'crash': ('❄️', '급락', False, '대부분 하락 + 지수 급락 — 신규매수 보류', '#b91c1c'),
|
||||
}
|
||||
|
||||
|
||||
def market_regime_map() -> dict:
|
||||
"""시장별 국면(6단계) — 상승비율(폭) + 지수추세(방향) + 당일등락(강도) 조합.
|
||||
상승비율 항상 최신(네이버, 실패 시 EOD). market_ok·시장탭 배지가 공용으로 사용."""
|
||||
breadth = _live_breadth()
|
||||
if breadth is None:
|
||||
breadth = _eod_breadth()
|
||||
chg = _index_daily_change()
|
||||
trend = _index_trend_ok()
|
||||
out = {}
|
||||
for mk, v in breadth.items():
|
||||
c = chg.get(mk)
|
||||
up = trend.get(mk, True)
|
||||
if v < config.MARKET_BREADTH_MIN: # <15%
|
||||
out[mk] = 'crash' if (c is not None and c <= -2.0) else 'weak'
|
||||
elif v >= config.MARKET_BREADTH_STRONG: # ≥60%
|
||||
out[mk] = 'strong' if up else 'rebound'
|
||||
elif v >= 0.40:
|
||||
out[mk] = 'mild'
|
||||
elif v >= 0.25:
|
||||
out[mk] = 'mixed'
|
||||
else:
|
||||
out[mk] = 'weak'
|
||||
return out
|
||||
|
||||
|
||||
def _load_jsonl_last_per_market(path) -> dict[str, dict]:
|
||||
out: dict[str, dict] = {}
|
||||
if not path.exists():
|
||||
@@ -28,22 +133,52 @@ def _load_jsonl_last_per_market(path) -> dict[str, dict]:
|
||||
return out
|
||||
|
||||
|
||||
def market_ok_map() -> dict[str, bool]:
|
||||
"""시장별 신규매수 허용 여부 — 당일 상승비율 기반 소프트 필터 (EOD 데이터라 보수적)."""
|
||||
_LIVE_BREADTH_CACHE: dict[str, float] | None = None
|
||||
_LIVE_BREADTH_AT: float = 0.0
|
||||
_LIVE_BREADTH_TTL = 60.0
|
||||
|
||||
|
||||
def _live_breadth() -> dict[str, float] | None:
|
||||
"""장중 실시간 상승비율(rise/total) — 네이버 m.stock 1콜/시장. 60s 캐시, 실패 시 None."""
|
||||
global _LIVE_BREADTH_CACHE, _LIVE_BREADTH_AT
|
||||
now = time.time()
|
||||
if _LIVE_BREADTH_CACHE is not None and (now - _LIVE_BREADTH_AT) < _LIVE_BREADTH_TTL:
|
||||
return _LIVE_BREADTH_CACHE
|
||||
try:
|
||||
sys.path.insert(0, str(config.SCRIPTS))
|
||||
import market_indicators_sync as mis
|
||||
out: dict[str, float] = {}
|
||||
for sym, lab in (('KOSPI', '코스피'), ('KOSDAQ', '코스닥')):
|
||||
r = mis.fetch_market(sym, lab)
|
||||
total = (r.get('rise', 0) + r.get('fall', 0) + r.get('steady', 0)) if r else 0
|
||||
if not total:
|
||||
return None
|
||||
out[sym] = r['rise'] / total
|
||||
_LIVE_BREADTH_CACHE, _LIVE_BREADTH_AT = out, now
|
||||
return out
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def _eod_breadth() -> dict[str, float]:
|
||||
"""장외 폴백 — 마지막 EOD 누적 상승비율."""
|
||||
latest = _load_jsonl_last_per_market(config.MARKET_HISTORY)
|
||||
out: dict[str, bool] = {}
|
||||
out: dict[str, float] = {}
|
||||
for label, rec in latest.items():
|
||||
rise = rec.get('rise', 0)
|
||||
fall = rec.get('fall', 0)
|
||||
steady = rec.get('steady', 0)
|
||||
total = rise + fall + steady
|
||||
breadth = rise / total if total else 1.0
|
||||
total = rec.get('rise', 0) + rec.get('fall', 0) + rec.get('steady', 0)
|
||||
breadth = rec.get('rise', 0) / total if total else 1.0
|
||||
key = 'KOSPI' if '코스피' in (rec.get('market_label') or '') or label == 'KOSPI' else \
|
||||
'KOSDAQ' if '코스닥' in (rec.get('market_label') or '') or label == 'KOSDAQ' else label
|
||||
out[key] = breadth >= config.MARKET_BREADTH_MIN
|
||||
out[key] = breadth
|
||||
return out
|
||||
|
||||
|
||||
def market_ok_map() -> dict[str, bool]:
|
||||
"""시장별 신규매수 허용 여부 — 6단계 국면(market_regime_map) 기반.
|
||||
강세·반등·완만상승 = 매수 허용 / 혼조·약세·급락 = 보류."""
|
||||
return {mk: REGIME[g][2] for mk, g in market_regime_map().items()}
|
||||
|
||||
|
||||
def _is_holiday(d: datetime) -> bool:
|
||||
try:
|
||||
hol = json.loads(config.HOLIDAYS_PATH.read_text())
|
||||
@@ -80,11 +215,47 @@ def _fill_sell_price(code: str, fallback: int) -> int:
|
||||
return int(fallback)
|
||||
|
||||
|
||||
def _gather(extra_codes=None):
|
||||
_SCAN_CANDLES: dict = {} # 스캔 1회 동안 종목별 일봉 공유
|
||||
_IND_MEMO: dict = {} # (code, 지표 파라미터) → 지표 묶음 — 같은 지표 설정 변이끼리 공유
|
||||
|
||||
|
||||
def _ind_key(code):
|
||||
return (code, config.SMA_SHORT, config.SMA_LONG, config.SMA_MID, config.ATR_PERIOD,
|
||||
config.BREAKOUT_LOOKBACK, config.SWING_LOW_LOOKBACK, config.VOLUME_AVG_PERIOD,
|
||||
config.RSI_PERIOD, config.TREND_SLOPE_DAYS)
|
||||
|
||||
|
||||
LAST_QUOTES_PATH = config.STATE_DIR / 'last_quotes.json'
|
||||
|
||||
|
||||
def _save_last_quotes(quotes: dict) -> None:
|
||||
"""직전 스캔이 모은 시세 — judge_view(관심종목 탭)가 라이브 재호출 없이 같은 값을 재사용."""
|
||||
if not quotes: # 시세 수집 실패(빈 dict)면 직전 정상값 보존 — 덮어쓰지 않음
|
||||
return
|
||||
try:
|
||||
config.STATE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
LAST_QUOTES_PATH.write_text(json.dumps(quotes, ensure_ascii=False))
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[engine] last_quotes 저장 실패: {e}\n')
|
||||
|
||||
|
||||
def _load_last_quotes() -> dict | None:
|
||||
"""직전 스캔 시세. 없으면 None → 호출부가 라이브 폴백."""
|
||||
try:
|
||||
return json.loads(LAST_QUOTES_PATH.read_text())
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
|
||||
def _gather(extra_codes=None, quotes=None):
|
||||
"""파라미터 무관한 라이브 데이터 1회 수집 (메인·변이 공유). 종목·시세·시장매핑.
|
||||
|
||||
extra_codes: universe에 없지만 청산 판단을 위해 포함해야 할 보유 코드(수동 삭제된 보유분).
|
||||
quotes: 주어지면 라이브 시세 호출을 건너뛰고 그대로 사용 (judge_view 가 직전 스캔 시세 재사용).
|
||||
"""
|
||||
data.reset_book_memo() # 호가 공유 캐시 리셋 — 이번 스캔의 체결가를 전 선수가 공유
|
||||
_SCAN_CANDLES.clear()
|
||||
_IND_MEMO.clear()
|
||||
uni = universe.build_universe()
|
||||
codes = [e['code'] for e in uni]
|
||||
seen = set(codes)
|
||||
@@ -93,14 +264,19 @@ def _gather(extra_codes=None):
|
||||
uni = uni + [{'code': c, 'name': '', 'sources': ['held']}]
|
||||
codes.append(c)
|
||||
seen.add(c)
|
||||
if not quotes: # None(미지정) 또는 빈 dict(저장본 비었음)면 라이브 수집
|
||||
quotes = data.batch_quotes(codes)
|
||||
cmkt = universe.code_market_map()
|
||||
return uni, quotes, cmkt
|
||||
|
||||
|
||||
def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
"""주어진 포트폴리오에 대해 현재 config(파라미터) 기준 스캔·체결. 스냅샷 반환(파일 기록 X)."""
|
||||
def _run_scan(pf, uni, quotes, cmkt, now, execute: bool = True) -> dict:
|
||||
"""주어진 포트폴리오에 대해 현재 config(파라미터) 기준 스캔·체결. 스냅샷 반환(파일 기록 X).
|
||||
|
||||
execute=False 면 판단(decisions)만 만들고 체결·계좌 저장을 모두 생략 — 시각 전환 뷰 등 read-only 용."""
|
||||
mkt_ok = market_ok_map() # MARKET_BREADTH_MIN 등 파라미터 의존 → 변이마다 재계산
|
||||
idx_ret = {mk: _index_return(mk, config.REL_STRENGTH_DAYS) for mk in ('KOSPI', 'KOSDAQ')}
|
||||
vfrac = _session_elapsed_frac(now) # 장중 부분 거래량 → 하루치 환산 분모
|
||||
decisions: list[dict] = []
|
||||
buys: list[dict] = []
|
||||
sells: list[dict] = []
|
||||
@@ -110,9 +286,17 @@ def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
if not name and code in pf.positions: # 보유 보강분(universe에서 빠진)은 이름 보완
|
||||
name = pf.positions[code].get('name', code)
|
||||
quote = quotes.get(code)
|
||||
hist = _SCAN_CANDLES.get(code)
|
||||
if hist is None:
|
||||
hist = data.candles(code, 80)
|
||||
_SCAN_CANDLES[code] = hist
|
||||
series = data.build_series(hist, quote)
|
||||
ind = signals.compute_indicators(series)
|
||||
_ik = _ind_key(code)
|
||||
_cached = _IND_MEMO.get(_ik)
|
||||
if _cached is None:
|
||||
_cached = signals.compute_indicators(series) or False
|
||||
_IND_MEMO[_ik] = _cached
|
||||
ind = dict(_cached) if _cached else None # 사본 — 변이별 주입값(rel_strength 등) 오염 방지
|
||||
if ind is None:
|
||||
decisions.append({'code': code, 'name': name, 'sources': sources,
|
||||
'state': 'NODATA', 'reason': '데이터 부족', 'checks': [],
|
||||
@@ -125,26 +309,30 @@ def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
pf.mark(code, cur_price)
|
||||
flow = data.flow_net(data.investor_flow(code))
|
||||
anl = data.analyst(code, cur_price)
|
||||
dec = signals.evaluate_holding(pf.positions[code], ind, flow, anl)
|
||||
dec = signals.evaluate_holding(pf.positions[code], ind, flow, anl,
|
||||
held_days=_held_days(pf.positions[code], now),
|
||||
market_ok=mkt_ok.get(cmkt.get(code, ''), True))
|
||||
pf.apply_position_update(code, dec['position_update'])
|
||||
dec.update({k: pf.positions[code].get(k) for k in
|
||||
('entry_price', 'qty', 'stop', 'target', 'trailing_on', 'entry_at')})
|
||||
act = dec['action']
|
||||
if act in ('sell', 'scale_out'):
|
||||
if execute and act in ('sell', 'scale_out'):
|
||||
fill = _fill_sell_price(code, cur_price)
|
||||
rec = pf.sell(code, fill, dec['reason'], signals=dec.get('checks'),
|
||||
frac=dec.get('sell_frac', 1.0))
|
||||
if rec:
|
||||
sells.append(rec)
|
||||
dec['fill_price'] = fill
|
||||
elif act == 'add':
|
||||
elif execute and act == 'add':
|
||||
fill = _fill_buy_price(code, cur_price)
|
||||
rec = pf.add_tranche(code, fill, dec['reason'], signals=dec.get('checks'))
|
||||
if rec:
|
||||
# 새 평단 기준 손절·목표 재산정 (손절은 위로만 래칫)
|
||||
new_entry = pf.positions[code]['entry_price']
|
||||
nstop, ntarget = signals.compute_stop_target(new_entry, ind['atr'], ind['recent_low'])
|
||||
pf.positions[code]['stop'] = max(pf.positions[code]['stop'], nstop)
|
||||
# 추격매수(up)=손절 위로만 래칫 / 물타기(down)=낮아진 평단 기준으로 손절 재설정
|
||||
pf.positions[code]['stop'] = (nstop if dec.get('add_kind') == 'down'
|
||||
else max(pf.positions[code]['stop'], nstop))
|
||||
pf.positions[code]['target'] = ntarget
|
||||
buys.append(rec)
|
||||
dec.update({'fill_price': fill, 'entry_price': new_entry,
|
||||
@@ -154,16 +342,18 @@ def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
continue
|
||||
|
||||
# ---- 미보유: 추세 스크린 → 수급·애널 → 매수 판단 ----
|
||||
if universe.is_etf(name):
|
||||
decisions.append({
|
||||
'code': code, 'name': name, 'sources': sources, 'price': cur_price,
|
||||
'state': 'SKIP', 'reason': 'ETF — 자동매매 제외(방향성 애널 부재)', 'action': None,
|
||||
'checks': [],
|
||||
})
|
||||
continue
|
||||
if not signals.trend_ok(ind):
|
||||
decisions.append({
|
||||
'code': code, 'name': name, 'sources': sources, 'price': cur_price,
|
||||
'state': 'SKIP', 'reason': '추세 미충족', 'action': None,
|
||||
'checks': [
|
||||
{'label': '추세(20일선 위)', 'ok': cur_price > ind['sma_long'],
|
||||
'detail': f"{cur_price:,} vs {ind['sma_long']:,.0f}"},
|
||||
{'label': '정배열(5>20)', 'ok': ind['sma_short'] > ind['sma_long'],
|
||||
'detail': f"{ind['sma_short']:,.0f} / {ind['sma_long']:,.0f}"},
|
||||
],
|
||||
'checks': signals.trend_checks(ind), # 4조건+상대강도 모두 표시 (왜 제외인지 보이게)
|
||||
})
|
||||
continue
|
||||
|
||||
@@ -171,9 +361,20 @@ def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
anl = data.analyst(code, cur_price)
|
||||
market = cmkt.get(code, '')
|
||||
m_ok = mkt_ok.get(market, True)
|
||||
ind['vol_time_frac'] = vfrac
|
||||
# 상대강도(라이브 전용): 종목 N일 수익률 − 시장지수 N일 수익률
|
||||
n = config.REL_STRENGTH_DAYS
|
||||
closes_c = [c['close'] for c in series]
|
||||
if len(closes_c) > n and closes_c[-(n + 1)] and idx_ret.get(market) is not None:
|
||||
stock_ret = (closes_c[-1] / closes_c[-(n + 1)] - 1) * 100
|
||||
ind['rel_strength'] = round(stock_ret - idx_ret[market], 2)
|
||||
dec = signals.evaluate_candidate(code, name, sources, ind, flow, anl, m_ok)
|
||||
|
||||
if dec['action'] == 'buy' and pf.can_open():
|
||||
if dec['action'] == 'buy' and pf.exited_today(code):
|
||||
# 당일 전량청산 종목 재매수 금지 — 휩쏘 churn(손절→5분 뒤 재진입 반복) 방지
|
||||
dec.update({'state': 'WAIT', 'action': None,
|
||||
'reason': '당일 청산 종목 — 재진입 쿨다운(내일부터 가능)'})
|
||||
if execute and dec['action'] == 'buy' and pf.can_open():
|
||||
fill = _fill_buy_price(code, dec['buy_price'])
|
||||
stop, target = signals.compute_stop_target(fill, ind['atr'], ind['recent_low'])
|
||||
rec = pf.buy(code, name, fill, sources, stop, target, dec['buy_path'], dec['reason'],
|
||||
@@ -186,6 +387,7 @@ def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
dec['reason'] = '매수 신호 — 현금/한도 부족'
|
||||
decisions.append(dec)
|
||||
|
||||
if execute:
|
||||
pf.update_equity_metrics()
|
||||
pf.save()
|
||||
|
||||
@@ -203,6 +405,32 @@ def _run_scan(pf, uni, quotes, cmkt, now) -> dict:
|
||||
}
|
||||
|
||||
|
||||
def judge_view(vid: str) -> dict | None:
|
||||
"""선택한 계좌('main'/'vN') 시각으로 **매매 없이 판단만** — 관심종목 탭 시각 전환용.
|
||||
|
||||
execute=False 라 체결·계좌 저장이 전혀 없다. 끝나면 config 를 메인 파라미터로 복원."""
|
||||
from . import backtest, variants as variants_mod
|
||||
now = datetime.now(config.KST)
|
||||
if vid in ('main', 'M', ''):
|
||||
params = config.load_params()
|
||||
pf = Portfolio.load()
|
||||
else:
|
||||
v = next((x for x in variants_mod.load_variants() if x['id'] == vid), None)
|
||||
if not v:
|
||||
return None
|
||||
pp, tp = variants_mod.variant_paths(vid)
|
||||
params = v.get('params') or {}
|
||||
pf = Portfolio.load(pp, tp)
|
||||
try:
|
||||
backtest.apply_params(params)
|
||||
# 직전 스캔이 저장한 시세 재사용 — 라이브 재호출 없이 보유종목 가격과 같은 시점으로 통일.
|
||||
# 스캔 이력이 아직 없으면(None) _gather 가 라이브 폴백.
|
||||
uni, quotes, cmkt = _gather(set(pf.positions), quotes=_load_last_quotes())
|
||||
return _run_scan(pf, uni, quotes, cmkt, now, execute=False)
|
||||
finally:
|
||||
backtest.apply_params(config.load_params()) # 전역 config 원복 (웹 데몬 잔류 방지)
|
||||
|
||||
|
||||
def _attach_benchmark(snap: dict, pf, now, refresh: bool = True):
|
||||
"""가상계좌 시작일 대비 기준지수(KOSPI/KOSDAQ) 수익·알파를 스냅샷에 부착."""
|
||||
from . import benchmark
|
||||
@@ -223,6 +451,7 @@ def scan(force: bool = False) -> dict:
|
||||
return {'skipped': True, 'reason': '장외/휴장', 'at': now.isoformat()}
|
||||
pf = Portfolio.load()
|
||||
uni, quotes, cmkt = _gather(set(pf.positions)) # 보유분은 universe에서 빠져도 청산 위해 포함
|
||||
_save_last_quotes(quotes)
|
||||
snap = _run_scan(pf, uni, quotes, cmkt, now)
|
||||
_attach_benchmark(snap, pf, now)
|
||||
config.STATE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
@@ -246,10 +475,12 @@ def scan_all(force: bool = False) -> dict:
|
||||
for vpf in vpfs.values():
|
||||
held_union |= set(vpf.positions)
|
||||
uni, quotes, cmkt = _gather(held_union)
|
||||
_save_last_quotes(quotes)
|
||||
|
||||
# 메인 (현재 params.json 튜닝)
|
||||
# 기준 판단 (params.json) — 2026-06-10 기준전략 폐지: 매매 없이 판단만(last_scan = 화면·상태점용).
|
||||
# 실제 매매는 전부 변이들이 한다 (메인 계좌 동결).
|
||||
backtest.apply_params(main_params)
|
||||
snap = _run_scan(pf, uni, quotes, cmkt, now)
|
||||
snap = _run_scan(pf, uni, quotes, cmkt, now, execute=False)
|
||||
_attach_benchmark(snap, pf, now) # 지수 캐시 갱신 1회 (변이는 캐시 재사용)
|
||||
config.STATE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
config.LAST_SCAN_PATH.write_text(json.dumps(snap, ensure_ascii=False, indent=2))
|
||||
@@ -261,24 +492,60 @@ def scan_all(force: bool = False) -> dict:
|
||||
s = p.summary()
|
||||
return benchmark.compare(s.get('total_return_pct'), benchmark.norm_date(p.created_at), today)
|
||||
|
||||
compare = [{'id': 'main', 'name': '메인 (현재 튜닝)', 'params': main_params,
|
||||
'summary': pf.summary(), 'benchmark': _alpha(pf)}]
|
||||
compare = [] # 기준전략 폐지 — 변이들만 비교 (메인 계좌는 매매 안 함)
|
||||
for v in vdefs:
|
||||
backtest.apply_params(v.get('params') or {})
|
||||
vpf = vpfs[v['id']]
|
||||
_run_scan(vpf, uni, quotes, cmkt, now)
|
||||
vsnap = _run_scan(vpf, uni, quotes, cmkt, now)
|
||||
compare.append({'id': v['id'], 'name': v.get('name', v['id']),
|
||||
'params': v.get('params') or {}, 'summary': vpf.summary(),
|
||||
'benchmark': _alpha(vpf)})
|
||||
'benchmark': _alpha(vpf), 'watching': _watching(vsnap),
|
||||
'held': sorted(vpf.positions)})
|
||||
|
||||
compare.sort(key=lambda c: c['summary'].get('total_return_pct', 0) or 0, reverse=True)
|
||||
|
||||
# 자동편입(auto) 종목 신호 추적 — 한 변이라도 노리는(매수/대기) 종목은 '살아있음' 기록 (auto_prune 판단용)
|
||||
try:
|
||||
from . import universe as _um
|
||||
sig = {it['code'] for c in compare for it in (c.get('watching') or []) if it.get('code')}
|
||||
if sig:
|
||||
_um.mark_signals(sorted(sig))
|
||||
except Exception:
|
||||
pass
|
||||
|
||||
variants_mod.COMPARE_PATH.write_text(json.dumps({
|
||||
'scanned_at': now.isoformat(), 'session': is_market_session(now),
|
||||
'variants': compare,
|
||||
}, ensure_ascii=False, indent=2))
|
||||
_record_equity_history(compare, now)
|
||||
return snap
|
||||
|
||||
|
||||
EQUITY_HISTORY_PATH = config.STATE_DIR / 'equity_history.json'
|
||||
|
||||
|
||||
def _record_equity_history(compare: list, now) -> None:
|
||||
"""일별 계좌 성과 이력 — {date: [{id, ph(파라미터 해시), equity, ret}]}.
|
||||
매 스캔 당일 항목을 덮어써 그날 마지막 스캔(≈장 마감) 값이 남는다. 변이 재구성으로
|
||||
id가 재사용돼도 ph로 어느 전략이었는지 식별 가능. 사후 국면별 분석용 누적."""
|
||||
import hashlib
|
||||
try:
|
||||
hist = json.loads(EQUITY_HISTORY_PATH.read_text()) if EQUITY_HISTORY_PATH.exists() else {}
|
||||
except Exception:
|
||||
hist = {}
|
||||
today = now.strftime('%Y%m%d')
|
||||
hist[today] = [{
|
||||
'id': c['id'],
|
||||
'ph': hashlib.md5(json.dumps(c.get('params') or {}, sort_keys=True).encode()).hexdigest()[:8],
|
||||
'equity': c['summary'].get('equity'),
|
||||
'ret': c['summary'].get('total_return_pct'),
|
||||
} for c in compare]
|
||||
try:
|
||||
EQUITY_HISTORY_PATH.write_text(json.dumps(hist, ensure_ascii=False))
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[engine] equity_history 기록 실패: {e}\n')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
force = '--force' in sys.argv
|
||||
snap = scan_all(force=force)
|
||||
|
||||
@@ -10,6 +10,7 @@ import json
|
||||
from datetime import datetime
|
||||
|
||||
from . import config
|
||||
from .signals import target_value as _sizing_value # buy()의 signals 파라미터가 모듈명을 가려서 직접 import
|
||||
|
||||
|
||||
def _now_iso() -> str:
|
||||
@@ -28,6 +29,7 @@ class Portfolio:
|
||||
self.max_drawdown: float = data.get('max_drawdown', 0.0)
|
||||
self.created_at: str = data.get('created_at', _now_iso())
|
||||
self.updated_at: str = data.get('updated_at', self.created_at)
|
||||
self.last_exit: dict[str, str] = data.get('last_exit', {}) # code → 전량청산 날짜(YYYY-MM-DD), 당일 재진입 금지용
|
||||
# 영속화 경로 (변이는 별도 경로, 기본은 메인 sim)
|
||||
self._pf_path = config.PORTFOLIO_PATH
|
||||
self._trades_path = config.TRADES_PATH
|
||||
@@ -55,7 +57,7 @@ class Portfolio:
|
||||
'cash': self.cash, 'initial': self.initial, 'positions': self.positions,
|
||||
'realized_pnl': self.realized_pnl, 'closed_trades': self.closed_trades,
|
||||
'wins': self.wins, 'peak_equity': self.peak_equity,
|
||||
'max_drawdown': self.max_drawdown,
|
||||
'max_drawdown': self.max_drawdown, 'last_exit': self.last_exit,
|
||||
'created_at': self.created_at, 'updated_at': self.updated_at,
|
||||
}, ensure_ascii=False, indent=2))
|
||||
|
||||
@@ -83,7 +85,7 @@ class Portfolio:
|
||||
"""신규 진입(1차 트랜치). 목표비중을 ENTRY_TRANCHES 로 나눈 만큼만 매수. 체결 dict 또는 None."""
|
||||
if code in self.positions or not self.can_open():
|
||||
return None
|
||||
full_target = self.target_position_value()
|
||||
full_target = _sizing_value(self.equity_estimate(), fill_price, stop)
|
||||
tranche_val = full_target / max(1, config.ENTRY_TRANCHES)
|
||||
qty = self._qty_for(fill_price, tranche_val)
|
||||
if qty < 1:
|
||||
@@ -169,8 +171,13 @@ class Portfolio:
|
||||
if pnl > 0:
|
||||
self.wins += 1
|
||||
del self.positions[code]
|
||||
self.last_exit[code] = _now_iso()[:10] # 당일 재진입 금지 기준
|
||||
return rec
|
||||
|
||||
def exited_today(self, code: str) -> bool:
|
||||
"""오늘 전량청산한 종목인지 — 당일 재진입(휩쏘 churn) 방지."""
|
||||
return self.last_exit.get(code) == _now_iso()[:10]
|
||||
|
||||
def apply_position_update(self, code: str, upd: dict):
|
||||
if code in self.positions:
|
||||
self.positions[code].update(upd)
|
||||
|
||||
@@ -18,6 +18,13 @@ def compute_indicators(series: list[dict]) -> dict | None:
|
||||
atr = ind_mod.atr(series, config.ATR_PERIOD)
|
||||
if sma_long is None or sma_short is None or atr is None:
|
||||
return None
|
||||
# 중기선(60) — 데이터 부족 시 None
|
||||
sma_mid = ind_mod.sma(closes, config.SMA_MID)
|
||||
# 20일선 기울기(우상향?) — N일 전 20일선과 비교. 데이터 부족 시 None
|
||||
slope_days = config.TREND_SLOPE_DAYS
|
||||
sma_long_prev = (ind_mod.sma(closes[:-slope_days], config.SMA_LONG)
|
||||
if len(closes) > config.SMA_LONG + slope_days else None)
|
||||
sma_long_slope_up = (sma_long > sma_long_prev) if sma_long_prev is not None else None
|
||||
|
||||
# 회전율 — 오늘 봉(라이브 시세)엔 turnover_rate 없음 → 최근 봉의 거래량/회전율로 유통주식 추정해 환산
|
||||
hist = series[:-1]
|
||||
@@ -38,7 +45,11 @@ def compute_indicators(series: list[dict]) -> dict | None:
|
||||
'today_volume': series[-1]['volume'],
|
||||
'sma_short': sma_short,
|
||||
'sma_long': sma_long,
|
||||
'sma_mid': sma_mid,
|
||||
'sma_long_slope_up': sma_long_slope_up,
|
||||
'rel_strength': None, # 라이브 engine이 주입(종목−지수 N일 수익률). backtest는 None(중립)
|
||||
'atr': atr,
|
||||
'rsi': ind_mod.rsi(closes, config.RSI_PERIOD),
|
||||
'recent_high': ind_mod.recent_high(series, config.BREAKOUT_LOOKBACK),
|
||||
'recent_low': ind_mod.recent_low(series, config.SWING_LOW_LOOKBACK),
|
||||
'volume_avg': ind_mod.volume_avg(series, config.VOLUME_AVG_PERIOD),
|
||||
@@ -47,9 +58,28 @@ def compute_indicators(series: list[dict]) -> dict | None:
|
||||
}
|
||||
|
||||
|
||||
def target_value(equity: float, fill_price: float, stop: float) -> float:
|
||||
"""종목당 목표 진입금액 — 리스크 기반(자산×RISK% ÷ 손절폭)을 균등비중(자산/MAX_POSITIONS) 상한으로 캡.
|
||||
RISK_PER_TRADE_PCT=0 또는 손절 정보 없으면 균등비중으로 폴백. 엔진·백테스트 공용(같은 두뇌)."""
|
||||
cap = equity / max(1, config.MAX_POSITIONS)
|
||||
risk_pct = getattr(config, 'RISK_PER_TRADE_PCT', 0) or 0
|
||||
if risk_pct > 0 and stop and fill_price > stop:
|
||||
risk_value = (equity * risk_pct) / (fill_price - stop) * fill_price
|
||||
return min(cap, risk_value)
|
||||
return cap
|
||||
|
||||
|
||||
def trend_ok(ind: dict) -> bool:
|
||||
"""추세 1차 스크린 — 비싼 수급·애널 호출 전 게이트."""
|
||||
return ind['price'] > ind['sma_long'] and ind['sma_short'] > ind['sma_long']
|
||||
"""추세 1차 스크린 — 비싼 수급·애널 호출 전 게이트.
|
||||
기본: 현재가>20일선 & 정배열(5>20). 보강: ①20일선 우상향 ②5>중기선(60) — 데이터 있을 때만."""
|
||||
if not (ind['price'] > ind['sma_long'] and ind['sma_short'] > ind['sma_long']):
|
||||
return False
|
||||
if getattr(config, 'TREND_SLOPE_GATE', 1) and ind.get('sma_long_slope_up') is False:
|
||||
return False # ① 장기선이 꺾여 내려오면 제외 (게이트 ON일 때만)
|
||||
sm = ind.get('sma_mid')
|
||||
if getattr(config, 'MID_ARRAY_GATE', 1) and sm is not None and ind['sma_short'] <= sm:
|
||||
return False # ② 단기선이 중기선 아래면(역배열) 제외 (게이트 ON일 때만)
|
||||
return True
|
||||
|
||||
|
||||
def compute_stop_target(entry: float, atr: float, recent_low: float | None) -> tuple[int, int]:
|
||||
@@ -92,16 +122,44 @@ def _analyst_checks(analyst: dict | None, price: float) -> tuple[bool, list[dict
|
||||
return gate_ok, checks, bonus
|
||||
|
||||
|
||||
def trend_checks(ind: dict) -> list[dict]:
|
||||
"""추세 게이트 체크리스트(trend_ok와 동일 4조건 + 상대강도) — 매수 판단·제외 카드 공용.
|
||||
라벨은 실제 적용된 이평 일수(config)로 표기 (변이마다 SMA_LONG 10/20/40 다름)."""
|
||||
price = ind['price']
|
||||
_S, _L, _M = config.SMA_SHORT, config.SMA_LONG, config.SMA_MID
|
||||
slope = ind.get('sma_long_slope_up')
|
||||
sm = ind.get('sma_mid')
|
||||
rel = ind.get('rel_strength')
|
||||
slope_gate = getattr(config, 'TREND_SLOPE_GATE', 1)
|
||||
mid_gate = getattr(config, 'MID_ARRAY_GATE', 1)
|
||||
# 게이트 꺼진 조건은 ok=None(참고) — 통과/탈락에 영향 없음을 표시
|
||||
if not slope_gate:
|
||||
slope_check = {'label': f'추세 기울기({_L}일선↑)', 'ok': None,
|
||||
'detail': '게이트 끔(완화)' + ('' if slope is None else f" · 실제 {'우상향' if slope else '하향'}")}
|
||||
else:
|
||||
slope_check = {'label': f'추세 기울기({_L}일선↑)', 'ok': None if slope is None else slope,
|
||||
'detail': '데이터 없음(통과)' if slope is None else ('우상향' if slope else '하향')}
|
||||
if not mid_gate:
|
||||
mid_check = {'label': f'중기 정배열({_S}>{_M})', 'ok': None,
|
||||
'detail': '게이트 끔(완화)' + ('' if sm is None else f" · {ind['sma_short']:,.0f} / {sm:,.0f}")}
|
||||
else:
|
||||
mid_check = {'label': f'중기 정배열({_S}>{_M})', 'ok': None if sm is None else ind['sma_short'] > sm,
|
||||
'detail': '데이터 없음(통과)' if sm is None else f"{ind['sma_short']:,.0f} / {sm:,.0f}"}
|
||||
return [
|
||||
{'label': f'추세({_L}일선 위)', 'ok': price > ind['sma_long'],
|
||||
'detail': f"{price:,} vs {ind['sma_long']:,.0f}"},
|
||||
{'label': f'정배열({_S}>{_L})', 'ok': ind['sma_short'] > ind['sma_long'],
|
||||
'detail': f"{ind['sma_short']:,.0f} / {ind['sma_long']:,.0f}"},
|
||||
slope_check, mid_check,
|
||||
{'label': '상대강도(시장대비)', 'ok': None if rel is None else rel > 0,
|
||||
'detail': '데이터 없음(통과)' if rel is None else f'{rel:+.1f}%p'},
|
||||
]
|
||||
|
||||
|
||||
def evaluate_candidate(code, name, sources, ind, flow, analyst, market_ok) -> dict:
|
||||
"""미보유 종목 매수 판단. flow/analyst 는 engine 이 trend 통과 후 주입."""
|
||||
price = ind['price']
|
||||
checks: list[dict] = []
|
||||
|
||||
# 1. 추세
|
||||
checks.append({'label': '추세(20일선 위)', 'ok': price > ind['sma_long'],
|
||||
'detail': f"{price:,} vs {ind['sma_long']:,.0f}"})
|
||||
checks.append({'label': '정배열(5>20)', 'ok': ind['sma_short'] > ind['sma_long'],
|
||||
'detail': f"{ind['sma_short']:,.0f} / {ind['sma_long']:,.0f}"})
|
||||
checks: list[dict] = list(trend_checks(ind)) # 1. 추세 게이트 (제외 카드와 공유)
|
||||
|
||||
# 2. 수급
|
||||
fnet = flow.get('foreign', 0) if flow else 0
|
||||
@@ -114,44 +172,66 @@ def evaluate_candidate(code, name, sources, ind, flow, analyst, market_ok) -> di
|
||||
gate_ok, acks, bonus = _analyst_checks(analyst, price)
|
||||
checks.extend(acks)
|
||||
|
||||
# 시장 강약 — 소프트 필터(차단 X). 약세장이면 눌림목 진입만 보류, 돌파 진입은 허용
|
||||
checks.append({'label': '시장 강세', 'ok': market_ok,
|
||||
'detail': '강세' if market_ok else '약세 — 돌파만 허용'})
|
||||
|
||||
base = {'code': code, 'name': name, 'sources': sources, 'price': price,
|
||||
'checks': checks, 'action': None, 'buy_path': None, 'buy_price': None,
|
||||
'plan_stop': None, 'plan_target': None, 'bonus': bonus}
|
||||
|
||||
if not gate_ok:
|
||||
return {**base, 'state': 'SKIP', 'reason': '애널 게이트 제외'}
|
||||
if not market_ok:
|
||||
return {**base, 'state': 'WAIT', 'reason': '시장 약세 — 신규매수 보류'}
|
||||
if not supply_ok:
|
||||
return {**base, 'state': 'WAIT', 'reason': '수급 미충족'}
|
||||
|
||||
# 4. 과열 보류 — 회전율이 평균 대비 과도하면 돌파·눌림목 불문 신규매수 보류
|
||||
# 장중엔 부분 누적 거래량을 경과시간 비례로 하루치 환산(vol_time_frac, engine 주입·백테스트는 1.0)
|
||||
vfrac = ind.get('vol_time_frac') or 1.0
|
||||
vol_today = ind['today_volume'] / vfrac
|
||||
t_today, t_avg = ind.get('turnover_today'), ind.get('turnover_avg')
|
||||
if t_today is not None:
|
||||
t_today = t_today / vfrac
|
||||
proj = ' (환산)' if vfrac < 1.0 else ''
|
||||
overheated = bool(t_today and t_avg and t_today >= t_avg * config.TURNOVER_OVERHEAT_MULT)
|
||||
if t_today is not None and t_avg:
|
||||
checks.append({'label': '과열 아님(회전율)', 'ok': not overheated,
|
||||
'detail': f"{t_today:.2f}% vs 평균 {t_avg:.2f}% (보류 {config.TURNOVER_OVERHEAT_MULT:.0f}배↑)"})
|
||||
'detail': f"{t_today:.2f}%{proj} vs 평균 {t_avg:.2f}% (보류 {config.TURNOVER_OVERHEAT_MULT:.0f}배↑)"})
|
||||
if overheated:
|
||||
return {**base, 'state': 'WAIT',
|
||||
'reason': f'과열(회전율 {t_today:.1f}% ≥ 평균×{config.TURNOVER_OVERHEAT_MULT:.0f}) — 신규매수 보류'}
|
||||
|
||||
# 5. 매수 경로 — 돌파 우선 (전고점 + 거래량 급증 + 회전율 급증 모두 충족)
|
||||
price_break = bool(ind['recent_high'] and price > ind['recent_high'])
|
||||
vol_mult_ok = bool(ind['volume_avg'] and ind['today_volume'] >= ind['volume_avg'] * config.VOLUME_BREAKOUT_MULT)
|
||||
vol_mult_ok = bool(ind['volume_avg'] and vol_today >= ind['volume_avg'] * config.VOLUME_BREAKOUT_MULT)
|
||||
turn_ok = (t_today is None or not t_avg) or (t_today >= t_avg * config.TURNOVER_BREAKOUT_MULT)
|
||||
breakout = price_break and vol_mult_ok and turn_ok
|
||||
|
||||
checks.append({'label': '돌파(전고점)', 'ok': price_break,
|
||||
'detail': f"고점 {ind['recent_high']:,.0f}" if ind['recent_high'] else '—'})
|
||||
checks.append({'label': '거래량 급증', 'ok': vol_mult_ok,
|
||||
'detail': f"{ind['today_volume']:,} vs 평균 {ind['volume_avg']:,.0f}" if ind['volume_avg'] else '—'})
|
||||
'detail': f"{vol_today:,.0f}{proj} vs 평균 {ind['volume_avg']:,.0f}" if ind['volume_avg'] else '—'})
|
||||
if t_today is not None and t_avg:
|
||||
checks.append({'label': '회전율 급증', 'ok': bool(turn_ok),
|
||||
'detail': f"{t_today:.2f}% vs 평균 {t_avg:.2f}%"})
|
||||
'detail': f"{t_today:.2f}%{proj} vs 평균 {t_avg:.2f}%"})
|
||||
else:
|
||||
checks.append({'label': '회전율', 'ok': None, 'detail': '데이터 없음(통과)'})
|
||||
|
||||
# RSI — 돌파 과열 추격 / 눌림목 낙하 진입 방지 (데이터 없으면 통과)
|
||||
rsi = ind.get('rsi')
|
||||
rsi_overbought = rsi is not None and rsi >= config.RSI_OVERBOUGHT
|
||||
rsi_oversold = rsi is not None and rsi < config.RSI_OVERSOLD
|
||||
checks.append({'label': 'RSI',
|
||||
'ok': None if rsi is None else not (rsi_overbought or rsi_oversold),
|
||||
'detail': '데이터 없음(통과)' if rsi is None else f'{rsi:.0f}'})
|
||||
|
||||
if breakout:
|
||||
if not market_ok and config.BEAR_ENTRY_MODE == 0:
|
||||
return {**base, 'state': 'WAIT',
|
||||
'reason': '약세장 — 완전 현금화(돌파도 보류)'}
|
||||
if rsi_overbought:
|
||||
return {**base, 'state': 'WAIT',
|
||||
'reason': f'돌파했지만 RSI 과열({rsi:.0f} ≥ {config.RSI_OVERBOUGHT:g}) — 추격 보류'}
|
||||
return {**base, 'state': 'BUY', 'action': 'buy', 'buy_path': 'breakout',
|
||||
'buy_price': price, 'reason': '거래량·회전율 동반 전고점 돌파'}
|
||||
|
||||
@@ -162,19 +242,36 @@ def evaluate_candidate(code, name, sources, ind, flow, analyst, market_ok) -> di
|
||||
checks.append({'label': '눌림목 도달', 'ok': pulled,
|
||||
'detail': f'지정가 {limit:,} (현재 {price:,})'})
|
||||
if pulled:
|
||||
if not market_ok and config.BEAR_ENTRY_MODE != 2:
|
||||
# 약세장에선 바닥 잡기식 눌림목 진입 보류 (모드 2=눌림목 허용이면 통과)
|
||||
mode_msg = '완전 현금화' if config.BEAR_ENTRY_MODE == 0 else '돌파만 허용'
|
||||
return {**base, 'state': 'WAIT', 'watch_price': limit,
|
||||
'reason': f'약세장 — 눌림목({limit:,}) 보류 ({mode_msg})'}
|
||||
if rsi_oversold:
|
||||
# 과매도 = 아직 떨어지는 칼 — 반등 확인 전 진입 보류
|
||||
return {**base, 'state': 'WAIT', 'watch_price': limit,
|
||||
'reason': f'눌림목이지만 RSI 과매도({rsi:.0f} < {config.RSI_OVERSOLD:g}) — 낙하 중 보류'}
|
||||
# 현재가가 이미 지정가 이하 → 시장에서 현재가(체결가)로 매수
|
||||
return {**base, 'state': 'BUY', 'action': 'buy', 'buy_path': 'pullback',
|
||||
'buy_price': price, 'watch_price': limit,
|
||||
'reason': f'눌림목 지정가 {limit:,} 도달'}
|
||||
|
||||
# 6-b. 즉시매수 — 추세·정배열·수급·애널 다 통과했는데 돌파·눌림목 둘 다 아니면(=안 내려오는 상승 종목),
|
||||
# 강세장·RSI 정상이면 현재가에 바로 매수. 꾸준히 오르기만 하는 좋은 종목 놓침 방지 (실험 토글).
|
||||
if getattr(config, 'IMMEDIATE_ENTRY', 0) and market_ok and not rsi_overbought:
|
||||
return {**base, 'state': 'BUY', 'action': 'buy', 'buy_path': 'immediate',
|
||||
'buy_price': price, 'reason': '조건 충족 — 즉시매수(눌림 안 기다림)'}
|
||||
|
||||
return {**base, 'state': 'WAIT', 'watch_price': limit,
|
||||
'reason': f'눌림목 대기 — 지정가 {limit:,}'}
|
||||
|
||||
|
||||
def evaluate_holding(position, ind, flow, analyst) -> dict:
|
||||
"""보유 종목 판단. 우선순위: 손절/추세이탈(전량) → 분할익절(scale_out) → 추격매수(add) → 유지.
|
||||
def evaluate_holding(position, ind, flow, analyst, held_days=None, market_ok=True) -> dict:
|
||||
"""보유 종목 판단. 우선순위: 손절/추세이탈(전량) → 시간손절 → 분할익절(scale_out) → 추격매수(add) → 유지.
|
||||
|
||||
position 의 stop/peak/trailing/scaled_out 갱신값도 position_update 로 함께 반환.
|
||||
held_days: 보유 경과 일수(달력). None이면 시간손절 미적용(엔진·백테스트가 산정해 전달).
|
||||
market_ok: 시장 강세 여부(물타기 허용 판단용, 백테스트는 중립 True).
|
||||
"""
|
||||
price = ind['price']
|
||||
entry = position['entry_price']
|
||||
@@ -204,7 +301,7 @@ def evaluate_holding(position, ind, flow, analyst) -> dict:
|
||||
{'label': '목표/트레일링', 'ok': None,
|
||||
'detail': ('트레일링 ON' if trailing_on else
|
||||
('일부익절 완료' if scaled_out else f'목표 {target:,}'))},
|
||||
{'label': '추세(20일선)', 'ok': price >= ind['sma_long'],
|
||||
{'label': f'추세({config.SMA_LONG}일선)', 'ok': price >= ind['sma_long'],
|
||||
'detail': f"{ind['sma_long']:,.0f}"},
|
||||
{'label': '수급(외/기)', 'ok': supply_ok, 'detail': f'외 {fnet:+,} · 기 {inet:+,}'},
|
||||
{'label': f'분할({tranches}/{config.ENTRY_TRANCHES})', 'ok': None,
|
||||
@@ -218,6 +315,23 @@ def evaluate_holding(position, ind, flow, analyst) -> dict:
|
||||
'price': price, 'checks': checks, 'action': None, 'state': 'HOLD',
|
||||
'position_update': upd, 'pnl_pct': pnl_pct}
|
||||
|
||||
# 0. 물타기(애버리징) — 켜진 변이만. 하락 시 손절 대신 추가매수로 평단↓ (한도·강세장·비급락 조건).
|
||||
# 당일 단일 급락(-CRASH%↓)은 물타기 금지→손절 우선(그림 #3), 약세장도 금지(그림 #4).
|
||||
avg_on = getattr(config, 'AVERAGING_ENTRY', 0)
|
||||
if avg_on:
|
||||
prev_close = ind.get('prev_close') or price
|
||||
today_chg = (price / prev_close - 1) if prev_close else 0
|
||||
crash = today_chg <= -getattr(config, 'CRASH_DROP_PCT', 0.10)
|
||||
avg_trigger = last_add * (1 - getattr(config, 'AVERAGING_DROP_PCT', 0.10))
|
||||
budget_left = tranches < config.ENTRY_TRANCHES
|
||||
# 트레일링/익절 전 + 한도 남음 + 강세장 + 비급락 + 직전매수가 -X% 도달 → 물타기
|
||||
if (budget_left and market_ok and not crash and not trailing_on and not scaled_out
|
||||
and price <= avg_trigger):
|
||||
return {**base, 'state': 'ADD', 'action': 'add', 'add_kind': 'down',
|
||||
'reason': f'물타기 — {tranches + 1}/{config.ENTRY_TRANCHES}차 (평단↓, -{config.AVERAGING_DROP_PCT*100:.0f}%)'}
|
||||
# 물타기 한도 소진(또는 급락/약세장)인데 손절선 깨짐 → 최종 손절
|
||||
# (한도 남았는데 급락이면 아래 일반 손절로 자연 처리)
|
||||
|
||||
# 1. 손절·추세이탈 — 전량
|
||||
if price <= stop:
|
||||
reason = '트레일링 익절' if (trailing_on and price > entry) else '손절'
|
||||
@@ -225,6 +339,13 @@ def evaluate_holding(position, ind, flow, analyst) -> dict:
|
||||
if price < ind['sma_long'] and fnet < 0 and inet < 0:
|
||||
return {**base, 'state': 'SELL', 'action': 'sell', 'sell_frac': 1.0, 'reason': '추세·수급 이탈'}
|
||||
|
||||
# 1-b. 시간손절 — N일 보유했는데 트레일링 전이고 진입가도 못 넘으면(진전 없음) 청산해 자본 회전
|
||||
max_hold = getattr(config, 'MAX_HOLD_DAYS', 0) or 0
|
||||
if (held_days is not None and max_hold > 0 and held_days >= max_hold
|
||||
and not trailing_on and not scaled_out and price <= entry):
|
||||
return {**base, 'state': 'SELL', 'action': 'sell', 'sell_frac': 1.0,
|
||||
'reason': f'시간손절 — {held_days}일 보유·진전 없음(자본 회전)'}
|
||||
|
||||
# 2. 분할매도 — 목표 도달 & 미익절. 일부 익절 후 잔량은 트레일링으로 전환
|
||||
if target and price >= target and not scaled_out:
|
||||
upd['trailing_on'] = True
|
||||
|
||||
+1728
-238
File diff suppressed because it is too large
Load Diff
@@ -10,18 +10,42 @@ from __future__ import annotations
|
||||
|
||||
import itertools
|
||||
import json
|
||||
import os
|
||||
from datetime import datetime
|
||||
from multiprocessing import get_context
|
||||
|
||||
from . import backtest, config, universe
|
||||
|
||||
|
||||
def _eval_combo(args):
|
||||
"""워커 1개가 조합 1개를 평가 — 학습/검증 + 전체기간 3분할 구간(꾸준함 측정).
|
||||
파라미터는 학습(fit)이 없으므로 3분할은 '한 구간 운빨'을 거르는 일관성 검증."""
|
||||
keys, combo, codes, trf, trt, tef, tet, windows = args
|
||||
params = dict(zip(keys, combo))
|
||||
tr = backtest.run(params, codes, date_from=trf, date_to=trt)
|
||||
te = backtest.run(params, codes, date_from=tef, date_to=tet)
|
||||
wins = []
|
||||
for wf, wt in windows:
|
||||
w = backtest.run(params, codes, date_from=wf, date_to=wt)
|
||||
wins.append({'from': wf, 'to': wt,
|
||||
'ret': w.get('total_return_pct'), 'trades': w.get('trades', 0)})
|
||||
rets = [w['ret'] for w in wins if w['ret'] is not None]
|
||||
return {'params': params, 'train': tr, 'test': te, 'windows': wins,
|
||||
'worst_ret': min(rets) if rets else None}
|
||||
|
||||
# 백테스트에서 실제 영향 있는 파라미터만 스윕 (애널 게이트·시장필터는 backtest 중립이라 제외).
|
||||
# SMA_LONG 5단계로 추세 속도 다양화 + 돌파 강도 추가. 5×3×3×3×2 = 270 조합.
|
||||
# 기존 5 + 신규 4(RSI·시간손절·리스크) 탐색. 조합폭발 억제 위해 기존 그리드는 핵심값으로 축소.
|
||||
# base 4×3×2×2×2 = 96 × 신규 2×2×2×2 = 16 → 1536 조합. (2026-06-15 SMA_LONG 60 추가)
|
||||
GRID = {
|
||||
'SMA_LONG': [10, 20, 40, 60, 120], # 추세 속도 — 빠른/느린 (다양성 핵심)
|
||||
'SMA_LONG': [10, 20, 60], # 추세선 길이 — 10/20/60 (2026-06-15 40 제거: 어중간·관리자님 지시. 60은 중기선과 겹침)
|
||||
'RR_RATIO': [1.5, 2.0, 3.0], # 손익비
|
||||
'STOP_ATR_MULT': [1.5, 2.0, 3.0], # 손절 폭
|
||||
'PULLBACK_ATR_MULT': [0.5, 1.0, 1.5], # 눌림 깊이
|
||||
'STOP_ATR_MULT': [1.5, 2.0], # 손절 폭
|
||||
'PULLBACK_ATR_MULT': [1.0, 1.5], # 눌림 깊이
|
||||
'VOLUME_BREAKOUT_MULT': [1.3, 2.0], # 돌파 거래량 강도
|
||||
'RSI_OVERBOUGHT': [75, 88], # 돌파 과열 컷 (엄격/느슨)
|
||||
'RSI_OVERSOLD': [20, 35], # 눌림목 과매도 컷 (느슨/엄격)
|
||||
'MAX_HOLD_DAYS': [0, 20], # 시간손절 끔/20일
|
||||
'RISK_PER_TRADE_PCT': [0.01, 0.02], # 종목당 리스크 1%/2%
|
||||
}
|
||||
|
||||
MIN_TRADES = 10 # 검증기간 거래 이 미만이면 표본 부족 → 하위로
|
||||
@@ -46,22 +70,39 @@ def run_sweep(codes: list[str] | None = None, train_frac: float = 0.7, grid: dic
|
||||
train_to, test_from, test_to = dates[split - 1], dates[split], dates[-1]
|
||||
train_from = dates[0]
|
||||
|
||||
# 전체기간 3분할 — 구간별 수익으로 '꾸준함'(최악 구간) 측정
|
||||
third = len(dates) // 3
|
||||
windows = [(dates[0], dates[third - 1]),
|
||||
(dates[third], dates[2 * third - 1]),
|
||||
(dates[2 * third], dates[-1])]
|
||||
|
||||
keys = list(grid.keys())
|
||||
combos = list(itertools.product(*[grid[k] for k in keys]))
|
||||
results = []
|
||||
for combo in combos:
|
||||
params = dict(zip(keys, combo))
|
||||
tr = backtest.run(params, codes, date_from=train_from, date_to=train_to)
|
||||
te = backtest.run(params, codes, date_from=test_from, date_to=test_to)
|
||||
results.append({'params': params, 'train': tr, 'test': te})
|
||||
args = [(keys, combo, codes, train_from, train_to, test_from, test_to, windows) for combo in combos]
|
||||
|
||||
# 멀티프로세싱 — 조합을 코어에 분배. macOS는 fork가 데드락 위험이라 spawn 사용
|
||||
# (워커가 메인 재import → sim/__main__.py의 `if __name__=='__main__'` 가드로 재귀 방지).
|
||||
# chunksize 크게 → 워커당 연속 조합 처리로 종목 일봉 메모이즈 재활용 극대화. pool.map은 순서 유지(결정론).
|
||||
nproc = max(1, (os.cpu_count() or 4) - 2)
|
||||
if len(args) <= 1 or nproc == 1:
|
||||
results = [_eval_combo(a) for a in args]
|
||||
else:
|
||||
chunk = max(1, len(args) // nproc)
|
||||
with get_context('spawn').Pool(nproc) as pool:
|
||||
results = pool.map(_eval_combo, args, chunksize=chunk)
|
||||
|
||||
def sort_key(r):
|
||||
te = r['test']
|
||||
enough = (te.get('trades', 0) or 0) >= MIN_TRADES
|
||||
return (1 if enough else 0, te.get('total_return_pct', -999) or -999)
|
||||
worst = r.get('worst_ret')
|
||||
# 1순위 최악 구간 수익(꾸준함 — 한 구간 운빨 배제), 2순위 검증수익
|
||||
return (1 if enough else 0,
|
||||
worst if worst is not None else -999,
|
||||
te.get('total_return_pct', -999) or -999)
|
||||
|
||||
results.sort(key=sort_key, reverse=True)
|
||||
|
||||
|
||||
out = {
|
||||
'generated_at': datetime.now(config.KST).isoformat(),
|
||||
'universe_size': len(codes),
|
||||
@@ -76,6 +117,8 @@ def run_sweep(codes: list[str] | None = None, train_frac: float = 0.7, grid: dic
|
||||
}
|
||||
config.STATE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
(config.STATE_DIR / 'backtest_results.json').write_text(json.dumps(out, ensure_ascii=False, indent=2))
|
||||
# ⚠️ 비교군 자동 동기화는 2026-06-10 관리자님 지시로 끔 — sweep은 결과 파일만 갱신.
|
||||
# 비교군 변경은 명시 요청 시에만: `python3 -m sim variants sync` 또는 variants.sync_label_tops().
|
||||
return out
|
||||
|
||||
|
||||
@@ -86,10 +129,13 @@ if __name__ == '__main__':
|
||||
if res.get('error'):
|
||||
print('스윕 실패:', res)
|
||||
else:
|
||||
print(f"스윕 완료 — {res['count']}개 조합 · 검증기간 {res['split']['test']}")
|
||||
print(f"{'RR':>4} {'STOP':>5} {'SMA':>4} {'PULL':>5} | {'학습수익%':>8} {'검증수익%':>8} {'검증MDD%':>8} {'검증거래':>6} {'승률%':>6}")
|
||||
print(f"스윕 완료 — {res['count']}개 조합 · 검증기간 {res['split']['test']} · 정렬=최악구간 수익")
|
||||
print(f"{'RR':>4} {'STOP':>5} {'SMA':>4} {'PULL':>5} {'RSI±':>8} {'HOLD':>5} {'RISK':>5} | "
|
||||
f"{'최악구간%':>8} {'검증수익%':>8} {'거래':>5} {'승률%':>6}")
|
||||
for r in res['results'][:12]:
|
||||
p, te, tr = r['params'], r['test'], r['train']
|
||||
print(f"{p['RR_RATIO']:>4} {p['STOP_ATR_MULT']:>5} {p['SMA_LONG']:>4} {p['PULLBACK_ATR_MULT']:>5} | "
|
||||
f"{tr['total_return_pct']:>8} {te['total_return_pct']:>8} {te['mdd_pct']:>8} "
|
||||
f"{te['trades']:>6} {str(te['win_rate_pct']):>6}")
|
||||
p, te = r['params'], r['test']
|
||||
rsi = f"{p.get('RSI_OVERBOUGHT','-')}/{p.get('RSI_OVERSOLD','-')}"
|
||||
print(f"{p['RR_RATIO']:>4} {p['STOP_ATR_MULT']:>5} {p['SMA_LONG']:>4} {p['PULLBACK_ATR_MULT']:>5} "
|
||||
f"{rsi:>8} {p.get('MAX_HOLD_DAYS','-'):>5} {p.get('RISK_PER_TRADE_PCT','-'):>5} | "
|
||||
f"{str(r.get('worst_ret')):>8} {te['total_return_pct']:>8} "
|
||||
f"{te['trades']:>5} {str(te['win_rate_pct']):>6}")
|
||||
|
||||
@@ -9,6 +9,7 @@
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import re
|
||||
import sys
|
||||
from datetime import datetime
|
||||
|
||||
@@ -18,6 +19,16 @@ sys.path.insert(0, str(config.SCRIPTS))
|
||||
import kiwoom_client as kc # noqa: E402
|
||||
|
||||
WATCHLIST_PATH = config.WORKSPACE / 'state' / 'behive_watchlist.json'
|
||||
|
||||
# ETF/ETN 운용사 브랜드 프리픽스 — 자동매수 후보에서 제외 (방향성=애널 컨센서스가 ETF엔 없어 전략 부정합)
|
||||
_ETF_PREFIX = re.compile(
|
||||
r'^(KODEX|TIGER|KBSTAR|ARIRANG|HANARO|ACE|SOL|PLUS|RISE|KOSEF|TIMEFOLIO|히어로즈|FOCUS|TREX|BNK|WON|마이다스|에셋플러스|KIWOOM|파워|마이티)',
|
||||
re.IGNORECASE)
|
||||
|
||||
|
||||
def is_etf(name: str) -> bool:
|
||||
"""종목명 운용사 프리픽스로 ETF/ETN 판별 (보유분 청산은 별도라 매수 후보 필터 전용)."""
|
||||
return bool(name and _ETF_PREFIX.match(name.strip()))
|
||||
INTERESTS_PATH = config.WORKSPACE / 'state' / 'behive_interests.json'
|
||||
SIM_WATCHLIST_PATH = config.STATE_DIR / 'watchlist.json' # sim 누적 관찰목록
|
||||
|
||||
@@ -140,6 +151,108 @@ def remove(code: str):
|
||||
_save_watchlist(wl)
|
||||
|
||||
|
||||
# ── 자동편입(auto) — 키움 순위정보로 주도주를 매일 후보에 편입 ──────────────
|
||||
# 소스: ka90009 외인·기관 순매수(수급 좋은 종목, 우리 전략 수급게이트와 궁합) + ka10023 거래량급증(관심 폭발).
|
||||
# 규칙: ETF/ETN·급증률 이상치·하락 제외, 각 소스 상위 N, 총 상한. 자동제외는 origin=auto·미보유·N거래일 무신호만.
|
||||
AUTO_TOP_N = 15 # 각 소스 상위 N 편입
|
||||
AUTO_TOTAL_CAP = 120 # 관찰목록 총 상한 (auto 편입은 이 한도 내에서만)
|
||||
AUTO_SURGE_CAP = 1000.0 # 거래량 급증률 이 % 초과는 노이즈로 제외
|
||||
AUTO_PRUNE_DAYS = 10 # auto 종목이 이 거래일 수 동안 무신호면 자동 제외 (보유·수동 등은 제외 안 함)
|
||||
|
||||
|
||||
def _held_codes() -> set:
|
||||
try:
|
||||
held = kc.get_positions_all(labels=config.OWNER_ACCOUNT_LABELS)
|
||||
return {(p.get('code') or '').strip().zfill(6)
|
||||
for poss in held.values() for p in poss if p.get('qty', 0) > 0}
|
||||
except Exception:
|
||||
return set()
|
||||
|
||||
|
||||
def auto_import() -> dict:
|
||||
"""키움 순위정보로 주도주 자동 편입(origin='auto'). 총 상한 내에서만. 결과 요약 반환."""
|
||||
cands: dict[str, str] = {} # code -> name (중복 자동 dedup)
|
||||
|
||||
def take(rows, key_name='name', n=AUTO_TOP_N):
|
||||
c = 0
|
||||
for x in rows:
|
||||
if c >= n:
|
||||
break
|
||||
code = (x.get('code') or '').strip().zfill(6)
|
||||
nm = x.get(key_name, '')
|
||||
if not code or is_etf(nm) or code in cands:
|
||||
continue
|
||||
cands[code] = nm
|
||||
c += 1
|
||||
|
||||
try:
|
||||
nb = kc.get_foreign_inst_netbuy()
|
||||
take([x for x in nb['foreign'] if x['amt'] > 0]) # 외인 순매수
|
||||
take([x for x in nb['inst'] if x['amt'] > 0]) # 기관 순매수
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[universe] 외인기관 순매수 조회 실패: {e}\n')
|
||||
try:
|
||||
vs = kc.get_volume_surge()
|
||||
take([x for x in vs if x['flu_rt'] > 0 and 0 < x['surge_rt'] <= AUTO_SURGE_CAP]) # 거래량 급증
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[universe] 거래량급증 조회 실패: {e}\n')
|
||||
|
||||
wl = _load_watchlist()
|
||||
now = datetime.now(config.KST).isoformat()
|
||||
added = 0
|
||||
for code, nm in cands.items():
|
||||
if code in wl:
|
||||
continue
|
||||
if len(wl) >= AUTO_TOTAL_CAP: # 상한 도달 시 신규 auto 편입 중단
|
||||
break
|
||||
wl[code] = {'name': nm, 'origin': 'auto', 'added_at': now}
|
||||
added += 1
|
||||
if added:
|
||||
_save_watchlist(wl)
|
||||
return {'candidates': len(cands), 'added': added, 'total': len(wl)}
|
||||
|
||||
|
||||
def auto_prune(no_signal_days: int = AUTO_PRUNE_DAYS) -> dict:
|
||||
"""origin='auto'·미보유 종목 중 최근 no_signal_days 거래일 동안 한 번도 매수신호(BUY/ADD/WAIT-watch) 없던 것 제거.
|
||||
보유·수동·비하이브(watch/interest/held/manual)는 절대 건드리지 않는다."""
|
||||
wl = _load_watchlist()
|
||||
auto_codes = {c for c, e in wl.items() if e.get('origin') == 'auto'}
|
||||
if not auto_codes:
|
||||
return {'pruned': 0, 'total': len(wl)}
|
||||
held = _held_codes()
|
||||
# 최근 신호 추적: state/sim/auto_seen.json {code: last_signal_iso}. 매 import 시 갱신.
|
||||
seen = _load_json(config.STATE_DIR / 'auto_seen.json', {})
|
||||
now = datetime.now(config.KST)
|
||||
pruned = 0
|
||||
for code in list(auto_codes):
|
||||
if code in held:
|
||||
continue
|
||||
last = seen.get(code)
|
||||
ent_added = wl[code].get('added_at', '')
|
||||
ref = last or ent_added
|
||||
try:
|
||||
days = (now - datetime.fromisoformat(ref)).days
|
||||
except Exception:
|
||||
days = 0
|
||||
if days >= no_signal_days:
|
||||
del wl[code]
|
||||
pruned += 1
|
||||
if pruned:
|
||||
_save_watchlist(wl)
|
||||
return {'pruned': pruned, 'total': len(wl)}
|
||||
|
||||
|
||||
def mark_signals(codes_with_signal: list[str]):
|
||||
"""이번 스캔에서 매수신호(BUY/ADD/대기) 든 종목의 '마지막 신호 시각' 기록 — auto_prune 판단용."""
|
||||
path = config.STATE_DIR / 'auto_seen.json'
|
||||
seen = _load_json(path, {})
|
||||
now = datetime.now(config.KST).isoformat()
|
||||
for c in codes_with_signal:
|
||||
seen[(c or '').strip().zfill(6)] = now
|
||||
config.STATE_DIR.mkdir(parents=True, exist_ok=True)
|
||||
path.write_text(json.dumps(seen, ensure_ascii=False))
|
||||
|
||||
|
||||
def build_universe() -> list[dict]:
|
||||
"""누적 관찰목록을 동기화 후 [{code, name, sources:[origin]}]로 반환. code 6자리 정규화."""
|
||||
wl = sync_watchlist()
|
||||
|
||||
@@ -35,10 +35,121 @@ def variant_paths(vid: str):
|
||||
def _label(params: dict) -> str:
|
||||
short = {'RR_RATIO': 'RR', 'STOP_ATR_MULT': 'S', 'SMA_LONG': 'SMA',
|
||||
'PULLBACK_ATR_MULT': 'P', 'VOLUME_BREAKOUT_MULT': 'V',
|
||||
'TURNOVER_OVERHEAT_MULT': 'OH'}
|
||||
'TURNOVER_OVERHEAT_MULT': 'OH', 'RSI_OVERBOUGHT': 'RSI↑',
|
||||
'RSI_OVERSOLD': 'RSI↓', 'MAX_HOLD_DAYS': 'HOLD', 'RISK_PER_TRADE_PCT': 'RISK'}
|
||||
return '·'.join(f'{short.get(k, k)}{v:g}' for k, v in params.items())
|
||||
|
||||
|
||||
def _philosophy_presets() -> list[dict]:
|
||||
"""철학별 라이브 비교군 프리셋.
|
||||
|
||||
기존 sweep은 같은 규칙의 강약 조절이 많아 보유 종목이 겹치기 쉬웠다. 이 프리셋은
|
||||
수급 기간, 애널 게이트, 시장 방어, 보유 종목 수, 진입 방식까지 같이 바꿔 라이브 행동을
|
||||
더 벌리는 용도다. 주문 모듈과 무관한 페이퍼 시뮬 전용 정의다.
|
||||
"""
|
||||
base = {
|
||||
'RSI_OVERBOUGHT': 75,
|
||||
'RSI_OVERSOLD': 20,
|
||||
'MAX_HOLD_DAYS': 20,
|
||||
'BEAR_ENTRY_MODE': 1,
|
||||
'TREND_SLOPE_GATE': 1,
|
||||
'MID_ARRAY_GATE': 1,
|
||||
'IMMEDIATE_ENTRY': 0,
|
||||
'AVERAGING_ENTRY': 0,
|
||||
'ENTRY_TRANCHES': 2,
|
||||
'SCALE_OUT_FRAC': 0.0,
|
||||
}
|
||||
|
||||
def p(name: str, strength: str, **params):
|
||||
merged = dict(base)
|
||||
merged.update(params)
|
||||
return {'name': f'{name}·{strength}', 'params': merged}
|
||||
|
||||
return [
|
||||
p('대형주 안정형', '보수', SMA_LONG=60, RR_RATIO=1.5, STOP_ATR_MULT=2.5,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=1.3, TURNOVER_BREAKOUT_MULT=1.2,
|
||||
TURNOVER_OVERHEAT_MULT=4.0, FLOW_DAYS=10, ANALYST_MIN_UPSIDE_PCT=3.0,
|
||||
MAX_POSITIONS=12, RISK_PER_TRADE_PCT=0.005, BEAR_ENTRY_MODE=0),
|
||||
p('대형주 안정형', '기본', SMA_LONG=60, RR_RATIO=2.0, STOP_ATR_MULT=2.2,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=1.5, TURNOVER_BREAKOUT_MULT=1.3,
|
||||
TURNOVER_OVERHEAT_MULT=4.0, FLOW_DAYS=7, ANALYST_MIN_UPSIDE_PCT=5.0,
|
||||
MAX_POSITIONS=10, RISK_PER_TRADE_PCT=0.0075, BEAR_ENTRY_MODE=1),
|
||||
p('대형주 안정형', '공격', SMA_LONG=20, RR_RATIO=2.0, STOP_ATR_MULT=2.0,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=1.5, TURNOVER_BREAKOUT_MULT=1.5,
|
||||
TURNOVER_OVERHEAT_MULT=4.5, FLOW_DAYS=5, ANALYST_MIN_UPSIDE_PCT=5.0,
|
||||
MAX_POSITIONS=8, RISK_PER_TRADE_PCT=0.01, BEAR_ENTRY_MODE=1),
|
||||
|
||||
p('수급 추종형', '보수', SMA_LONG=60, RR_RATIO=2.0, STOP_ATR_MULT=2.0,
|
||||
PULLBACK_ATR_MULT=1.5, VOLUME_BREAKOUT_MULT=1.3, TURNOVER_BREAKOUT_MULT=1.2,
|
||||
FLOW_DAYS=10, ANALYST_MIN_UPSIDE_PCT=0.0, MAX_POSITIONS=8,
|
||||
RISK_PER_TRADE_PCT=0.006, BEAR_ENTRY_MODE=0),
|
||||
p('수급 추종형', '기본', SMA_LONG=20, RR_RATIO=2.0, STOP_ATR_MULT=1.8,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=1.3, TURNOVER_BREAKOUT_MULT=1.3,
|
||||
FLOW_DAYS=5, ANALYST_MIN_UPSIDE_PCT=0.0, MAX_POSITIONS=8,
|
||||
RISK_PER_TRADE_PCT=0.01, BEAR_ENTRY_MODE=1),
|
||||
p('수급 추종형', '공격', SMA_LONG=10, RR_RATIO=2.5, STOP_ATR_MULT=1.5,
|
||||
PULLBACK_ATR_MULT=0.8, VOLUME_BREAKOUT_MULT=1.2, TURNOVER_BREAKOUT_MULT=1.2,
|
||||
FLOW_DAYS=3, ANALYST_MIN_UPSIDE_PCT=-5.0, MAX_POSITIONS=6,
|
||||
RISK_PER_TRADE_PCT=0.0125, BEAR_ENTRY_MODE=1, IMMEDIATE_ENTRY=1),
|
||||
|
||||
p('돌파 모멘텀형', '보수', SMA_LONG=60, BREAKOUT_LOOKBACK=40, RR_RATIO=3.0,
|
||||
STOP_ATR_MULT=1.7, PULLBACK_ATR_MULT=0.0, VOLUME_BREAKOUT_MULT=2.5,
|
||||
TURNOVER_BREAKOUT_MULT=2.0, TURNOVER_OVERHEAT_MULT=5.0, FLOW_DAYS=5,
|
||||
ANALYST_MIN_UPSIDE_PCT=5.0, MAX_POSITIONS=6, RISK_PER_TRADE_PCT=0.006,
|
||||
BEAR_ENTRY_MODE=0),
|
||||
p('돌파 모멘텀형', '기본', SMA_LONG=20, BREAKOUT_LOOKBACK=20, RR_RATIO=3.0,
|
||||
STOP_ATR_MULT=1.5, PULLBACK_ATR_MULT=0.0, VOLUME_BREAKOUT_MULT=2.0,
|
||||
TURNOVER_BREAKOUT_MULT=1.8, TURNOVER_OVERHEAT_MULT=5.0, FLOW_DAYS=5,
|
||||
ANALYST_MIN_UPSIDE_PCT=5.0, MAX_POSITIONS=6, RISK_PER_TRADE_PCT=0.01,
|
||||
BEAR_ENTRY_MODE=1),
|
||||
p('돌파 모멘텀형', '공격', SMA_LONG=10, BREAKOUT_LOOKBACK=10, RR_RATIO=3.0,
|
||||
STOP_ATR_MULT=1.3, PULLBACK_ATR_MULT=0.0, VOLUME_BREAKOUT_MULT=1.7,
|
||||
TURNOVER_BREAKOUT_MULT=1.5, TURNOVER_OVERHEAT_MULT=6.0, FLOW_DAYS=3,
|
||||
ANALYST_MIN_UPSIDE_PCT=0.0, MAX_POSITIONS=5, RISK_PER_TRADE_PCT=0.0125,
|
||||
BEAR_ENTRY_MODE=1, IMMEDIATE_ENTRY=1),
|
||||
|
||||
p('눌림 반등형', '보수', SMA_LONG=60, RR_RATIO=1.8, STOP_ATR_MULT=2.5,
|
||||
PULLBACK_ATR_MULT=1.5, VOLUME_BREAKOUT_MULT=1.5, TURNOVER_BREAKOUT_MULT=1.2,
|
||||
FLOW_DAYS=10, RSI_OVERSOLD=25, ANALYST_MIN_UPSIDE_PCT=5.0,
|
||||
MAX_POSITIONS=10, RISK_PER_TRADE_PCT=0.006, BEAR_ENTRY_MODE=0),
|
||||
p('눌림 반등형', '기본', SMA_LONG=20, RR_RATIO=2.0, STOP_ATR_MULT=2.2,
|
||||
PULLBACK_ATR_MULT=1.5, VOLUME_BREAKOUT_MULT=1.3, TURNOVER_BREAKOUT_MULT=1.2,
|
||||
FLOW_DAYS=5, RSI_OVERSOLD=30, ANALYST_MIN_UPSIDE_PCT=5.0,
|
||||
MAX_POSITIONS=8, RISK_PER_TRADE_PCT=0.01, BEAR_ENTRY_MODE=0),
|
||||
p('눌림 반등형', '공격', SMA_LONG=20, RR_RATIO=2.5, STOP_ATR_MULT=2.0,
|
||||
PULLBACK_ATR_MULT=2.0, VOLUME_BREAKOUT_MULT=1.2, TURNOVER_BREAKOUT_MULT=1.1,
|
||||
FLOW_DAYS=3, RSI_OVERSOLD=35, ANALYST_MIN_UPSIDE_PCT=0.0,
|
||||
MAX_POSITIONS=6, RISK_PER_TRADE_PCT=0.0125, BEAR_ENTRY_MODE=1),
|
||||
|
||||
p('소형 성장형', '보수', SMA_LONG=60, RR_RATIO=3.0, STOP_ATR_MULT=1.8,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=2.5, TURNOVER_BREAKOUT_MULT=2.0,
|
||||
TURNOVER_OVERHEAT_MULT=6.0, FLOW_DAYS=5, ANALYST_MIN_UPSIDE_PCT=10.0,
|
||||
MAX_POSITIONS=5, RISK_PER_TRADE_PCT=0.004, BEAR_ENTRY_MODE=0),
|
||||
p('소형 성장형', '기본', SMA_LONG=20, RR_RATIO=3.0, STOP_ATR_MULT=1.5,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=2.0, TURNOVER_BREAKOUT_MULT=1.8,
|
||||
TURNOVER_OVERHEAT_MULT=6.0, FLOW_DAYS=5, ANALYST_MIN_UPSIDE_PCT=10.0,
|
||||
MAX_POSITIONS=5, RISK_PER_TRADE_PCT=0.006, BEAR_ENTRY_MODE=1),
|
||||
p('소형 성장형', '공격', SMA_LONG=10, RR_RATIO=3.5, STOP_ATR_MULT=1.3,
|
||||
PULLBACK_ATR_MULT=0.8, VOLUME_BREAKOUT_MULT=1.7, TURNOVER_BREAKOUT_MULT=1.5,
|
||||
TURNOVER_OVERHEAT_MULT=7.0, FLOW_DAYS=3, ANALYST_MIN_UPSIDE_PCT=5.0,
|
||||
MAX_POSITIONS=4, RISK_PER_TRADE_PCT=0.008, BEAR_ENTRY_MODE=1,
|
||||
IMMEDIATE_ENTRY=1),
|
||||
|
||||
p('방어 현금형', '보수', SMA_LONG=60, RR_RATIO=1.5, STOP_ATR_MULT=2.5,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=2.5, TURNOVER_BREAKOUT_MULT=2.0,
|
||||
TURNOVER_OVERHEAT_MULT=4.0, FLOW_DAYS=10, ANALYST_MIN_UPSIDE_PCT=12.0,
|
||||
MAX_POSITIONS=4, RISK_PER_TRADE_PCT=0.003, BEAR_ENTRY_MODE=0),
|
||||
p('방어 현금형', '기본', SMA_LONG=60, RR_RATIO=2.0, STOP_ATR_MULT=2.2,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=2.0, TURNOVER_BREAKOUT_MULT=1.8,
|
||||
TURNOVER_OVERHEAT_MULT=4.5, FLOW_DAYS=7, ANALYST_MIN_UPSIDE_PCT=10.0,
|
||||
MAX_POSITIONS=5, RISK_PER_TRADE_PCT=0.005, BEAR_ENTRY_MODE=0),
|
||||
p('방어 현금형', '공격', SMA_LONG=20, RR_RATIO=2.0, STOP_ATR_MULT=2.0,
|
||||
PULLBACK_ATR_MULT=1.0, VOLUME_BREAKOUT_MULT=1.8, TURNOVER_BREAKOUT_MULT=1.5,
|
||||
TURNOVER_OVERHEAT_MULT=5.0, FLOW_DAYS=5, ANALYST_MIN_UPSIDE_PCT=8.0,
|
||||
MAX_POSITIONS=6, RISK_PER_TRADE_PCT=0.0075, BEAR_ENTRY_MODE=1),
|
||||
]
|
||||
|
||||
|
||||
def seed_from_sweep(n: int = 3) -> list[dict]:
|
||||
"""backtest_results.json 검증 상위 n개 → 변이로 등록 (기존 계좌는 유지)."""
|
||||
try:
|
||||
@@ -64,7 +175,45 @@ def seed_from_sweep(n: int = 3) -> list[dict]:
|
||||
return variants
|
||||
|
||||
|
||||
def add_variant(params: dict) -> dict | None:
|
||||
def sync_label_tops(results: dict) -> dict:
|
||||
"""sweep 결과에서 세부 유형(시장적합 라벨)별 1위를 비교군과 동기화 — 수동 추가/제거 불필요.
|
||||
|
||||
파라미터가 같은 변이는 계좌 유지, 빠진 유형 대표는 추가, 더는 대표가 아닌 변이는 삭제.
|
||||
(2026-06-10 기준전략 폐지 — 메인 제외 규칙 삭제, 유형별 1위 전부 변이로.)"""
|
||||
|
||||
def _k(p):
|
||||
return json.dumps({k: float(v) for k, v in (p or {}).items()}, sort_keys=True)
|
||||
|
||||
def _sk(r):
|
||||
w = r.get('worst_ret')
|
||||
return (w if w is not None else -999,
|
||||
r['test'].get('total_return_pct', -999) or -999)
|
||||
|
||||
from .sim_web import _market_fit_summary # 함수 레벨 import (순환 회피)
|
||||
uniq = {}
|
||||
for r in results.get('results', []):
|
||||
uniq.setdefault(_k(r['params']), r)
|
||||
by_label = {}
|
||||
for r in uniq.values():
|
||||
lbl = _market_fit_summary(r['params'])
|
||||
if lbl not in by_label or _sk(r) > _sk(by_label[lbl]):
|
||||
by_label[lbl] = r
|
||||
desired = {_k(r['params']): r['params'] for r in by_label.values()}
|
||||
current = {_k(v['params']): v for v in load_variants()}
|
||||
removed = added = 0
|
||||
for k, v in current.items():
|
||||
if k not in desired:
|
||||
remove_variant(v['id'])
|
||||
removed += 1
|
||||
for k, p in desired.items():
|
||||
if k not in current:
|
||||
if add_variant(p):
|
||||
added += 1
|
||||
return {'labels': len(by_label), 'added': added, 'removed': removed,
|
||||
'kept': len(current) - removed}
|
||||
|
||||
|
||||
def add_variant(params: dict, name: str | None = None) -> dict | None:
|
||||
"""단일 params 조합을 변이로 추가 (백테스트 행 → 비교군). 이미 있으면 None."""
|
||||
variants = load_variants()
|
||||
seen = {json.dumps(v['params'], sort_keys=True) for v in variants}
|
||||
@@ -72,12 +221,25 @@ def add_variant(params: dict) -> dict | None:
|
||||
return None
|
||||
nums = [int(v['id'][1:]) for v in variants if v['id'][1:].isdigit()]
|
||||
vid = f'v{(max(nums) + 1) if nums else 1}'
|
||||
v = {'id': vid, 'name': _label(params), 'params': params}
|
||||
v = {'id': vid, 'name': name or _label(params), 'params': params}
|
||||
variants.append(v)
|
||||
save_variants(variants)
|
||||
return v
|
||||
|
||||
|
||||
def add_philosophy_presets() -> dict:
|
||||
"""철학별 프리셋 18개를 비교군에 추가. 기존 계좌와 중복 조합은 유지."""
|
||||
added = []
|
||||
skipped = 0
|
||||
for preset in _philosophy_presets():
|
||||
v = add_variant(preset['params'], preset['name'])
|
||||
if v:
|
||||
added.append(v)
|
||||
else:
|
||||
skipped += 1
|
||||
return {'added': added, 'skipped': skipped, 'total': len(load_variants())}
|
||||
|
||||
|
||||
def remove_variant(vid: str):
|
||||
"""변이 1개 삭제 (정의 + 계좌)."""
|
||||
import shutil
|
||||
|
||||
@@ -22,3 +22,91 @@
|
||||
{"date": "2026-06-05", "market": "KOSPI", "market_label": "코스피", "rise": 225, "upper": 1, "fall": 672, "lower": 0, "steady": 26, "adr": 33.63, "personal": 42240, "foreign": -27638, "institutional": -13809, "captured_at": "2026-06-05T21:00:05.007446+09:00"}
|
||||
{"date": "2026-06-08", "market": "KOSDAQ", "market_label": "코스닥", "rise": 75, "upper": 7, "fall": 1634, "lower": 1, "steady": 27, "adr": 5.02, "personal": -1245, "foreign": 2976, "institutional": -1466, "captured_at": "2026-06-08T21:00:04.897696+09:00"}
|
||||
{"date": "2026-06-08", "market": "KOSPI", "market_label": "코스피", "rise": 42, "upper": 1, "fall": 876, "lower": 0, "steady": 3, "adr": 4.91, "personal": 17628, "foreign": -2644, "institutional": -17164, "captured_at": "2026-06-08T21:00:04.897696+09:00"}
|
||||
{"date": "2026-06-09", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1435, "upper": 6, "fall": 258, "lower": 1, "steady": 44, "adr": 556.37, "personal": -5112, "foreign": 3126, "institutional": 1996, "captured_at": "2026-06-09T21:00:02.663326+09:00"}
|
||||
{"date": "2026-06-09", "market": "KOSPI", "market_label": "코스피", "rise": 774, "upper": 1, "fall": 133, "lower": 1, "steady": 15, "adr": 578.36, "personal": -6167, "foreign": -20064, "institutional": 25048, "captured_at": "2026-06-09T21:00:02.663326+09:00"}
|
||||
{"date": "2026-06-10", "market": "KOSDAQ", "market_label": "코스닥", "rise": 499, "upper": 6, "fall": 1176, "lower": 1, "steady": 61, "adr": 42.91, "personal": 1167, "foreign": 1420, "institutional": -1125, "captured_at": "2026-06-10T21:00:04.276904+09:00"}
|
||||
{"date": "2026-06-10", "market": "KOSPI", "market_label": "코스피", "rise": 343, "upper": 2, "fall": 550, "lower": 0, "steady": 28, "adr": 62.73, "personal": 48643, "foreign": -27754, "institutional": -22665, "captured_at": "2026-06-10T21:00:04.276904+09:00"}
|
||||
{"date": "2026-06-11", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1219, "upper": 10, "fall": 457, "lower": 0, "steady": 59, "adr": 268.93, "personal": -3634, "foreign": -3601, "institutional": 7149, "captured_at": "2026-06-11T21:00:01.845336+09:00"}
|
||||
{"date": "2026-06-11", "market": "KOSPI", "market_label": "코스피", "rise": 576, "upper": 3, "fall": 320, "lower": 0, "steady": 25, "adr": 180.94, "personal": 20803, "foreign": -14640, "institutional": -7561, "captured_at": "2026-06-11T21:00:01.845336+09:00"}
|
||||
{"date": "2026-06-12", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1318, "upper": 9, "fall": 371, "lower": 0, "steady": 47, "adr": 357.68, "personal": -9416, "foreign": 2769, "institutional": 6315, "captured_at": "2026-06-12T21:00:03.422609+09:00"}
|
||||
{"date": "2026-06-12", "market": "KOSPI", "market_label": "코스피", "rise": 756, "upper": 3, "fall": 144, "lower": 0, "steady": 18, "adr": 527.08, "personal": -43174, "foreign": 22041, "institutional": 22870, "captured_at": "2026-06-12T21:00:03.422609+09:00"}
|
||||
{"date": "2026-06-15", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1010, "upper": 10, "fall": 662, "lower": 0, "steady": 62, "adr": 154.08, "personal": 6162, "foreign": -8164, "institutional": 2166, "captured_at": "2026-06-15T21:00:02.416077+09:00"}
|
||||
{"date": "2026-06-15", "market": "KOSPI", "market_label": "코스피", "rise": 676, "upper": 3, "fall": 207, "lower": 0, "steady": 35, "adr": 328.02, "personal": -15124, "foreign": 10774, "institutional": 4462, "captured_at": "2026-06-15T21:00:02.416077+09:00"}
|
||||
{"date": "2026-06-16", "market": "KOSDAQ", "market_label": "코스닥", "rise": 764, "upper": 6, "fall": 896, "lower": 1, "steady": 76, "adr": 85.84, "personal": 7907, "foreign": -3095, "institutional": -4630, "captured_at": "2026-06-16T21:00:02.050758+09:00"}
|
||||
{"date": "2026-06-16", "market": "KOSPI", "market_label": "코스피", "rise": 519, "upper": 5, "fall": 360, "lower": 0, "steady": 38, "adr": 145.56, "personal": -21841, "foreign": 15353, "institutional": 7076, "captured_at": "2026-06-16T21:00:02.050758+09:00"}
|
||||
{"date": "2026-06-17", "market": "KOSDAQ", "market_label": "코스닥", "rise": 957, "upper": 7, "fall": 681, "lower": 0, "steady": 96, "adr": 141.56, "personal": -335, "foreign": 400, "institutional": -101, "captured_at": "2026-06-17T21:00:02.638185+09:00"}
|
||||
{"date": "2026-06-17", "market": "KOSPI", "market_label": "코스피", "rise": 349, "upper": 4, "fall": 526, "lower": 0, "steady": 42, "adr": 67.11, "personal": 5254, "foreign": -9952, "institutional": 5957, "captured_at": "2026-06-17T21:00:02.638185+09:00"}
|
||||
{"date": "2026-06-18", "market": "KOSDAQ", "market_label": "코스닥", "rise": 245, "upper": 12, "fall": 1436, "lower": 0, "steady": 52, "adr": 17.9, "personal": 3842, "foreign": -1235, "institutional": -2659, "captured_at": "2026-06-18T21:00:02.338371+09:00"}
|
||||
{"date": "2026-06-18", "market": "KOSPI", "market_label": "코스피", "rise": 109, "upper": 3, "fall": 791, "lower": 0, "steady": 17, "adr": 14.16, "personal": -4156, "foreign": 12776, "institutional": -7682, "captured_at": "2026-06-18T21:00:02.338371+09:00"}
|
||||
{"date": "2026-06-19", "market": "KOSDAQ", "market_label": "코스닥", "rise": 200, "upper": 7, "fall": 1490, "lower": 1, "steady": 40, "adr": 13.88, "personal": 750, "foreign": 4977, "institutional": -5838, "captured_at": "2026-06-19T21:00:01.989022+09:00"}
|
||||
{"date": "2026-06-19", "market": "KOSPI", "market_label": "코스피", "rise": 115, "upper": 2, "fall": 787, "lower": 0, "steady": 16, "adr": 14.87, "personal": 16478, "foreign": -3555, "institutional": -12244, "captured_at": "2026-06-19T21:00:01.989022+09:00"}
|
||||
{"date": "2026-06-22", "market": "KOSDAQ", "market_label": "코스닥", "rise": 383, "upper": 8, "fall": 1297, "lower": 0, "steady": 53, "adr": 30.15, "personal": -4634, "foreign": 3152, "institutional": 1456, "captured_at": "2026-06-22T21:00:01.907533+09:00"}
|
||||
{"date": "2026-06-22", "market": "KOSPI", "market_label": "코스피", "rise": 148, "upper": 3, "fall": 742, "lower": 1, "steady": 28, "adr": 20.32, "personal": 21506, "foreign": -25466, "institutional": 3034, "captured_at": "2026-06-22T21:00:01.907533+09:00"}
|
||||
{"date": "2026-06-23", "market": "KOSDAQ", "market_label": "코스닥", "rise": 134, "upper": 8, "fall": 1574, "lower": 1, "steady": 26, "adr": 9.02, "personal": -3979, "foreign": 2746, "institutional": 1329, "captured_at": "2026-06-23T21:00:02.466967+09:00"}
|
||||
{"date": "2026-06-23", "market": "KOSPI", "market_label": "코스피", "rise": 46, "upper": 4, "fall": 859, "lower": 0, "steady": 13, "adr": 5.82, "personal": 85910, "foreign": -42047, "institutional": -44760, "captured_at": "2026-06-23T21:00:02.466967+09:00"}
|
||||
{"date": "2026-06-24", "market": "KOSDAQ", "market_label": "코스닥", "rise": 883, "upper": 12, "fall": 786, "lower": 1, "steady": 64, "adr": 113.72, "personal": -3184, "foreign": -321, "institutional": 3363, "captured_at": "2026-06-24T21:00:02.270251+09:00"}
|
||||
{"date": "2026-06-24", "market": "KOSPI", "market_label": "코스피", "rise": 516, "upper": 6, "fall": 367, "lower": 0, "steady": 35, "adr": 142.23, "personal": 26312, "foreign": -46546, "institutional": 19095, "captured_at": "2026-06-24T21:00:02.270251+09:00"}
|
||||
{"date": "2026-06-25", "market": "KOSDAQ", "market_label": "코스닥", "rise": 400, "upper": 8, "fall": 1280, "lower": 4, "steady": 57, "adr": 31.78, "personal": 1452, "foreign": 212, "institutional": -1707, "captured_at": "2026-06-25T21:00:01.814263+09:00"}
|
||||
{"date": "2026-06-25", "market": "KOSPI", "market_label": "코스피", "rise": 291, "upper": 3, "fall": 589, "lower": 3, "steady": 36, "adr": 49.66, "personal": -24136, "foreign": -8754, "institutional": 33244, "captured_at": "2026-06-25T21:00:01.814263+09:00"}
|
||||
{"date": "2026-06-26", "market": "KOSDAQ", "market_label": "코스닥", "rise": 220, "upper": 7, "fall": 1470, "lower": 2, "steady": 50, "adr": 15.42, "personal": -6688, "foreign": 3510, "institutional": 3084, "captured_at": "2026-06-26T21:00:02.514312+09:00"}
|
||||
{"date": "2026-06-26", "market": "KOSPI", "market_label": "코스피", "rise": 111, "upper": 4, "fall": 780, "lower": 2, "steady": 24, "adr": 14.71, "personal": 81919, "foreign": -42906, "institutional": -41224, "captured_at": "2026-06-26T21:00:02.514312+09:00"}
|
||||
{"date": "2026-06-29", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1555, "upper": 14, "fall": 157, "lower": 1, "steady": 30, "adr": 993.04, "personal": -5272, "foreign": 266, "institutional": 5043, "captured_at": "2026-06-29T21:00:03.315108+09:00"}
|
||||
{"date": "2026-06-29", "market": "KOSPI", "market_label": "코스피", "rise": 820, "upper": 6, "fall": 88, "lower": 0, "steady": 9, "adr": 938.64, "personal": 45975, "foreign": -77332, "institutional": 29327, "captured_at": "2026-06-29T21:00:03.315108+09:00"}
|
||||
{"date": "2026-06-30", "market": "KOSDAQ", "market_label": "코스닥", "rise": 718, "upper": 12, "fall": 974, "lower": 1, "steady": 53, "adr": 74.87, "personal": 3909, "foreign": -2464, "institutional": -1428, "captured_at": "2026-06-30T21:00:01.974835+09:00"}
|
||||
{"date": "2026-06-30", "market": "KOSPI", "market_label": "코스피", "rise": 262, "upper": 4, "fall": 623, "lower": 0, "steady": 32, "adr": 42.7, "personal": 8401, "foreign": -37992, "institutional": 29332, "captured_at": "2026-06-30T21:00:01.974835+09:00"}
|
||||
{"date": "2026-07-01", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1193, "upper": 17, "fall": 491, "lower": 1, "steady": 55, "adr": 245.93, "personal": -1082, "foreign": 2472, "institutional": -1255, "captured_at": "2026-07-01T21:00:01.866864+09:00"}
|
||||
{"date": "2026-07-01", "market": "KOSPI", "market_label": "코스피", "rise": 700, "upper": 11, "fall": 193, "lower": 1, "steady": 25, "adr": 366.49, "personal": 17370, "foreign": -17028, "institutional": -700, "captured_at": "2026-07-01T21:00:01.866864+09:00"}
|
||||
{"date": "2026-07-02", "market": "KOSDAQ", "market_label": "코스닥", "rise": 318, "upper": 8, "fall": 1355, "lower": 3, "steady": 66, "adr": 24.01, "personal": 4859, "foreign": -1942, "institutional": -3091, "captured_at": "2026-07-02T21:00:05.425991+09:00"}
|
||||
{"date": "2026-07-02", "market": "KOSPI", "market_label": "코스피", "rise": 280, "upper": 4, "fall": 616, "lower": 1, "steady": 20, "adr": 46.03, "personal": 62413, "foreign": -43706, "institutional": -20825, "captured_at": "2026-07-02T21:00:05.425991+09:00"}
|
||||
{"date": "2026-07-03", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1094, "upper": 8, "fall": 566, "lower": 0, "steady": 78, "adr": 194.7, "personal": 1075, "foreign": -202, "institutional": -1037, "captured_at": "2026-07-03T21:00:02.137974+09:00"}
|
||||
{"date": "2026-07-03", "market": "KOSPI", "market_label": "코스피", "rise": 589, "upper": 2, "fall": 297, "lower": 1, "steady": 27, "adr": 198.32, "personal": -22942, "foreign": -21750, "institutional": 44079, "captured_at": "2026-07-03T21:00:02.137974+09:00"}
|
||||
{"date": "2026-07-06", "market": "KOSDAQ", "market_label": "코스닥", "rise": 683, "upper": 6, "fall": 982, "lower": 0, "steady": 74, "adr": 70.16, "personal": 2591, "foreign": -447, "institutional": -2244, "captured_at": "2026-07-06T21:00:03.092182+09:00"}
|
||||
{"date": "2026-07-06", "market": "KOSPI", "market_label": "코스피", "rise": 464, "upper": 8, "fall": 412, "lower": 0, "steady": 37, "adr": 114.56, "personal": 26829, "foreign": -13144, "institutional": -14618, "captured_at": "2026-07-06T21:00:03.092182+09:00"}
|
||||
{"date": "2026-07-07", "market": "KOSDAQ", "market_label": "코스닥", "rise": 484, "upper": 6, "fall": 1194, "lower": 1, "steady": 61, "adr": 41.0, "personal": -3616, "foreign": 3742, "institutional": -100, "captured_at": "2026-07-07T21:00:04.611682+09:00"}
|
||||
{"date": "2026-07-07", "market": "KOSPI", "market_label": "코스피", "rise": 358, "upper": 1, "fall": 512, "lower": 0, "steady": 42, "adr": 70.12, "personal": 31359, "foreign": -29172, "institutional": -3108, "captured_at": "2026-07-07T21:00:04.611682+09:00"}
|
||||
{"date": "2026-07-08", "market": "KOSDAQ", "market_label": "코스닥", "rise": 246, "upper": 4, "fall": 1445, "lower": 1, "steady": 48, "adr": 17.29, "personal": -1959, "foreign": 3376, "institutional": -1453, "captured_at": "2026-07-08T21:00:03.487551+09:00"}
|
||||
{"date": "2026-07-08", "market": "KOSPI", "market_label": "코스피", "rise": 125, "upper": 3, "fall": 765, "lower": 0, "steady": 22, "adr": 16.73, "personal": -358, "foreign": 3437, "institutional": -3552, "captured_at": "2026-07-08T21:00:03.487551+09:00"}
|
||||
{"date": "2026-07-09", "market": "KOSDAQ", "market_label": "코스닥", "rise": 775, "upper": 8, "fall": 887, "lower": 0, "steady": 77, "adr": 88.28, "personal": -3217, "foreign": 221, "institutional": 3081, "captured_at": "2026-07-09T21:00:02.779248+09:00"}
|
||||
{"date": "2026-07-09", "market": "KOSPI", "market_label": "코스피", "rise": 237, "upper": 1, "fall": 652, "lower": 0, "steady": 24, "adr": 36.5, "personal": -13278, "foreign": 1343, "institutional": 12885, "captured_at": "2026-07-09T21:00:02.779248+09:00"}
|
||||
{"date": "2026-07-10", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1488, "upper": 4, "fall": 204, "lower": 5, "steady": 43, "adr": 713.88, "personal": -4213, "foreign": -1563, "institutional": 5825, "captured_at": "2026-07-10T21:00:02.641644+09:00"}
|
||||
{"date": "2026-07-10", "market": "KOSPI", "market_label": "코스피", "rise": 802, "upper": 6, "fall": 92, "lower": 0, "steady": 19, "adr": 878.26, "personal": -7805, "foreign": -3228, "institutional": 11314, "captured_at": "2026-07-10T21:00:02.641644+09:00"}
|
||||
{"date": "2026-07-13", "market": "KOSDAQ", "market_label": "코스닥", "rise": 221, "upper": 4, "fall": 1460, "lower": 2, "steady": 57, "adr": 15.39, "personal": 1833, "foreign": -3878, "institutional": 1843, "captured_at": "2026-07-13T21:00:01.940921+09:00"}
|
||||
{"date": "2026-07-13", "market": "KOSPI", "market_label": "코스피", "rise": 179, "upper": 3, "fall": 716, "lower": 0, "steady": 18, "adr": 25.42, "personal": 38869, "foreign": -16705, "institutional": -22338, "captured_at": "2026-07-13T21:00:01.940921+09:00"}
|
||||
{"date": "2026-07-14", "market": "KOSDAQ", "market_label": "코스닥", "rise": 445, "upper": 6, "fall": 1212, "lower": 0, "steady": 83, "adr": 37.21, "personal": 698, "foreign": -2471, "institutional": 1587, "captured_at": "2026-07-14T21:00:05.513305+09:00"}
|
||||
{"date": "2026-07-14", "market": "KOSPI", "market_label": "코스피", "rise": 219, "upper": 5, "fall": 662, "lower": 0, "steady": 31, "adr": 33.84, "personal": -41411, "foreign": 9565, "institutional": 32117, "captured_at": "2026-07-14T21:00:05.513305+09:00"}
|
||||
{"date": "2026-07-15", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1465, "upper": 14, "fall": 217, "lower": 1, "steady": 57, "adr": 678.44, "personal": -1542, "foreign": 231, "institutional": 1086, "captured_at": "2026-07-15T21:00:04.202161+09:00"}
|
||||
{"date": "2026-07-15", "market": "KOSPI", "market_label": "코스피", "rise": 711, "upper": 7, "fall": 169, "lower": 0, "steady": 32, "adr": 424.85, "personal": -24666, "foreign": 23031, "institutional": 1992, "captured_at": "2026-07-15T21:00:04.202161+09:00"}
|
||||
{"date": "2026-07-16", "market": "KOSDAQ", "market_label": "코스닥", "rise": 501, "upper": 11, "fall": 1182, "lower": 1, "steady": 56, "adr": 43.28, "personal": 4184, "foreign": -2919, "institutional": -1553, "captured_at": "2026-07-16T21:00:01.884912+09:00"}
|
||||
{"date": "2026-07-16", "market": "KOSPI", "market_label": "코스피", "rise": 384, "upper": 6, "fall": 488, "lower": 0, "steady": 40, "adr": 79.92, "personal": 36647, "foreign": -13665, "institutional": -23831, "captured_at": "2026-07-16T21:00:01.884912+09:00"}
|
||||
{"date": "2026-07-20", "market": "KOSDAQ", "market_label": "코스닥", "rise": 198, "upper": 10, "fall": 1487, "lower": 3, "steady": 54, "adr": 13.96, "personal": 1907, "foreign": -518, "institutional": -1330, "captured_at": "2026-07-20T21:00:02.383101+09:00"}
|
||||
{"date": "2026-07-20", "market": "KOSPI", "market_label": "코스피", "rise": 97, "upper": 3, "fall": 799, "lower": 4, "steady": 18, "adr": 12.45, "personal": 3490, "foreign": 5198, "institutional": -9235, "captured_at": "2026-07-20T21:00:02.383101+09:00"}
|
||||
{"date": "2026-07-21", "market": "KOSDAQ", "market_label": "코스닥", "rise": 983, "upper": 19, "fall": 657, "lower": 5, "steady": 96, "adr": 151.36, "personal": 1474, "foreign": -1360, "institutional": -129, "captured_at": "2026-07-21T21:00:02.218278+09:00"}
|
||||
{"date": "2026-07-21", "market": "KOSPI", "market_label": "코스피", "rise": 485, "upper": 1, "fall": 382, "lower": 2, "steady": 47, "adr": 126.56, "personal": -16421, "foreign": 2952, "institutional": 13744, "captured_at": "2026-07-21T21:00:02.218278+09:00"}
|
||||
{"date": "2026-07-22", "market": "KOSDAQ", "market_label": "코스닥", "rise": 839, "upper": 14, "fall": 793, "lower": 3, "steady": 103, "adr": 107.16, "personal": 2636, "foreign": -815, "institutional": -1914, "captured_at": "2026-07-22T21:00:02.077211+09:00"}
|
||||
{"date": "2026-07-22", "market": "KOSPI", "market_label": "코스피", "rise": 469, "upper": 0, "fall": 399, "lower": 0, "steady": 47, "adr": 117.54, "personal": -12176, "foreign": 26211, "institutional": -13963, "captured_at": "2026-07-22T21:00:02.077211+09:00"}
|
||||
{"date": "2026-07-23", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1442, "upper": 9, "fall": 252, "lower": 1, "steady": 42, "adr": 573.52, "personal": -2373, "foreign": 1675, "institutional": 643, "captured_at": "2026-07-23T21:00:03.478785+09:00"}
|
||||
{"date": "2026-07-23", "market": "KOSPI", "market_label": "코스피", "rise": 831, "upper": 4, "fall": 74, "lower": 0, "steady": 10, "adr": 1128.38, "personal": -22077, "foreign": 21359, "institutional": 976, "captured_at": "2026-07-23T21:00:03.478785+09:00"}
|
||||
{"date": "2026-07-24", "market": "KOSDAQ", "market_label": "코스닥", "rise": 371, "upper": 9, "fall": 1281, "lower": 1, "steady": 80, "adr": 29.64, "personal": 4881, "foreign": -1315, "institutional": -3580, "captured_at": "2026-07-24T21:00:02.378107+09:00"}
|
||||
{"date": "2026-07-24", "market": "KOSPI", "market_label": "코스피", "rise": 301, "upper": 2, "fall": 585, "lower": 0, "steady": 30, "adr": 51.79, "personal": 51782, "foreign": -32683, "institutional": -19514, "captured_at": "2026-07-24T21:00:02.378107+09:00"}
|
||||
{"date": "2026-07-27", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1007, "upper": 10, "fall": 628, "lower": 2, "steady": 99, "adr": 161.43, "personal": -1550, "foreign": -1422, "institutional": 2731, "captured_at": "2026-07-27T21:00:02.567797+09:00"}
|
||||
{"date": "2026-07-27", "market": "KOSPI", "market_label": "코스피", "rise": 497, "upper": 0, "fall": 372, "lower": 2, "steady": 47, "adr": 132.89, "personal": 19788, "foreign": -28811, "institutional": 8595, "captured_at": "2026-07-27T21:00:02.567797+09:00"}
|
||||
{"date": "2026-07-28", "market": "KOSDAQ", "market_label": "코스닥", "rise": 140, "upper": 11, "fall": 1557, "lower": 2, "steady": 38, "adr": 9.69, "personal": 480, "foreign": 860, "institutional": -1345, "captured_at": "2026-07-28T21:00:02.094342+09:00"}
|
||||
{"date": "2026-07-28", "market": "KOSPI", "market_label": "코스피", "rise": 36, "upper": 3, "fall": 878, "lower": 2, "steady": 3, "adr": 4.43, "personal": 43152, "foreign": -45009, "institutional": 1830, "captured_at": "2026-07-28T21:00:02.094342+09:00"}
|
||||
{"date": "2026-07-29", "market": "KOSDAQ", "market_label": "코스닥", "rise": 141, "upper": 4, "fall": 1554, "lower": 3, "steady": 35, "adr": 9.31, "personal": -4579, "foreign": 3082, "institutional": 1474, "captured_at": "2026-07-29T21:00:04.833116+09:00"}
|
||||
{"date": "2026-07-29", "market": "KOSPI", "market_label": "코스피", "rise": 91, "upper": 1, "fall": 805, "lower": 1, "steady": 21, "adr": 11.41, "personal": -19701, "foreign": -12502, "institutional": 31769, "captured_at": "2026-07-29T21:00:04.833116+09:00"}
|
||||
{"date": "2026-07-30", "market": "KOSDAQ", "market_label": "코스닥", "rise": 733, "upper": 5, "fall": 938, "lower": 0, "steady": 57, "adr": 78.68, "personal": -1108, "foreign": 2483, "institutional": -1435, "captured_at": "2026-07-30T21:00:02.501493+09:00"}
|
||||
{"date": "2026-07-30", "market": "KOSPI", "market_label": "코스피", "rise": 609, "upper": 4, "fall": 277, "lower": 0, "steady": 30, "adr": 221.3, "personal": -14309, "foreign": 13280, "institutional": 805, "captured_at": "2026-07-30T21:00:02.501493+09:00"}
|
||||
{"date": "2026-07-31", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1557, "upper": 14, "fall": 141, "lower": 0, "steady": 30, "adr": 1114.18, "personal": -4715, "foreign": 1697, "institutional": 2985, "captured_at": "2026-07-31T21:00:02.143730+09:00"}
|
||||
{"date": "2026-07-31", "market": "KOSPI", "market_label": "코스피", "rise": 775, "upper": 12, "fall": 127, "lower": 0, "steady": 15, "adr": 619.69, "personal": -82840, "foreign": 72410, "institutional": 11503, "captured_at": "2026-07-31T21:00:02.143730+09:00"}
|
||||
{"date": "2026-08-03", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1170, "upper": 11, "fall": 468, "lower": 0, "steady": 89, "adr": 252.35, "personal": 302, "foreign": -2092, "institutional": 1669, "captured_at": "2026-08-03T21:00:05.036019+09:00"}
|
||||
{"date": "2026-08-03", "market": "KOSPI", "market_label": "코스피", "rise": 455, "upper": 3, "fall": 419, "lower": 0, "steady": 43, "adr": 109.31, "personal": 46523, "foreign": -28220, "institutional": -19516, "captured_at": "2026-08-03T21:00:05.036019+09:00"}
|
||||
{"date": "2026-08-04", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1505, "upper": 11, "fall": 175, "lower": 0, "steady": 47, "adr": 866.29, "personal": -2587, "foreign": -2775, "institutional": 5438, "captured_at": "2026-08-04T21:00:01.937958+09:00"}
|
||||
{"date": "2026-08-04", "market": "KOSPI", "market_label": "코스피", "rise": 788, "upper": 1, "fall": 96, "lower": 0, "steady": 31, "adr": 821.88, "personal": 8187, "foreign": -3716, "institutional": -5385, "captured_at": "2026-08-04T21:00:01.937958+09:00"}
|
||||
{"date": "2026-08-05", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1346, "upper": 11, "fall": 301, "lower": 0, "steady": 78, "adr": 450.83, "personal": 3941, "foreign": -2979, "institutional": -1101, "captured_at": "2026-08-05T21:00:05.552836+09:00"}
|
||||
{"date": "2026-08-05", "market": "KOSPI", "market_label": "코스피", "rise": 675, "upper": 0, "fall": 197, "lower": 0, "steady": 43, "adr": 342.64, "personal": -11844, "foreign": 14464, "institutional": -2838, "captured_at": "2026-08-05T21:00:05.552836+09:00"}
|
||||
{"date": "2026-08-06", "market": "KOSDAQ", "market_label": "코스닥", "rise": 736, "upper": 7, "fall": 893, "lower": 0, "steady": 95, "adr": 83.2, "personal": 863, "foreign": -2481, "institutional": 1615, "captured_at": "2026-08-06T21:00:02.122175+09:00"}
|
||||
{"date": "2026-08-06", "market": "KOSPI", "market_label": "코스피", "rise": 490, "upper": 3, "fall": 381, "lower": 0, "steady": 44, "adr": 129.4, "personal": 33367, "foreign": -32893, "institutional": -1214, "captured_at": "2026-08-06T21:00:02.122175+09:00"}
|
||||
{"date": "2026-08-07", "market": "KOSDAQ", "market_label": "코스닥", "rise": 808, "upper": 6, "fall": 829, "lower": 0, "steady": 84, "adr": 98.19, "personal": 3402, "foreign": -2522, "institutional": -1044, "captured_at": "2026-08-07T21:00:06.627011+09:00"}
|
||||
{"date": "2026-08-07", "market": "KOSPI", "market_label": "코스피", "rise": 554, "upper": 3, "fall": 322, "lower": 0, "steady": 36, "adr": 172.98, "personal": 2675, "foreign": -8651, "institutional": 5854, "captured_at": "2026-08-07T21:00:06.627011+09:00"}
|
||||
{"date": "2026-08-10", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1431, "upper": 11, "fall": 236, "lower": 0, "steady": 52, "adr": 611.02, "personal": -6729, "foreign": 1027, "institutional": 5667, "captured_at": "2026-08-10T21:00:01.810609+09:00"}
|
||||
{"date": "2026-08-10", "market": "KOSPI", "market_label": "코스피", "rise": 697, "upper": 0, "fall": 183, "lower": 0, "steady": 31, "adr": 380.87, "personal": 9003, "foreign": -14909, "institutional": 5692, "captured_at": "2026-08-10T21:00:01.810609+09:00"}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because one or more lines are too long
@@ -0,0 +1 @@
|
||||
{"👀": "v1", "⭐": "v4", "🔥": "v300", "💎": "v40", "🚀": "v319", "🎯": "v321"}
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,11 @@
|
||||
{
|
||||
"SMA_LONG": 10,
|
||||
"PULLBACK_ATR_MULT": 1.5,
|
||||
"STOP_ATR_MULT": 2.0,
|
||||
"RR_RATIO": 3.0,
|
||||
"VOLUME_BREAKOUT_MULT": 1.3,
|
||||
"RSI_OVERBOUGHT": 88.0,
|
||||
"RSI_OVERSOLD": 20.0,
|
||||
"MAX_HOLD_DAYS": 0,
|
||||
"RISK_PER_TRADE_PCT": 0.02
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,197 @@
|
||||
{
|
||||
"cash": 4372680.496499985,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 86,
|
||||
"entry_price": 128395.3488372093,
|
||||
"entry_at": "2026-07-08T09:16:01.874405+09:00",
|
||||
"stop": 112596,
|
||||
"target": 175793,
|
||||
"peak": 156400,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5572914.42378125,
|
||||
"last_add_price": 130800
|
||||
},
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 31,
|
||||
"entry_price": 347064.51612903224,
|
||||
"entry_at": "2026-07-16T09:04:02.184863+09:00",
|
||||
"stop": 305213,
|
||||
"target": 472619,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5640114.3750312505,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 1140,
|
||||
"entry_price": 6333.0,
|
||||
"entry_at": "2026-07-30T09:04:05.277095+09:00",
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3612125.2394573665,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 79,
|
||||
"entry_price": 125877.21518987342,
|
||||
"entry_at": "2026-07-30T09:16:09.704305+09:00",
|
||||
"stop": 114936,
|
||||
"target": 158700,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5035879.961218749,
|
||||
"last_add_price": 127700
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 728,
|
||||
"entry_price": 13160.096153846154,
|
||||
"entry_at": "2026-08-03T12:00:10.581409+09:00",
|
||||
"stop": 11445,
|
||||
"target": 18305,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4803063.4110624995,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 66,
|
||||
"entry_price": 90689.39393939394,
|
||||
"entry_at": "2026-08-04T09:34:08.150378+09:00",
|
||||
"stop": 79324,
|
||||
"target": 124784,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4797930.468406249,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 531,
|
||||
"entry_price": 13674.444444444445,
|
||||
"entry_at": "2026-08-06T09:12:11.568330+09:00",
|
||||
"stop": 10691,
|
||||
"target": 22624,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,160 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3636137.140405993,
|
||||
"last_add_price": 14290
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 48,
|
||||
"entry_price": 196100.0,
|
||||
"entry_at": "2026-08-06T09:14:08.213823+09:00",
|
||||
"stop": 178744,
|
||||
"target": 248168,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4804824.179093749,
|
||||
"last_add_price": 198600
|
||||
}
|
||||
},
|
||||
"realized_pnl": -24411738.768500023,
|
||||
"closed_trades": 23,
|
||||
"wins": 0,
|
||||
"peak_equity": 100102462.48,
|
||||
"max_drawdown": 0.2476485322022221,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"298040": "2026-06-24",
|
||||
"403870": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"093370": "2026-07-20",
|
||||
"214450": "2026-07-15",
|
||||
"055550": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"090850": "2026-08-06"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.943184+09:00",
|
||||
"updated_at": "2026-08-10T15:28:12.599897+09:00"
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{"ts": "2026-06-17T11:15:02.163140+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 169483, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:05.756730+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 16, "cost": 5976896, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 500222, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "373,000 vs 330,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "352,400 / 330,350"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.178128+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 17760, "target": 23360, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:07.147411+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.178112+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,360"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T09:06:02.261681+09:00", "side": "BUY", "code": "298040", "name": "효성중공업", "price": 4130000, "qty": 1, "cost": 4130620, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 3559830, "target": 5840510, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "4,125,000 vs 3,535,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "3,678,200 / 3,535,900"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "3,678,200 / 3,411,683"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +16 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": false, "detail": "약세 — 돌파만 허용"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.82% (환산) vs 평균 0.63% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 4,085,000"}, {"label": "거래량 급증", "ok": true, "detail": "170,653 (환산) vs 평균 58,834"}, {"label": "회전율 급증", "ok": true, "detail": "1.82% (환산) vs 평균 0.63%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
|
||||
{"ts": "2026-06-23T12:04:03.036279+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 47, "proceeds": 5521113, "entry_price": 130900, "pnl": -632110, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.163131+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 169,483"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:03.300082+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 16, "proceeds": 5269704, "entry_price": 373500, "pnl": -707192, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:05.756719+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 500,222"}, {"label": "추세(10일선)", "ok": false, "detail": "335,050"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:02:01.876083+09:00", "side": "SELL", "code": "298040", "name": "효성중공업", "price": 3499000, "qty": 1, "proceeds": 3492177, "entry_price": 4130000, "pnl": -638443, "pnl_pct": -15.28, "hold_from": "2026-06-23T09:06:02.261677+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "3,559,830 (현재 3,489,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 5,840,510"}, {"label": "추세(10일선)", "ok": true, "detail": "3,472,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +19 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 4,274,721"}]}
|
||||
{"ts": "2026-06-24T09:02:02.294346+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 97, "cost": 5161174, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 83200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,200 vs 52,550"}, {"label": "정배열(5>10)", "ok": true, "detail": "57,960 / 52,550"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:00.922591+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 26, "cost": 4041006, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 118951, "target": 264748, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,400 vs 128,090"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,100 / 128,090"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-26T09:00:03.477186+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 97, "proceeds": 4840542, "entry_price": 53200, "pnl": -320632, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.294329+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,200"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.833814+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 25, "cost": 4123118, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118951, "target": 264748, "signals": [{"label": "손절선", "ok": true, "detail": "118,951 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 264,748"}, {"label": "추세(10일선)", "ok": true, "detail": "129,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-29T09:00:12.226221+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 339500, "qty": 18, "cost": 6111917, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 300291, "target": 457126, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "337,000 vs 305,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "313,600 / 305,050"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "313,600 / 305,367"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -22 · 기 +97 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": false, "detail": "약세 — 돌파만 허용"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.50% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "155,347 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.50% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-06-29T09:40:01.364512+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 351000, "qty": 17, "cost": 5967895, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 300291, "target": 457126, "signals": [{"label": "손절선", "ok": true, "detail": "300,291 (현재 351,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 457,126"}, {"label": "추세(10일선)", "ok": true, "detail": "306,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -22 · 기 +97"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 349,802"}]}
|
||||
{"ts": "2026-06-30T09:00:03.224282+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 80, "cost": 4424664, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 43200, "target": 91600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-02T10:18:02.949133+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 274, "cost": 4379177, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 12444, "target": 26587, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "15,980 vs 13,620"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,104 / 13,620"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.874484+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 319, "cost": 6049147, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 22560, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": true, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:20:01.970932+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 268, "cost": 6044307, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22560, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,560"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:24:06.075978+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 587, "proceeds": 11049232, "entry_price": 20599, "pnl": -1044222, "pnl_pct": -8.44, "hold_from": "2026-07-02T10:40:02.874471+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,039 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 25,279"}, {"label": "추세(10일선)", "ok": false, "detail": "18,937"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:44:02.531757+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 123600, "qty": 51, "proceeds": 6291308, "entry_price": 160057, "pnl": -1872816, "pnl_pct": -22.78, "hold_from": "2026-06-24T09:08:00.922587+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,222 (현재 123,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 267,562"}, {"label": "추세(10일선)", "ok": false, "detail": "124,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.696490+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 306, "cost": 5827114, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17760, "target": 22880, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:05.367354+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 27, "cost": 3526729, "path": "pullback", "reason": "눌림목 지정가 154,452 도달", "stop": 96000, "target": 234400, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,452 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:34:01.582045+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 52, "cost": 5720858, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99202, "target": 142394, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "110,300 vs 99,990"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,240 / 99,990"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-07T09:48:07.302373+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 80, "proceeds": 3433292, "entry_price": 55300, "pnl": -991372, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:03.224267+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 91,600"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:28:06.382153+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12410, "qty": 274, "proceeds": 3393709, "entry_price": 15980, "pnl": -985467, "pnl_pct": -22.34, "hold_from": "2026-07-02T10:18:02.949119+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,444 (현재 12,430)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 26,587"}, {"label": "추세(10일선)", "ok": false, "detail": "13,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,543 · 기 +15"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,975"}]}
|
||||
{"ts": "2026-07-07T14:06:20.089623+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 19, "cost": 3483222, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 234400, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 234,400"}, {"label": "추세(10일선)", "ok": true, "detail": "123,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 139,025"}]}
|
||||
{"ts": "2026-07-07T14:06:22.687123+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 281, "cost": 5831625, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22880, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,880"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:10.790205+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 46, "proceeds": 4972085, "entry_price": 152367, "pnl": -2037866, "pnl_pct": -28.92, "hold_from": "2026-07-06T09:00:05.367339+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,668 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 253,466"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:16:01.874414+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 126100, "qty": 44, "cost": 5549232, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 110301, "target": 173498, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,100 vs 108,080"}, {"label": "정배열(5>10)", "ok": true, "detail": "114,400 / 108,080"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "114,400 / 113,132"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -164 · 기 +736 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+18%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": false, "detail": "약세 — 돌파만 허용"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.48% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "544,247 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.48% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-08T09:34:04.862709+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130800, "qty": 42, "cost": 5494424, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 110301, "target": 173498, "signals": [{"label": "손절선", "ok": true, "detail": "110,301 (현재 130,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 173,498"}, {"label": "추세(10일선)", "ok": true, "detail": "108,520"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -164 · 기 +736"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,050"}]}
|
||||
{"ts": "2026-07-10T09:26:06.360793+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 42, "cost": 5498625, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117686, "target": 170541, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,800 vs 120,640"}, {"label": "정배열(5>10)", "ok": true, "detail": "122,760 / 120,640"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,760 / 118,578"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -427 · 기 +555 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.60% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,646,513 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.60% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-07-10T11:06:06.387602+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 271, "cost": 3702415, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 23560, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.591560+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 29, "cost": 3660349, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 216800, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:06:06.491483+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 112800, "qty": 50, "cost": 5640846, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 99202, "target": 142394, "signals": [{"label": "손절선", "ok": true, "detail": "99,202 (현재 112,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 142,394"}, {"label": "추세(10일선)", "ok": true, "detail": "100,240"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -358 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,792"}]}
|
||||
{"ts": "2026-07-13T09:08:05.274334+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 41, "cost": 5507126, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 170541, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 134,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 170,541"}, {"label": "추세(10일선)", "ok": true, "detail": "120,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -277 · 기 +460"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,118"}]}
|
||||
{"ts": "2026-07-13T09:26:03.332430+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 27, "cost": 3756263, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 216800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,800"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-14T09:40:04.963062+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 5910, "qty": 931, "cost": 5503035, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5447, "target": 7298, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "5,900 vs 5,543"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,646 / 5,543"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,646 / 5,614"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+33.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +107 · 기 +5 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": false, "detail": "약세 — 돌파만 허용"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "74,367 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.34% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-15T10:30:01.562473+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 303500, "qty": 35, "proceeds": 10601786, "entry_price": 345086, "pnl": -1478026, "pnl_pct": -12.05, "hold_from": "2026-06-29T09:00:12.226210+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "303,877 (현재 303,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 468,711"}, {"label": "추세(10일선)", "ok": true, "detail": "301,700"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -25 · 기 +35"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T13:56:01.759138+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6030, "qty": 912, "cost": 5500185, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5447, "target": 7298, "signals": [{"label": "손절선", "ok": true, "detail": "5,447 (현재 6,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,298"}, {"label": "추세(10일선)", "ok": true, "detail": "5,556"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +147 · 기 -11"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,028"}]}
|
||||
{"ts": "2026-07-15T14:32:01.808579+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 587, "proceeds": 10879334, "entry_price": 19859, "pnl": -779405, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.696479+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,675"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:04:02.184872+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 16, "cost": 5464820, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 301363, "target": 461911, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "340,500 vs 305,400"}, {"label": "정배열(5>10)", "ok": true, "detail": "314,300 / 305,400"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,300 / 305,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -33 · 기 +28 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": false, "detail": "약세 — 돌파만 허용"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.18% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "226,533 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.18% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-16T09:28:03.406225+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 353000, "qty": 15, "cost": 5295794, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 301363, "target": 461911, "signals": [{"label": "손절선", "ok": true, "detail": "301,363 (현재 352,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 461,911"}, {"label": "추세(10일선)", "ok": true, "detail": "306,600"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,963"}]}
|
||||
{"ts": "2026-07-20T12:28:02.248848+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 271, "proceeds": 2788562, "entry_price": 13660, "pnl": -913854, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.387588+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,560"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-20T14:12:02.314100+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 100100, "qty": 102, "proceeds": 10190290, "entry_price": 111373, "pnl": -1171414, "pnl_pct": -10.12, "hold_from": "2026-07-06T09:34:01.582032+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,203 (현재 100,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,881"}, {"label": "추세(10일선)", "ok": true, "detail": "98,970"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -168 · 기 +257"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:46:06.299582+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88400, "qty": 61, "cost": 5393209, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77778, "target": 120266, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,300 vs 80,910"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,020 / 80,910"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,020 / 75,060"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "743,133 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.401768+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 356, "cost": 5034595, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 21442, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T13:06:04.378524+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 91400, "qty": 59, "cost": 5393409, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77778, "target": 120266, "signals": [{"label": "손절선", "ok": true, "detail": "77,778 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 120,266"}, {"label": "추세(10일선)", "ok": true, "detail": "81,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,159"}]}
|
||||
{"ts": "2026-07-24T09:00:02.274051+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 56, "proceeds": 6248591, "entry_price": 132420, "pnl": -1168021, "pnl_pct": -15.57, "hold_from": "2026-07-10T12:14:02.591547+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 241,679"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:02:03.981423+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 334, "cost": 5030795, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 21442, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,442"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T10:02:04.270583+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 292, "cost": 5534230, "path": "pullback", "reason": "눌림목 지정가 19,643 도달", "stop": 17760, "target": 22520, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,643 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:02:05.306008+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 731, "cost": 5461389, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6370, "target": 10769, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,470 vs 5,392"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,452 / 5,392"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.026931+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 690, "cost": 5458719, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 10769, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,769"}, {"label": "추세(10일선)", "ok": true, "detail": "5,434"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:10:00.979478+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 690, "proceeds": 8284514, "entry_price": 14585, "pnl": -1780876, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.401758+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,081 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,097"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.035449+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 306, "cost": 4024504, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10340, "target": 21580, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,150 vs 12,888"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,378 / 12,888"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-28T11:22:00.688753+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 1421, "proceeds": 9402859, "entry_price": 7684, "pnl": -1517249, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:05.306004+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 11,004"}, {"label": "추세(10일선)", "ok": true, "detail": "5,282"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:01.303424+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 654, "cost": 4277802, "path": "pullback", "reason": "눌림목 지정가 7,526 도달", "stop": 5295, "target": 10276, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,540 vs 5,298"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,266 / 5,298"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,526 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:24:03.681936+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 292, "cost": 5534230, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22520, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,520"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,268"}]}
|
||||
{"ts": "2026-07-29T09:24:04.035867+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6710, "qty": 637, "cost": 4274911, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5295, "target": 10276, "signals": [{"label": "손절선", "ok": true, "detail": "5,295 (현재 8,460)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,276"}, {"label": "추세(10일선)", "ok": true, "detail": "5,064"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,796"}]}
|
||||
{"ts": "2026-07-29T09:24:04.447212+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 11310, "qty": 317, "cost": 3585808, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21580, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 15,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,580"}, {"label": "추세(10일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +242 · 기 -182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-07-29T10:52:02.292514+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10340, "qty": 623, "proceeds": 6429258, "entry_price": 12214, "pnl": -1181053, "pnl_pct": -15.34, "hold_from": "2026-07-27T09:12:01.035446+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,340 (현재 10,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,835"}, {"label": "추세(10일선)", "ok": false, "detail": "12,607"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +239 · 기 -181"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.628867+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 83, "proceeds": 9874307, "entry_price": 132580, "pnl": -1131443, "pnl_pct": -10.09, "hold_from": "2026-07-10T09:26:06.360780+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,709 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,192"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:14:05.383429+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5580, "qty": 1291, "proceeds": 7189733, "entry_price": 6624, "pnl": -1362980, "pnl_pct": -15.76, "hold_from": "2026-07-29T09:02:01.303420+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,600 (현재 5,590)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,697"}, {"label": "추세(10일선)", "ok": true, "detail": "5,204"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T09:04:05.277102+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 589, "cost": 3611112, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:09.704313+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 40, "cost": 4964745, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113673, "target": 155380, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "124,000 vs 117,010"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,260 / 117,010"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,260 / 110,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+54.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "518,220 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.31% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T10:10:06.142998+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 39, "cost": 4981047, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113673, "target": 155380, "signals": [{"label": "손절선", "ok": true, "detail": "113,673 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 155,380"}, {"label": "추세(10일선)", "ok": true, "detail": "117,370"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,835"}]}
|
||||
{"ts": "2026-07-31T09:06:05.825941+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 551, "cost": 3609591, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:06.330737+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 120, "proceeds": 9305818, "entry_price": 89875, "pnl": -1480800, "pnl_pct": -13.55, "hold_from": "2026-07-23T09:46:06.299578+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,839 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,984"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:10.581416+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 371, "cost": 4790328, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 17699, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:08.464738+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 357, "cost": 4791659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 17699, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,699"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:34:08.150391+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90000, "qty": 53, "cost": 4770716, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79135, "target": 122595, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "89,800 vs 81,060"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,320 / 81,060"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,320 / 75,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "595,733 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:11.011486+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 13, "cost": 1215682, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 79135, "target": 122595, "signals": [{"label": "손절선", "ok": true, "detail": "79,135 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,595"}, {"label": "추세(10일선)", "ok": true, "detail": "81,420"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,841"}]}
|
||||
{"ts": "2026-08-06T09:00:13.271931+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 584, "proceeds": 10916990, "entry_price": 18950, "pnl": -151470, "pnl_pct": -1.16, "hold_from": "2026-07-24T10:02:04.270573+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,520"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:06:08.044853+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5470, "qty": 1843, "proceeds": 10061552, "entry_price": 5969, "pnl": -941669, "pnl_pct": -8.37, "hold_from": "2026-07-14T09:40:04.963052+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,498 (현재 5,490)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,383"}, {"label": "추세(10일선)", "ok": false, "detail": "5,502"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -30 · 기 -23"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:12:11.568337+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13110, "qty": 277, "cost": 3632015, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 21420, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,090 vs 12,882"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,366 / 12,882"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,366 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-12.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -352 · 기 +499 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "229,113 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.38% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,090)"}]}
|
||||
{"ts": "2026-08-06T09:14:08.213833+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 193600, "qty": 24, "cost": 4647097, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 176944, "target": 243568, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "193,500 vs 180,840"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,480 / 180,840"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,480 / 176,699"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,163,480 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-08-07T09:02:10.128383+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14290, "qty": 254, "cost": 3630204, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21420, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 14,240)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,420"}, {"label": "추세(10일선)", "ok": true, "detail": "12,997"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -216 · 기 +313"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,856"}]}
|
||||
{"ts": "2026-08-07T09:34:06.949454+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 198600, "qty": 24, "cost": 4767115, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 176944, "target": 243568, "signals": [{"label": "손절선", "ok": true, "detail": "176,944 (현재 198,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 243,568"}, {"label": "추세(10일선)", "ok": true, "detail": "181,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 197,939"}]}
|
||||
@@ -0,0 +1,197 @@
|
||||
{
|
||||
"cash": 28179215.39100001,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 22,
|
||||
"entry_price": 347250.0,
|
||||
"entry_at": "2026-07-13T09:12:04.289321+09:00",
|
||||
"stop": 374219,
|
||||
"target": 410027,
|
||||
"peak": 411500,
|
||||
"trailing_on": true,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3936003.3225085386,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 124881.92771084337,
|
||||
"entry_at": "2026-07-29T10:24:01.432671+09:00",
|
||||
"stop": 114155,
|
||||
"target": 140972,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5296043.025056097,
|
||||
"last_add_price": 126400
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 637,
|
||||
"entry_price": 6333.076923076923,
|
||||
"entry_at": "2026-07-30T09:04:06.859145+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2020237.3208749255,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 58,
|
||||
"entry_price": 133900.0,
|
||||
"entry_at": "2026-07-30T09:24:06.912150+09:00",
|
||||
"stop": 118244,
|
||||
"target": 157385,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3949543.523644232,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 532,
|
||||
"entry_price": 13160.206766917294,
|
||||
"entry_at": "2026-08-03T12:00:11.186392+09:00",
|
||||
"stop": 11445,
|
||||
"target": 15733,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3504336.4241500003,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91929.87012987013,
|
||||
"entry_at": "2026-08-04T09:50:08.969520+09:00",
|
||||
"stop": 80565,
|
||||
"target": 108977,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3560762.7001641323,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 311,
|
||||
"entry_price": 13423.569131832797,
|
||||
"entry_at": "2026-08-05T09:02:12.579429+09:00",
|
||||
"stop": 10340,
|
||||
"target": 18049,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2094069.1444097043,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 51,
|
||||
"entry_price": 194156.86274509804,
|
||||
"entry_at": "2026-08-06T09:34:15.268990+09:00",
|
||||
"stop": 177101,
|
||||
"target": 219741,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5025448.547031702,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -13850460.364500012,
|
||||
"closed_trades": 25,
|
||||
"wins": 1,
|
||||
"peak_equity": 100172467.23000002,
|
||||
"max_drawdown": 0.14748235408916366,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-28",
|
||||
"403870": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"055550": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944232+09:00",
|
||||
"updated_at": "2026-08-10T15:28:13.767762+09:00"
|
||||
}
|
||||
@@ -0,0 +1,77 @@
|
||||
{"ts": "2026-06-17T11:15:02.299761+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 150191, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.341563+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 17760, "target": 21260, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:09.238138+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.341561+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,260"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.077319+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.299760+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:02:02.369304+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 68200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,200 vs 52,550"}, {"label": "정배열(5>10)", "ok": true, "detail": "57,960 / 52,550"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:00.981981+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 13, "cost": 2020503, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 118951, "target": 210074, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,400 vs 128,090"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,100 / 128,090"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-26T09:00:05.483093+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.369303+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 68,200"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.892266+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 12, "cost": 1979097, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118951, "target": 210074, "signals": [{"label": "손절선", "ok": true, "detail": "118,951 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 210,074"}, {"label": "추세(10일선)", "ok": true, "detail": "129,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:05.439867+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 43200, "target": 73450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.204343+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 422420, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "357,000 vs 307,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "317,600 / 307,050"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.305227+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 11, "cost": 4092614, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 422420, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 422,420"}, {"label": "추세(10일선)", "ok": true, "detail": "308,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-02T10:18:03.823440+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 139, "cost": 2221553, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 12444, "target": 21284, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "15,980 vs 13,620"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,104 / 13,620"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.946612+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 324, "cost": 6143961, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 20760, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.049404+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 273, "cost": 6157073, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20760, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,760"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:24:06.141326+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 597, "proceeds": 11237464, "entry_price": 20602, "pnl": -1063571, "pnl_pct": -8.45, "hold_from": "2026-07-02T10:40:02.946610+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,042 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,942"}, {"label": "추세(10일선)", "ok": false, "detail": "18,937"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:44:02.602967+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 123600, "qty": 25, "proceeds": 3083974, "entry_price": 159960, "pnl": -915625, "pnl_pct": -22.73, "hold_from": "2026-06-24T09:08:00.981980+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,125 (현재 123,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 213,713"}, {"label": "추세(10일선)", "ok": false, "detail": "124,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.766124+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 315, "cost": 5998500, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17760, "target": 20960, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:07.944661+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 154,452 도달", "stop": 96000, "target": 182500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,452 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:46:01.641444+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320500, "qty": 22, "proceeds": 7037251, "entry_price": 364750, "pnl": -988453, "pnl_pct": -12.13, "hold_from": "2026-07-01T09:06:03.204341+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,756 (현재 320,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,741"}, {"label": "추세(10일선)", "ok": true, "detail": "303,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T09:48:07.376376+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:05.439858+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,450"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:28:06.455126+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12410, "qty": 139, "proceeds": 1721626, "entry_price": 15980, "pnl": -499927, "pnl_pct": -22.34, "hold_from": "2026-07-02T10:18:03.823437+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,444 (현재 12,430)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,284"}, {"label": "추세(10일선)", "ok": false, "detail": "13,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,543 · 기 +15"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,975"}]}
|
||||
{"ts": "2026-07-07T14:08:19.509937+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 289, "cost": 5997650, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20960, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,960"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:16.934111+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 13, "proceeds": 1405155, "entry_price": 130600, "pnl": -292900, "pnl_pct": -17.08, "hold_from": "2026-07-06T09:00:07.944654+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.447933+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 31, "cost": 4092614, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 154477, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "131,900 vs 108,660"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,560 / 108,660"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T11:06:06.461063+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 143, "cost": 1953673, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 18610, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.662405+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 171500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:09.684184+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 30, "cost": 4107616, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:12:04.289323+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 11, "cost": 3757063, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 300363, "target": 403206, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "341,000 vs 305,450"}, {"label": "정배열(5>10)", "ok": true, "detail": "314,400 / 305,450"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,400 / 305,433"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.90% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "197,687 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.90% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:26:03.401224+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 14, "cost": 1947692, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 171500, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,500"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:48:02.326780+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 135500, "qty": 36, "cost": 4878732, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 122472, "target": 155042, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,500 vs 121,110"}, {"label": "정배열(5>10)", "ok": true, "detail": "123,700 / 121,110"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,700 / 118,657"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -277 · 기 +460 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+18%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.77% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,103,900 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.77% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-13T10:04:06.402387+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 113100, "qty": 42, "cost": 4750913, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 101931, "target": 129854, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "113,050 vs 100,265"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,790 / 100,265"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,790 / 96,676"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+31.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -368 · 기 +1,005 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.71% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "3,366,381 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.71% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-15T11:56:05.674537+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 138900, "qty": 35, "cost": 4862229, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 122472, "target": 155042, "signals": [{"label": "손절선", "ok": true, "detail": "122,472 (현재 138,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 155,042"}, {"label": "추세(10일선)", "ok": true, "detail": "121,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -40 · 기 +527"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 138,828"}]}
|
||||
{"ts": "2026-07-15T14:32:01.874159+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 604, "proceeds": 11194408, "entry_price": 19858, "pnl": -801741, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.766122+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,767"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:28:03.472538+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 353000, "qty": 11, "cost": 3883582, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 300363, "target": 403206, "signals": [{"label": "손절선", "ok": true, "detail": "300,363 (현재 352,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 403,206"}, {"label": "추세(10일선)", "ok": true, "detail": "306,600"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,963"}]}
|
||||
{"ts": "2026-07-20T11:28:01.181290+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 101900, "qty": 42, "proceeds": 4271454, "entry_price": 113100, "pnl": -479458, "pnl_pct": -9.9, "hold_from": "2026-07-13T10:04:06.402386+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "101,931 (현재 101,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,854"}, {"label": "추세(10일선)", "ok": true, "detail": "99,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -156 · 기 +275"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 115,714"}]}
|
||||
{"ts": "2026-07-20T12:28:02.306152+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 143, "proceeds": 1471455, "entry_price": 13660, "pnl": -482218, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.461061+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,610"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-23T09:50:01.505017+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 43, "cost": 3793169, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 104155, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,200 vs 80,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,000 / 80,900"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.474411+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 190, "cost": 2687003, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 17791, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:54:04.487607+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 42, "cost": 3818373, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 104155, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,155"}, {"label": "추세(10일선)", "ok": true, "detail": "81,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:05.421727+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 29, "proceeds": 3235878, "entry_price": 132428, "pnl": -605098, "pnl_pct": -15.58, "hold_from": "2026-07-10T12:14:02.662404+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 187,069"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:02:04.034477+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 179, "cost": 2696144, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 17791, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,791"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T10:02:04.389259+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 310, "cost": 5875381, "path": "pullback", "reason": "눌림목 지정가 19,643 도달", "stop": 17760, "target": 20735, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,643 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.217883+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 423, "cost": 3160284, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6370, "target": 9119, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,470 vs 5,392"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,452 / 5,392"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.078866+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 400, "cost": 3164475, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 9119, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,119"}, {"label": "추세(10일선)", "ok": true, "detail": "5,434"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:10:01.033059+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 369, "proceeds": 4430414, "entry_price": 14586, "pnl": -952734, "pnl_pct": -17.53, "hold_from": "2026-07-23T10:30:02.474409+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,082 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,342"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.497852+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 164, "cost": 2156923, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10340, "target": 17365, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,150 vs 12,888"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,378 / 12,888"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:32:01.372128+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127900, "qty": 45, "cost": 5756363, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117645, "target": 143283, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "127,900 vs 117,400"}, {"label": "정배열(5>10)", "ok": true, "detail": "119,040 / 117,400"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "119,040 / 110,150"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "643,340 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-28T11:22:00.740360+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 823, "proceeds": 5445850, "entry_price": 7684, "pnl": -878909, "pnl_pct": -13.72, "hold_from": "2026-07-27T09:02:06.217881+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,344"}, {"label": "추세(10일선)", "ok": true, "detail": "5,282"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T12:56:02.869289+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117400, "qty": 45, "proceeds": 5272698, "entry_price": 127900, "pnl": -483665, "pnl_pct": -8.21, "hold_from": "2026-07-27T09:32:01.372126+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,645 (현재 117,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 143,283"}, {"label": "추세(10일선)", "ok": true, "detail": "116,360"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 +324"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,553"}]}
|
||||
{"ts": "2026-07-28T13:20:03.820316+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 123800, "qty": 71, "proceeds": 8772660, "entry_price": 137176, "pnl": -968301, "pnl_pct": -9.75, "hold_from": "2026-07-13T09:48:02.326778+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "123,862 (현재 123,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,147"}, {"label": "추세(10일선)", "ok": true, "detail": "119,940"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +122 · 기 -106"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.215048+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 357, "cost": 2335130, "path": "pullback", "reason": "눌림목 지정가 7,526 도달", "stop": 5295, "target": 8408, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,540 vs 5,298"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,266 / 5,298"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,526 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:24:08.685814+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 61, "proceeds": 7829303, "entry_price": 134410, "pnl": -370927, "pnl_pct": -4.32, "hold_from": "2026-07-09T09:36:03.447931+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,954 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,594"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:08.686031+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 11310, "qty": 191, "cost": 2160534, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17365, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 15,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,365"}, {"label": "추세(10일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +242 · 기 -182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-07-29T09:26:01.888464+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18940, "qty": 310, "proceeds": 5859951, "entry_price": 18950, "pnl": -15430, "pnl_pct": -0.05, "hold_from": "2026-07-24T10:02:04.389258+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,645 (현재 18,950)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "18,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.888676+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6610, "qty": 357, "proceeds": 2355168, "entry_price": 6540, "pnl": 20038, "pnl_pct": 1.07, "hold_from": "2026-07-29T09:02:02.215046+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,526 (현재 6,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "5,306"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.375105+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 848, "cost": 5419533, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7174, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.432673+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 42, "cost": 5183577, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113016, "target": 138976, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "123,400 vs 116,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,140 / 116,950"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:52:02.342370+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10340, "qty": 355, "proceeds": 3663542, "entry_price": 12160, "pnl": -653915, "pnl_pct": -14.97, "hold_from": "2026-07-27T09:12:01.497849+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,340 (현재 10,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 14,890"}, {"label": "추세(10일선)", "ok": false, "detail": "12,607"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +239 · 기 -181"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.579933+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 848, "proceeds": 4959590, "entry_price": 6390, "pnl": -459943, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.375104+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:06.858551+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19090, "qty": 288, "cost": 5498745, "path": "pullback", "reason": "눌림목 지정가 19,653 도달", "stop": 17760, "target": 21085, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,100 vs 18,958"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,606 / 18,958"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,606 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 +327 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.14% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "160,727 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.14% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,653 (현재 19,100)"}]}
|
||||
{"ts": "2026-07-30T09:04:06.859148+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 329, "cost": 2017073, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 8135, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:24:06.912152+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:06.863454+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 867, "cost": 5462919, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T09:50:06.667546+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 41, "cost": 5183177, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 138976, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,976"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:06.408818+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 308, "cost": 2017703, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:06.408934+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 85, "proceeds": 6591621, "entry_price": 89534, "pnl": -1019920, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.505016+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,555 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,003"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:11.186394+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 271, "cost": 3499135, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 15304, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.141957+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 261, "cost": 3503145, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:50:08.969522+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90400, "qty": 39, "cost": 3526129, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79421, "target": 106869, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "90,300 vs 81,110"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,420 / 81,110"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,420 / 75,093"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.87% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "805,693 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.87% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:12.149555+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 38, "cost": 3553533, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 79421, "target": 106869, "signals": [{"label": "손절선", "ok": true, "detail": "79,421 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,869"}, {"label": "추세(10일선)", "ok": true, "detail": "81,420"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 93,241"}]}
|
||||
{"ts": "2026-08-05T09:02:12.579251+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 867, "proceeds": 4932263, "entry_price": 6300, "pnl": -530656, "pnl_pct": -9.52, "hold_from": "2026-07-30T09:26:06.863452+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,789 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,067"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,413"}]}
|
||||
{"ts": "2026-08-05T09:02:12.579432+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 160, "cost": 2086713, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10340, "target": 17090, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:10.847019+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 151, "cost": 2088643, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17090, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,090"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:17.713628+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 288, "proceeds": 5383721, "entry_price": 19090, "pnl": -115023, "pnl_pct": -1.89, "hold_from": "2026-07-30T09:04:06.858549+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,085"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,459"}]}
|
||||
{"ts": "2026-08-06T09:34:15.268992+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 26, "cost": 4992749, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 175344, "target": 216984, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "191,800 vs 180,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,140 / 180,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:12:15.071471+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 25, "cost": 4910736, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 175344, "target": 216984, "signals": [{"label": "손절선", "ok": true, "detail": "175,344 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,984"}, {"label": "추세(10일선)", "ok": true, "detail": "181,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
{"ts": "2026-08-10T09:00:14.782704+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 29, "cost": 3944592, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 154020, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,020"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
@@ -0,0 +1,198 @@
|
||||
{
|
||||
"cash": 23589410.428500064,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 22,
|
||||
"entry_price": 347250.0,
|
||||
"entry_at": "2026-07-13T09:12:04.291895+09:00",
|
||||
"stop": 374219,
|
||||
"target": 410027,
|
||||
"peak": 411500,
|
||||
"trailing_on": true,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3962363.617644489,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 93,
|
||||
"entry_price": 119186.02150537634,
|
||||
"entry_at": "2026-07-29T09:02:02.218181+09:00",
|
||||
"stop": 111200,
|
||||
"target": 131165,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5549046.703468754,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 123226.50602409638,
|
||||
"entry_at": "2026-07-30T09:04:06.862578+09:00",
|
||||
"stop": 111000,
|
||||
"target": 141566,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5150762.675171776,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 631,
|
||||
"entry_price": 6333.011093502377,
|
||||
"entry_at": "2026-07-30T09:04:06.863063+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2002983.4606684945,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 57,
|
||||
"entry_price": 133863.15789473685,
|
||||
"entry_at": "2026-07-30T09:24:06.914859+09:00",
|
||||
"stop": 118207,
|
||||
"target": 157348,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3940896.531574532,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 530,
|
||||
"entry_price": 13160.188679245282,
|
||||
"entry_at": "2026-08-03T12:00:11.189297+09:00",
|
||||
"stop": 11445,
|
||||
"target": 15732,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3497500.5799993444,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 311,
|
||||
"entry_price": 13423.569131832797,
|
||||
"entry_at": "2026-08-05T09:02:12.583320+09:00",
|
||||
"stop": 10340,
|
||||
"target": 18049,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2091765.9324469643,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 51,
|
||||
"entry_price": 194156.86274509804,
|
||||
"entry_at": "2026-08-06T09:34:15.272347+09:00",
|
||||
"stop": 177101,
|
||||
"target": 219741,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5012093.7710951045,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14771785.13750002,
|
||||
"closed_trades": 30,
|
||||
"wins": 2,
|
||||
"peak_equity": 101529111.72700004,
|
||||
"max_drawdown": 0.1639948569900874,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"403870": "2026-07-07",
|
||||
"095610": "2026-07-29",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"055550": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944251+09:00",
|
||||
"updated_at": "2026-08-10T15:28:13.770025+09:00"
|
||||
}
|
||||
@@ -0,0 +1,93 @@
|
||||
{"ts": "2026-06-17T11:15:02.304318+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 150191, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:28.483754+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 35, "cost": 2201830, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 83807, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "62,800 vs 53,510"}, {"label": "정배열(5>10)", "ok": true, "detail": "59,880 / 53,510"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.344845+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 21260, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:09.342852+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.344843+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,260"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.079542+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.304317+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:04:06.111950+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 13, "cost": 2037406, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 211374, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "156,200 vs 128,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,260 / 128,170"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.347423+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 150, "cost": 2590889, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 22203, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "17,280 vs 13,750"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,364 / 13,750"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.779355+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 13, "cost": 2056908, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 214407, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "158,000 vs 153,380"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,240 / 153,380"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.896210+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 142, "cost": 2593309, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 22203, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(10일선)", "ok": true, "detail": "13,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:23.474580+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 11, "cost": 1970396, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 214407, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,407"}, {"label": "추세(10일선)", "ok": true, "detail": "155,410"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-26T09:00:05.584610+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 35, "proceeds": 1746588, "entry_price": 62900, "pnl": -455243, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:28.483745+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,807"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.057812+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 12, "cost": 2003100, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 211374, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,374"}, {"label": "추세(10일선)", "ok": true, "detail": "129,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.262629+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 3, "cost": 2235335, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 943257, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "744,000 vs 735,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "766,800 / 735,600"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.482930+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 3, "cost": 2334350, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 943257, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 943,257"}, {"label": "추세(10일선)", "ok": true, "detail": "739,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:05.540133+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 41, "cost": 2267640, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 73450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.206698+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 422420, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "357,000 vs 307,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "317,600 / 307,050"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.307379+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 11, "cost": 4092614, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 422420, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 422,420"}, {"label": "추세(10일선)", "ok": true, "detail": "308,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T11:06:02.349355+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 212000, "qty": 24, "proceeds": 5078078, "entry_price": 167779, "pnl": 1050774, "pnl_pct": 26.36, "hold_from": "2026-06-24T09:46:04.779353+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "213,193 (현재 213,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "158,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -229 · 기 +300"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T10:18:03.827422+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 43, "cost": 5255388, "path": "pullback", "reason": "눌림목 지정가 122,215 도달", "stop": 111000, "target": 139000, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "122,000 vs 119,760"}, {"label": "정배열(5>10)", "ok": true, "detail": "121,000 / 119,760"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "121,000 / 118,432"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +22 · 기 -44 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,199,199 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,215 (현재 122,000)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.948677+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 324, "cost": 6143961, "path": "pullback", "reason": "눌림목 지정가 19,970 도달", "stop": 17760, "target": 20760, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,970 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.051721+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 273, "cost": 6157073, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20760, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,760"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:24:06.143347+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 597, "proceeds": 11237464, "entry_price": 20602, "pnl": -1063571, "pnl_pct": -8.45, "hold_from": "2026-07-02T10:40:02.948676+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,042 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,942"}, {"label": "추세(10일선)", "ok": false, "detail": "18,937"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:04:01.665799+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 292, "proceeds": 4187858, "entry_price": 17751, "pnl": -996340, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.347421+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,693"}, {"label": "추세(10일선)", "ok": true, "detail": "13,461"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.636551+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 25, "proceeds": 3136372, "entry_price": 161596, "pnl": -904134, "pnl_pct": -22.21, "hold_from": "2026-06-24T09:04:06.111949+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,761 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,349"}, {"label": "추세(10일선)", "ok": true, "detail": "125,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:16:02.526460+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 126200, "qty": 42, "cost": 5301195, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 139000, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 139,000"}, {"label": "추세(10일선)", "ok": true, "detail": "120,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +278"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 125,493"}]}
|
||||
{"ts": "2026-07-03T10:24:02.768194+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 314, "cost": 5979457, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 20960, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:08.046896+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 164,068 도달", "stop": 96000, "target": 182500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,068 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:00:08.048351+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14510, "qty": 130, "cost": 1886583, "path": "pullback", "reason": "눌림목 지정가 17,169 도달", "stop": 10827, "target": 20034, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,490 vs 13,471"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,806 / 13,471"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,806 / 11,453"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,226 · 기 +134 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.02% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "20,667 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.02% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,169 (현재 14,490)"}]}
|
||||
{"ts": "2026-07-06T09:46:01.643722+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320500, "qty": 22, "proceeds": 7037251, "entry_price": 364750, "pnl": -988453, "pnl_pct": -12.13, "hold_from": "2026-07-01T09:06:03.206697+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,756 (현재 320,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,741"}, {"label": "추세(10일선)", "ok": true, "detail": "303,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T09:12:07.261676+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155900, "qty": 12, "cost": 1871081, "path": "pullback", "reason": "눌림목 지정가 158,314 도달", "stop": 118529, "target": 211957, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,800 vs 153,160"}, {"label": "정배열(5>10)", "ok": true, "detail": "171,800 / 153,160"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,800 / 99,713"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -197 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.33% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "645,567 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.33% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,314 (현재 155,800)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.378539+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 41, "proceeds": 1759562, "entry_price": 55300, "pnl": -508078, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:05.540126+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,450"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.357407+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 6, "proceeds": 3760652, "entry_price": 761500, "pnl": -809033, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.262627+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 959,757"}, {"label": "추세(10일선)", "ok": false, "detail": "724,000"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.175480+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 130, "proceeds": 1586800, "entry_price": 14510, "pnl": -299783, "pnl_pct": -15.71, "hold_from": "2026-07-06T09:00:08.048341+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,827 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,034"}, {"label": "추세(10일선)", "ok": false, "detail": "13,245"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,512"}]}
|
||||
{"ts": "2026-07-07T14:08:22.267417+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 11, "cost": 1947292, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118529, "target": 211957, "signals": [{"label": "손절선", "ok": true, "detail": "118,529 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,957"}, {"label": "추세(10일선)", "ok": true, "detail": "148,710"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,142"}]}
|
||||
{"ts": "2026-07-07T14:08:22.269186+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 288, "cost": 5976896, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20960, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,960"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:17.041286+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 13, "proceeds": 1405155, "entry_price": 130600, "pnl": -292900, "pnl_pct": -17.08, "hold_from": "2026-07-06T09:00:08.046892+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.450093+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 30, "cost": 3960594, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 154477, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "131,900 vs 108,660"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,560 / 108,660"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T11:06:06.463233+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 143, "cost": 1953673, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 18610, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.664485+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 171500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:09.784350+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 29, "cost": 3970696, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:12:04.291897+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 11, "cost": 3757063, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 300363, "target": 403206, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "341,000 vs 305,450"}, {"label": "정배열(5>10)", "ok": true, "detail": "314,400 / 305,450"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,400 / 305,433"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.90% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "197,687 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.90% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:26:03.403270+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 14, "cost": 1947692, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 171500, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,500"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T10:04:06.404637+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 113100, "qty": 42, "cost": 4750913, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 101931, "target": 129854, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "113,050 vs 100,265"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,790 / 100,265"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,790 / 96,676"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+31.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -368 · 기 +1,005 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.71% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "3,366,381 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.71% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-15T14:32:01.876272+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 602, "proceeds": 11157341, "entry_price": 19858, "pnl": -799013, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.768192+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,766"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:08.142600+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 23, "proceeds": 4797626, "entry_price": 165991, "pnl": 979254, "pnl_pct": 25.91, "hold_from": "2026-07-07T09:12:07.261674+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "158,280"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:28:03.474549+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 353000, "qty": 11, "cost": 3883582, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 300363, "target": 403206, "signals": [{"label": "손절선", "ok": true, "detail": "300,363 (현재 352,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 403,206"}, {"label": "추세(10일선)", "ok": true, "detail": "306,600"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,963"}]}
|
||||
{"ts": "2026-07-20T11:28:01.183314+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 101900, "qty": 42, "proceeds": 4271454, "entry_price": 113100, "pnl": -479458, "pnl_pct": -9.9, "hold_from": "2026-07-13T10:04:06.404635+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "101,931 (현재 101,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,854"}, {"label": "추세(10일선)", "ok": true, "detail": "99,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -156 · 기 +275"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 115,714"}]}
|
||||
{"ts": "2026-07-20T12:28:02.308175+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 143, "proceeds": 1471455, "entry_price": 13660, "pnl": -482218, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.463231+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,610"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-22T14:18:05.417998+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 158, "cost": 2217073, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 18460, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,020 vs 12,975"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,552 / 12,975"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-22T15:04:00.988784+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158100, "qty": 12, "cost": 1897485, "path": "pullback", "reason": "눌림목 지정가 158,107 도달", "stop": 120314, "target": 214778, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "158,000 vs 153,380"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,240 / 153,380"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -311 · 기 +22 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.02% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "971,360 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "5.02% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,107 (현재 158,000)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.507037+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 44, "cost": 3881382, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 104155, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,200 vs 80,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,000 / 80,900"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:24:01.496618+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 152100, "qty": 12, "proceeds": 1821641, "entry_price": 158100, "pnl": -75844, "pnl_pct": -3.8, "hold_from": "2026-07-22T15:04:00.988783+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "120,314 (현재 152,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,778"}, {"label": "추세(10일선)", "ok": false, "detail": "152,780"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -101 · 기 -107"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,575"}]}
|
||||
{"ts": "2026-07-23T10:30:02.476529+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 192, "cost": 2715287, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 17791, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:54:04.489474+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 42, "cost": 3818373, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 104155, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,155"}, {"label": "추세(10일선)", "ok": true, "detail": "81,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:05.529199+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 29, "proceeds": 3235878, "entry_price": 132428, "pnl": -605098, "pnl_pct": -15.58, "hold_from": "2026-07-10T12:14:02.664484+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 187,069"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:05.530375+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155500, "qty": 12, "cost": 1866280, "path": "pullback", "reason": "눌림목 지정가 158,093 도달", "stop": 117686, "target": 212221, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,000 vs 153,080"}, {"label": "정배열(5>10)", "ok": true, "detail": "171,640 / 153,080"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,640 / 99,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+44.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +200 · 기 -454 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+27%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.77% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "730,327 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.77% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,093 (현재 155,000)"}]}
|
||||
{"ts": "2026-07-24T09:02:04.036333+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 181, "cost": 2726269, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 17791, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,791"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T09:28:04.942689+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 153, "cost": 2220363, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 18460, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,460"}, {"label": "추세(10일선)", "ok": true, "detail": "13,113"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T10:02:04.391526+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 312, "cost": 5913287, "path": "pullback", "reason": "눌림목 지정가 20,012 도달", "stop": 17760, "target": 20735, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,012 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:10:01.034991+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 373, "proceeds": 4478440, "entry_price": 14586, "pnl": -963116, "pnl_pct": -17.53, "hold_from": "2026-07-23T10:30:02.476527+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,083 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,342"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.501479+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7850, "qty": 420, "cost": 3297495, "path": "pullback", "reason": "눌림목 지정가 7,907 도달", "stop": 6743, "target": 9510, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,840 vs 5,428"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,526 / 5,428"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,526 / 4,895"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+91.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.17% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "693,433 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": true, "detail": "11.17% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": false, "detail": "80"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,907 (현재 7,840)"}]}
|
||||
{"ts": "2026-07-27T12:56:04.228682+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 8300, "qty": 397, "cost": 3295594, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6743, "target": 9510, "signals": [{"label": "손절선", "ok": true, "detail": "6,743 (현재 8,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,510"}, {"label": "추세(10일선)", "ok": true, "detail": "5,476"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 8,127"}]}
|
||||
{"ts": "2026-07-27T13:38:04.225254+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6880, "qty": 817, "proceeds": 5609999, "entry_price": 8069, "pnl": -983090, "pnl_pct": -14.73, "hold_from": "2026-07-27T09:12:01.501476+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,962 (현재 6,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,729"}, {"label": "추세(10일선)", "ok": true, "detail": "5,334"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:15.725820+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 394, "cost": 2671721, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5628, "target": 8509, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,050 vs 5,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,368 / 5,350"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.736195+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 376, "cost": 2670000, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5628, "target": 8509, "signals": [{"label": "손절선", "ok": true, "detail": "5,628 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,509"}, {"label": "추세(10일선)", "ok": true, "detail": "5,354"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T10:08:02.763925+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 311, "proceeds": 3467096, "entry_price": 14266, "pnl": -970340, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.417997+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,831"}, {"label": "추세(10일선)", "ok": false, "detail": "12,695"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.218183+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 47, "cost": 5542131, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 127950, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "117,800 vs 116,390"}, {"label": "정배열(5>10)", "ok": true, "detail": "117,020 / 116,390"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.458945+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 46, "cost": 5543831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 127950, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 127,950"}, {"label": "추세(10일선)", "ok": true, "detail": "116,660"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:08.688483+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 15, "cost": 1839276, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 212221, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 212,221"}, {"label": "추세(10일선)", "ok": true, "detail": "148,710"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,742"}]}
|
||||
{"ts": "2026-07-29T09:24:08.688690+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 59, "proceeds": 7572605, "entry_price": 134408, "pnl": -358685, "pnl_pct": -4.32, "hold_from": "2026-07-09T09:36:03.450092+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,952 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,593"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.891082+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18940, "qty": 312, "proceeds": 5897757, "entry_price": 18950, "pnl": -15530, "pnl_pct": -0.05, "hold_from": "2026-07-24T10:02:04.391524+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,645 (현재 18,950)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "18,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.377044+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 850, "cost": 5432315, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7174, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:18:05.366579+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 116400, "qty": 27, "proceeds": 3136672, "entry_price": 137222, "pnl": -568884, "pnl_pct": -15.17, "hold_from": "2026-07-24T09:00:05.530369+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,686 (현재 115,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 192,006"}, {"label": "추세(10일선)", "ok": false, "detail": "149,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +445 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.681905+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 85, "proceeds": 10112243, "entry_price": 124176, "pnl": -444341, "pnl_pct": -4.01, "hold_from": "2026-07-02T10:18:03.827419+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "111,006 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 143,933"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:06:06.472442+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5690, "qty": 770, "proceeds": 4372756, "entry_price": 6936, "pnl": -968965, "pnl_pct": -17.97, "hold_from": "2026-07-28T09:00:15.725812+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,741 (현재 5,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,729"}, {"label": "추세(10일선)", "ok": true, "detail": "5,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.581955+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 850, "proceeds": 4971287, "entry_price": 6390, "pnl": -461028, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.377043+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:06.862580+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 42, "cost": 5095364, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 136750, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "121,200 vs 119,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,840 / 119,680"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:06.862756+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19090, "qty": 286, "cost": 5460559, "path": "pullback", "reason": "눌림목 지정가 20,019 도달", "stop": 17760, "target": 21085, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,100 vs 18,958"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,606 / 18,958"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,606 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 +327 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.14% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "160,727 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.14% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,019 (현재 19,100)"}]}
|
||||
{"ts": "2026-07-30T09:04:06.863066+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 326, "cost": 1998680, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 8135, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.313716+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 41, "cost": 5133970, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 136750, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,750"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:06.914861+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:06.866302+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 865, "cost": 5450317, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:06.410935+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 305, "cost": 1998050, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:06.411045+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 86, "proceeds": 6669170, "entry_price": 89519, "pnl": -1030585, "pnl_pct": -13.2, "hold_from": "2026-07-23T09:50:01.507036+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,539 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,988"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:11.189299+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 270, "cost": 3486223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 15304, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.144443+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 260, "cost": 3489723, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-05T09:02:12.583140+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 865, "proceeds": 4920886, "entry_price": 6300, "pnl": -529432, "pnl_pct": -9.52, "hold_from": "2026-07-30T09:26:06.866300+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,789 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,067"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,413"}]}
|
||||
{"ts": "2026-08-05T09:02:12.583322+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 160, "cost": 2086713, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 17090, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:10.849723+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 151, "cost": 2088643, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17090, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,090"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:17.815534+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 286, "proceeds": 5346334, "entry_price": 19090, "pnl": -114225, "pnl_pct": -1.89, "hold_from": "2026-07-30T09:04:06.862754+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,085"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,459"}]}
|
||||
{"ts": "2026-08-06T09:34:15.272349+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 26, "cost": 4992749, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 175344, "target": 216984, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "191,800 vs 180,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,140 / 180,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:12:15.074213+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 25, "cost": 4910736, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 175344, "target": 216984, "signals": [{"label": "손절선", "ok": true, "detail": "175,344 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,984"}, {"label": "추세(10일선)", "ok": true, "detail": "181,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
{"ts": "2026-08-10T09:00:14.888891+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 28, "cost": 3808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 154020, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,020"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
@@ -0,0 +1,202 @@
|
||||
{
|
||||
"cash": 22309155.60850004,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 27,
|
||||
"entry_price": 350037.037037037,
|
||||
"entry_at": "2026-07-21T12:06:01.164331+09:00",
|
||||
"stop": 318434,
|
||||
"target": 413243,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4980582.661409654,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"218150": {
|
||||
"code": "218150",
|
||||
"name": "미래생명자원",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 2548,
|
||||
"entry_price": 2036.565934065934,
|
||||
"entry_at": "2026-07-27T14:20:01.056080+09:00",
|
||||
"stop": 1775,
|
||||
"target": 2720,
|
||||
"peak": 2450,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 2,135 도달",
|
||||
"cur_price": 2080,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2595536.5029300014,
|
||||
"last_add_price": 1951
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 87,
|
||||
"entry_price": 119185.05747126437,
|
||||
"entry_at": "2026-07-29T09:02:02.221426+09:00",
|
||||
"stop": 111408,
|
||||
"target": 134739,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5213821.568625003,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 795,
|
||||
"entry_price": 6332.867924528302,
|
||||
"entry_at": "2026-07-30T09:04:06.866644+09:00",
|
||||
"stop": 5362,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2521548.49371356,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 653,
|
||||
"entry_price": 13159.923430321593,
|
||||
"entry_at": "2026-08-03T12:00:11.776417+09:00",
|
||||
"stop": 11874,
|
||||
"target": 15732,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4300842.818074627,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 23,
|
||||
"entry_price": 141495.65217391305,
|
||||
"entry_at": "2026-08-04T09:04:08.850905+09:00",
|
||||
"stop": 111689,
|
||||
"target": 201110,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,279 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1735775.3707943999,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 333,
|
||||
"entry_price": 13905.405405405405,
|
||||
"entry_at": "2026-08-05T09:18:09.783202+09:00",
|
||||
"stop": 11576,
|
||||
"target": 18564,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2325831.4188620616,
|
||||
"last_add_price": 14270
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 50,
|
||||
"entry_price": 194200.0,
|
||||
"entry_at": "2026-08-06T09:34:15.275495+09:00",
|
||||
"stop": 181408,
|
||||
"target": 219784,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4973576.381781252,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21450179.557000034,
|
||||
"closed_trades": 43,
|
||||
"wins": 3,
|
||||
"peak_equity": 101695667.93550003,
|
||||
"max_drawdown": 0.23379971074166161,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"035420": "2026-06-23",
|
||||
"403870": "2026-07-02",
|
||||
"095610": "2026-07-28",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"009150": "2026-07-06",
|
||||
"034730": "2026-07-08",
|
||||
"214450": "2026-07-14",
|
||||
"003490": "2026-07-07",
|
||||
"319660": "2026-07-23",
|
||||
"105560": "2026-07-20",
|
||||
"086790": "2026-07-21",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-08-03",
|
||||
"090850": "2026-08-05",
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944270+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.350984+09:00"
|
||||
}
|
||||
@@ -0,0 +1,126 @@
|
||||
{"ts": "2026-06-12T09:00:34.009437+09:00", "side": "BUY", "code": "035420", "name": "NAVER", "price": 232500, "qty": 14, "cost": 3255488, "path": "pullback", "reason": "눌림목 지정가 233,744 도달", "stop": 197616, "target": 302268, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "233,500 vs 224,820"}, {"label": "정배열(5>20)", "ok": true, "detail": "258,500 / 224,820"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "258,500 / 215,623"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+8.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -159 · 기 +1,154 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.99% (환산) vs 평균 2.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 304,000"}, {"label": "거래량 급증", "ok": false, "detail": "4,694,733 (환산) vs 평균 3,404,288"}, {"label": "회전율 급증", "ok": false, "detail": "2.99% (환산) vs 평균 2.17%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 233,744 (현재 233,500)"}]}
|
||||
{"ts": "2026-06-12T10:25:04.174047+09:00", "side": "BUY", "code": "035420", "name": "NAVER", "price": 244500, "qty": 13, "cost": 3178977, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 197616, "target": 302268, "signals": [{"label": "손절선", "ok": true, "detail": "197,616 (현재 244,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 302,268"}, {"label": "추세(20일선)", "ok": true, "detail": "225,370"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -116 · 기 +1,185"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 244,128"}]}
|
||||
{"ts": "2026-06-17T16:47:28.507097+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 47, "cost": 2956743, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 52447, "target": 83807, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.348139+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 326, "cost": 6247097, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 18100, "target": 21279, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:09.447545+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 326, "proceeds": 6123356, "entry_price": 19160, "pnl": -123741, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.348137+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,279"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T15:10:02.424604+09:00", "side": "SELL", "code": "035420", "name": "NAVER", "price": 203000, "qty": 27, "proceeds": 5470312, "entry_price": 238278, "pnl": -964153, "pnl_pct": -14.81, "hold_from": "2026-06-12T09:00:34.009427+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "203,394 (현재 203,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 308,046"}, {"label": "추세(20일선)", "ok": false, "detail": "231,595"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +408 · 기 -163"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-06-24T09:04:06.114453+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 52300, "qty": 47, "proceeds": 2453307, "entry_price": 62900, "pnl": -503437, "pnl_pct": -16.85, "hold_from": "2026-06-17T16:47:28.507089+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "52,447 (현재 52,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,807"}, {"label": "추세(20일선)", "ok": false, "detail": "52,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +711 · 기 -2,060"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,717"}]}
|
||||
{"ts": "2026-06-24T09:04:06.114580+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 17, "cost": 2664300, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 129363, "target": 211374, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.349711+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 199, "cost": 3437246, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 14804, "target": 22203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.781319+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 17, "cost": 2689803, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 130097, "target": 214407, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.898443+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 188, "cost": 3433395, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 14804, "target": 22203, "signals": [{"label": "손절선", "ok": true, "detail": "14,804 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:23.578154+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 15, "cost": 2686903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 130097, "target": 214407, "signals": [{"label": "손절선", "ok": true, "detail": "130,097 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,407"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:02:04.071867+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 63,881 도달", "stop": 43200, "target": 73200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,300 vs 52,382"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,980 / 52,382"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,980 / 49,672"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+15.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +406 · 기 -1,461 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.21% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,819,047 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "2.21% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,881 (현재 53,300)"}]}
|
||||
{"ts": "2026-06-26T09:00:05.688310+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-25T09:02:04.071865+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T10:14:04.059906+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 16, "cost": 2670801, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 129363, "target": 211374, "signals": [{"label": "손절선", "ok": true, "detail": "129,363 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,374"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.264617+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 4, "cost": 2980447, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 645871, "target": 943257, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.484808+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 4, "cost": 3112467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 645871, "target": 943257, "signals": [{"label": "손절선", "ok": true, "detail": "645,871 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 943,257"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:05.639912+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 44022, "target": 77857, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.209135+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 15, "cost": 5363304, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 325040, "target": 422420, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "357,000 vs 296,975"}, {"label": "정배열(5>20)", "ok": true, "detail": "317,600 / 296,975"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.309730+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 14, "cost": 5208781, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 325040, "target": 422420, "signals": [{"label": "손절선", "ok": true, "detail": "325,040 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 422,420"}, {"label": "추세(20일선)", "ok": true, "detail": "297,725"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T11:06:02.351611+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 212000, "qty": 32, "proceeds": 6770771, "entry_price": 167997, "pnl": 1394065, "pnl_pct": 26.19, "hold_from": "2026-06-24T09:46:04.781317+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "213,193 (현재 213,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "139,065"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -229 · 기 +300"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T10:18:03.830979+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1985000, "qty": 3, "cost": 5955893, "path": "pullback", "reason": "눌림목 지정가 1,994,011 도달", "stop": 1901000, "target": 2153000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,982,000 vs 1,967,800"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,038,800 / 1,967,800"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,038,800 / 1,295,483"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +337 · 기 +193 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.19% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": true, "detail": "3,133,469 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": true, "detail": "4.19% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,994,011 (현재 1,982,000)"}]}
|
||||
{"ts": "2026-07-02T10:34:04.117399+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 324, "cost": 6111557, "path": "pullback", "reason": "눌림목 지정가 19,970 도달", "stop": 17760, "target": 21060, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,970 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.053948+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 271, "cost": 6111967, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21060, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,060"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:22:01.962941+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 595, "proceeds": 11282955, "entry_price": 20541, "pnl": -940568, "pnl_pct": -7.5, "hold_from": "2026-07-02T10:34:04.117397+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,371 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,881"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T12:42:02.217684+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 15250, "qty": 387, "proceeds": 5890242, "entry_price": 17751, "pnl": -980399, "pnl_pct": -14.09, "hold_from": "2026-06-24T09:12:05.349710+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "15,280 (현재 15,280)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,692"}, {"label": "추세(20일선)", "ok": true, "detail": "12,814"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,920 · 기 +434"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:28:02.056486+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 134800, "qty": 33, "proceeds": 4439726, "entry_price": 161645, "pnl": -895375, "pnl_pct": -16.61, "hold_from": "2026-06-24T09:04:06.114579+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "134,769 (현재 134,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,398"}, {"label": "추세(20일선)", "ok": true, "detail": "120,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.183065+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:05.639905+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 77,857"}, {"label": "추세(20일선)", "ok": false, "detail": "51,912"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:00:08.430585+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1895000, "qty": 3, "proceeds": 5673914, "entry_price": 1985000, "pnl": -281979, "pnl_pct": -4.53, "hold_from": "2026-07-02T10:18:03.830976+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,894,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,153,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +132 · 기 +129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,084,495"}]}
|
||||
{"ts": "2026-07-03T09:02:04.917379+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 163,875 도달", "stop": 104263, "target": 191674, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,300 vs 120,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,680 / 120,505"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 163,875 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:02:04.917552+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14660, "qty": 173, "cost": 2536560, "path": "pullback", "reason": "눌림목 지정가 17,179 도달", "stop": 11914, "target": 20152, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,680 vs 12,784"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,844 / 12,784"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,844 / 11,456"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,591 · 기 +253 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.92% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "991,593 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.92% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,179 (현재 14,680)"}]}
|
||||
{"ts": "2026-07-03T09:10:03.668540+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 656000, "qty": 8, "proceeds": 5237766, "entry_price": 761500, "pnl": -855147, "pnl_pct": -13.85, "hold_from": "2026-06-29T11:36:01.264615+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "662,371 (현재 657,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 959,757"}, {"label": "추세(20일선)", "ok": false, "detail": "672,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -51 · 기 +3"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:50:01.665084+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 328500, "qty": 29, "proceeds": 9507923, "entry_price": 364500, "pnl": -1064162, "pnl_pct": -9.88, "hold_from": "2026-07-01T09:06:03.209133+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,504 (현재 331,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,491"}, {"label": "추세(20일선)", "ok": true, "detail": "295,675"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -127 · 기 +294"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.770189+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 308, "cost": 5865200, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17921, "target": 21277, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:08.148622+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1993000, "qty": 2, "cost": 3986598, "path": "pullback", "reason": "눌림목 지정가 1,995,439 도달", "stop": 1901000, "target": 2177000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,975,000 vs 1,967,450"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,037,400 / 1,967,450"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,037,400 / 1,295,367"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +151 · 기 +57 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.82% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": false, "detail": "615,080 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "0.82% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,995,439 (현재 1,975,000)"}]}
|
||||
{"ts": "2026-07-06T09:00:08.151514+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 690000, "qty": 5, "cost": 3450518, "path": "pullback", "reason": "눌림목 지정가 747,129 도달", "stop": 604000, "target": 862000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "695,000 vs 674,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "757,000 / 674,200"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "757,000 / 529,783"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -81 · 기 +57 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.17% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "124,240 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.17% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 747,129 (현재 695,000)"}]}
|
||||
{"ts": "2026-07-06T09:34:02.056068+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29100, "qty": 200, "cost": 5820873, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 27052, "target": 33195, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "29,100 vs 25,960"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,160 / 25,960"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,160 / 25,220"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -142 · 기 +2,052 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.31% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "4,788,480 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.31% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-06T10:06:01.980443+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 2, "proceeds": 3792590, "entry_price": 1993000, "pnl": -194008, "pnl_pct": -4.67, "hold_from": "2026-07-06T09:00:08.148616+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,177,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,089,780"}]}
|
||||
{"ts": "2026-07-07T09:12:07.264150+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155900, "qty": 16, "cost": 2494774, "path": "pullback", "reason": "눌림목 지정가 158,314 도달", "stop": 127872, "target": 211957, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,800 vs 136,205"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,800 / 136,205"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,800 / 99,713"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -197 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.33% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "645,567 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.33% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,314 (현재 155,800)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.178098+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 173, "proceeds": 2111664, "entry_price": 14660, "pnl": -424896, "pnl_pct": -16.58, "hold_from": "2026-07-03T09:02:04.917551+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,914 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,152"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,662"}]}
|
||||
{"ts": "2026-07-07T14:08:24.985266+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26600, "qty": 200, "proceeds": 5309626, "entry_price": 29100, "pnl": -511247, "pnl_pct": -8.59, "hold_from": "2026-07-06T09:34:02.056065+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "27,052 (현재 26,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 33,195"}, {"label": "추세(20일선)", "ok": true, "detail": "25,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -532 · 기 +3,040"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,724"}]}
|
||||
{"ts": "2026-07-07T14:08:27.625222+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 11, "cost": 2016602, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104263, "target": 191674, "signals": [{"label": "손절선", "ok": true, "detail": "104,263 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,674"}, {"label": "추세(20일선)", "ok": true, "detail": "120,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 141,825"}]}
|
||||
{"ts": "2026-07-07T14:08:27.626449+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 14, "cost": 2478372, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 127872, "target": 211957, "signals": [{"label": "손절선", "ok": true, "detail": "127,872 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,957"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,142"}]}
|
||||
{"ts": "2026-07-07T14:08:30.307609+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 282, "cost": 5852378, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17921, "target": 21277, "signals": [{"label": "손절선", "ok": true, "detail": "17,921 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,277"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-07T14:08:30.308497+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 604000, "target": 862000, "signals": [{"label": "손절선", "ok": true, "detail": "604,000 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 862,000"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 721,777"}]}
|
||||
{"ts": "2026-07-08T09:00:17.141650+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 27, "proceeds": 2918398, "entry_price": 153730, "pnl": -1232925, "pnl_pct": -29.55, "hold_from": "2026-07-03T09:02:04.917377+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,455 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 204,279"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:17.142747+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 137900, "qty": 30, "proceeds": 4128933, "entry_price": 165747, "pnl": -844213, "pnl_pct": -16.8, "hold_from": "2026-07-07T09:12:07.264149+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "138,020 (현재 137,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 221,200"}, {"label": "추세(20일선)", "ok": true, "detail": "135,310"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +458 · 기 -572"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:17.143299+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 9, "proceeds": 5407435, "entry_price": 745556, "pnl": -1303572, "pnl_pct": -19.25, "hold_from": "2026-07-06T09:00:08.151507+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "650,225 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 936,217"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:12:05.961489+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18900, "qty": 590, "proceeds": 11129256, "entry_price": 19857, "pnl": -588322, "pnl_pct": -4.82, "hold_from": "2026-07-03T10:24:02.770188+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,903 (현재 18,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,766"}, {"label": "추세(20일선)", "ok": true, "detail": "18,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.868099+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 34, "cost": 5478222, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 167300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.962983+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 34, "proceeds": 5347951, "entry_price": 161100, "pnl": -130270, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.868097+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 167,300"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.457277+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 144400, "qty": 14, "cost": 2021903, "path": "pullback", "reason": "눌림목 지정가 156,479 도달", "stop": 113618, "target": 205964, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "144,400 vs 135,635"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,520 / 135,635"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,520 / 99,523"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+42.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +503 · 기 -501 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.94% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "569,187 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.94% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,479 (현재 144,400)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.457421+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 290, "cost": 5542731, "path": "pullback", "reason": "눌림목 지정가 20,021 도달", "stop": 18017, "target": 21296, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,021 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.457549+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 35, "cost": 5541331, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 158900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:12:02.503058+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 35, "proceeds": 5480792, "entry_price": 158300, "pnl": -60540, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.457547+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.452342+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 39, "cost": 5148772, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120761, "target": 154477, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,900 vs 108,920"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,560 / 108,920"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:00:10.854533+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158000, "qty": 13, "cost": 2054308, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113618, "target": 205964, "signals": [{"label": "손절선", "ok": true, "detail": "113,618 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 205,964"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +452 · 기 -360"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,000"}]}
|
||||
{"ts": "2026-07-10T09:00:10.855604+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 33, "cost": 5412812, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 176000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.614093+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 29, "cost": 5391909, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 171311, "target": 215077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.469025+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 179, "cost": 2296914, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 17770, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T10:14:04.432989+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 173600, "qty": 32, "cost": 5556033, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 176000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 173,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,470"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +205 · 기 -155"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 173,548"}]}
|
||||
{"ts": "2026-07-10T11:16:02.469865+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 166, "cost": 2299445, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 17770, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,770"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-10T12:14:02.666464+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 186600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "126,200 vs 120,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "137,260 / 120,150"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:09.888217+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 38, "cost": 5202980, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120761, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "120,761 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:12:04.294393+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 15, "cost": 5123268, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 310647, "target": 403206, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "341,000 vs 296,175"}, {"label": "정배열(5>20)", "ok": true, "detail": "314,400 / 296,175"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,400 / 305,433"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.90% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "197,687 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.90% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:26:03.405300+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 186600, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,600"}, {"label": "추세(20일선)", "ok": true, "detail": "120,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:36:02.268298+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 29, "cost": 5539831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 171311, "target": 215077, "signals": [{"label": "손절선", "ok": true, "detail": "171,311 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,077"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.349246+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 65, "proceeds": 12189684, "entry_price": 168726, "pnl": 1220839, "pnl_pct": 11.36, "hold_from": "2026-07-10T09:00:10.855598+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-14T10:20:06.141551+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 310500, "qty": 15, "proceeds": 4648418, "entry_price": 341500, "pnl": -474851, "pnl_pct": -9.08, "hold_from": "2026-07-13T09:12:04.294392+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "310,647 (현재 310,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 403,206"}, {"label": "추세(20일선)", "ok": true, "detail": "294,650"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -50 · 기 +82"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,713"}]}
|
||||
{"ts": "2026-07-16T09:00:08.249132+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 27, "proceeds": 5631996, "entry_price": 150948, "pnl": 1555785, "pnl_pct": 38.46, "hold_from": "2026-07-09T09:02:04.457275+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "138,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:08.249940+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 290, "proceeds": 5377693, "entry_price": 19110, "pnl": -165038, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.457419+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,296"}, {"label": "추세(20일선)", "ok": false, "detail": "18,832"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-16T09:38:02.508846+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 138900, "qty": 40, "cost": 5556833, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 128529, "target": 159642, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "138,800 vs 119,185"}, {"label": "정배열(5>20)", "ok": true, "detail": "124,360 / 119,185"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "124,360 / 118,712"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+40.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +71 · 기 +417 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.76% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,097,713 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.76% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-20T09:04:02.871730+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 173000, "qty": 58, "proceeds": 10014434, "entry_price": 188450, "pnl": -917306, "pnl_pct": -8.2, "hold_from": "2026-07-10T09:28:02.614091+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "173,293 (현재 173,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 218,763"}, {"label": "추세(20일선)", "ok": true, "detail": "159,270"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -332 · 기 +291"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.310171+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 345, "proceeds": 3550014, "entry_price": 13321, "pnl": -1046345, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.469023+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,242"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T09:06:03.147127+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 127800, "qty": 40, "proceeds": 5102032, "entry_price": 138900, "pnl": -454802, "pnl_pct": -7.99, "hold_from": "2026-07-16T09:38:02.508844+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,529 (현재 127,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 159,642"}, {"label": "추세(20일선)", "ok": true, "detail": "118,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +121 · 기 +190"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 142,068"}]}
|
||||
{"ts": "2026-07-21T10:12:01.040324+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 33, "cost": 5511827, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 185000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.164333+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 14, "cost": 4823723, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 405884, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:06.709714+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 31, "cost": 5506426, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 185000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 185,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.813458+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 56, "cost": 5556033, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 113400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.734253+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 64, "proceeds": 10047569, "entry_price": 172134, "pnl": -970684, "pnl_pct": -8.62, "hold_from": "2026-07-21T10:12:01.040322+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 200,403"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.419864+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 197, "cost": 2764325, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11815, "target": 18460, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-22T15:04:00.990876+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158100, "qty": 15, "cost": 2371856, "path": "pullback", "reason": "눌림목 지정가 158,107 도달", "stop": 129761, "target": 214778, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -311 · 기 +22 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.02% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "971,360 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "5.02% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,107 (현재 158,000)"}]}
|
||||
{"ts": "2026-07-23T09:00:22.456369+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 34, "cost": 5444217, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 164300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.406594+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 34, "proceeds": 5354738, "entry_price": 160100, "pnl": -89479, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:22.456363+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.277794+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 290, "cost": 5467320, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 21030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.509013+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 54, "cost": 4763514, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 80223, "target": 104155, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,200 vs 75,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,000 / 75,070"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T12:18:01.539249+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 54, "cost": 5568235, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 113400, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,400"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.589476+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 13, "cost": 4628694, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 405884, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 405,884"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.491410+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 53, "cost": 4818423, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 80223, "target": 104155, "signals": [{"label": "손절선", "ok": true, "detail": "80,223 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,155"}, {"label": "추세(20일선)", "ok": true, "detail": "75,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:05.632693+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.666463+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "102,302 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,963"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:05.633650+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 290, "proceeds": 5421108, "entry_price": 18850, "pnl": -46212, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.277793+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,030"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:28:04.944506+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 191, "cost": 2771826, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11815, "target": 18460, "signals": [{"label": "손절선", "ok": true, "detail": "11,815 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,460"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-27T09:02:06.223077+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 289, "cost": 5520728, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 18023, "target": 21254, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.223286+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 533, "cost": 3982107, "path": "pullback", "reason": "눌림목 지정가 7,910 도달", "stop": 6645, "target": 9119, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,910 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.082537+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 503, "cost": 3979327, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6645, "target": 9119, "signals": [{"label": "손절선", "ok": true, "detail": "6,645 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,119"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T13:40:01.090664+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6780, "qty": 1036, "proceeds": 7010383, "entry_price": 7684, "pnl": -951051, "pnl_pct": -11.76, "hold_from": "2026-07-27T09:02:06.223284+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,854 (현재 6,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,344"}, {"label": "추세(20일선)", "ok": true, "detail": "4,841"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T14:20:01.056082+09:00", "side": "BUY", "code": "218150", "name": "미래생명자원", "price": 2130, "qty": 1218, "cost": 2594729, "path": "pullback", "reason": "눌림목 지정가 2,135 도달", "stop": 1775, "target": 2840, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "2,130 vs 2,030"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,415 / 2,030"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,415 / 2,265"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -118 · 기 +4 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.22% (환산) vs 평균 15.95% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 3,180"}, {"label": "거래량 급증", "ok": false, "detail": "1,270,804 (환산) vs 평균 3,257,264"}, {"label": "회전율 급증", "ok": false, "detail": "6.22% (환산) vs 평균 15.95%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 2,135 (현재 2,130)"}]}
|
||||
{"ts": "2026-07-28T09:00:15.827850+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 126200, "qty": 15, "proceeds": 1889309, "entry_price": 158100, "pnl": -482547, "pnl_pct": -20.18, "hold_from": "2026-07-22T15:04:00.990875+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "129,761 (현재 128,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,778"}, {"label": "추세(20일선)", "ok": false, "detail": "134,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 168,554"}]}
|
||||
{"ts": "2026-07-28T09:00:15.829236+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 495, "cost": 3356603, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5916, "target": 8509, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:02:04.745721+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11920, "qty": 388, "proceeds": 4615941, "entry_price": 14266, "pnl": -920209, "pnl_pct": -16.45, "hold_from": "2026-07-22T14:18:05.419863+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,984 (현재 11,960)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,831"}, {"label": "추세(20일선)", "ok": false, "detail": "12,673"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 -61"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:10:01.738088+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 473, "cost": 3358804, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 8509, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,509"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-29T09:02:02.221428+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 44, "cost": 5188378, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 131300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.460893+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 43, "cost": 5182277, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 131300, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,300"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:08.691208+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 292, "cost": 5534230, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 18023, "target": 21254, "signals": [{"label": "손절선", "ok": true, "detail": "18,023 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,254"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:08.691404+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 77, "proceeds": 9882891, "entry_price": 134418, "pnl": -468862, "pnl_pct": -4.33, "hold_from": "2026-07-09T09:36:03.452341+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "122,826 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,603"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:09.102125+09:00", "side": "BUY", "code": "218150", "name": "미래생명자원", "price": 1951, "qty": 1330, "cost": 2595219, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 1775, "target": 2840, "signals": [{"label": "손절선", "ok": true, "detail": "1,775 (현재 2,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,840"}, {"label": "추세(20일선)", "ok": true, "detail": "2,005"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +40 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,287"}]}
|
||||
{"ts": "2026-07-29T09:28:01.378937+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 819, "cost": 5234195, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 7174, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:42:05.407176+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 819, "proceeds": 4888070, "entry_price": 6390, "pnl": -346125, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.378936+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(20일선)", "ok": true, "detail": "5,338"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T11:18:04.419939+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6000, "qty": 968, "proceeds": 5796674, "entry_price": 6936, "pnl": -918733, "pnl_pct": -13.5, "hold_from": "2026-07-28T09:00:15.829228+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,040 (현재 6,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,729"}, {"label": "추세(20일선)", "ok": true, "detail": "4,803"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T09:04:06.866646+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 411, "cost": 2519808, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 5127, "target": 8135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:24:06.917510+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 37, "cost": 4877331, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 154020, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T11:58:07.822065+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 110, "proceeds": 10067330, "entry_price": 101115, "pnl": -1056938, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.813457+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,144"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:04:07.266662+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 107, "proceeds": 7379282, "entry_price": 89537, "pnl": -2202655, "pnl_pct": -22.83, "hold_from": "2026-07-23T09:50:01.509012+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,303 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,006"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:06.413012+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 384, "cost": 2515577, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-08-03T09:34:07.943956+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 120300, "qty": 37, "proceeds": 4442420, "entry_price": 131800, "pnl": -434911, "pnl_pct": -8.73, "hold_from": "2026-07-30T09:24:06.917508+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,690 (현재 120,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,020"}, {"label": "추세(20일선)", "ok": true, "detail": "108,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,311"}]}
|
||||
{"ts": "2026-08-03T09:44:09.371424+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6120, "qty": 804, "cost": 4921218, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5752, "target": 6857, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 5,345"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,690 / 5,345"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,690 / 5,618"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 +5 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.61% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "132,260 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.61% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-03T12:00:11.776427+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 333, "cost": 4299675, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 15304, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.723448+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 320, "cost": 4295044, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:08.850906+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 12, "cost": 1631045, "path": "pullback", "reason": "눌림목 지정가 156,279 도달", "stop": 104818, "target": 198064, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,279 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-05T09:00:13.753117+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 11, "cost": 1623844, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104818, "target": 198064, "signals": [{"label": "손절선", "ok": true, "detail": "104,818 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 198,064"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-05T09:02:12.586918+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 804, "proceeds": 4573864, "entry_price": 6120, "pnl": -347355, "pnl_pct": -6.86, "hold_from": "2026-08-03T09:44:09.371421+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,752 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,857"}, {"label": "추세(20일선)", "ok": true, "detail": "5,326"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,233"}]}
|
||||
{"ts": "2026-08-05T09:18:09.783204+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13560, "qty": 171, "cost": 2319108, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 11230, "target": 18219, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,540 vs 12,752"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,456 / 12,752"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,456 / 13,275"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "708,253 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.18% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,540)"}]}
|
||||
{"ts": "2026-08-05T10:00:11.361876+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14270, "qty": 162, "cost": 2312087, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11230, "target": 18219, "signals": [{"label": "손절선", "ok": true, "detail": "11,230 (현재 14,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,219"}, {"label": "추세(20일선)", "ok": true, "detail": "12,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,337"}]}
|
||||
{"ts": "2026-08-06T09:00:17.919075+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 581, "proceeds": 10860910, "entry_price": 19025, "pnl": -194048, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.223075+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,070 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,933"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:34:15.275497+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 25, "cost": 4800720, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 179508, "target": 216984, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "191,800 vs 177,680"}, {"label": "정배열(5>20)", "ok": true, "detail": "186,140 / 177,680"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:12:15.076918+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 25, "cost": 4910736, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 179508, "target": 216984, "signals": [{"label": "손절선", "ok": true, "detail": "179,508 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,984"}, {"label": "추세(20일선)", "ok": true, "detail": "177,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
@@ -0,0 +1,198 @@
|
||||
{
|
||||
"cash": 12090206.1725,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 28,
|
||||
"entry_price": 350250.0,
|
||||
"entry_at": "2026-07-21T12:06:01.166187+09:00",
|
||||
"stop": 318647,
|
||||
"target": 413456,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5156172.079657566,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 89,
|
||||
"entry_price": 119185.39325842696,
|
||||
"entry_at": "2026-07-29T09:02:02.224637+09:00",
|
||||
"stop": 111408,
|
||||
"target": 134740,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5368293.320125001,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 123226.50602409638,
|
||||
"entry_at": "2026-07-30T09:04:07.455785+09:00",
|
||||
"stop": 113273,
|
||||
"target": 143133,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5180051.180047499,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 819,
|
||||
"entry_price": 6333.076923076923,
|
||||
"entry_at": "2026-07-30T09:04:07.457322+09:00",
|
||||
"stop": 5363,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2599049.62031184,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 677,
|
||||
"entry_price": 13160.10339734121,
|
||||
"entry_at": "2026-08-03T12:00:11.789224+09:00",
|
||||
"stop": 11874,
|
||||
"target": 15732,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4464385.527789056,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 98,
|
||||
"entry_price": 91918.36734693877,
|
||||
"entry_at": "2026-08-04T09:50:09.564914+09:00",
|
||||
"stop": 83395,
|
||||
"target": 108966,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4532723.825333739,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 350,
|
||||
"entry_price": 13778.028571428571,
|
||||
"entry_at": "2026-08-06T09:00:18.926753+09:00",
|
||||
"stop": 11541,
|
||||
"target": 18253,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,975 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2418915.1277636583,
|
||||
"last_add_price": 14290
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 53,
|
||||
"entry_price": 194158.49056603774,
|
||||
"entry_at": "2026-08-06T09:34:15.869489+09:00",
|
||||
"stop": 181367,
|
||||
"target": 219742,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5253404.499,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -19040274.94900003,
|
||||
"closed_trades": 36,
|
||||
"wins": 2,
|
||||
"peak_equity": 101690998.13850003,
|
||||
"max_drawdown": 0.2049465569225206,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-08-06",
|
||||
"403870": "2026-07-02",
|
||||
"095610": "2026-07-28",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"034730": "2026-07-03",
|
||||
"214450": "2026-07-14",
|
||||
"055550": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-08-03",
|
||||
"090850": "2026-08-06",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944290+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.361188+09:00"
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{"ts": "2026-06-17T11:15:02.310687+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121254, "target": 150191, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:28.529957+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 47, "cost": 2956743, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 52447, "target": 83807, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "62,800 vs 53,510"}, {"label": "정배열(5>10)", "ok": true, "detail": "59,880 / 53,510"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.351442+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 18100, "target": 21279, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-19T13:32:02.797519+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 121100, "qty": 47, "proceeds": 5680601, "entry_price": 130900, "pnl": -472622, "pnl_pct": -7.49, "hold_from": "2026-06-17T11:15:02.310686+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,254 (현재 121,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(10일선)", "ok": true, "detail": "119,670"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +531 · 기 -129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,178"}]}
|
||||
{"ts": "2026-06-23T09:00:09.548616+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.351441+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,279"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T09:04:35.878315+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121000, "qty": 49, "cost": 5929889, "path": "pullback", "reason": "눌림목 지정가 122,636 도달", "stop": 111004, "target": 140992, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "121,200 vs 119,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,840 / 119,680"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-14.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +310 · 기 -361 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+30%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.12% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "324,680 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.12% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,636 (현재 121,200)"}]}
|
||||
{"ts": "2026-06-24T09:04:06.117082+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 52300, "qty": 47, "proceeds": 2453307, "entry_price": 62900, "pnl": -503437, "pnl_pct": -16.85, "hold_from": "2026-06-17T16:47:28.529950+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "52,447 (현재 52,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,807"}, {"label": "추세(10일선)", "ok": false, "detail": "52,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +711 · 기 -2,060"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,717"}]}
|
||||
{"ts": "2026-06-24T09:04:06.117214+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 18, "cost": 2821023, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 129363, "target": 211374, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "156,200 vs 128,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,260 / 128,170"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.351845+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 199, "cost": 3437246, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 14804, "target": 22203, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "17,280 vs 13,750"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,364 / 13,750"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.783231+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 17, "cost": 2689803, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 130097, "target": 214407, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "158,000 vs 153,380"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,240 / 153,380"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.900560+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 188, "cost": 3433395, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 14804, "target": 22203, "signals": [{"label": "손절선", "ok": true, "detail": "14,804 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(10일선)", "ok": true, "detail": "13,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:23.676126+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 15, "cost": 2686903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 130097, "target": 214407, "signals": [{"label": "손절선", "ok": true, "detail": "130,097 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,407"}, {"label": "추세(10일선)", "ok": true, "detail": "155,410"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:02:04.073952+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 63,881 도달", "stop": 43200, "target": 73200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,300 vs 52,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "57,980 / 52,560"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,980 / 49,672"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+15.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +406 · 기 -1,461 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.21% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,819,047 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "2.21% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,881 (현재 53,300)"}]}
|
||||
{"ts": "2026-06-26T09:00:05.786723+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-25T09:02:04.073951+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,200"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T10:06:05.265619+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 110600, "qty": 49, "proceeds": 5408832, "entry_price": 121000, "pnl": -521057, "pnl_pct": -8.6, "hold_from": "2026-06-23T09:04:35.878312+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "111,004 (현재 110,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 140,992"}, {"label": "추세(10일선)", "ok": false, "detail": "118,630"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +34 · 기 -271"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,653"}]}
|
||||
{"ts": "2026-06-26T10:14:04.062152+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 16, "cost": 2670801, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 129363, "target": 211374, "signals": [{"label": "손절선", "ok": true, "detail": "129,363 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,374"}, {"label": "추세(10일선)", "ok": true, "detail": "129,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.266385+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 4, "cost": 2980447, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 645871, "target": 943257, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "744,000 vs 735,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "766,800 / 735,600"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.486781+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 4, "cost": 3112467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 645871, "target": 943257, "signals": [{"label": "손절선", "ok": true, "detail": "645,871 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 943,257"}, {"label": "추세(10일선)", "ok": true, "detail": "739,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:05.752645+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 44022, "target": 77857, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.211367+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 15, "cost": 5363304, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 325040, "target": 422420, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "357,000 vs 307,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "317,600 / 307,050"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.311832+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 14, "cost": 5208781, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 325040, "target": 422420, "signals": [{"label": "손절선", "ok": true, "detail": "325,040 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 422,420"}, {"label": "추세(10일선)", "ok": true, "detail": "308,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T11:06:02.353871+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 212000, "qty": 32, "proceeds": 6770771, "entry_price": 167997, "pnl": 1394065, "pnl_pct": 26.19, "hold_from": "2026-06-24T09:46:04.783230+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "213,193 (현재 213,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "158,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -229 · 기 +300"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T10:18:03.834928+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 45, "cost": 5499825, "path": "pullback", "reason": "눌림목 지정가 122,215 도달", "stop": 111572, "target": 143456, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "122,000 vs 119,760"}, {"label": "정배열(5>10)", "ok": true, "detail": "121,000 / 119,760"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "121,000 / 118,432"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +22 · 기 -44 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,199,199 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,215 (현재 122,000)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.952671+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 322, "cost": 6106036, "path": "pullback", "reason": "눌림목 지정가 19,970 도달", "stop": 17790, "target": 21300, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,970 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.056072+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 271, "cost": 6111967, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17790, "target": 21300, "signals": [{"label": "손절선", "ok": true, "detail": "17,790 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,300"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:22:01.965010+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 593, "proceeds": 11245029, "entry_price": 20601, "pnl": -972973, "pnl_pct": -7.77, "hold_from": "2026-07-02T10:40:02.952669+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,431 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,941"}, {"label": "추세(10일선)", "ok": true, "detail": "18,958"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T12:42:02.220043+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 15250, "qty": 387, "proceeds": 5890242, "entry_price": 17751, "pnl": -980399, "pnl_pct": -14.09, "hold_from": "2026-06-24T09:12:05.351843+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "15,280 (현재 15,280)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,692"}, {"label": "추세(10일선)", "ok": true, "detail": "13,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,920 · 기 +434"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:30:02.062791+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 134100, "qty": 34, "proceeds": 4550509, "entry_price": 161500, "pnl": -941314, "pnl_pct": -16.97, "hold_from": "2026-06-24T09:04:06.117213+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "134,624 (현재 134,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,253"}, {"label": "추세(10일선)", "ok": true, "detail": "125,960"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.185101+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:05.752638+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 77,857"}, {"label": "추세(10일선)", "ok": false, "detail": "51,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:02:04.920019+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 163,875 도달", "stop": 104263, "target": 191674, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,300 vs 125,880"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,680 / 125,880"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 163,875 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:02:04.920417+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14660, "qty": 173, "cost": 2536560, "path": "pullback", "reason": "눌림목 지정가 17,179 도달", "stop": 11914, "target": 20152, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,680 vs 13,490"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,844 / 13,490"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,844 / 11,456"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,591 · 기 +253 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.92% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "991,593 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.92% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,179 (현재 14,680)"}]}
|
||||
{"ts": "2026-07-03T09:10:03.670622+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 656000, "qty": 8, "proceeds": 5237766, "entry_price": 761500, "pnl": -855147, "pnl_pct": -13.85, "hold_from": "2026-06-29T11:36:01.266384+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "662,371 (현재 657,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 959,757"}, {"label": "추세(10일선)", "ok": false, "detail": "726,900"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -51 · 기 +3"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:50:01.667559+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 328500, "qty": 29, "proceeds": 9507923, "entry_price": 364500, "pnl": -1064162, "pnl_pct": -9.88, "hold_from": "2026-07-01T09:06:03.211365+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,504 (현재 331,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,491"}, {"label": "추세(10일선)", "ok": true, "detail": "304,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -127 · 기 +294"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:16:02.530929+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 126200, "qty": 44, "cost": 5553633, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111572, "target": 143456, "signals": [{"label": "손절선", "ok": true, "detail": "111,572 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 143,456"}, {"label": "추세(10일선)", "ok": true, "detail": "120,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +278"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 125,493"}]}
|
||||
{"ts": "2026-07-03T10:24:02.772093+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 309, "cost": 5884243, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17921, "target": 21277, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-07T09:12:07.266482+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155900, "qty": 16, "cost": 2494774, "path": "pullback", "reason": "눌림목 지정가 158,314 도달", "stop": 127872, "target": 211957, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,800 vs 153,160"}, {"label": "정배열(5>10)", "ok": true, "detail": "171,800 / 153,160"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,800 / 99,713"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -197 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.33% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "645,567 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.33% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,314 (현재 155,800)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.180568+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 173, "proceeds": 2111664, "entry_price": 14660, "pnl": -424896, "pnl_pct": -16.58, "hold_from": "2026-07-03T09:02:04.920416+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,914 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,152"}, {"label": "추세(10일선)", "ok": false, "detail": "13,245"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,662"}]}
|
||||
{"ts": "2026-07-07T14:08:32.989792+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 11, "cost": 2016602, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104263, "target": 191674, "signals": [{"label": "손절선", "ok": true, "detail": "104,263 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,674"}, {"label": "추세(10일선)", "ok": true, "detail": "123,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 141,825"}]}
|
||||
{"ts": "2026-07-07T14:08:32.992041+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 14, "cost": 2478372, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 127872, "target": 211957, "signals": [{"label": "손절선", "ok": true, "detail": "127,872 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,957"}, {"label": "추세(10일선)", "ok": true, "detail": "148,710"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,142"}]}
|
||||
{"ts": "2026-07-07T14:08:32.992753+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 283, "cost": 5873131, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17921, "target": 21277, "signals": [{"label": "손절선", "ok": true, "detail": "17,921 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,277"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:17.244123+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 27, "proceeds": 2918398, "entry_price": 153730, "pnl": -1232925, "pnl_pct": -29.55, "hold_from": "2026-07-03T09:02:04.920018+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,455 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 204,279"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:17.245316+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 137900, "qty": 30, "proceeds": 4128933, "entry_price": 165747, "pnl": -844213, "pnl_pct": -16.8, "hold_from": "2026-07-07T09:12:07.266481+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "138,020 (현재 137,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 221,200"}, {"label": "추세(10일선)", "ok": false, "detail": "151,370"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +458 · 기 -572"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:12:05.963550+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18900, "qty": 592, "proceeds": 11166982, "entry_price": 19857, "pnl": -590392, "pnl_pct": -4.82, "hold_from": "2026-07-03T10:24:02.772092+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,903 (현재 18,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,766"}, {"label": "추세(10일선)", "ok": false, "detail": "18,938"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:02:04.459886+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 297, "cost": 5676521, "path": "pullback", "reason": "눌림목 지정가 20,021 도달", "stop": 18017, "target": 21296, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,070 vs 18,955"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,600 / 18,955"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,021 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:36:03.454534+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 40, "cost": 5280792, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120761, "target": 154477, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "131,900 vs 108,660"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,560 / 108,660"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:00:10.959018+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158000, "qty": 15, "cost": 2370356, "path": "pullback", "reason": "눌림목 지정가 157,800 도달", "stop": 129200, "target": 215600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "157,000 vs 153,280"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,040 / 153,280"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,040 / 99,733"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+53.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +452 · 기 -360 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.95% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "763,807 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.95% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 157,800 (현재 157,000)"}]}
|
||||
{"ts": "2026-07-10T09:58:09.974240+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 168200, "qty": 14, "cost": 2355153, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 129200, "target": 215600, "signals": [{"label": "손절선", "ok": true, "detail": "129,200 (현재 168,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,600"}, {"label": "추세(10일선)", "ok": true, "detail": "154,390"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +452 · 기 -360"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,600"}]}
|
||||
{"ts": "2026-07-10T11:06:06.467292+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 151, "cost": 2062969, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10621, "target": 19737, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.668438+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 186600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:09.988994+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 39, "cost": 5339901, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120761, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "120,761 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:12:04.296873+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 15, "cost": 5123268, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 310647, "target": 403206, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "341,000 vs 305,450"}, {"label": "정배열(5>10)", "ok": true, "detail": "314,400 / 305,450"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,400 / 305,433"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.90% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "197,687 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.90% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:26:03.407256+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 186600, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,600"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T10:04:06.408909+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 113100, "qty": 51, "cost": 5768965, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 104723, "target": 129854, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "113,050 vs 100,265"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,790 / 100,265"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,790 / 96,676"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+31.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -368 · 기 +1,005 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.71% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "3,366,381 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.71% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-14T10:20:06.143905+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 310500, "qty": 15, "proceeds": 4648418, "entry_price": 341500, "pnl": -474851, "pnl_pct": -9.08, "hold_from": "2026-07-13T09:12:04.296871+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "310,647 (현재 310,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 403,206"}, {"label": "추세(10일선)", "ok": true, "detail": "302,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -50 · 기 +82"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,713"}]}
|
||||
{"ts": "2026-07-16T09:00:08.347687+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 29, "proceeds": 6049181, "entry_price": 162924, "pnl": 1323672, "pnl_pct": 28.28, "hold_from": "2026-07-10T09:00:10.959008+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "158,280"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:08.349387+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 297, "proceeds": 5507499, "entry_price": 19110, "pnl": -169022, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.459884+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,296"}, {"label": "추세(10일선)", "ok": false, "detail": "18,904"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-20T09:02:02.272710+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 104000, "qty": 51, "proceeds": 5293657, "entry_price": 113100, "pnl": -475308, "pnl_pct": -8.05, "hold_from": "2026-07-13T10:04:06.408908+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "104,723 (현재 104,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,854"}, {"label": "추세(10일선)", "ok": true, "detail": "99,380"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +265"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 115,714"}]}
|
||||
{"ts": "2026-07-20T10:50:03.214952+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10600, "qty": 151, "proceeds": 1597479, "entry_price": 13660, "pnl": -465491, "pnl_pct": -22.4, "hold_from": "2026-07-10T11:06:06.467291+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,621 (현재 10,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,737"}, {"label": "추세(10일선)", "ok": false, "detail": "12,043"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -893 · 기 +516"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,615"}]}
|
||||
{"ts": "2026-07-21T12:06:01.166188+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 14, "cost": 4823723, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 405884, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "344,500 vs 305,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "315,100 / 305,800"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T14:18:05.421715+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 206, "cost": 2890614, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11815, "target": 18460, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,020 vs 12,975"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,552 / 12,975"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-22T15:04:00.992935+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158100, "qty": 16, "cost": 2529979, "path": "pullback", "reason": "눌림목 지정가 158,107 도달", "stop": 129761, "target": 214778, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "158,000 vs 153,380"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,240 / 153,380"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -311 · 기 +22 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.02% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "971,360 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "5.02% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,107 (현재 158,000)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.510936+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 57, "cost": 5028154, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 80223, "target": 104155, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,200 vs 80,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,000 / 80,900"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:24:01.500387+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 152100, "qty": 16, "proceeds": 2428854, "entry_price": 158100, "pnl": -101125, "pnl_pct": -3.8, "hold_from": "2026-07-22T15:04:00.992934+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "129,761 (현재 152,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,778"}, {"label": "추세(10일선)", "ok": false, "detail": "152,780"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -101 · 기 -107"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,575"}]}
|
||||
{"ts": "2026-07-23T10:30:02.480604+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 251, "cost": 3549672, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 12315, "target": 17791, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:22:02.591407+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 405884, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 405,884"}, {"label": "추세(10일선)", "ok": true, "detail": "306,950"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.493271+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 55, "cost": 5000250, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 80223, "target": 104155, "signals": [{"label": "손절선", "ok": true, "detail": "80,223 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,155"}, {"label": "추세(10일선)", "ok": true, "detail": "81,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:05.732126+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.668437+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "102,302 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,963"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:05.734614+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155500, "qty": 16, "cost": 2488373, "path": "pullback", "reason": "눌림목 지정가 158,093 도달", "stop": 127139, "target": 212221, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,000 vs 153,080"}, {"label": "정배열(5>10)", "ok": true, "detail": "171,640 / 153,080"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,640 / 99,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+44.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +200 · 기 -454 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+27%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.77% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "730,327 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.77% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,093 (현재 155,000)"}]}
|
||||
{"ts": "2026-07-24T09:02:04.039961+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 236, "cost": 3554693, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 12315, "target": 17791, "signals": [{"label": "손절선", "ok": true, "detail": "12,315 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,791"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T09:28:04.946271+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 200, "cost": 2902435, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11815, "target": 18460, "signals": [{"label": "손절선", "ok": true, "detail": "11,815 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,460"}, {"label": "추세(10일선)", "ok": true, "detail": "13,113"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T10:02:04.395802+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 306, "cost": 5799570, "path": "pullback", "reason": "눌림목 지정가 20,012 도달", "stop": 17843, "target": 21164, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,012 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:04:05.309208+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12200, "qty": 487, "proceeds": 5929814, "entry_price": 14586, "pnl": -1174551, "pnl_pct": -16.36, "hold_from": "2026-07-23T10:30:02.480603+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,708 (현재 12,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,342"}, {"label": "추세(10일선)", "ok": true, "detail": "12,236"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:06:01.452072+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7720, "qty": 547, "cost": 4223473, "path": "pullback", "reason": "눌림목 지정가 7,907 도달", "stop": 6890, "target": 9380, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,720 vs 5,416"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,502 / 5,416"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,502 / 4,893"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+88.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.17% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "258,673 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.17% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": false, "detail": "78"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,907 (현재 7,720)"}]}
|
||||
{"ts": "2026-07-27T12:50:05.820784+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 8080, "qty": 523, "cost": 4226474, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6890, "target": 9380, "signals": [{"label": "손절선", "ok": true, "detail": "6,890 (현재 8,070)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,380"}, {"label": "추세(10일선)", "ok": true, "detail": "5,452"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,997"}]}
|
||||
{"ts": "2026-07-27T13:34:01.435246+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 7050, "qty": 1070, "proceeds": 7528790, "entry_price": 7896, "pnl": -921157, "pnl_pct": -10.71, "hold_from": "2026-07-27T09:06:01.452056+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,066 (현재 7,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,556"}, {"label": "추세(10일선)", "ok": true, "detail": "5,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:15.935347+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 510, "cost": 3458319, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5916, "target": 8509, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,050 vs 5,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,368 / 5,350"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:02:04.747643+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11920, "qty": 406, "proceeds": 4830083, "entry_price": 14266, "pnl": -962966, "pnl_pct": -16.45, "hold_from": "2026-07-22T14:18:05.421714+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,984 (현재 11,960)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,831"}, {"label": "추세(10일선)", "ok": false, "detail": "12,769"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 -61"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:04:02.736929+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 123200, "qty": 16, "proceeds": 1967356, "entry_price": 155500, "pnl": -521017, "pnl_pct": -20.77, "hold_from": "2026-07-24T09:00:05.734608+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "127,139 (현재 123,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 212,221"}, {"label": "추세(10일선)", "ok": false, "detail": "149,940"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 166,050"}]}
|
||||
{"ts": "2026-07-28T09:10:01.739939+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 487, "cost": 3458219, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 8509, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,509"}, {"label": "추세(10일선)", "ok": true, "detail": "5,354"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-29T09:02:02.224639+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 45, "cost": 5306296, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 131300, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "117,800 vs 116,390"}, {"label": "정배열(5>10)", "ok": true, "detail": "117,020 / 116,390"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.462967+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 44, "cost": 5302795, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 131300, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,300"}, {"label": "추세(10일선)", "ok": true, "detail": "116,660"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:09.111290+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 306, "cost": 5799570, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17843, "target": 21164, "signals": [{"label": "손절선", "ok": true, "detail": "17,843 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,164"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,268"}]}
|
||||
{"ts": "2026-07-29T09:24:09.112024+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 79, "proceeds": 10139589, "entry_price": 134419, "pnl": -481104, "pnl_pct": -4.33, "hold_from": "2026-07-09T09:36:03.454533+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "122,827 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,603"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.380944+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 843, "cost": 5387578, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 7174, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:42:05.409278+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 843, "proceeds": 5031310, "entry_price": 6390, "pnl": -356268, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.380943+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(10일선)", "ok": true, "detail": "5,551"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T11:18:04.421952+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6000, "qty": 997, "proceeds": 5970335, "entry_price": 6936, "pnl": -946202, "pnl_pct": -13.5, "hold_from": "2026-07-28T09:00:15.935337+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,040 (현재 6,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,729"}, {"label": "추세(10일선)", "ok": true, "detail": "5,246"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.685681+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 89, "proceeds": 10588113, "entry_price": 124178, "pnl": -465345, "pnl_pct": -4.01, "hold_from": "2026-07-02T10:18:03.834926+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "114,299 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 143,934"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T09:04:07.455793+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 42, "cost": 5095364, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111347, "target": 141206, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "121,200 vs 119,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,840 / 119,680"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.457329+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 423, "cost": 2593379, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 5127, "target": 8135, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.909415+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 41, "cost": 5133970, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111347, "target": 141206, "signals": [{"label": "손절선", "ok": true, "detail": "111,347 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,206"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.511684+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 38, "cost": 5009151, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.458683+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 855, "cost": 5387308, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:04:07.865082+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 112, "proceeds": 7724109, "entry_price": 89526, "pnl": -2304295, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.510934+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,291 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,995"}, {"label": "추세(10일선)", "ok": false, "detail": "80,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:06.999372+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 396, "cost": 2594189, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-08-03T09:34:08.538141+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 120300, "qty": 38, "proceeds": 4562486, "entry_price": 131800, "pnl": -446665, "pnl_pct": -8.73, "hold_from": "2026-07-30T09:24:07.511679+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,690 (현재 120,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,020"}, {"label": "추세(10일선)", "ok": true, "detail": "107,510"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,311"}]}
|
||||
{"ts": "2026-08-03T12:00:11.789230+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 345, "cost": 4454618, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 15304, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.735696+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 332, "cost": 4456108, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:50:09.564920+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90400, "qty": 50, "cost": 4520678, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82166, "target": 106869, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "90,300 vs 81,110"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,420 / 81,110"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,420 / 75,093"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.87% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "805,693 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.87% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:12.762882+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 48, "cost": 4488673, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82166, "target": 106869, "signals": [{"label": "손절선", "ok": true, "detail": "82,166 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,869"}, {"label": "추세(10일선)", "ok": true, "detail": "81,420"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 93,241"}]}
|
||||
{"ts": "2026-08-04T13:26:12.235766+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5910, "qty": 855, "proceeds": 5043197, "entry_price": 6300, "pnl": -344111, "pnl_pct": -6.19, "hold_from": "2026-07-30T09:26:07.458674+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,917 (현재 5,910)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,067"}, {"label": "추세(10일선)", "ok": true, "detail": "5,544"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +36 · 기 +9"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,419"}]}
|
||||
{"ts": "2026-08-05T09:02:13.217011+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 5710, "qty": 911, "cost": 5202590, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5372, "target": 6387, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "5,730 vs 5,526"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,612 / 5,526"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,612 / 5,611"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -2 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "99,627 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.46% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-08-06T09:00:18.887672+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 612, "proceeds": 11440408, "entry_price": 18950, "pnl": -158732, "pnl_pct": -1.16, "hold_from": "2026-07-24T10:02:04.395801+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,996 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,858"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:00:18.926770+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13300, "qty": 181, "cost": 2407661, "path": "pullback", "reason": "눌림목 지정가 13,975 도달", "stop": 11012, "target": 17875, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,300 vs 12,903"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,408 / 12,903"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,408 / 13,271"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -352 · 기 +499 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "7 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,975 (현재 13,300)"}]}
|
||||
{"ts": "2026-08-06T09:06:09.886971+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5470, "qty": 911, "proceeds": 4973453, "entry_price": 5710, "pnl": -229137, "pnl_pct": -4.2, "hold_from": "2026-08-05T09:02:13.217002+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "5,372 (현재 5,490)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,387"}, {"label": "추세(10일선)", "ok": false, "detail": "5,502"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -30 · 기 -23"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,823"}]}
|
||||
{"ts": "2026-08-06T09:34:15.869494+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 27, "cost": 5184778, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 179508, "target": 216984, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "191,800 vs 180,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,140 / 180,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:02:12.155244+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14290, "qty": 169, "cost": 2415372, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11012, "target": 17875, "signals": [{"label": "손절선", "ok": true, "detail": "11,012 (현재 14,240)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,875"}, {"label": "추세(10일선)", "ok": true, "detail": "12,997"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -216 · 기 +313"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,046"}]}
|
||||
{"ts": "2026-08-07T09:12:15.674263+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 26, "cost": 5107166, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 179508, "target": 216984, "signals": [{"label": "손절선", "ok": true, "detail": "179,508 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,984"}, {"label": "추세(10일선)", "ok": true, "detail": "181,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"cash": 5893724.850999957,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 29,
|
||||
"entry_price": 350051.724137931,
|
||||
"entry_at": "2026-07-21T12:06:01.168413+09:00",
|
||||
"stop": 307915,
|
||||
"target": 476463,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5184250.1290937485,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 68,
|
||||
"entry_price": 119008.82352941176,
|
||||
"entry_at": "2026-07-29T09:02:02.227528+09:00",
|
||||
"stop": 111200,
|
||||
"target": 142435,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4675255.455593748,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 73,
|
||||
"entry_price": 123223.28767123287,
|
||||
"entry_at": "2026-07-30T09:04:07.465577+09:00",
|
||||
"stop": 111000,
|
||||
"target": 159893,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4550435.925312498,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 1055,
|
||||
"entry_price": 6333.03317535545,
|
||||
"entry_at": "2026-07-30T09:04:07.466771+09:00",
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3342107.250162302,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 68,
|
||||
"entry_price": 133375.0,
|
||||
"entry_at": "2026-07-30T09:16:11.918383+09:00",
|
||||
"stop": 117719,
|
||||
"target": 180344,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4604300.898906248,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 675,
|
||||
"entry_price": 13160.08888888889,
|
||||
"entry_at": "2026-08-03T12:00:11.797603+09:00",
|
||||
"stop": 11445,
|
||||
"target": 18305,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4446388.7381874975,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 513,
|
||||
"entry_price": 13423.450292397662,
|
||||
"entry_at": "2026-08-05T09:02:13.227814+09:00",
|
||||
"stop": 10340,
|
||||
"target": 22674,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3449195.5386017757,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 37,
|
||||
"entry_price": 141708.1081081081,
|
||||
"entry_at": "2026-08-06T09:08:09.846488+09:00",
|
||||
"stop": 100700,
|
||||
"target": 264732,
|
||||
"peak": 147300,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,500 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2724987.151235263,
|
||||
"last_add_price": 147100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -30093934.73800002,
|
||||
"closed_trades": 35,
|
||||
"wins": 1,
|
||||
"peak_equity": 103066363.367,
|
||||
"max_drawdown": 0.32842114973504477,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-07",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"009150": "2026-07-06",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"319660": "2026-07-23",
|
||||
"003490": "2026-07-09",
|
||||
"105560": "2026-07-20",
|
||||
"055550": "2026-07-21",
|
||||
"095610": "2026-07-28",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"003680": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582771+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.928204+09:00"
|
||||
}
|
||||
@@ -0,0 +1,106 @@
|
||||
{"ts": "2026-06-17T11:15:02.356809+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 169483, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:30.995278+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 71, "cost": 4466570, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 104714, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": true, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.401619+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 16, "cost": 5976896, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 500222, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "373,000 vs 325,400"}, {"label": "정배열(5>20)", "ok": true, "detail": "352,400 / 325,400"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.402025+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 23360, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:10.982982+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.402024+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,360"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.143156+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 47, "proceeds": 5521113, "entry_price": 130900, "pnl": -632110, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.356807+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 169,483"}, {"label": "추세(20일선)", "ok": false, "detail": "118,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:04.185307+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 16, "proceeds": 5269704, "entry_price": 373500, "pnl": -707192, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:06.401618+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 500,222"}, {"label": "추세(20일선)", "ok": true, "detail": "329,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:04:06.120043+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 26, "cost": 4074811, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 266048, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.354156+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 296, "cost": 5112687, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 27136, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.785266+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 26, "cost": 4113817, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 270614, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.903120+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 280, "cost": 5113567, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 27136, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 27,136"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:25.655538+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 23, "cost": 4119918, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 270614, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 270,614"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:05.747338+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 214, "cost": 6185528, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 36855, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:07.629324+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 71, "proceeds": 3543078, "entry_price": 62900, "pnl": -923492, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:30.995271+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,714"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.064359+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 25, "cost": 4173126, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 266048, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 266,048"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.268695+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 7, "cost": 5215782, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 1141514, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.488939+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 7, "cost": 5446817, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 1141514, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,141,514"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:07.738420+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 81, "cost": 4479972, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 91600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.189531+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 18, "cost": 6255938, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 305863, "target": 472411, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "347,000 vs 296,475"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,600 / 296,475"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.683224+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 17, "cost": 6120918, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 305863, "target": 472411, "signals": [{"label": "손절선", "ok": true, "detail": "305,863 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 472,411"}, {"label": "추세(20일선)", "ok": true, "detail": "297,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-01T09:46:03.059044+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 54, "cost": 6383757, "path": "pullback", "reason": "눌림목 지정가 122,286 도달", "stop": 111000, "target": 139800, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,286 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.838896+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 52, "cost": 6355353, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 139800, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 139,800"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T11:04:07.587427+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 209, "cost": 6187328, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 36855, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 36,855"}, {"label": "추세(20일선)", "ok": true, "detail": "25,985"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:04:01.672278+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 576, "proceeds": 8260980, "entry_price": 17751, "pnl": -1965274, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.354155+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 27,634"}, {"label": "추세(20일선)", "ok": true, "detail": "12,769"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.642880+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 51, "proceeds": 6398199, "entry_price": 161700, "pnl": -1849738, "pnl_pct": -22.26, "hold_from": "2026-06-24T09:04:06.120041+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,865 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 269,206"}, {"label": "추세(20일선)", "ok": true, "detail": "120,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.774353+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 301, "cost": 5731900, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 22880, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T15:10:02.641097+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1971000, "qty": 2, "cost": 3942591, "path": "pullback", "reason": "눌림목 지정가 1,978,439 도달", "stop": 1901000, "target": 2181000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,971,000 vs 1,967,250"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,036,600 / 1,967,250"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,036,600 / 1,295,300"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +146 · 기 +126 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.46% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,835,275 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "2.46% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,978,439 (현재 1,971,000)"}]}
|
||||
{"ts": "2026-07-06T10:06:01.984453+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 2, "proceeds": 3792590, "entry_price": 1971000, "pnl": -150001, "pnl_pct": -3.6, "hold_from": "2026-07-03T15:10:02.641095+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,181,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,067,780"}]}
|
||||
{"ts": "2026-07-06T10:06:02.326033+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 123800, "qty": 32, "cost": 3962194, "path": "pullback", "reason": "눌림목 지정가 163,325 도달", "stop": 96000, "target": 207200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,800 vs 120,030"}, {"label": "정배열(5>20)", "ok": true, "detail": "136,780 / 120,030"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "136,780 / 121,163"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +735 · 기 -1,982 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.92% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,397,673 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.92% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 163,325 (현재 123,800)"}]}
|
||||
{"ts": "2026-07-06T10:20:01.601299+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 311000, "qty": 35, "proceeds": 10863774, "entry_price": 353571, "pnl": -1513082, "pnl_pct": -12.04, "hold_from": "2026-06-30T09:02:03.189529+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "311,291 (현재 311,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 480,411"}, {"label": "추세(20일선)", "ok": true, "detail": "294,675"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T10:22:04.507430+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13300, "qty": 308, "cost": 4097014, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 22120, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,290 vs 12,714"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,566 / 12,714"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,566 / 11,433"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-12.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,199 · 기 +137 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "10.30% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "11,050,727 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "10.30% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,290)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.384355+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 81, "proceeds": 3476208, "entry_price": 55300, "pnl": -1003764, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:07.738410+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 91,600"}, {"label": "추세(20일선)", "ok": false, "detail": "51,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.363185+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 14, "proceeds": 8774856, "entry_price": 761500, "pnl": -1887744, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.268694+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,158,014"}, {"label": "추세(20일선)", "ok": false, "detail": "670,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.230606+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 308, "proceeds": 3759495, "entry_price": 13300, "pnl": -337520, "pnl_pct": -8.05, "hold_from": "2026-07-06T10:22:04.507428+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,120"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,302"}]}
|
||||
{"ts": "2026-07-07T14:08:38.356420+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 22, "cost": 4033205, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 207200, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 207,200"}, {"label": "추세(20일선)", "ok": true, "detail": "120,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 132,225"}]}
|
||||
{"ts": "2026-07-07T14:08:41.015067+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 277, "cost": 5748612, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22880, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,880"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:18.228156+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 54, "proceeds": 5836796, "entry_price": 148041, "pnl": -2158603, "pnl_pct": -26.84, "hold_from": "2026-07-06T10:06:02.326019+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "114,341 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 249,139"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.871994+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 33, "cost": 5317097, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 170400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.966870+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 33, "proceeds": 5190658, "entry_price": 161100, "pnl": -126439, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.871993+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 170,400"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.462263+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 33, "cost": 5224684, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 159200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:10:01.824473+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 39, "cost": 5160474, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117515, "target": 176655, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,100 vs 108,930"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,600 / 108,930"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T09:12:02.506925+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 33, "proceeds": 5167603, "entry_price": 158300, "pnl": -57080, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.462262+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T12:12:04.855087+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 423, "proceeds": 11187641, "entry_price": 29246, "pnl": -1185214, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:05.747336+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,501 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 37,480"}, {"label": "추세(20일선)", "ok": true, "detail": "25,830"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:00:11.070807+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 32, "cost": 5248787, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 182000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.618671+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110900, "qty": 48, "cost": 5323998, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99988, "target": 143637, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,700 vs 97,340"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,320 / 97,340"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,320 / 96,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -756 · 기 +893 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,541,113 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-10T09:28:02.618951+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 28, "cost": 5205981, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 166448, "target": 244255, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.473039+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 344, "cost": 4414182, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 20240, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T10:14:04.436912+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 173600, "qty": 30, "cost": 5208781, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 182000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 173,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 182,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,470"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +205 · 기 -155"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 173,548"}]}
|
||||
{"ts": "2026-07-10T11:16:02.473816+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 319, "cost": 4418813, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 20240, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,240"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-13T09:00:11.029806+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 38, "cost": 5202980, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117515, "target": 176655, "signals": [{"label": "손절선", "ok": true, "detail": "117,515 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,655"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:36:02.272467+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 27, "cost": 5157774, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 166448, "target": 244255, "signals": [{"label": "손절선", "ok": true, "detail": "166,448 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 244,255"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.353229+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 62, "proceeds": 11627083, "entry_price": 168645, "pnl": 1169514, "pnl_pct": 11.42, "hold_from": "2026-07-10T09:00:11.070801+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T09:02:02.644676+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 135500, "qty": 23, "cost": 3116967, "path": "pullback", "reason": "눌림목 지정가 164,061 도달", "stop": 97022, "target": 250934, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "134,900 vs 120,585"}, {"label": "정배열(5>20)", "ok": true, "detail": "139,000 / 120,585"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "139,000 / 121,348"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,752 · 기 +1,989 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.30% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "636,187 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.30% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,061 (현재 134,900)"}]}
|
||||
{"ts": "2026-07-15T14:32:01.882454+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 578, "proceeds": 10712530, "entry_price": 19859, "pnl": -767982, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.774352+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,587 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,676"}, {"label": "추세(20일선)", "ok": false, "detail": "18,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T14:16:02.478397+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 145700, "qty": 21, "cost": 3060159, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 97022, "target": 250934, "signals": [{"label": "손절선", "ok": true, "detail": "97,022 (현재 145,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 250,934"}, {"label": "추세(20일선)", "ok": true, "detail": "121,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,717 · 기 +2,299"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,295"}]}
|
||||
{"ts": "2026-07-20T12:28:02.313716+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 663, "proceeds": 6822201, "entry_price": 13321, "pnl": -2010794, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.473038+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:50:02.287453+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 167800, "qty": 55, "proceeds": 9211003, "entry_price": 188404, "pnl": -1152751, "pnl_pct": -10.94, "hold_from": "2026-07-10T09:28:02.618950+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "168,195 (현재 167,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 249,030"}, {"label": "추세(20일선)", "ok": true, "detail": "159,000"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T09:02:05.656405+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 99300, "qty": 48, "proceeds": 4757106, "entry_price": 110900, "pnl": -566893, "pnl_pct": -10.46, "hold_from": "2026-07-10T09:28:02.618669+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "99,988 (현재 99,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 143,637"}, {"label": "추세(20일선)", "ok": true, "detail": "96,775"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -141 · 기 +150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 113,471"}]}
|
||||
{"ts": "2026-07-21T10:12:01.043990+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 30, "cost": 5010752, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 194000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.168414+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 15, "cost": 5168275, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 303577, "target": 467269, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:06.915560+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 29, "cost": 5151173, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 194000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 194,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.817054+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 52, "cost": 5159174, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 120500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.737790+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 59, "proceeds": 9262603, "entry_price": 172210, "pnl": -899321, "pnl_pct": -8.66, "hold_from": "2026-07-21T10:12:01.043989+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,841"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.423677+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 275, "cost": 3858829, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 22889, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-23T09:00:22.660826+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 31, "cost": 4963844, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 166400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.410357+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 31, "proceeds": 4882261, "entry_price": 160100, "pnl": -81583, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:22.660819+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 166,400"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,669"}]}
|
||||
{"ts": "2026-07-23T09:44:04.282865+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 269, "cost": 5071411, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 22120, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T12:18:01.542920+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 50, "cost": 5155773, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 120500, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 120,500"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.593538+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 303577, "target": 467269, "signals": [{"label": "손절선", "ok": true, "detail": "303,577 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 467,269"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-24T09:00:05.830105+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 44, "proceeds": 4909608, "entry_price": 140368, "pnl": -1267519, "pnl_pct": -20.35, "hold_from": "2026-07-15T09:02:02.644674+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "101,190 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 257,902"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:05.831824+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 269, "proceeds": 5028545, "entry_price": 18850, "pnl": -42865, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.282863+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,120"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:26:01.006441+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 94000, "qty": 53, "cost": 4982747, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82349, "target": 128952, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "93,900 vs 75,355"}, {"label": "정배열(5>20)", "ok": true, "detail": "84,140 / 75,355"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "84,140 / 75,153"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -113 · 기 +274 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.90% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "829,560 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.90% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-24T09:28:04.948071+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 266, "cost": 3860239, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 22889, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,889"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T09:48:01.195831+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 97000, "qty": 52, "cost": 5044757, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82349, "target": 128952, "signals": [{"label": "손절선", "ok": true, "detail": "82,349 (현재 97,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 128,952"}, {"label": "추세(20일선)", "ok": true, "detail": "75,510"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -113 · 기 +274"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,977"}]}
|
||||
{"ts": "2026-07-27T09:02:06.227946+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 263, "cost": 5024053, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 17760, "target": 23120, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-28T09:00:16.048472+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 126200, "qty": 49, "proceeds": 6171742, "entry_price": 168010, "pnl": -2061993, "pnl_pct": -24.89, "hold_from": "2026-06-24T09:46:04.785264+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,710 (현재 128,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 276,910"}, {"label": "추세(20일선)", "ok": false, "detail": "134,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:16.050874+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 677, "cost": 4590749, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5628, "target": 10237, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.741799+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 646, "cost": 4587288, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5628, "target": 10237, "signals": [{"label": "손절선", "ok": true, "detail": "5,628 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,237"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T10:08:02.769455+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 541, "proceeds": 6031186, "entry_price": 14266, "pnl": -1687881, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.423676+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,395"}, {"label": "추세(20일선)", "ok": false, "detail": "12,636"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.227530+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 39, "cost": 4598790, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 138000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.464886+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 29, "cost": 3495024, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 138000, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,000"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:09.118714+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 6, "cost": 113717, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 23120, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,120"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:09.964903+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 77, "proceeds": 9882891, "entry_price": 134570, "pnl": -480564, "pnl_pct": -4.44, "hold_from": "2026-07-09T09:10:01.824472+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,114 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 180,939"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:09.966514+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 87700, "qty": 105, "proceeds": 9190543, "entry_price": 95486, "pnl": -836960, "pnl_pct": -8.15, "hold_from": "2026-07-24T09:26:01.006439+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "83,578 (현재 83,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,209"}, {"label": "추세(20일선)", "ok": true, "detail": "74,040"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -59 · 기 +284"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.382783+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 736, "cost": 4703745, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7958, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T13:06:06.514247+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5690, "qty": 1323, "proceeds": 7513191, "entry_price": 6936, "pnl": -1664846, "pnl_pct": -17.97, "hold_from": "2026-07-28T09:00:16.050865+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,741 (현재 5,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,522"}, {"label": "추세(20일선)", "ok": true, "detail": "4,787"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:30:01.445481+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 118000, "qty": 106, "proceeds": 12483609, "entry_price": 120162, "pnl": -255501, "pnl_pct": -1.8, "hold_from": "2026-07-01T09:46:03.059028+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 118,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,649"}, {"label": "추세(20일선)", "ok": false, "detail": "118,145"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.587859+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 736, "proceeds": 4304550, "entry_price": 6390, "pnl": -399196, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.382782+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,958"}, {"label": "추세(20일선)", "ok": true, "detail": "5,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.465582+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 37, "cost": 4488773, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 152200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.466775+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 545, "cost": 3341351, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.917652+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 36, "cost": 4507876, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 152200, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,200"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:16:11.918388+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 35, "cost": 4582187, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 175169, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "130,900 vs 108,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,360 / 108,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.149807+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 731, "cost": 4613302, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7843, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.423544+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 102, "proceeds": 9335161, "entry_price": 101112, "pnl": -979786, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.817053+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 128,147"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.816772+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 50, "cost": 4395659, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 76706, "target": 121481, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.006134+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 510, "cost": 3341001, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:08.203881+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 50, "proceeds": 3473214, "entry_price": 87900, "pnl": -922445, "pnl_pct": -20.82, "hold_from": "2026-07-30T12:04:07.816765+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "76,706 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 121,481"}, {"label": "추세(20일선)", "ok": false, "detail": "74,135"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,095"}]}
|
||||
{"ts": "2026-08-03T12:00:11.797607+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 344, "cost": 4441706, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 17699, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.743142+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 331, "cost": 4442686, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 17699, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,699"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-05T09:02:13.227080+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 731, "proceeds": 4158575, "entry_price": 6310, "pnl": -454727, "pnl_pct": -9.67, "hold_from": "2026-07-30T09:18:10.149796+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,799 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,843"}, {"label": "추세(20일선)", "ok": true, "detail": "5,326"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,423"}]}
|
||||
{"ts": "2026-08-05T09:02:13.227819+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 264, "cost": 3443076, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 21140, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,040 vs 12,727"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,356 / 12,727"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:11.448776+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 249, "cost": 3444187, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21140, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,140"}, {"label": "추세(20일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:19.032347+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 269, "proceeds": 5028545, "entry_price": 19097, "pnl": -109225, "pnl_pct": -1.92, "hold_from": "2026-07-27T09:02:06.227944+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,824 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,913"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:08:09.846499+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 136600, "qty": 19, "cost": 2595789, "path": "pullback", "reason": "눌림목 지정가 156,500 도달", "stop": 100700, "target": 244300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "136,400 vs 135,235"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,920 / 135,235"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,920 / 99,390"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -609 · 기 +419 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,673 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,500 (현재 136,400)"}]}
|
||||
{"ts": "2026-08-10T09:00:16.132562+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 33, "cost": 4488673, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116144, "target": 175169, "signals": [{"label": "손절선", "ok": true, "detail": "116,144 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 175,169"}, {"label": "추세(20일선)", "ok": true, "detail": "109,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,814"}]}
|
||||
{"ts": "2026-08-10T13:04:16.284400+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147100, "qty": 18, "cost": 2648197, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 100700, "target": 244300, "signals": [{"label": "손절선", "ok": true, "detail": "100,700 (현재 147,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 244,300"}, {"label": "추세(20일선)", "ok": true, "detail": "135,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -349 · 기 +177"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 146,939"}]}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"cash": 6169690.483999949,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 30,
|
||||
"entry_price": 350250.0,
|
||||
"entry_at": "2026-07-21T12:06:01.170285+09:00",
|
||||
"stop": 308113,
|
||||
"target": 413456,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5435113.820843748,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 119184.3373493976,
|
||||
"entry_at": "2026-07-29T09:02:02.230500+09:00",
|
||||
"stop": 111200,
|
||||
"target": 131161,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5057738.410843747,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 81,
|
||||
"entry_price": 123225.92592592593,
|
||||
"entry_at": "2026-07-30T09:04:07.472633+09:00",
|
||||
"stop": 111000,
|
||||
"target": 141565,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5030428.7588749975,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 1167,
|
||||
"entry_price": 6332.982005141388,
|
||||
"entry_at": "2026-07-30T09:04:07.473311+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3698158.582805608,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 75,
|
||||
"entry_price": 133416.0,
|
||||
"entry_at": "2026-07-30T09:16:11.924631+09:00",
|
||||
"stop": 117760,
|
||||
"target": 156901,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5098537.405531247,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 747,
|
||||
"entry_price": 13159.87951807229,
|
||||
"entry_at": "2026-08-03T12:00:11.803724+09:00",
|
||||
"stop": 11445,
|
||||
"target": 15732,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4920739.488124997,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 567,
|
||||
"entry_price": 13423.1569664903,
|
||||
"entry_at": "2026-08-05T09:02:13.234698+09:00",
|
||||
"stop": 10340,
|
||||
"target": 18048,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3814821.8249811833,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 42,
|
||||
"entry_price": 141600.0,
|
||||
"entry_at": "2026-08-06T09:08:09.854200+09:00",
|
||||
"stop": 100700,
|
||||
"target": 202950,
|
||||
"peak": 147300,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,500 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3012742.5788084655,
|
||||
"last_add_price": 147100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -22653184.548500024,
|
||||
"closed_trades": 39,
|
||||
"wins": 5,
|
||||
"peak_equity": 103066363.367,
|
||||
"max_drawdown": 0.25604475305907143,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-07",
|
||||
"095610": "2026-07-28",
|
||||
"009150": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"319660": "2026-07-23",
|
||||
"003490": "2026-07-09",
|
||||
"105560": "2026-07-20",
|
||||
"055550": "2026-07-20",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"003680": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582787+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.940047+09:00"
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{"ts": "2026-06-17T11:15:02.360191+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 150191, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.019770+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 71, "cost": 4466570, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 83807, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": true, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.405499+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 16, "cost": 5976896, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 436861, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "373,000 vs 325,400"}, {"label": "정배열(5>20)", "ok": true, "detail": "352,400 / 325,400"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.405895+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 21260, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:11.102596+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.405894+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,260"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.146347+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 47, "proceeds": 5521113, "entry_price": 130900, "pnl": -632110, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.360190+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(20일선)", "ok": false, "detail": "118,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:04.187621+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 16, "proceeds": 5269704, "entry_price": 373500, "pnl": -707192, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:06.405498+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 436,861"}, {"label": "추세(20일선)", "ok": true, "detail": "329,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:04:06.122440+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 26, "cost": 4074811, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 211374, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.356215+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 296, "cost": 5112687, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 22203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.787180+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 26, "cost": 4113817, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 214407, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.905179+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 280, "cost": 5113567, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 22203, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:25.760420+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 23, "cost": 4119918, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 214407, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,407"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:05.749486+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 214, "cost": 6185528, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 32878, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:07.734466+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 71, "proceeds": 3543078, "entry_price": 62900, "pnl": -923492, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:31.019762+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,807"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.066621+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 25, "cost": 4173126, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 211374, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,374"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.270820+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 7, "cost": 5215782, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 943257, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.491137+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 7, "cost": 5446817, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 943257, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 943,257"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:08.769060+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 81, "cost": 4479972, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 73450, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.191902+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 18, "cost": 6255938, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 305863, "target": 409956, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "347,000 vs 296,475"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,600 / 296,475"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.685224+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 17, "cost": 6120918, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 305863, "target": 409956, "signals": [{"label": "손절선", "ok": true, "detail": "305,863 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 409,956"}, {"label": "추세(20일선)", "ok": true, "detail": "297,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-01T09:46:03.072377+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 54, "cost": 6383757, "path": "pullback", "reason": "눌림목 지정가 122,286 도달", "stop": 111000, "target": 129000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,286 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-01T11:06:02.358644+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 212000, "qty": 49, "proceeds": 10367743, "entry_price": 168010, "pnl": 2134009, "pnl_pct": 26.18, "hold_from": "2026-06-24T09:46:04.787179+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "213,193 (현재 213,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "139,065"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -229 · 기 +300"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T10:18:03.842638+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1985000, "qty": 3, "cost": 5955893, "path": "pullback", "reason": "눌림목 지정가 1,994,011 도달", "stop": 1901000, "target": 2111000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,982,000 vs 1,967,800"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,038,800 / 1,967,800"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,038,800 / 1,295,483"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +337 · 기 +193 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.19% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": true, "detail": "3,133,469 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": true, "detail": "4.19% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,994,011 (현재 1,982,000)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.843238+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 52, "cost": 6355353, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 129000, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,000"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T11:04:07.590408+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 209, "cost": 6187328, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 32878, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,878"}, {"label": "추세(20일선)", "ok": true, "detail": "25,985"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:00:11.498696+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1895000, "qty": 3, "proceeds": 5673914, "entry_price": 1985000, "pnl": -281979, "pnl_pct": -4.53, "hold_from": "2026-07-02T10:18:03.842636+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,894,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,111,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +132 · 기 +129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,084,495"}]}
|
||||
{"ts": "2026-07-03T09:04:01.674579+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 576, "proceeds": 8260980, "entry_price": 17751, "pnl": -1965274, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.356213+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,693"}, {"label": "추세(20일선)", "ok": true, "detail": "12,769"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.645232+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 51, "proceeds": 6398199, "entry_price": 161700, "pnl": -1849738, "pnl_pct": -22.26, "hold_from": "2026-06-24T09:04:06.122439+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,865 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,453"}, {"label": "추세(20일선)", "ok": true, "detail": "120,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.776648+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 307, "cost": 5846157, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 20960, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:10.405291+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1993000, "qty": 2, "cost": 3986598, "path": "pullback", "reason": "눌림목 지정가 1,995,439 도달", "stop": 1901000, "target": 2131000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,975,000 vs 1,967,450"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,037,400 / 1,967,450"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,037,400 / 1,295,367"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +151 · 기 +57 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.82% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": false, "detail": "615,080 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "0.82% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,995,439 (현재 1,975,000)"}]}
|
||||
{"ts": "2026-07-06T09:00:10.407515+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 27, "cost": 3526729, "path": "pullback", "reason": "눌림목 지정가 164,068 도달", "stop": 96000, "target": 182500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,100 vs 120,495"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,640 / 120,495"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,068 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T10:06:02.336512+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 2, "proceeds": 3792590, "entry_price": 1993000, "pnl": -194008, "pnl_pct": -4.67, "hold_from": "2026-07-06T09:00:10.405284+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,131,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,089,780"}]}
|
||||
{"ts": "2026-07-06T10:06:02.762234+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13270, "qty": 318, "cost": 4220493, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 17635, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,230 vs 12,711"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,554 / 12,711"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,554 / 11,432"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-12.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,199 · 기 +137 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "12.00% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "12,870,290 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "12.00% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,230)"}]}
|
||||
{"ts": "2026-07-06T10:20:01.603403+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 311000, "qty": 35, "proceeds": 10863774, "entry_price": 353571, "pnl": -1513082, "pnl_pct": -12.04, "hold_from": "2026-06-30T09:02:03.191900+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "311,291 (현재 311,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 416,991"}, {"label": "추세(20일선)", "ok": true, "detail": "294,675"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T10:42:01.677079+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 52, "cost": 5720858, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99202, "target": 126197, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "109,900 vs 97,300"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,160 / 97,300"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,160 / 96,623"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -642 · 기 +1,346 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+18%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.56% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,664,497 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.56% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-07T09:48:07.386596+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 81, "proceeds": 3476208, "entry_price": 55300, "pnl": -1003764, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:08.769051+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,450"}, {"label": "추세(20일선)", "ok": false, "detail": "51,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T09:48:07.724025+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 148800, "qty": 23, "cost": 3422913, "path": "pullback", "reason": "눌림목 지정가 157,807 도달", "stop": 110414, "target": 206378, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "148,600 vs 135,845"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,360 / 135,845"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,360 / 99,593"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+38.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -197 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.44% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,245,767 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.44% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 157,807 (현재 148,600)"}]}
|
||||
{"ts": "2026-07-07T10:30:07.365316+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 14, "proceeds": 8774856, "entry_price": 761500, "pnl": -1887744, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.270818+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 959,757"}, {"label": "추세(20일선)", "ok": false, "detail": "670,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.233713+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 318, "proceeds": 3881556, "entry_price": 13270, "pnl": -338937, "pnl_pct": -7.84, "hold_from": "2026-07-06T10:06:02.762220+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,635"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,272"}]}
|
||||
{"ts": "2026-07-07T14:08:46.453882+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 19, "cost": 3363504, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 110414, "target": 206378, "signals": [{"label": "손절선", "ok": true, "detail": "110,414 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 206,378"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 158,042"}]}
|
||||
{"ts": "2026-07-07T14:08:49.108924+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 282, "cost": 5852378, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20960, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,960"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:18.338560+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 27, "proceeds": 2918398, "entry_price": 130600, "pnl": -608331, "pnl_pct": -17.08, "hold_from": "2026-07-06T09:00:10.407509+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.873959+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 34, "cost": 5478222, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 165750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.968826+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 34, "proceeds": 5347951, "entry_price": 161100, "pnl": -130270, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.873958+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,750"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.464551+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 34, "cost": 5383007, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 158750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:10:01.826443+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 41, "cost": 5425114, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117515, "target": 154477, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,100 vs 108,930"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,600 / 108,930"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T09:12:02.508832+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 34, "proceeds": 5324198, "entry_price": 158300, "pnl": -58810, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.464549+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T12:12:04.857248+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 423, "proceeds": 11187641, "entry_price": 29246, "pnl": -1185214, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:05.749484+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,501 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 33,363"}, {"label": "추세(20일선)", "ok": true, "detail": "25,830"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:00:12.054392+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 33, "cost": 5412812, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 173000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.621407+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 29, "cost": 5391909, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 166448, "target": 215077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.475280+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 359, "cost": 4606661, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 16535, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.476055+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 333, "cost": 4612742, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 16535, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,535"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-13T09:00:11.140611+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 40, "cost": 5476821, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117515, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "117,515 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:06:07.894851+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 112800, "qty": 51, "cost": 5753663, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 99202, "target": 126197, "signals": [{"label": "손절선", "ok": true, "detail": "99,202 (현재 112,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 126,197"}, {"label": "추세(20일선)", "ok": true, "detail": "97,445"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -358 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,792"}]}
|
||||
{"ts": "2026-07-13T09:36:02.274385+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 29, "cost": 5539831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 166448, "target": 215077, "signals": [{"label": "손절선", "ok": true, "detail": "166,448 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,077"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.355182+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 33, "proceeds": 6188609, "entry_price": 164000, "pnl": 775797, "pnl_pct": 14.57, "hold_from": "2026-07-10T09:00:12.054383+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T09:02:02.647341+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 135500, "qty": 23, "cost": 3116967, "path": "pullback", "reason": "눌림목 지정가 164,061 도달", "stop": 97022, "target": 193217, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "134,900 vs 120,585"}, {"label": "정배열(5>20)", "ok": true, "detail": "139,000 / 120,585"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "139,000 / 121,348"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,752 · 기 +1,989 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.30% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "636,187 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.30% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,061 (현재 134,900)"}]}
|
||||
{"ts": "2026-07-15T14:32:01.884447+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 589, "proceeds": 10916401, "entry_price": 19859, "pnl": -782133, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.776647+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,767"}, {"label": "추세(20일선)", "ok": false, "detail": "18,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:09.497626+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 42, "proceeds": 8760883, "entry_price": 161557, "pnl": 1974465, "pnl_pct": 29.37, "hold_from": "2026-07-07T09:48:07.724011+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "138,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T14:16:02.480628+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 145700, "qty": 22, "cost": 3205881, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 97022, "target": 193217, "signals": [{"label": "손절선", "ok": true, "detail": "97,022 (현재 145,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 193,217"}, {"label": "추세(20일선)", "ok": true, "detail": "121,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,717 · 기 +2,299"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,295"}]}
|
||||
{"ts": "2026-07-20T12:28:02.315811+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 692, "proceeds": 7120608, "entry_price": 13321, "pnl": -2098795, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.475279+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,762"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.278769+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 106, "proceeds": 13943557, "entry_price": 120162, "pnl": 1204446, "pnl_pct": 9.69, "hold_from": "2026-07-01T09:46:03.072371+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:48:03.475310+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 168100, "qty": 58, "proceeds": 9730788, "entry_price": 188450, "pnl": -1200952, "pnl_pct": -10.8, "hold_from": "2026-07-10T09:28:02.621405+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "168,241 (현재 168,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 218,763"}, {"label": "추세(20일선)", "ok": true, "detail": "159,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T14:12:02.376886+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 100100, "qty": 103, "proceeds": 10290195, "entry_price": 111386, "pnl": -1184326, "pnl_pct": -10.13, "hold_from": "2026-07-06T10:42:01.677078+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,217 (현재 100,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 128,141"}, {"label": "추세(20일선)", "ok": true, "detail": "96,810"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -168 · 기 +257"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T10:08:04.172930+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 133100, "qty": 40, "cost": 5324799, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120243, "target": 152385, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,000 vs 118,895"}, {"label": "정배열(5>20)", "ok": true, "detail": "123,200 / 118,895"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,200 / 118,615"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+38.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +137 · 기 +185 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.57% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,575,915 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.57% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-07-21T10:12:01.045878+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 32, "cost": 5344802, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 180500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.170286+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 15, "cost": 5168275, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 303577, "target": 405884, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:07.016346+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 30, "cost": 5328799, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 180500, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 180,500"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.818827+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 55, "cost": 5456818, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 109850, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.739533+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 62, "proceeds": 9733582, "entry_price": 172129, "pnl": -940018, "pnl_pct": -8.62, "hold_from": "2026-07-21T10:12:01.045877+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 193,323"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.425551+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 290, "cost": 4069310, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 18460, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-22T15:04:00.996718+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158100, "qty": 22, "cost": 3478722, "path": "pullback", "reason": "눌림목 지정가 158,107 도달", "stop": 120314, "target": 214778, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -311 · 기 +22 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.02% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "971,360 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "5.02% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,107 (현재 158,000)"}]}
|
||||
{"ts": "2026-07-23T09:00:22.764736+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 33, "cost": 5284092, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 163250, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.412363+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 33, "proceeds": 5197246, "entry_price": 160100, "pnl": -86847, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:22.764729+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.285428+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 284, "cost": 5354203, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 20485, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T12:18:01.544812+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 53, "cost": 5465120, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 109850, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 109,850"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.595464+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 15, "cost": 5340801, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 303577, "target": 405884, "signals": [{"label": "손절선", "ok": true, "detail": "303,577 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 405,884"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-24T09:00:05.934969+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 45, "proceeds": 5021190, "entry_price": 140487, "pnl": -1301659, "pnl_pct": -20.42, "hold_from": "2026-07-15T09:02:02.647339+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "101,309 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 199,254"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:05.936004+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 284, "proceeds": 5308947, "entry_price": 18850, "pnl": -45256, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.285427+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,485"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:26:01.008332+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 94000, "qty": 57, "cost": 5358804, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82349, "target": 111476, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "93,900 vs 75,355"}, {"label": "정배열(5>20)", "ok": true, "detail": "84,140 / 75,355"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "84,140 / 75,153"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -113 · 기 +274 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.90% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "829,560 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.90% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-24T09:28:04.949807+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 280, "cost": 4063409, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 18460, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,460"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T09:48:01.197655+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 97000, "qty": 55, "cost": 5335800, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82349, "target": 111476, "signals": [{"label": "손절선", "ok": true, "detail": "82,349 (현재 97,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,476"}, {"label": "추세(20일선)", "ok": true, "detail": "75,510"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -113 · 기 +274"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,977"}]}
|
||||
{"ts": "2026-07-27T09:02:06.230471+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 280, "cost": 5348802, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 17760, "target": 21110, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-28T10:08:02.771329+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 570, "proceeds": 6354485, "entry_price": 14266, "pnl": -1778235, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.425549+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,831"}, {"label": "추세(20일선)", "ok": false, "detail": "12,636"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T11:34:01.972452+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 120300, "qty": 22, "proceeds": 2641439, "entry_price": 158100, "pnl": -837283, "pnl_pct": -23.91, "hold_from": "2026-07-22T15:04:00.996717+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,314 (현재 120,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,778"}, {"label": "추세(20일선)", "ok": false, "detail": "134,430"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +285 · 기 -563"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 168,711"}]}
|
||||
{"ts": "2026-07-29T09:02:02.230260+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 651, "cost": 4258179, "path": "pullback", "reason": "눌림목 지정가 7,837 도달", "stop": 5295, "target": 8408, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,540 vs 4,829"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,266 / 4,829"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,837 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:02:02.230501+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 42, "cost": 4952543, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 127950, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.466782+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 41, "cost": 4941241, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 127950, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 127,950"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:09.977728+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 282, "cost": 5344702, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21110, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,110"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:09.978654+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 81, "proceeds": 10396288, "entry_price": 134572, "pnl": -505647, "pnl_pct": -4.44, "hold_from": "2026-07-09T09:10:01.826441+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,115 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,756"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:09.979284+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 87700, "qty": 112, "proceeds": 9803246, "entry_price": 95473, "pnl": -891358, "pnl_pct": -8.14, "hold_from": "2026-07-24T09:26:01.008331+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "83,565 (현재 83,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,335"}, {"label": "추세(20일선)", "ok": true, "detail": "74,040"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -59 · 기 +284"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.900494+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6610, "qty": 651, "proceeds": 4294719, "entry_price": 6540, "pnl": 36540, "pnl_pct": 1.07, "hold_from": "2026-07-29T09:02:02.230258+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,526 (현재 6,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "4,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.384508+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 794, "cost": 5074421, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7174, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T11:54:01.475203+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 120100, "qty": 40, "proceeds": 4794632, "entry_price": 133100, "pnl": -530166, "pnl_pct": -9.77, "hold_from": "2026-07-21T10:08:04.172929+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,243 (현재 120,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,385"}, {"label": "추세(20일선)", "ok": true, "detail": "118,250"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 -68"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,414"}]}
|
||||
{"ts": "2026-07-29T13:34:03.589780+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 794, "proceeds": 4643767, "entry_price": 6390, "pnl": -430654, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.384507+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(20일선)", "ok": true, "detail": "5,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.472638+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 41, "cost": 4974046, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 136750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.473315+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 603, "cost": 3696944, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 8135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.924015+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 40, "cost": 5008751, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 136750, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,750"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:16:11.924634+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 153035, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "130,900 vs 108,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,360 / 108,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.159701+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 809, "cost": 5105556, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.429556+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 108, "proceeds": 9884288, "entry_price": 101114, "pnl": -1037650, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.818826+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,635"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.823153+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 56, "cost": 4923138, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 76706, "target": 104690, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.012482+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 564, "cost": 3694754, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:08.210477+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 56, "proceeds": 3890000, "entry_price": 87900, "pnl": -1033139, "pnl_pct": -20.82, "hold_from": "2026-07-30T12:04:07.823150+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "76,706 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,690"}, {"label": "추세(20일선)", "ok": false, "detail": "74,135"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,095"}]}
|
||||
{"ts": "2026-08-03T12:00:11.803727+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 381, "cost": 4919448, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 15304, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.749937+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 366, "cost": 4912457, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-05T09:02:13.234273+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 809, "proceeds": 4602308, "entry_price": 6310, "pnl": -503248, "pnl_pct": -9.67, "hold_from": "2026-07-30T09:18:10.159696+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,799 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,077"}, {"label": "추세(20일선)", "ok": true, "detail": "5,326"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,423"}]}
|
||||
{"ts": "2026-08-05T09:02:13.234702+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 292, "cost": 3808251, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 17090, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,040 vs 12,727"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,356 / 12,727"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:11.455259+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 275, "cost": 3803820, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17090, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,090"}, {"label": "추세(20일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:19.135898+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 562, "proceeds": 10505734, "entry_price": 19025, "pnl": -187770, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.230469+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,922"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:08:09.854205+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 136600, "qty": 22, "cost": 3005651, "path": "pullback", "reason": "눌림목 지정가 156,500 도달", "stop": 100700, "target": 190450, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "136,400 vs 135,235"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,920 / 135,235"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,920 / 99,390"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -609 · 기 +419 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,673 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,500 (현재 136,400)"}]}
|
||||
{"ts": "2026-08-10T09:00:16.234540+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 37, "cost": 5032755, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116144, "target": 153035, "signals": [{"label": "손절선", "ok": true, "detail": "116,144 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 153,035"}, {"label": "추세(20일선)", "ok": true, "detail": "109,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,814"}]}
|
||||
{"ts": "2026-08-10T13:04:16.292903+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147100, "qty": 20, "cost": 2942441, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 100700, "target": 190450, "signals": [{"label": "손절선", "ok": true, "detail": "100,700 (현재 147,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 190,450"}, {"label": "추세(20일선)", "ok": true, "detail": "135,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -349 · 기 +177"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 146,939"}]}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"cash": 5168399.382999956,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 29,
|
||||
"entry_price": 350051.724137931,
|
||||
"entry_at": "2026-07-21T12:06:01.172122+09:00",
|
||||
"stop": 307915,
|
||||
"target": 434326,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5274205.950343749,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 79,
|
||||
"entry_price": 119183.54430379746,
|
||||
"entry_at": "2026-07-29T09:02:02.233197+09:00",
|
||||
"stop": 111200,
|
||||
"target": 135151,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4798325.220406247,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 75,
|
||||
"entry_price": 123224.0,
|
||||
"entry_at": "2026-07-30T09:04:07.478234+09:00",
|
||||
"stop": 111000,
|
||||
"target": 147672,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4697478.874937497,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 1090,
|
||||
"entry_price": 6333.064220183486,
|
||||
"entry_at": "2026-07-30T09:04:07.479053+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3453556.2895330573,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 71,
|
||||
"entry_price": 133414.08450704225,
|
||||
"entry_at": "2026-07-30T09:16:11.930358+09:00",
|
||||
"stop": 117758,
|
||||
"target": 164727,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4762406.753156248,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 697,
|
||||
"entry_price": 13160.243902439024,
|
||||
"entry_at": "2026-08-03T12:00:11.808646+09:00",
|
||||
"stop": 11445,
|
||||
"target": 16590,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4594021.1274374975,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 530,
|
||||
"entry_price": 13423.075471698114,
|
||||
"entry_at": "2026-08-05T09:02:13.240207+09:00",
|
||||
"stop": 10340,
|
||||
"target": 19589,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3561242.7967011826,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 39,
|
||||
"entry_price": 141715.38461538462,
|
||||
"entry_at": "2026-08-06T09:08:09.859483+09:00",
|
||||
"stop": 100700,
|
||||
"target": 223746,
|
||||
"peak": 147300,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,500 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2812742.868049803,
|
||||
"last_add_price": 147100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -27823490.90800003,
|
||||
"closed_trades": 36,
|
||||
"wins": 2,
|
||||
"peak_equity": 103066363.367,
|
||||
"max_drawdown": 0.3059755316650401,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-07",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"009150": "2026-07-06",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"319660": "2026-07-23",
|
||||
"003490": "2026-07-09",
|
||||
"105560": "2026-07-20",
|
||||
"055550": "2026-07-21",
|
||||
"095610": "2026-07-28",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"003680": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582803+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.946790+09:00"
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{"ts": "2026-06-17T11:15:02.363537+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 156622, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.044135+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 71, "cost": 4466570, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 90776, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": true, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.409115+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 16, "cost": 5976896, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 457982, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "373,000 vs 325,400"}, {"label": "정배열(5>20)", "ok": true, "detail": "352,400 / 325,400"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.409502+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 21960, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:11.204360+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.409500+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,960"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.149244+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 47, "proceeds": 5521113, "entry_price": 130900, "pnl": -632110, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.363536+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,622"}, {"label": "추세(20일선)", "ok": false, "detail": "118,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:04.189614+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 16, "proceeds": 5269704, "entry_price": 373500, "pnl": -707192, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:06.409114+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 457,982"}, {"label": "추세(20일선)", "ok": true, "detail": "329,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:04:06.124732+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 26, "cost": 4074811, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 229599, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.358231+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 296, "cost": 5112687, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 23847, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.789014+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 26, "cost": 4113817, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 233143, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.907232+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 280, "cost": 5113567, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 23847, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,847"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:25.861919+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 23, "cost": 4119918, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 233143, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,143"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:05.751533+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 214, "cost": 6185528, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 34203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:07.830878+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 71, "proceeds": 3543078, "entry_price": 62900, "pnl": -923492, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:31.044127+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 90,776"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.068633+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 25, "cost": 4173126, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 229599, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,599"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.272649+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 7, "cost": 5215782, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 1009343, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.493145+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 7, "cost": 5446817, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 1009343, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,009,343"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:08.867646+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 81, "cost": 4479972, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 79500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.194025+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 18, "cost": 6255938, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 305863, "target": 430774, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "347,000 vs 296,475"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,600 / 296,475"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.687096+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 17, "cost": 6120918, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 305863, "target": 430774, "signals": [{"label": "손절선", "ok": true, "detail": "305,863 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,774"}, {"label": "추세(20일선)", "ok": true, "detail": "297,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-01T09:46:03.082068+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 54, "cost": 6383757, "path": "pullback", "reason": "눌림목 지정가 122,286 도달", "stop": 111000, "target": 132600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,286 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.846196+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 52, "cost": 6355353, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 132600, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 132,600"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T11:04:07.593139+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 209, "cost": 6187328, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 34203, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,203"}, {"label": "추세(20일선)", "ok": true, "detail": "25,985"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:04:01.676630+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 576, "proceeds": 8260980, "entry_price": 17751, "pnl": -1965274, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.358230+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 24,340"}, {"label": "추세(20일선)", "ok": true, "detail": "12,769"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.647159+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 51, "proceeds": 6398199, "entry_price": 161700, "pnl": -1849738, "pnl_pct": -22.26, "hold_from": "2026-06-24T09:04:06.124731+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,865 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,370"}, {"label": "추세(20일선)", "ok": true, "detail": "120,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.778564+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 301, "cost": 5731900, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 21600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T15:10:02.646131+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1971000, "qty": 2, "cost": 3942591, "path": "pullback", "reason": "눌림목 지정가 1,978,439 도달", "stop": 1901000, "target": 2111000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,971,000 vs 1,967,250"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,036,600 / 1,967,250"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,036,600 / 1,295,300"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +146 · 기 +126 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.46% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,835,275 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "2.46% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,978,439 (현재 1,971,000)"}]}
|
||||
{"ts": "2026-07-06T10:06:02.773863+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 2, "proceeds": 3792590, "entry_price": 1971000, "pnl": -150001, "pnl_pct": -3.6, "hold_from": "2026-07-03T15:10:02.646130+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,111,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,067,780"}]}
|
||||
{"ts": "2026-07-06T10:06:02.775173+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 123800, "qty": 32, "cost": 3962194, "path": "pullback", "reason": "눌림목 지정가 163,325 도달", "stop": 96000, "target": 179400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,800 vs 120,030"}, {"label": "정배열(5>20)", "ok": true, "detail": "136,780 / 120,030"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "136,780 / 121,163"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +735 · 기 -1,982 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.92% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,397,673 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.92% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 163,325 (현재 123,800)"}]}
|
||||
{"ts": "2026-07-06T10:20:01.605390+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 311000, "qty": 35, "proceeds": 10863774, "entry_price": 353571, "pnl": -1513082, "pnl_pct": -12.04, "hold_from": "2026-06-30T09:02:03.194023+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "311,291 (현재 311,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 438,131"}, {"label": "추세(20일선)", "ok": true, "detail": "294,675"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T10:22:04.511969+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13300, "qty": 308, "cost": 4097014, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 19180, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,290 vs 12,714"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,566 / 12,714"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,566 / 11,433"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-12.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,199 · 기 +137 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "10.30% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "11,050,727 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "10.30% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,290)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.735262+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 81, "proceeds": 3476208, "entry_price": 55300, "pnl": -1003764, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:08.867639+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 79,500"}, {"label": "추세(20일선)", "ok": false, "detail": "51,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.367218+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 14, "proceeds": 8774856, "entry_price": 761500, "pnl": -1887744, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.272648+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,025,843"}, {"label": "추세(20일선)", "ok": false, "detail": "670,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.236692+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 308, "proceeds": 3759495, "entry_price": 13300, "pnl": -337520, "pnl_pct": -8.05, "hold_from": "2026-07-06T10:22:04.511967+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,180"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,302"}]}
|
||||
{"ts": "2026-07-07T14:08:57.139182+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 277, "cost": 5748612, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21600, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,600"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:18.439712+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 32, "proceeds": 3458842, "entry_price": 123800, "pnl": -503352, "pnl_pct": -12.52, "hold_from": "2026-07-06T10:06:02.775166+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.875914+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 33, "cost": 5317097, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 167300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.970785+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 33, "proceeds": 5190658, "entry_price": 161100, "pnl": -126439, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.875913+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 167,300"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.466832+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 33, "cost": 5224684, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 158900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:10:01.828360+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 40, "cost": 5292794, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117515, "target": 161870, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,100 vs 108,930"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,600 / 108,930"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T09:12:02.510762+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 33, "proceeds": 5167603, "entry_price": 158300, "pnl": -57080, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.466831+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T12:12:04.859326+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 423, "proceeds": 11187641, "entry_price": 29246, "pnl": -1185214, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:05.751532+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,501 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,735"}, {"label": "추세(20일선)", "ok": true, "detail": "25,830"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:00:12.156468+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 32, "cost": 5248787, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 176000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.623561+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110900, "qty": 48, "cost": 5323998, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99988, "target": 132725, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,700 vs 97,340"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,320 / 97,340"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,320 / 96,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -756 · 기 +893 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,541,113 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-10T09:28:02.623841+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 29, "cost": 5391909, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 166448, "target": 224803, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.477296+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 351, "cost": 4504005, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 17770, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T10:14:04.440996+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 173600, "qty": 31, "cost": 5382407, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 176000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 173,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,470"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +205 · 기 -155"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 173,548"}]}
|
||||
{"ts": "2026-07-10T11:16:02.478050+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 325, "cost": 4501925, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 17770, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,770"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-13T09:00:11.239464+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 39, "cost": 5339901, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117515, "target": 161870, "signals": [{"label": "손절선", "ok": true, "detail": "117,515 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,870"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:36:02.276346+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 28, "cost": 5348802, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 166448, "target": 224803, "signals": [{"label": "손절선", "ok": true, "detail": "166,448 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 224,803"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.357132+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 63, "proceeds": 11814616, "entry_price": 168724, "pnl": 1183422, "pnl_pct": 11.37, "hold_from": "2026-07-10T09:00:12.156459+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T09:02:02.649553+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 135500, "qty": 23, "cost": 3116967, "path": "pullback", "reason": "눌림목 지정가 164,061 도달", "stop": 97022, "target": 212456, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "134,900 vs 120,585"}, {"label": "정배열(5>20)", "ok": true, "detail": "139,000 / 120,585"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "139,000 / 121,348"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,752 · 기 +1,989 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.30% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "636,187 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.30% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,061 (현재 134,900)"}]}
|
||||
{"ts": "2026-07-15T14:32:01.886416+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 578, "proceeds": 10712530, "entry_price": 19859, "pnl": -767982, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.778563+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,587 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,404"}, {"label": "추세(20일선)", "ok": false, "detail": "18,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T14:16:02.482790+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 145700, "qty": 21, "cost": 3060159, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 97022, "target": 212456, "signals": [{"label": "손절선", "ok": true, "detail": "97,022 (현재 145,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 212,456"}, {"label": "추세(20일선)", "ok": true, "detail": "121,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,717 · 기 +2,299"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,295"}]}
|
||||
{"ts": "2026-07-20T12:28:02.317762+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 676, "proceeds": 6955969, "entry_price": 13320, "pnl": -2049961, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.477294+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,241"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.280771+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 106, "proceeds": 13943557, "entry_price": 120162, "pnl": 1204446, "pnl_pct": 9.69, "hold_from": "2026-07-01T09:46:03.082062+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:50:02.291040+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 167800, "qty": 57, "proceeds": 9545949, "entry_price": 188405, "pnl": -1194762, "pnl_pct": -10.94, "hold_from": "2026-07-10T09:28:02.623839+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "168,196 (현재 167,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 228,823"}, {"label": "추세(20일선)", "ok": true, "detail": "159,000"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T09:02:05.674730+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 99300, "qty": 48, "proceeds": 4757106, "entry_price": 110900, "pnl": -566893, "pnl_pct": -10.46, "hold_from": "2026-07-10T09:28:02.623560+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "99,988 (현재 99,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 132,725"}, {"label": "추세(20일선)", "ok": true, "detail": "96,775"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -141 · 기 +150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 113,471"}]}
|
||||
{"ts": "2026-07-21T10:08:04.174963+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 133100, "qty": 39, "cost": 5191679, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120243, "target": 158813, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,000 vs 118,895"}, {"label": "정배열(5>20)", "ok": true, "detail": "123,200 / 118,895"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,200 / 118,615"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+38.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +137 · 기 +185 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.57% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,575,915 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.57% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-07-21T10:12:01.047659+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 31, "cost": 5177777, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 185000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.172123+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 15, "cost": 5168275, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 303577, "target": 426346, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:07.120141+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 29, "cost": 5151173, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 185000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 185,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.820566+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 53, "cost": 5258389, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 113400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.741239+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 60, "proceeds": 9419596, "entry_price": 172123, "pnl": -909353, "pnl_pct": -8.61, "hold_from": "2026-07-21T10:12:01.047658+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 200,370"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.427296+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 280, "cost": 3928989, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 19936, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-23T09:00:22.864455+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 32, "cost": 5123968, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 164300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.414108+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 32, "proceeds": 5039753, "entry_price": 160100, "pnl": -84215, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:22.864448+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.287798+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 274, "cost": 5165675, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 21030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T12:18:01.546609+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 51, "cost": 5258889, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 113400, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,400"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.597376+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 303577, "target": 426346, "signals": [{"label": "손절선", "ok": true, "detail": "303,577 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 426,346"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-24T09:00:06.038474+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 44, "proceeds": 4909608, "entry_price": 140368, "pnl": -1267519, "pnl_pct": -20.35, "hold_from": "2026-07-15T09:02:02.649551+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "101,190 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 218,724"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:06.040488+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 274, "proceeds": 5122013, "entry_price": 18850, "pnl": -43662, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.287796+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,030"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:26:01.010231+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 94000, "qty": 54, "cost": 5076761, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82349, "target": 117301, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "93,900 vs 75,355"}, {"label": "정배열(5>20)", "ok": true, "detail": "84,140 / 75,355"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "84,140 / 75,153"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -113 · 기 +274 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.90% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "829,560 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.90% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-24T09:28:04.951474+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 271, "cost": 3932800, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 19936, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,936"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T09:48:01.199521+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 97000, "qty": 53, "cost": 5141771, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82349, "target": 117301, "signals": [{"label": "손절선", "ok": true, "detail": "82,349 (현재 97,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 117,301"}, {"label": "추세(20일선)", "ok": true, "detail": "75,510"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -113 · 기 +274"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,977"}]}
|
||||
{"ts": "2026-07-27T09:02:06.232738+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 268, "cost": 5119568, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 17760, "target": 21780, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-28T09:00:16.262420+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 126200, "qty": 49, "proceeds": 6171742, "entry_price": 168010, "pnl": -2061993, "pnl_pct": -24.89, "hold_from": "2026-06-24T09:46:04.789013+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,710 (현재 128,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,610"}, {"label": "추세(20일선)", "ok": false, "detail": "134,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:16.264486+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 691, "cost": 4685683, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5628, "target": 9085, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.745416+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 660, "cost": 4686703, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5628, "target": 9085, "signals": [{"label": "손절선", "ok": true, "detail": "5,628 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,085"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T10:08:02.773145+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 551, "proceeds": 6142668, "entry_price": 14266, "pnl": -1719121, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.427295+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,352"}, {"label": "추세(20일선)", "ok": false, "detail": "12,636"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.233198+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 40, "cost": 4716707, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 131300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.468572+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 39, "cost": 4700205, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 131300, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,300"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:09.985527+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 270, "cost": 5117267, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21780, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,780"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:09.986194+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 79, "proceeds": 10139589, "entry_price": 134571, "pnl": -493105, "pnl_pct": -4.44, "hold_from": "2026-07-09T09:10:01.828358+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,115 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,484"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:09.986674+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 87700, "qty": 107, "proceeds": 9365601, "entry_price": 95486, "pnl": -852931, "pnl_pct": -8.15, "hold_from": "2026-07-24T09:26:01.010230+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "83,578 (현재 83,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,302"}, {"label": "추세(20일선)", "ok": true, "detail": "74,040"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -59 · 기 +284"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.386230+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 754, "cost": 4818783, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7435, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T11:54:01.477218+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 120100, "qty": 39, "proceeds": 4674766, "entry_price": 133100, "pnl": -516912, "pnl_pct": -9.77, "hold_from": "2026-07-21T10:08:04.174962+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,243 (현재 120,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 158,813"}, {"label": "추세(20일선)", "ok": true, "detail": "118,250"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 -68"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,414"}]}
|
||||
{"ts": "2026-07-29T13:06:06.518446+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5690, "qty": 1351, "proceeds": 7672200, "entry_price": 6936, "pnl": -1700186, "pnl_pct": -17.97, "hold_from": "2026-07-28T09:00:16.264480+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,741 (현재 5,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,327"}, {"label": "추세(20일선)", "ok": true, "detail": "4,787"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.591638+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 754, "proceeds": 4409824, "entry_price": 6390, "pnl": -408959, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.386229+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,435"}, {"label": "추세(20일선)", "ok": true, "detail": "5,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.478237+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 38, "cost": 4610091, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 141900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.479057+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 563, "cost": 3451708, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 8804, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.929896+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 37, "cost": 4633095, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 141900, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,900"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:16:11.930362+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 36, "cost": 4713107, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 160413, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "130,900 vs 108,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,360 / 108,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.166025+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 756, "cost": 4771076, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7332, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.434750+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 104, "proceeds": 9518203, "entry_price": 101112, "pnl": -999074, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.820564+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,138"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.828079+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 52, "cost": 4571486, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 76706, "target": 110287, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.018008+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 527, "cost": 3452368, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:08.215128+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 52, "proceeds": 3612143, "entry_price": 87900, "pnl": -959343, "pnl_pct": -20.82, "hold_from": "2026-07-30T12:04:07.828076+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "76,706 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 110,287"}, {"label": "추세(20일선)", "ok": false, "detail": "74,135"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,095"}]}
|
||||
{"ts": "2026-08-03T12:00:11.808649+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 355, "cost": 4583737, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 16103, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.754781+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 342, "cost": 4590328, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 16103, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,103"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-05T09:02:13.239905+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 756, "proceeds": 4300797, "entry_price": 6310, "pnl": -470278, "pnl_pct": -9.67, "hold_from": "2026-07-30T09:18:10.166021+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,799 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,332"}, {"label": "추세(20일선)", "ok": true, "detail": "5,326"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,423"}]}
|
||||
{"ts": "2026-08-05T09:02:13.240210+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 273, "cost": 3560454, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 18440, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,040 vs 12,727"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,356 / 12,727"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:11.460384+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 257, "cost": 3554843, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18440, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,440"}, {"label": "추세(20일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:19.244607+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 538, "proceeds": 10057090, "entry_price": 19025, "pnl": -179745, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.232736+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,554"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:08:09.859487+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 136600, "qty": 20, "cost": 2732410, "path": "pullback", "reason": "눌림목 지정가 156,500 도달", "stop": 100700, "target": 208400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "136,400 vs 135,235"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,920 / 135,235"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,920 / 99,390"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -609 · 기 +419 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,673 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,500 (현재 136,400)"}]}
|
||||
{"ts": "2026-08-10T09:00:16.336294+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 35, "cost": 4760714, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116144, "target": 160413, "signals": [{"label": "손절선", "ok": true, "detail": "116,144 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 160,413"}, {"label": "추세(20일선)", "ok": true, "detail": "109,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,814"}]}
|
||||
{"ts": "2026-08-10T13:04:16.298738+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147100, "qty": 19, "cost": 2795319, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 100700, "target": 208400, "signals": [{"label": "손절선", "ok": true, "detail": "100,700 (현재 147,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 208,400"}, {"label": "추세(20일선)", "ok": true, "detail": "135,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -349 · 기 +177"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 146,939"}]}
|
||||
@@ -0,0 +1,204 @@
|
||||
{
|
||||
"cash": 18766096.933500007,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 27,
|
||||
"entry_price": 350037.037037037,
|
||||
"entry_at": "2026-07-21T12:06:01.173991+09:00",
|
||||
"stop": 318434,
|
||||
"target": 413243,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4947379.149752503,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 85,
|
||||
"entry_price": 119184.70588235294,
|
||||
"entry_at": "2026-07-29T09:02:02.235827+09:00",
|
||||
"stop": 111408,
|
||||
"target": 134739,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5120146.001656252,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 79,
|
||||
"entry_price": 123225.3164556962,
|
||||
"entry_at": "2026-07-30T09:04:07.484187+09:00",
|
||||
"stop": 113272,
|
||||
"target": 143132,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4929642.288776176,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 782,
|
||||
"entry_price": 6333.017902813299,
|
||||
"entry_at": "2026-07-30T09:04:07.484676+09:00",
|
||||
"stop": 5363,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2477780.379475499,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 652,
|
||||
"entry_price": 13160.306748466257,
|
||||
"entry_at": "2026-08-03T12:00:11.814094+09:00",
|
||||
"stop": 11874,
|
||||
"target": 15733,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4296364.655919675,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 23,
|
||||
"entry_price": 141495.65217391305,
|
||||
"entry_at": "2026-08-04T09:04:09.467464+09:00",
|
||||
"stop": 111689,
|
||||
"target": 201110,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,279 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1735357.9457375815,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 94,
|
||||
"entry_price": 91917.02127659574,
|
||||
"entry_at": "2026-08-04T09:48:09.782722+09:00",
|
||||
"stop": 83393,
|
||||
"target": 108965,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4361392.052247569,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 336,
|
||||
"entry_price": 13777.32142857143,
|
||||
"entry_at": "2026-08-06T09:00:19.347937+09:00",
|
||||
"stop": 11540,
|
||||
"target": 18252,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,975 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2326313.326987872,
|
||||
"last_add_price": 14290
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21851777.083500035,
|
||||
"closed_trades": 49,
|
||||
"wins": 4,
|
||||
"peak_equity": 101291892.54300004,
|
||||
"max_drawdown": 0.2315722523502305,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-28",
|
||||
"030000": "2026-08-06",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-02",
|
||||
"095610": "2026-07-28",
|
||||
"003490": "2026-07-07",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-23",
|
||||
"009150": "2026-07-06",
|
||||
"034730": "2026-07-08",
|
||||
"214450": "2026-07-06",
|
||||
"055550": "2026-07-20",
|
||||
"319660": "2026-07-23",
|
||||
"105560": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"252990": "2026-07-28",
|
||||
"078930": "2026-07-31",
|
||||
"010950": "2026-08-03",
|
||||
"090850": "2026-08-04",
|
||||
"003680": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582834+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.952220+09:00"
|
||||
}
|
||||
@@ -0,0 +1,139 @@
|
||||
{"ts": "2026-06-17T11:15:02.370121+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121254, "target": 150191, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.091519+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 47, "cost": 2956743, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 52447, "target": 83807, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": true, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.416305+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 15, "cost": 5603340, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 341819, "target": 436861, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "373,000 vs 325,400"}, {"label": "정배열(5>20)", "ok": true, "detail": "352,400 / 325,400"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.416697+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 18100, "target": 21279, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-19T13:32:02.859717+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 121100, "qty": 47, "proceeds": 5680601, "entry_price": 130900, "pnl": -472622, "pnl_pct": -7.49, "hold_from": "2026-06-17T11:15:02.370120+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,254 (현재 121,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(20일선)", "ok": true, "detail": "118,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +531 · 기 -129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,178"}]}
|
||||
{"ts": "2026-06-23T09:00:11.312560+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.416696+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,279"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T09:04:35.888866+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121000, "qty": 49, "cost": 5929889, "path": "pullback", "reason": "눌림목 지정가 122,636 도달", "stop": 111004, "target": 140992, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-14.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +310 · 기 -361 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+30%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.12% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "324,680 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.12% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,636 (현재 121,200)"}]}
|
||||
{"ts": "2026-06-23T09:26:03.173057+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 339500, "qty": 15, "proceeds": 5082570, "entry_price": 373500, "pnl": -520771, "pnl_pct": -9.1, "hold_from": "2026-06-19T09:02:06.416304+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "341,819 (현재 340,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 436,861"}, {"label": "추세(20일선)", "ok": true, "detail": "329,525"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,330 · 기 +1,369"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,493"}]}
|
||||
{"ts": "2026-06-24T09:04:06.126905+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 52300, "qty": 47, "proceeds": 2453307, "entry_price": 62900, "pnl": -503437, "pnl_pct": -16.85, "hold_from": "2026-06-17T16:47:31.091510+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "52,447 (현재 52,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,807"}, {"label": "추세(20일선)", "ok": false, "detail": "52,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +711 · 기 -2,060"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,717"}]}
|
||||
{"ts": "2026-06-24T09:04:06.127006+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 17, "cost": 2664300, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 129363, "target": 211374, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.360263+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 198, "cost": 3419973, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 14804, "target": 22203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:04.790839+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 17, "cost": 2689803, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 130097, "target": 214407, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:05.909226+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 187, "cost": 3415132, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 14804, "target": 22203, "signals": [{"label": "손절선", "ok": true, "detail": "14,804 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:25.960256+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 15, "cost": 2686903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 130097, "target": 214407, "signals": [{"label": "손절선", "ok": true, "detail": "130,097 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,407"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:02:04.081932+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 63,881 도달", "stop": 43200, "target": 73200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,300 vs 52,382"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,980 / 52,382"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,980 / 49,672"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+15.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +406 · 기 -1,461 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.21% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,819,047 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "2.21% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,881 (현재 53,300)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.753481+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 214, "cost": 6185528, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26911, "target": 32878, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:07.932477+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-25T09:02:04.081930+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T10:06:05.272373+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 110600, "qty": 49, "proceeds": 5408832, "entry_price": 121000, "pnl": -521057, "pnl_pct": -8.6, "hold_from": "2026-06-23T09:04:35.888864+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "111,004 (현재 110,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 140,992"}, {"label": "추세(20일선)", "ok": false, "detail": "117,780"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +34 · 기 -271"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,653"}]}
|
||||
{"ts": "2026-06-26T10:14:04.070691+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 16, "cost": 2670801, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 129363, "target": 211374, "signals": [{"label": "손절선", "ok": true, "detail": "129,363 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,374"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.274496+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 4, "cost": 2980447, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 645871, "target": 943257, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.495030+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 4, "cost": 3112467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 645871, "target": 943257, "signals": [{"label": "손절선", "ok": true, "detail": "645,871 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 943,257"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:08.974331+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 44022, "target": 77857, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.196119+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 15, "cost": 5213282, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 316272, "target": 409956, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "347,000 vs 296,475"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,600 / 296,475"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.688864+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 15, "cost": 5400810, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 316272, "target": 409956, "signals": [{"label": "손절선", "ok": true, "detail": "316,272 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 409,956"}, {"label": "추세(20일선)", "ok": true, "detail": "297,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-01T09:46:03.088455+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 53, "cost": 6265540, "path": "pullback", "reason": "눌림목 지정가 122,286 도달", "stop": 111000, "target": 132600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,286 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-01T11:06:02.362779+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 212000, "qty": 32, "proceeds": 6770771, "entry_price": 167997, "pnl": 1394065, "pnl_pct": 26.19, "hold_from": "2026-06-24T09:46:04.790837+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "213,193 (현재 213,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "139,065"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -229 · 기 +300"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T09:08:01.925087+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26900, "qty": 214, "proceeds": 5745375, "entry_price": 28900, "pnl": -440153, "pnl_pct": -6.92, "hold_from": "2026-06-25T09:04:05.753479+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,911 (현재 26,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,878"}, {"label": "추세(20일선)", "ok": true, "detail": "25,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -249 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,517"}]}
|
||||
{"ts": "2026-07-02T10:18:03.848986+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1985000, "qty": 3, "cost": 5955893, "path": "pullback", "reason": "눌림목 지정가 1,994,011 도달", "stop": 1901000, "target": 2153000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,982,000 vs 1,967,800"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,038,800 / 1,967,800"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,038,800 / 1,295,483"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +337 · 기 +193 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.19% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": true, "detail": "3,133,469 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": true, "detail": "4.19% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,994,011 (현재 1,982,000)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.849511+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 132600, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 132,600"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T10:34:04.127790+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 323, "cost": 6092694, "path": "pullback", "reason": "눌림목 지정가 19,970 도달", "stop": 17760, "target": 21060, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,970 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.063884+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 270, "cost": 6089413, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21060, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,060"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:22:01.973024+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 593, "proceeds": 11245029, "entry_price": 20540, "pnl": -937078, "pnl_pct": -7.5, "hold_from": "2026-07-02T10:34:04.127788+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,370 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,880"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T12:42:02.228705+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 15250, "qty": 385, "proceeds": 5859801, "entry_price": 17751, "pnl": -975304, "pnl_pct": -14.09, "hold_from": "2026-06-24T09:12:05.360261+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "15,280 (현재 15,280)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,692"}, {"label": "추세(20일선)", "ok": true, "detail": "12,814"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,920 · 기 +434"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:28:02.067492+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 134800, "qty": 33, "proceeds": 4439726, "entry_price": 161645, "pnl": -895375, "pnl_pct": -16.61, "hold_from": "2026-06-24T09:04:06.127005+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "134,769 (현재 134,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,398"}, {"label": "추세(20일선)", "ok": true, "detail": "120,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.193807+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:08.974321+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 77,857"}, {"label": "추세(20일선)", "ok": false, "detail": "51,912"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:00:11.710324+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1895000, "qty": 3, "proceeds": 5673914, "entry_price": 1985000, "pnl": -281979, "pnl_pct": -4.53, "hold_from": "2026-07-02T10:18:03.848984+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,894,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,153,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +132 · 기 +129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,084,495"}]}
|
||||
{"ts": "2026-07-03T09:02:04.930160+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 163,875 도달", "stop": 104263, "target": 191674, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,300 vs 120,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,680 / 120,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 163,875 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:02:04.930278+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14660, "qty": 172, "cost": 2521898, "path": "pullback", "reason": "눌림목 지정가 17,179 도달", "stop": 11914, "target": 20152, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,680 vs 12,784"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,844 / 12,784"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,844 / 11,456"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,591 · 기 +253 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.92% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "991,593 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.92% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,179 (현재 14,680)"}]}
|
||||
{"ts": "2026-07-03T09:10:03.679429+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 656000, "qty": 8, "proceeds": 5237766, "entry_price": 761500, "pnl": -855147, "pnl_pct": -13.85, "hold_from": "2026-06-29T11:36:01.274495+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "662,371 (현재 657,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 959,757"}, {"label": "추세(20일선)", "ok": false, "detail": "672,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -51 · 기 +3"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.780679+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 309, "cost": 5884243, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17921, "target": 21277, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T12:00:02.655618+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28800, "qty": 204, "cost": 5876081, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26795, "target": 32810, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,750 vs 25,942"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,090 / 25,942"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,090 / 25,214"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+8.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 +1,952 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.38% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,054,442 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.38% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T09:00:10.612644+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1993000, "qty": 2, "cost": 3986598, "path": "pullback", "reason": "눌림목 지정가 1,995,439 도달", "stop": 1901000, "target": 2177000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,975,000 vs 1,967,450"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,037,400 / 1,967,450"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,037,400 / 1,295,367"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +151 · 기 +57 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.82% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": false, "detail": "615,080 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "0.82% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,995,439 (현재 1,975,000)"}]}
|
||||
{"ts": "2026-07-06T09:00:10.615930+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 690000, "qty": 5, "cost": 3450518, "path": "pullback", "reason": "눌림목 지정가 747,129 도달", "stop": 604000, "target": 862000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "695,000 vs 674,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "757,000 / 674,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "757,000 / 529,783"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -81 · 기 +57 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.17% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "124,240 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.17% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 747,129 (현재 695,000)"}]}
|
||||
{"ts": "2026-07-06T09:18:01.676321+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29500, "qty": 199, "cost": 5871381, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26795, "target": 32810, "signals": [{"label": "손절선", "ok": true, "detail": "26,795 (현재 29,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,810"}, {"label": "추세(20일선)", "ok": true, "detail": "25,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -142 · 기 +2,052"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,483"}]}
|
||||
{"ts": "2026-07-06T09:32:06.685583+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 322000, "qty": 30, "proceeds": 9641163, "entry_price": 353750, "pnl": -972929, "pnl_pct": -8.98, "hold_from": "2026-06-30T09:02:03.196117+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "322,040 (현재 322,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 417,170"}, {"label": "추세(20일선)", "ok": true, "detail": "295,225"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T09:34:02.069889+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 53, "cost": 5830875, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 101901, "target": 126197, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,300 vs 97,320"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,240 / 97,320"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T10:06:02.783059+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 2, "proceeds": 3792590, "entry_price": 1993000, "pnl": -194008, "pnl_pct": -4.67, "hold_from": "2026-07-06T09:00:10.612637+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,177,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,089,780"}]}
|
||||
{"ts": "2026-07-07T09:12:07.274613+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155900, "qty": 16, "cost": 2494774, "path": "pullback", "reason": "눌림목 지정가 158,314 도달", "stop": 127872, "target": 211957, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,800 vs 136,205"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,800 / 136,205"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,800 / 99,713"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -197 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.33% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "645,567 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.33% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,314 (현재 155,800)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.239582+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 172, "proceeds": 2099458, "entry_price": 14660, "pnl": -422440, "pnl_pct": -16.58, "hold_from": "2026-07-03T09:02:04.930276+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,914 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,152"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,662"}]}
|
||||
{"ts": "2026-07-07T14:08:59.775629+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26600, "qty": 403, "proceeds": 10698896, "entry_price": 29146, "pnl": -1048565, "pnl_pct": -8.73, "hold_from": "2026-07-03T12:00:02.655615+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "27,098 (현재 26,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 33,241"}, {"label": "추세(20일선)", "ok": true, "detail": "25,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -532 · 기 +3,040"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T14:09:02.333014+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 11, "cost": 2016602, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104263, "target": 191674, "signals": [{"label": "손절선", "ok": true, "detail": "104,263 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,674"}, {"label": "추세(20일선)", "ok": true, "detail": "120,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 141,825"}]}
|
||||
{"ts": "2026-07-07T14:09:02.334098+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 99600, "qty": 53, "proceeds": 5268506, "entry_price": 110000, "pnl": -562368, "pnl_pct": -9.45, "hold_from": "2026-07-06T09:34:02.069888+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "101,901 (현재 99,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 126,197"}, {"label": "추세(20일선)", "ok": true, "detail": "96,645"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -733 · 기 +1,535"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,480"}]}
|
||||
{"ts": "2026-07-07T14:09:02.334527+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 14, "cost": 2478372, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 127872, "target": 211957, "signals": [{"label": "손절선", "ok": true, "detail": "127,872 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,957"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,142"}]}
|
||||
{"ts": "2026-07-07T14:09:05.070494+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 284, "cost": 5893884, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17921, "target": 21277, "signals": [{"label": "손절선", "ok": true, "detail": "17,921 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,277"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-07T14:09:05.071322+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 604000, "target": 862000, "signals": [{"label": "손절선", "ok": true, "detail": "604,000 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 862,000"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 721,777"}]}
|
||||
{"ts": "2026-07-08T09:00:18.539196+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 27, "proceeds": 2918398, "entry_price": 153730, "pnl": -1232925, "pnl_pct": -29.55, "hold_from": "2026-07-03T09:02:04.930159+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,455 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 204,279"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:18.540319+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 137900, "qty": 30, "proceeds": 4128933, "entry_price": 165747, "pnl": -844213, "pnl_pct": -16.8, "hold_from": "2026-07-07T09:12:07.274612+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "138,020 (현재 137,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 221,200"}, {"label": "추세(20일선)", "ok": true, "detail": "135,310"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +458 · 기 -572"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:18.540951+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 9, "proceeds": 5407435, "entry_price": 745556, "pnl": -1303572, "pnl_pct": -19.25, "hold_from": "2026-07-06T09:00:10.615923+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "650,225 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 936,217"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:12:05.971902+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18900, "qty": 593, "proceeds": 11185845, "entry_price": 19859, "pnl": -592281, "pnl_pct": -4.83, "hold_from": "2026-07-03T10:24:02.780678+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,905 (현재 18,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,767"}, {"label": "추세(20일선)", "ok": true, "detail": "18,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.877778+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 34, "cost": 5478222, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 167300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.972671+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 34, "proceeds": 5347951, "entry_price": 161100, "pnl": -130270, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.877777+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 167,300"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.468926+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 144400, "qty": 14, "cost": 2021903, "path": "pullback", "reason": "눌림목 지정가 156,479 도달", "stop": 113618, "target": 205964, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "144,400 vs 135,635"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,520 / 135,635"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,520 / 99,523"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+42.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +503 · 기 -501 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.94% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "569,187 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.94% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,479 (현재 144,400)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.469080+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 284, "cost": 5428054, "path": "pullback", "reason": "눌림목 지정가 20,021 도달", "stop": 18017, "target": 21296, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,021 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.469208+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 34, "cost": 5383007, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 158900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:10:01.830228+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 39, "cost": 5160474, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121211, "target": 154477, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,100 vs 108,930"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,600 / 108,930"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T09:12:02.512640+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 34, "proceeds": 5324198, "entry_price": 158300, "pnl": -58810, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.469207+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:00:12.254806+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158000, "qty": 12, "cost": 1896284, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113618, "target": 205964, "signals": [{"label": "손절선", "ok": true, "detail": "113,618 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 205,964"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +452 · 기 -360"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,000"}]}
|
||||
{"ts": "2026-07-10T09:00:12.255872+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 33, "cost": 5412812, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 176000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.625956+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110900, "qty": 49, "cost": 5434915, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 102716, "target": 127268, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,700 vs 97,340"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,320 / 97,340"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,320 / 96,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -756 · 기 +893 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,541,113 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-10T09:28:02.626187+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 29, "cost": 5391909, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 171311, "target": 215077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.479245+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 177, "cost": 2271251, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 17770, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T10:14:04.442897+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 173600, "qty": 31, "cost": 5382407, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 176000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 173,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,470"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +205 · 기 -155"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 173,548"}]}
|
||||
{"ts": "2026-07-10T11:16:02.480010+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 164, "cost": 2271741, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 17770, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,770"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-13T09:00:11.349887+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 38, "cost": 5202980, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 121211, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "121,211 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:36:02.278182+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 28, "cost": 5348802, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 171311, "target": 215077, "signals": [{"label": "손절선", "ok": true, "detail": "171,311 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,077"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.359037+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 64, "proceeds": 12002150, "entry_price": 168650, "pnl": 1206931, "pnl_pct": 11.41, "hold_from": "2026-07-10T09:00:12.255866+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T09:02:02.651823+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 135500, "qty": 15, "cost": 2032805, "path": "pullback", "reason": "눌림목 지정가 164,061 도달", "stop": 106641, "target": 193217, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "134,900 vs 120,585"}, {"label": "정배열(5>20)", "ok": true, "detail": "139,000 / 120,585"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "139,000 / 121,348"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,752 · 기 +1,989 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.30% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "636,187 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.30% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,061 (현재 134,900)"}]}
|
||||
{"ts": "2026-07-16T09:00:09.696452+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 26, "proceeds": 5423404, "entry_price": 150677, "pnl": 1505216, "pnl_pct": 38.71, "hold_from": "2026-07-09T09:02:04.468924+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "138,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:09.698334+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 284, "proceeds": 5266430, "entry_price": 19110, "pnl": -161624, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.469079+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,296"}, {"label": "추세(20일선)", "ok": false, "detail": "18,832"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-16T14:16:02.484959+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 145700, "qty": 14, "cost": 2040106, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 106641, "target": 193217, "signals": [{"label": "손절선", "ok": true, "detail": "106,641 (현재 145,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 193,217"}, {"label": "추세(20일선)", "ok": true, "detail": "121,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,717 · 기 +2,299"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,295"}]}
|
||||
{"ts": "2026-07-20T09:04:02.883312+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 102700, "qty": 49, "proceeds": 5022487, "entry_price": 110900, "pnl": -412428, "pnl_pct": -7.39, "hold_from": "2026-07-10T09:28:02.625955+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "102,716 (현재 102,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 127,268"}, {"label": "추세(20일선)", "ok": true, "detail": "96,940"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +265"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 113,514"}]}
|
||||
{"ts": "2026-07-20T09:04:02.883701+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 173000, "qty": 57, "proceeds": 9841771, "entry_price": 188405, "pnl": -898940, "pnl_pct": -8.18, "hold_from": "2026-07-10T09:28:02.626186+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "173,249 (현재 173,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 218,718"}, {"label": "추세(20일선)", "ok": true, "detail": "159,270"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -332 · 기 +291"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.319650+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 341, "proceeds": 3508854, "entry_price": 13321, "pnl": -1034137, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.479243+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,242"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.282718+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 104, "proceeds": 13680471, "entry_price": 120162, "pnl": 1181796, "pnl_pct": 9.69, "hold_from": "2026-07-01T09:46:03.088452+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T10:08:04.176921+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 133100, "qty": 41, "cost": 5457919, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 123458, "target": 152385, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,000 vs 118,895"}, {"label": "정배열(5>20)", "ok": true, "detail": "123,200 / 118,895"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,200 / 118,615"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+38.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +137 · 기 +185 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.57% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,575,915 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.57% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-07-21T10:12:01.049414+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 32, "cost": 5344802, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 185000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.173992+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 14, "cost": 4823723, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 405884, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:07.219239+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 31, "cost": 5506426, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 185000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 185,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.822293+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 55, "cost": 5456818, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 113400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.742954+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 63, "proceeds": 9890576, "entry_price": 172216, "pnl": -960652, "pnl_pct": -8.66, "hold_from": "2026-07-21T10:12:01.049412+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 200,648"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.429023+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 196, "cost": 2750292, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11815, "target": 18460, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-22T15:04:01.000490+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158100, "qty": 15, "cost": 2371856, "path": "pullback", "reason": "눌림목 지정가 158,107 도달", "stop": 129761, "target": 214778, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -311 · 기 +22 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.02% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "971,360 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "5.02% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,107 (현재 158,000)"}]}
|
||||
{"ts": "2026-07-23T09:00:22.967757+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 33, "cost": 5284092, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 164300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.415818+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 33, "proceeds": 5197246, "entry_price": 160100, "pnl": -86847, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:22.967750+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.290079+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 288, "cost": 5429614, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 21030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T10:50:06.147431+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 110600, "qty": 29, "proceeds": 3201146, "entry_price": 140424, "pnl": -871765, "pnl_pct": -21.24, "hold_from": "2026-07-15T09:02:02.651821+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "111,041 (현재 110,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 199,191"}, {"label": "추세(20일선)", "ok": false, "detail": "119,375"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -847 · 기 +78"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T10:50:06.624000+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14210, "qty": 237, "cost": 3368275, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 12373, "target": 17884, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,210 vs 10,945"}, {"label": "정배열(5>20)", "ok": true, "detail": "13,160 / 10,945"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,160 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "85.12% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,769,006 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "85.12% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:18:01.548380+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 53, "cost": 5465120, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 113400, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,400"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.599151+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 13, "cost": 4628694, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 405884, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 405,884"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-24T09:00:06.141552+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 288, "proceeds": 5383721, "entry_price": 18850, "pnl": -45893, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.290078+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,030"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:02:04.046831+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 223, "cost": 3358884, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 12373, "target": 17884, "signals": [{"label": "손절선", "ok": true, "detail": "12,373 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,884"}, {"label": "추세(20일선)", "ok": true, "detail": "10,986"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,836"}]}
|
||||
{"ts": "2026-07-24T09:26:01.012058+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 94000, "qty": 49, "cost": 4606691, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 85262, "target": 111476, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "93,900 vs 75,355"}, {"label": "정배열(5>20)", "ok": true, "detail": "84,140 / 75,355"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "84,140 / 75,153"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -113 · 기 +274 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.90% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "829,560 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.90% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-24T09:28:04.953126+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 189, "cost": 2742801, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11815, "target": 18460, "signals": [{"label": "손절선", "ok": true, "detail": "11,815 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,460"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T09:48:01.201233+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 97000, "qty": 48, "cost": 4656698, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 85262, "target": 111476, "signals": [{"label": "손절선", "ok": true, "detail": "85,262 (현재 97,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,476"}, {"label": "추세(20일선)", "ok": true, "detail": "75,510"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -113 · 기 +274"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,977"}]}
|
||||
{"ts": "2026-07-27T09:04:05.318974+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12200, "qty": 460, "proceeds": 5601057, "entry_price": 14622, "pnl": -1126102, "pnl_pct": -16.56, "hold_from": "2026-07-23T10:50:06.623985+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,744 (현재 12,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,378"}, {"label": "추세(20일선)", "ok": true, "detail": "10,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:06:01.482560+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19170, "qty": 278, "cost": 5330059, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 18093, "target": 21324, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,060 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,598 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,598 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "153,733 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,060)"}]}
|
||||
{"ts": "2026-07-28T09:00:16.370466+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 126200, "qty": 15, "proceeds": 1889309, "entry_price": 158100, "pnl": -482547, "pnl_pct": -20.18, "hold_from": "2026-07-22T15:04:01.000489+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "129,761 (현재 128,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,778"}, {"label": "추세(20일선)", "ok": false, "detail": "134,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 168,554"}]}
|
||||
{"ts": "2026-07-28T09:00:16.371386+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 486, "cost": 3295574, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5916, "target": 8509, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:02:04.754909+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11920, "qty": 385, "proceeds": 4580251, "entry_price": 14266, "pnl": -912843, "pnl_pct": -16.44, "hold_from": "2026-07-22T14:18:05.429022+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,983 (현재 11,960)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,830"}, {"label": "추세(20일선)", "ok": false, "detail": "12,673"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 -61"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:10:01.747136+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 464, "cost": 3294894, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 8509, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,509"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T13:24:01.023779+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 123300, "qty": 41, "proceeds": 5045442, "entry_price": 133100, "pnl": -412476, "pnl_pct": -7.36, "hold_from": "2026-07-21T10:08:04.176920+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "123,458 (현재 123,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,385"}, {"label": "추세(20일선)", "ok": true, "detail": "118,415"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +122 · 기 -106"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,361"}]}
|
||||
{"ts": "2026-07-29T09:02:02.235829+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 43, "cost": 5070460, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 131300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:04:02.482605+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 85500, "qty": 97, "proceeds": 8277328, "entry_price": 95485, "pnl": -986062, "pnl_pct": -10.46, "hold_from": "2026-07-24T09:26:01.012056+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "86,554 (현재 85,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,346"}, {"label": "추세(20일선)", "ok": true, "detail": "74,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -59 · 기 +284"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:16:04.470378+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 42, "cost": 5061759, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 131300, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,300"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:09.991614+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 281, "cost": 5325749, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 18093, "target": 21324, "signals": [{"label": "손절선", "ok": true, "detail": "18,093 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,324"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,488"}]}
|
||||
{"ts": "2026-07-29T09:24:09.992155+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 77, "proceeds": 9882891, "entry_price": 134570, "pnl": -480564, "pnl_pct": -4.44, "hold_from": "2026-07-09T09:10:01.830227+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "122,978 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,755"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.387952+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 801, "cost": 5119158, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 7174, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:42:05.416427+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 801, "proceeds": 4780640, "entry_price": 6390, "pnl": -338518, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.387951+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(20일선)", "ok": true, "detail": "5,338"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T11:18:04.428660+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6000, "qty": 950, "proceeds": 5688885, "entry_price": 6936, "pnl": -901583, "pnl_pct": -13.5, "hold_from": "2026-07-28T09:00:16.371383+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,040 (현재 6,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,729"}, {"label": "추세(20일선)", "ok": true, "detail": "4,803"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T09:04:07.484190+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 40, "cost": 4852728, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111347, "target": 141206, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.484679+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 404, "cost": 2476891, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 5127, "target": 8135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.934766+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 39, "cost": 4883532, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111347, "target": 141206, "signals": [{"label": "손절선", "ok": true, "detail": "111,347 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,206"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:16:11.935114+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 37, "cost": 4844026, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 119833, "target": 153035, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "130,900 vs 108,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,360 / 108,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.171049+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 813, "cost": 5130800, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5927, "target": 7077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.439672+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 108, "proceeds": 9884288, "entry_price": 101114, "pnl": -1037650, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.822292+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,142"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.833676+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 47, "cost": 4131920, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79505, "target": 104690, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.022640+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 378, "cost": 2476271, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.022939+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 47, "proceeds": 3644779, "entry_price": 87900, "pnl": -487141, "pnl_pct": -11.6, "hold_from": "2026-07-30T12:04:07.833673+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,505 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,690"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,898"}]}
|
||||
{"ts": "2026-08-03T09:36:12.036330+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 119700, "qty": 37, "proceeds": 4420264, "entry_price": 130900, "pnl": -423763, "pnl_pct": -8.56, "hold_from": "2026-07-30T09:16:11.935111+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,833 (현재 119,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 153,035"}, {"label": "추세(20일선)", "ok": true, "detail": "108,315"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,411"}]}
|
||||
{"ts": "2026-08-03T12:00:11.814098+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 332, "cost": 4286763, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 15304, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.760295+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 320, "cost": 4295044, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:09.467468+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 12, "cost": 1631045, "path": "pullback", "reason": "눌림목 지정가 156,279 도달", "stop": 104818, "target": 198064, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,279 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-04T09:48:09.380105+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5920, "qty": 813, "proceeds": 4803575, "entry_price": 6310, "pnl": -327225, "pnl_pct": -6.18, "hold_from": "2026-07-30T09:18:10.171043+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,927 (현재 5,925)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,077"}, {"label": "추세(20일선)", "ok": true, "detail": "5,336"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +34 · 기 +9"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,429"}]}
|
||||
{"ts": "2026-08-04T09:48:09.782738+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90400, "qty": 48, "cost": 4339851, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82176, "target": 106848, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,400 vs 75,180"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,440 / 75,180"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,440 / 75,095"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+57.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "783,140 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:12.784971+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 46, "cost": 4301645, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82176, "target": 106848, "signals": [{"label": "손절선", "ok": true, "detail": "82,176 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,848"}, {"label": "추세(20일선)", "ok": true, "detail": "75,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 93,241"}]}
|
||||
{"ts": "2026-08-05T09:00:15.136122+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 11, "cost": 1623844, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104818, "target": 198064, "signals": [{"label": "손절선", "ok": true, "detail": "104,818 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 198,064"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-06T09:00:19.346339+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 559, "proceeds": 10449653, "entry_price": 19059, "pnl": -206155, "pnl_pct": -1.73, "hold_from": "2026-07-27T09:06:01.482556+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,105 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,968"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:00:19.347943+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13300, "qty": 174, "cost": 2314547, "path": "pullback", "reason": "눌림목 지정가 13,975 도달", "stop": 11012, "target": 17875, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,300 vs 12,740"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,408 / 12,740"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,408 / 13,271"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -352 · 기 +499 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "7 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,975 (현재 13,300)"}]}
|
||||
{"ts": "2026-08-07T09:02:12.182518+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14290, "qty": 162, "cost": 2315327, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11012, "target": 17875, "signals": [{"label": "손절선", "ok": true, "detail": "11,012 (현재 14,240)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,875"}, {"label": "추세(20일선)", "ok": true, "detail": "12,787"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -216 · 기 +313"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,046"}]}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"cash": 30174817.51399994,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 831,
|
||||
"entry_price": 6333.1768953068595,
|
||||
"entry_at": "2026-07-30T09:04:07.489609+09:00",
|
||||
"stop": 5363,
|
||||
"target": 7789,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2634409.858223602,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 681,
|
||||
"entry_price": 13160.132158590308,
|
||||
"entry_at": "2026-08-03T12:00:11.819202+09:00",
|
||||
"stop": 11874,
|
||||
"target": 15089,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4489026.732352336,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 25,
|
||||
"entry_price": 141516.0,
|
||||
"entry_at": "2026-08-04T09:04:09.472084+09:00",
|
||||
"stop": 111709,
|
||||
"target": 186227,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 145,918 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1812315.6154018787,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 98,
|
||||
"entry_price": 91714.28571428571,
|
||||
"entry_at": "2026-08-04T09:34:09.331555+09:00",
|
||||
"stop": 83191,
|
||||
"target": 104500,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4576294.319379674,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 325,
|
||||
"entry_price": 13205.784615384615,
|
||||
"entry_at": "2026-08-04T11:00:12.174914+09:00",
|
||||
"stop": 10876,
|
||||
"target": 16700,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,033 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2154436.3245398356,
|
||||
"last_add_price": 13640
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 52,
|
||||
"entry_price": 196100.0,
|
||||
"entry_at": "2026-08-06T09:14:10.570384+09:00",
|
||||
"stop": 183083,
|
||||
"target": 215625,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5207451.256718745,
|
||||
"last_add_price": 198600
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 41,
|
||||
"entry_price": 124100,
|
||||
"entry_at": "2026-08-06T09:34:15.935443+09:00",
|
||||
"stop": 116569,
|
||||
"target": 135396,
|
||||
"peak": 126400,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5180171.914218746,
|
||||
"last_add_price": 124100
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 267,
|
||||
"entry_price": 19170,
|
||||
"entry_at": "2026-08-07T11:26:13.309490+09:00",
|
||||
"stop": 18088,
|
||||
"target": 20793,
|
||||
"peak": 19270,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,668 도달",
|
||||
"cur_price": 18970,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5126950.954531247,
|
||||
"last_add_price": 19170
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18371075.527500026,
|
||||
"closed_trades": 46,
|
||||
"wins": 6,
|
||||
"peak_equity": 100161893.89500001,
|
||||
"max_drawdown": 0.18418431144422467,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-28",
|
||||
"030000": "2026-08-06",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-02",
|
||||
"003490": "2026-07-07",
|
||||
"240810": "2026-07-23",
|
||||
"093370": "2026-07-20",
|
||||
"214450": "2026-08-07",
|
||||
"055550": "2026-07-20",
|
||||
"034730": "2026-07-08",
|
||||
"319660": "2026-07-23",
|
||||
"095610": "2026-07-29",
|
||||
"105560": "2026-07-20",
|
||||
"010950": "2026-08-03",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-08-04",
|
||||
"252990": "2026-07-28",
|
||||
"090850": "2026-08-06",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582849+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.957758+09:00"
|
||||
}
|
||||
@@ -0,0 +1,124 @@
|
||||
{"ts": "2026-06-17T11:15:02.373468+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121254, "target": 145369, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.419908+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 15, "cost": 5603340, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 341819, "target": 421021, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "373,000 vs 325,400"}, {"label": "정배열(5>20)", "ok": true, "detail": "352,400 / 325,400"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.420289+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 18100, "target": 20749, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-19T13:32:02.863105+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 121100, "qty": 47, "proceeds": 5680601, "entry_price": 130900, "pnl": -472622, "pnl_pct": -7.49, "hold_from": "2026-06-17T11:15:02.373467+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,254 (현재 121,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 145,369"}, {"label": "추세(20일선)", "ok": true, "detail": "118,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +531 · 기 -129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,178"}]}
|
||||
{"ts": "2026-06-23T09:00:11.412554+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.420288+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,749"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T09:26:03.174954+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 339500, "qty": 15, "proceeds": 5082570, "entry_price": 373500, "pnl": -520771, "pnl_pct": -9.1, "hold_from": "2026-06-19T09:02:06.419907+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "341,819 (현재 340,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 421,021"}, {"label": "추세(20일선)", "ok": true, "detail": "329,525"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,330 · 기 +1,369"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,493"}]}
|
||||
{"ts": "2026-06-24T09:02:02.384682+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 68200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,200 vs 52,378"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,960 / 52,378"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:00.996646+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 18, "cost": 2797620, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 128063, "target": 196406, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,400 vs 121,610"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,100 / 121,610"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.755437+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 213, "cost": 6156623, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26911, "target": 31883, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:08.028417+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.384681+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 68,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.906588+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 17, "cost": 2803720, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 128063, "target": 196406, "signals": [{"label": "손절선", "ok": true, "detail": "128,063 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 196,406"}, {"label": "추세(20일선)", "ok": true, "detail": "122,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:09.070574+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 44022, "target": 72218, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.198048+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 15, "cost": 5213282, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 316272, "target": 394342, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "347,000 vs 296,475"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,600 / 296,475"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.690639+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 15, "cost": 5400810, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 316272, "target": 394342, "signals": [{"label": "손절선", "ok": true, "detail": "316,272 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 394,342"}, {"label": "추세(20일선)", "ok": true, "detail": "297,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-01T09:46:03.094629+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 52, "cost": 6147322, "path": "pullback", "reason": "눌림목 지정가 118,779 도달", "stop": 111000, "target": 129000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,779 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T09:00:22.920464+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 707000, "qty": 4, "cost": 2828424, "path": "pullback", "reason": "눌림목 지정가 714,693 도달", "stop": 606693, "target": 857461, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "714,000 vs 675,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "760,800 / 675,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "760,800 / 530,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -198 · 기 +92 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.32% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "230,413 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.32% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 714,693 (현재 714,000)"}]}
|
||||
{"ts": "2026-07-02T09:08:01.927589+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26900, "qty": 213, "proceeds": 5718527, "entry_price": 28900, "pnl": -438096, "pnl_pct": -6.92, "hold_from": "2026-06-25T09:04:05.755436+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,911 (현재 26,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 31,883"}, {"label": "추세(20일선)", "ok": true, "detail": "25,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -249 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,517"}]}
|
||||
{"ts": "2026-07-02T10:18:03.852108+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 184, "cost": 2940761, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 13328, "target": 19958, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "15,980 vs 12,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,104 / 12,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.852576+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 129000, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,000"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T10:34:04.129838+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 325, "cost": 6130419, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 20510, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.066064+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20510, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,510"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:22:01.974965+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 597, "proceeds": 11320881, "entry_price": 20541, "pnl": -944058, "pnl_pct": -7.5, "hold_from": "2026-07-02T10:34:04.129836+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,371 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,296"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:48:03.083104+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 133000, "qty": 35, "proceeds": 4645923, "entry_price": 160014, "pnl": -955417, "pnl_pct": -16.88, "hold_from": "2026-06-24T09:08:00.996645+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "133,138 (현재 133,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 200,329"}, {"label": "추세(20일선)", "ok": true, "detail": "120,490"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.195753+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:09.070565+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 72,218"}, {"label": "추세(20일선)", "ok": false, "detail": "51,912"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:02:04.932435+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 154,163 도달", "stop": 104263, "target": 177106, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,300 vs 120,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,680 / 120,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,163 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:56:06.778013+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 13310, "qty": 184, "proceeds": 2444264, "entry_price": 15980, "pnl": -496497, "pnl_pct": -16.71, "hold_from": "2026-07-02T10:18:03.852106+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "13,328 (현재 13,320)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,958"}, {"label": "추세(20일선)", "ok": true, "detail": "12,716"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,944"}]}
|
||||
{"ts": "2026-07-03T10:24:02.782678+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 313, "cost": 5960414, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17921, "target": 20718, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T12:00:02.658109+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28800, "qty": 207, "cost": 5962494, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26795, "target": 31807, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,750 vs 25,942"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,090 / 25,942"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,090 / 25,214"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+8.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 +1,952 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.38% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,054,442 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.38% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T09:00:10.720383+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14510, "qty": 172, "cost": 2496094, "path": "pullback", "reason": "눌림목 지정가 16,248 도달", "stop": 11748, "target": 18653, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,490 vs 12,774"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,806 / 12,774"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,806 / 11,453"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,226 · 기 +134 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.02% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "20,667 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.02% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,248 (현재 14,490)"}]}
|
||||
{"ts": "2026-07-06T09:18:01.678295+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29500, "qty": 202, "cost": 5959894, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26795, "target": 31807, "signals": [{"label": "손절선", "ok": true, "detail": "26,795 (현재 29,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 31,807"}, {"label": "추세(20일선)", "ok": true, "detail": "25,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -142 · 기 +2,052"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,483"}]}
|
||||
{"ts": "2026-07-06T09:32:06.687499+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 322000, "qty": 30, "proceeds": 9641163, "entry_price": 353750, "pnl": -972929, "pnl_pct": -8.98, "hold_from": "2026-06-30T09:02:03.198047+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "322,040 (현재 322,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 401,315"}, {"label": "추세(20일선)", "ok": true, "detail": "295,225"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T09:34:02.072447+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 53, "cost": 5830875, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 101901, "target": 122148, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,300 vs 97,320"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,240 / 97,320"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-07T10:06:07.254677+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147500, "qty": 16, "cost": 2360354, "path": "pullback", "reason": "눌림목 지정가 148,050 도달", "stop": 118550, "target": 190925, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "147,400 vs 135,785"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,120 / 135,785"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,120 / 99,573"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +96 · 기 -196 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.06% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,366,200 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "7.06% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 148,050 (현재 147,400)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.242336+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 172, "proceeds": 2099458, "entry_price": 14510, "pnl": -396636, "pnl_pct": -15.71, "hold_from": "2026-07-06T09:00:10.720378+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,748 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,653"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,512"}]}
|
||||
{"ts": "2026-07-07T14:09:07.839518+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26600, "qty": 409, "proceeds": 10858185, "entry_price": 29146, "pnl": -1064203, "pnl_pct": -8.73, "hold_from": "2026-07-03T12:00:02.658107+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "27,098 (현재 26,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,217"}, {"label": "추세(20일선)", "ok": true, "detail": "25,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -532 · 기 +3,040"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T14:09:10.517865+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 99600, "qty": 53, "proceeds": 5268506, "entry_price": 110000, "pnl": -562368, "pnl_pct": -9.45, "hold_from": "2026-07-06T09:34:02.072445+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "101,901 (현재 99,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,148"}, {"label": "추세(20일선)", "ok": true, "detail": "96,645"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -733 · 기 +1,535"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,480"}]}
|
||||
{"ts": "2026-07-07T14:09:10.518815+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 13, "cost": 2301345, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118550, "target": 190925, "signals": [{"label": "손절선", "ok": true, "detail": "118,550 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 190,925"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 156,742"}]}
|
||||
{"ts": "2026-07-07T14:09:13.266017+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 606693, "target": 857461, "signals": [{"label": "손절선", "ok": true, "detail": "606,693 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 857,461"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 738,777"}]}
|
||||
{"ts": "2026-07-08T09:00:18.642297+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 16, "proceeds": 1729421, "entry_price": 133400, "pnl": -405299, "pnl_pct": -18.82, "hold_from": "2026-07-03T09:02:04.932434+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:18.643415+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19110, "qty": 313, "proceeds": 5969766, "entry_price": 19040, "pnl": 9352, "pnl_pct": 0.37, "hold_from": "2026-07-03T10:24:02.782677+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,796 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:18.643833+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 8, "proceeds": 4806609, "entry_price": 761000, "pnl": -1282304, "pnl_pct": -20.89, "hold_from": "2026-07-02T09:00:22.920458+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "665,669 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 903,996"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:02:04.471279+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 295, "cost": 5638296, "path": "pullback", "reason": "눌림목 지정가 19,657 도달", "stop": 18017, "target": 20749, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,657 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.471408+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 35, "cost": 5541331, "path": "pullback", "reason": "눌림목 지정가 158,582 도달", "stop": 158000, "target": 158750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,582 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:10:01.832068+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 40, "cost": 5292794, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121211, "target": 148933, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,100 vs 108,930"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,600 / 108,930"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T09:12:02.514470+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 35, "proceeds": 5480792, "entry_price": 158300, "pnl": -60540, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.471407+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:24:02.110194+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158900, "qty": 36, "cost": 5721258, "path": "pullback", "reason": "눌림목 지정가 159,557 도달", "stop": 158000, "target": 160250, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,800 vs 149,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,400 / 149,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,400 / 113,205"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.62% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,627,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "5.62% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,557 (현재 158,800)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.628177+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110900, "qty": 51, "cost": 5656748, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 102716, "target": 123176, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,700 vs 97,340"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,320 / 97,340"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,320 / 96,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -756 · 기 +893 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,541,113 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-10T09:28:02.628442+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 30, "cost": 5577837, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 171311, "target": 207783, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.481167+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 185, "cost": 2373906, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 16535, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.481956+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 171, "cost": 2368705, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 16535, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,535"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-13T09:00:11.456776+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 39, "cost": 5339901, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 121211, "target": 148933, "signals": [{"label": "손절선", "ok": true, "detail": "121,211 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 148,933"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:36:02.280029+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 29, "cost": 5539831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 171311, "target": 207783, "signals": [{"label": "손절선", "ok": true, "detail": "171,311 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 207,783"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.360896+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 36, "proceeds": 6751209, "entry_price": 158900, "pnl": 1029951, "pnl_pct": 18.25, "hold_from": "2026-07-10T09:24:02.110193+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T09:02:02.654017+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 135500, "qty": 16, "cost": 2168325, "path": "pullback", "reason": "눌림목 지정가 154,441 도달", "stop": 106641, "target": 178788, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "134,900 vs 120,585"}, {"label": "정배열(5>20)", "ok": true, "detail": "139,000 / 120,585"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "139,000 / 121,348"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,752 · 기 +1,989 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.30% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "636,187 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.30% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,441 (현재 134,900)"}]}
|
||||
{"ts": "2026-07-16T09:00:09.801744+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 29, "proceeds": 6049181, "entry_price": 160724, "pnl": 1387482, "pnl_pct": 30.04, "hold_from": "2026-07-07T10:06:07.254675+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "138,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:09.803580+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 295, "proceeds": 5470412, "entry_price": 19110, "pnl": -167884, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.471277+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,749"}, {"label": "추세(20일선)", "ok": false, "detail": "18,832"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-16T14:16:02.487100+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 145700, "qty": 15, "cost": 2185828, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 106641, "target": 178788, "signals": [{"label": "손절선", "ok": true, "detail": "106,641 (현재 145,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 178,788"}, {"label": "추세(20일선)", "ok": true, "detail": "121,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,717 · 기 +2,299"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,295"}]}
|
||||
{"ts": "2026-07-20T09:04:02.885762+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 102700, "qty": 51, "proceeds": 5227486, "entry_price": 110900, "pnl": -429262, "pnl_pct": -7.39, "hold_from": "2026-07-10T09:28:02.628175+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "102,716 (현재 102,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 123,176"}, {"label": "추세(20일선)", "ok": true, "detail": "96,940"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +265"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 113,514"}]}
|
||||
{"ts": "2026-07-20T09:04:02.886160+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 173000, "qty": 59, "proceeds": 10187096, "entry_price": 188407, "pnl": -930571, "pnl_pct": -8.18, "hold_from": "2026-07-10T09:28:02.628441+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "173,250 (현재 173,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,142"}, {"label": "추세(20일선)", "ok": true, "detail": "159,270"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -332 · 기 +291"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.321513+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 356, "proceeds": 3663203, "entry_price": 13320, "pnl": -1079408, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.481166+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,760"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.284611+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 103, "proceeds": 13548928, "entry_price": 120181, "pnl": 1168471, "pnl_pct": 9.67, "hold_from": "2026-07-01T09:46:03.094624+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T10:08:04.179068+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 133100, "qty": 42, "cost": 5591039, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 123458, "target": 147564, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,000 vs 118,895"}, {"label": "정배열(5>20)", "ok": true, "detail": "123,200 / 118,895"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,200 / 118,615"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+38.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +137 · 기 +185 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.57% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,575,915 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.57% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-07-21T12:06:01.175731+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 14, "cost": 4823723, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 390538, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T11:56:00.832893+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 159800, "qty": 35, "cost": 5593839, "path": "pullback", "reason": "눌림목 지정가 159,932 도달", "stop": 158000, "target": 162500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "159,700 vs 149,775"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,580 / 149,775"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,580 / 113,220"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+75.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -408 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.73% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,371,014 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.73% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,932 (현재 159,700)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.744641+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 35, "proceeds": 5494764, "entry_price": 159800, "pnl": -99075, "pnl_pct": -1.56, "hold_from": "2026-07-22T11:56:00.832892+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 162,500"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,305"}]}
|
||||
{"ts": "2026-07-23T09:00:23.070728+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 35, "cost": 5604341, "path": "pullback", "reason": "눌림목 지정가 159,493 도달", "stop": 158000, "target": 163250, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,493 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.417538+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 35, "proceeds": 5512230, "entry_price": 160100, "pnl": -92110, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:23.070721+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.292322+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 302, "cost": 5693554, "path": "pullback", "reason": "눌림목 지정가 19,627 도달", "stop": 17760, "target": 20485, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,627 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:46:06.366618+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88400, "qty": 57, "cost": 5039556, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 80433, "target": 100350, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,300 vs 75,075"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,020 / 75,075"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,020 / 75,060"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "743,133 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.490114+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 250, "cost": 3535530, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 12315, "target": 16878, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,180 vs 10,944"}, {"label": "정배열(5>20)", "ok": true, "detail": "13,154 / 10,944"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T10:50:06.634622+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 110600, "qty": 31, "proceeds": 3421914, "entry_price": 140435, "pnl": -932239, "pnl_pct": -21.24, "hold_from": "2026-07-15T09:02:02.654015+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "111,052 (현재 110,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 184,511"}, {"label": "추세(20일선)", "ok": false, "detail": "119,375"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -847 · 기 +78"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T12:22:02.600930+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 390538, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 390,538"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T13:06:04.443405+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 91400, "qty": 55, "cost": 5027754, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 80433, "target": 100350, "signals": [{"label": "손절선", "ok": true, "detail": "80,433 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,350"}, {"label": "추세(20일선)", "ok": true, "detail": "75,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,159"}]}
|
||||
{"ts": "2026-07-24T09:00:06.251306+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 302, "proceeds": 5645430, "entry_price": 18850, "pnl": -48124, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.292321+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,485"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:02:04.048541+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 235, "cost": 3539631, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 12315, "target": 16878, "signals": [{"label": "손절선", "ok": true, "detail": "12,315 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,878"}, {"label": "추세(20일선)", "ok": true, "detail": "10,986"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-27T09:02:06.237127+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 139000, "qty": 15, "cost": 2085313, "path": "pullback", "reason": "눌림목 지정가 146,775 도달", "stop": 108775, "target": 184337, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "138,700 vs 135,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "168,380 / 135,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "168,380 / 99,428"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +238 · 기 -568 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.72% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "526,333 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.72% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 146,775 (현재 138,700)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.237379+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 301, "cost": 5749962, "path": "pullback", "reason": "눌림목 지정가 19,673 도달", "stop": 18023, "target": 20715, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,673 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.237561+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 556, "cost": 4153943, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6645, "target": 8707, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:04:05.321093+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 143200, "qty": 79, "proceeds": 11290740, "entry_price": 134571, "pnl": 658045, "pnl_pct": 6.41, "hold_from": "2026-07-09T09:10:01.832067+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "143,490 (현재 143,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "109,490"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +123 · 기 +226"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:04:05.321248+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12200, "qty": 485, "proceeds": 5905462, "entry_price": 14586, "pnl": -1169699, "pnl_pct": -16.36, "hold_from": "2026-07-23T10:30:02.490113+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,708 (현재 12,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,403"}, {"label": "추세(20일선)", "ok": true, "detail": "10,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:08:02.092888+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 525, "cost": 4153373, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6645, "target": 8707, "signals": [{"label": "손절선", "ok": true, "detail": "6,645 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,707"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:12:01.521838+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 195, "cost": 2564635, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10830, "target": 16630, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,150 vs 12,732"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,378 / 12,732"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:18:01.995424+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 44, "cost": 5619643, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120030, "target": 139205, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "127,400 vs 113,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,940 / 113,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,940 / 110,142"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.26% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "439,847 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.26% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-27T13:40:01.101351+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6780, "qty": 1081, "proceeds": 7314888, "entry_price": 7684, "pnl": -992428, "pnl_pct": -11.76, "hold_from": "2026-07-27T09:02:06.237559+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,854 (현재 6,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,929"}, {"label": "추세(20일선)", "ok": true, "detail": "4,841"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:16.475661+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 515, "cost": 3492224, "path": "pullback", "reason": "눌림목 지정가 7,596 도달", "stop": 5916, "target": 8077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,596 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.748861+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 492, "cost": 3493724, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 8077, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,077"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T09:40:00.880577+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 119100, "qty": 44, "proceeds": 5230181, "entry_price": 127700, "pnl": -389462, "pnl_pct": -6.73, "hold_from": "2026-07-27T09:18:01.995423+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,030 (현재 119,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 139,205"}, {"label": "추세(20일선)", "ok": true, "detail": "113,530"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,300"}]}
|
||||
{"ts": "2026-07-28T11:04:03.768405+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10790, "qty": 195, "proceeds": 2099947, "entry_price": 13150, "pnl": -464688, "pnl_pct": -17.95, "hold_from": "2026-07-27T09:12:01.521836+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,830 (현재 10,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,630"}, {"label": "추세(20일선)", "ok": false, "detail": "12,616"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 -156"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,003"}]}
|
||||
{"ts": "2026-07-28T13:24:01.025963+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 123300, "qty": 42, "proceeds": 5168502, "entry_price": 133100, "pnl": -422537, "pnl_pct": -7.36, "hold_from": "2026-07-21T10:08:04.179066+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "123,458 (현재 123,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,564"}, {"label": "추세(20일선)", "ok": true, "detail": "118,415"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +122 · 기 -106"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,361"}]}
|
||||
{"ts": "2026-07-29T09:24:09.997467+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 17, "cost": 2084513, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 108775, "target": 184337, "signals": [{"label": "손절선", "ok": true, "detail": "108,775 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 184,337"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 148,242"}]}
|
||||
{"ts": "2026-07-29T09:26:01.906646+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18940, "qty": 301, "proceeds": 5689823, "entry_price": 19100, "pnl": -60139, "pnl_pct": -0.84, "hold_from": "2026-07-27T09:02:06.237378+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,645 (현재 18,950)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "18,852"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.906834+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6610, "qty": 1007, "proceeds": 6643290, "entry_price": 6936, "pnl": -342657, "pnl_pct": -4.7, "hold_from": "2026-07-28T09:00:16.475655+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,526 (현재 6,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "4,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.389679+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 851, "cost": 5438706, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 6978, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T09:52:02.378118+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131400, "qty": 38, "cost": 4993949, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120086, "target": 148371, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,100 vs 108,880"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,400 / 108,880"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,400 / 113,215"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +43 · 기 +245 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.50% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "567,993 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.50% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-29T10:24:01.448639+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 44, "cost": 5430414, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 115612, "target": 135082, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,400 vs 113,725"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,140 / 113,725"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:42:05.418375+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 851, "proceeds": 5079056, "entry_price": 6390, "pnl": -359649, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.389677+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,978"}, {"label": "추세(20일선)", "ok": true, "detail": "5,338"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T12:50:05.475589+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 108000, "qty": 32, "proceeds": 3449261, "entry_price": 130288, "pnl": -720565, "pnl_pct": -17.11, "hold_from": "2026-07-27T09:02:06.237125+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "108,775 (현재 108,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,878"}, {"label": "추세(20일선)", "ok": false, "detail": "133,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +449 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T14:20:01.512752+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 115500, "qty": 44, "proceeds": 5072090, "entry_price": 123400, "pnl": -358324, "pnl_pct": -6.4, "hold_from": "2026-07-29T10:24:01.448638+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "115,612 (현재 115,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 135,082"}, {"label": "추세(20일선)", "ok": true, "detail": "113,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +44 · 기 +333"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,053"}]}
|
||||
{"ts": "2026-07-30T09:04:07.489079+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19090, "qty": 282, "cost": 5384188, "path": "pullback", "reason": "눌림목 지정가 19,653 도달", "stop": 17993, "target": 20736, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,100 vs 18,860"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,606 / 18,860"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,606 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 +327 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.14% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "160,727 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.14% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,653 (현재 19,100)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.489612+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 429, "cost": 2630164, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 5127, "target": 7634, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.939702+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 43, "cost": 5337100, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116280, "target": 135830, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,000 vs 113,755"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,260 / 113,755"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,260 / 110,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+54.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "518,220 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.31% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.176757+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 862, "cost": 5440036, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5927, "target": 6885, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T10:10:07.436089+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 42, "cost": 5364205, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116280, "target": 135830, "signals": [{"label": "손절선", "ok": true, "detail": "116,280 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 135,830"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,835"}]}
|
||||
{"ts": "2026-07-31T09:04:07.898708+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 112, "proceeds": 7724109, "entry_price": 89873, "pnl": -2343201, "pnl_pct": -23.11, "hold_from": "2026-07-23T09:46:06.366617+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,596 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 102,289"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.027654+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 402, "cost": 2633495, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 7634, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,634"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-08-03T09:36:12.040975+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 119700, "qty": 38, "proceeds": 4539730, "entry_price": 131400, "pnl": -454219, "pnl_pct": -8.9, "hold_from": "2026-07-29T09:52:02.378116+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,086 (현재 119,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 148,371"}, {"label": "추세(20일선)", "ok": true, "detail": "108,315"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,911"}]}
|
||||
{"ts": "2026-08-03T12:00:11.819206+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 347, "cost": 4480442, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 14706, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.764716+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 334, "cost": 4482952, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 14706, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 14,706"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:09.472087+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 13, "cost": 1766965, "path": "pullback", "reason": "눌림목 지정가 145,918 도달", "stop": 104818, "target": 182523, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 145,918 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-04T09:34:09.331557+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90000, "qty": 50, "cost": 4500675, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 81851, "target": 102223, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "89,800 vs 75,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,320 / 75,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,320 / 75,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "595,733 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T09:48:09.794132+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5920, "qty": 862, "proceeds": 5093089, "entry_price": 6310, "pnl": -346947, "pnl_pct": -6.18, "hold_from": "2026-07-30T09:18:10.176753+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,927 (현재 5,925)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,885"}, {"label": "추세(20일선)", "ok": true, "detail": "5,336"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +34 · 기 +9"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,429"}]}
|
||||
{"ts": "2026-08-04T10:32:12.790021+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 48, "cost": 4488673, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 81851, "target": 102223, "signals": [{"label": "손절선", "ok": true, "detail": "81,851 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 102,223"}, {"label": "추세(20일선)", "ok": true, "detail": "75,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,841"}]}
|
||||
{"ts": "2026-08-04T11:00:12.174925+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 12800, "qty": 168, "cost": 2150723, "path": "pullback", "reason": "눌림목 지정가 13,033 도달", "stop": 10340, "target": 16490, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,800 vs 12,715"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,308 / 12,715"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,308 / 13,263"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +49 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.75% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": true, "detail": "1,655,930 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": true, "detail": "2.75% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,033 (현재 12,800)"}]}
|
||||
{"ts": "2026-08-04T13:26:12.846870+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117200, "qty": 85, "proceeds": 9942574, "entry_price": 125879, "pnl": -758731, "pnl_pct": -6.89, "hold_from": "2026-07-30T09:16:11.939699+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,673 (현재 117,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,187"}, {"label": "추세(20일선)", "ok": true, "detail": "113,415"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -24 · 기 +268"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-05T09:00:15.244636+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 12, "cost": 1771466, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104818, "target": 182523, "signals": [{"label": "손절선", "ok": true, "detail": "104,818 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 182,523"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-05T09:02:13.249699+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 5710, "qty": 912, "cost": 5208301, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5372, "target": 6218, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "5,730 vs 5,326"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,612 / 5,326"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,612 / 5,611"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -2 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "99,627 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.46% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-08-05T09:20:12.630535+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13640, "qty": 157, "cost": 2141801, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 16490, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,630)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,490"}, {"label": "추세(20일선)", "ok": true, "detail": "12,756"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,577"}]}
|
||||
{"ts": "2026-08-06T09:00:19.453536+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 282, "proceeds": 5271560, "entry_price": 19090, "pnl": -112627, "pnl_pct": -1.89, "hold_from": "2026-07-30T09:04:07.489076+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,993 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,736"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,459"}]}
|
||||
{"ts": "2026-08-06T09:14:10.570387+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 193600, "qty": 26, "cost": 5034355, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 181108, "target": 212338, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "193,500 vs 177,765"}, {"label": "정배열(5>20)", "ok": true, "detail": "186,480 / 177,765"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,480 / 176,699"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,163,480 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-08-06T09:34:15.899562+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5350, "qty": 912, "proceeds": 4869686, "entry_price": 5710, "pnl": -338616, "pnl_pct": -6.3, "hold_from": "2026-08-05T09:02:13.249696+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,372 (현재 5,370)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,218"}, {"label": "추세(20일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -30 · 기 -23"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,829"}]}
|
||||
{"ts": "2026-08-06T09:34:15.935447+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 41, "cost": 5088863, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116569, "target": 135396, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,900 vs 113,750"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,240 / 113,750"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,240 / 110,083"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -53 · 기 +87 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "456,007 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.27% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-08-07T09:34:08.773359+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 198600, "qty": 26, "cost": 5164375, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 181108, "target": 212338, "signals": [{"label": "손절선", "ok": true, "detail": "181,108 (현재 198,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 212,338"}, {"label": "추세(20일선)", "ok": true, "detail": "178,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 197,939"}]}
|
||||
{"ts": "2026-08-07T11:24:16.050581+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 28, "proceeds": 9948562, "entry_price": 350250, "pnl": 140091, "pnl_pct": 1.64, "hold_from": "2026-07-21T12:06:01.175730+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "372,486 (현재 354,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "296,825"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +101 · 기 +31"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-07T11:26:13.309493+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19170, "qty": 267, "cost": 5119158, "path": "pullback", "reason": "눌림목 지정가 19,668 도달", "stop": 18088, "target": 20793, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,160 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,618 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,618 / 19,362"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -80 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "535,067 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,668 (현재 19,160)"}]}
|
||||
@@ -0,0 +1,203 @@
|
||||
{
|
||||
"cash": 22765174.96499997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 28,
|
||||
"entry_price": 350250.0,
|
||||
"entry_at": "2026-07-21T12:06:01.177446+09:00",
|
||||
"stop": 318647,
|
||||
"target": 445059,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4992940.599795671,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 778,
|
||||
"entry_price": 6332.982005141388,
|
||||
"entry_at": "2026-07-30T09:04:07.493859+09:00",
|
||||
"stop": 5363,
|
||||
"target": 9244,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2465159.461256131,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 636,
|
||||
"entry_price": 13160.188679245282,
|
||||
"entry_at": "2026-08-03T12:00:11.823815+09:00",
|
||||
"stop": 11874,
|
||||
"target": 17019,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4188989.7646745183,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 23,
|
||||
"entry_price": 141495.65217391305,
|
||||
"entry_at": "2026-08-04T09:04:09.476523+09:00",
|
||||
"stop": 111689,
|
||||
"target": 230917,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 145,918 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1689991.4917291994,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 92,
|
||||
"entry_price": 91711.95652173914,
|
||||
"entry_at": "2026-08-04T09:34:09.335258+09:00",
|
||||
"stop": 83188,
|
||||
"target": 117283,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4268719.0892993,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 303,
|
||||
"entry_price": 13207.524752475247,
|
||||
"entry_at": "2026-08-04T11:00:12.182010+09:00",
|
||||
"stop": 10878,
|
||||
"target": 20196,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,033 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2008681.3553691048,
|
||||
"last_add_price": 13640
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 49,
|
||||
"entry_price": 196048.97959183675,
|
||||
"entry_at": "2026-08-06T09:14:10.574454+09:00",
|
||||
"stop": 183032,
|
||||
"target": 235100,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4855136.307499998,
|
||||
"last_add_price": 198600
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 38,
|
||||
"entry_price": 124100,
|
||||
"entry_at": "2026-08-06T09:34:15.941137+09:00",
|
||||
"stop": 116569,
|
||||
"target": 146692,
|
||||
"peak": 126400,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4829053.580937498,
|
||||
"last_add_price": 124100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -24106937.047000036,
|
||||
"closed_trades": 42,
|
||||
"wins": 1,
|
||||
"peak_equity": 100161893.89500001,
|
||||
"max_drawdown": 0.24469424425713165,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-08-06",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-02",
|
||||
"003490": "2026-07-07",
|
||||
"240810": "2026-07-23",
|
||||
"093370": "2026-07-20",
|
||||
"214450": "2026-07-06",
|
||||
"055550": "2026-07-20",
|
||||
"034730": "2026-07-08",
|
||||
"319660": "2026-07-23",
|
||||
"105560": "2026-07-20",
|
||||
"095610": "2026-07-29",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-08-03",
|
||||
"090850": "2026-08-06",
|
||||
"138040": "2026-08-04",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582864+09:00",
|
||||
"updated_at": "2026-08-10T15:28:14.962415+09:00"
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
{"ts": "2026-06-17T11:15:02.376852+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121254, "target": 159837, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.423491+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 15, "cost": 5603340, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 341819, "target": 468542, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "373,000 vs 325,400"}, {"label": "정배열(5>20)", "ok": true, "detail": "352,400 / 325,400"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.423877+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 18100, "target": 22339, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-19T13:32:02.866530+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 121100, "qty": 47, "proceeds": 5680601, "entry_price": 130900, "pnl": -472622, "pnl_pct": -7.49, "hold_from": "2026-06-17T11:15:02.376851+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,254 (현재 121,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 159,837"}, {"label": "추세(20일선)", "ok": true, "detail": "118,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +531 · 기 -129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,178"}]}
|
||||
{"ts": "2026-06-23T09:00:11.509794+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.423876+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,339"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T09:26:03.176769+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 339500, "qty": 15, "proceeds": 5082570, "entry_price": 373500, "pnl": -520771, "pnl_pct": -9.1, "hold_from": "2026-06-19T09:02:06.423490+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "341,819 (현재 340,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 468,542"}, {"label": "추세(20일선)", "ok": true, "detail": "329,525"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,330 · 기 +1,369"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,493"}]}
|
||||
{"ts": "2026-06-24T09:02:02.386492+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 83200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,200 vs 52,378"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,960 / 52,378"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:00.998362+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 18, "cost": 2797620, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 128063, "target": 237411, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,400 vs 121,610"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,100 / 121,610"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.757280+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 213, "cost": 6156623, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26911, "target": 34866, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:08.123515+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.386490+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.908239+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 17, "cost": 2803720, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 128063, "target": 237411, "signals": [{"label": "손절선", "ok": true, "detail": "128,063 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 237,411"}, {"label": "추세(20일선)", "ok": true, "detail": "122,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:09.173965+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 44022, "target": 89135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.199964+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 15, "cost": 5213282, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 316272, "target": 441184, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "347,000 vs 296,475"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,600 / 296,475"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.692333+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 15, "cost": 5400810, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 316272, "target": 441184, "signals": [{"label": "손절선", "ok": true, "detail": "316,272 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 441,184"}, {"label": "추세(20일선)", "ok": true, "detail": "297,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-01T09:46:03.099483+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 52, "cost": 6147322, "path": "pullback", "reason": "눌림목 지정가 118,779 도달", "stop": 111000, "target": 139800, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,779 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T09:00:23.031465+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 707000, "qty": 4, "cost": 2828424, "path": "pullback", "reason": "눌림목 지정가 714,693 도달", "stop": 606693, "target": 1007921, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "714,000 vs 675,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "760,800 / 675,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "760,800 / 530,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -198 · 기 +92 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.32% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "230,413 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.32% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 714,693 (현재 714,000)"}]}
|
||||
{"ts": "2026-07-02T09:08:01.929631+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26900, "qty": 213, "proceeds": 5718527, "entry_price": 28900, "pnl": -438096, "pnl_pct": -6.92, "hold_from": "2026-06-25T09:04:05.757278+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,911 (현재 26,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,866"}, {"label": "추세(20일선)", "ok": true, "detail": "25,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -249 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,517"}]}
|
||||
{"ts": "2026-07-02T10:18:03.855071+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 184, "cost": 2940761, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 13328, "target": 23935, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "15,980 vs 12,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,104 / 12,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.855399+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 139800, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 139,800"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T10:34:04.131823+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 325, "cost": 6130419, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 22160, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.067977+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22160, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,160"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:22:01.976821+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 597, "proceeds": 11320881, "entry_price": 20541, "pnl": -944058, "pnl_pct": -7.5, "hold_from": "2026-07-02T10:34:04.131822+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,371 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 24,051"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:48:03.085176+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 133000, "qty": 35, "proceeds": 4645923, "entry_price": 160014, "pnl": -955417, "pnl_pct": -16.88, "hold_from": "2026-06-24T09:08:00.998361+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "133,138 (현재 133,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,643"}, {"label": "추세(20일선)", "ok": true, "detail": "120,490"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.197615+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:09.173958+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 89,135"}, {"label": "추세(20일선)", "ok": false, "detail": "51,912"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:02:04.934571+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 154,163 도달", "stop": 104263, "target": 220811, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,300 vs 120,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,680 / 120,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,163 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:56:06.780331+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 13310, "qty": 184, "proceeds": 2444264, "entry_price": 15980, "pnl": -496497, "pnl_pct": -16.71, "hold_from": "2026-07-02T10:18:03.855070+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "13,328 (현재 13,320)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,935"}, {"label": "추세(20일선)", "ok": true, "detail": "12,716"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,944"}]}
|
||||
{"ts": "2026-07-03T10:24:02.784406+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 313, "cost": 5960414, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17921, "target": 22396, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T12:00:02.660215+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28800, "qty": 207, "cost": 5962494, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26795, "target": 34815, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,750 vs 25,942"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,090 / 25,942"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,090 / 25,214"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+8.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 +1,952 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.38% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,054,442 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.38% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T09:00:10.818917+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14510, "qty": 172, "cost": 2496094, "path": "pullback", "reason": "눌림목 지정가 16,248 도달", "stop": 11748, "target": 22796, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,490 vs 12,774"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,806 / 12,774"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,806 / 11,453"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,226 · 기 +134 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.02% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "20,667 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.02% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,248 (현재 14,490)"}]}
|
||||
{"ts": "2026-07-06T09:18:01.680155+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29500, "qty": 202, "cost": 5959894, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26795, "target": 34815, "signals": [{"label": "손절선", "ok": true, "detail": "26,795 (현재 29,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,815"}, {"label": "추세(20일선)", "ok": true, "detail": "25,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -142 · 기 +2,052"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,483"}]}
|
||||
{"ts": "2026-07-06T09:32:06.689403+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 322000, "qty": 30, "proceeds": 9641163, "entry_price": 353750, "pnl": -972929, "pnl_pct": -8.98, "hold_from": "2026-06-30T09:02:03.199963+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "322,040 (현재 322,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 448,880"}, {"label": "추세(20일선)", "ok": true, "detail": "295,225"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T09:34:02.074888+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 53, "cost": 5830875, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 101901, "target": 134296, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,300 vs 97,320"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,240 / 97,320"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-07T10:06:07.256793+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147500, "qty": 16, "cost": 2360354, "path": "pullback", "reason": "눌림목 지정가 148,050 도달", "stop": 118550, "target": 234350, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "147,400 vs 135,785"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,120 / 135,785"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,120 / 99,573"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +96 · 기 -196 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.06% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,366,200 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "7.06% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 148,050 (현재 147,400)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.245077+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 172, "proceeds": 2099458, "entry_price": 14510, "pnl": -396636, "pnl_pct": -15.71, "hold_from": "2026-07-06T09:00:10.818908+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,748 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,796"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,512"}]}
|
||||
{"ts": "2026-07-07T14:09:15.947172+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26600, "qty": 409, "proceeds": 10858185, "entry_price": 29146, "pnl": -1064203, "pnl_pct": -8.73, "hold_from": "2026-07-03T12:00:02.660214+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "27,098 (현재 26,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 35,289"}, {"label": "추세(20일선)", "ok": true, "detail": "25,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -532 · 기 +3,040"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T14:09:18.521517+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 12, "cost": 2199930, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104263, "target": 220811, "signals": [{"label": "손절선", "ok": true, "detail": "104,263 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 220,811"}, {"label": "추세(20일선)", "ok": true, "detail": "120,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 141,825"}]}
|
||||
{"ts": "2026-07-07T14:09:18.522523+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 99600, "qty": 53, "proceeds": 5268506, "entry_price": 110000, "pnl": -562368, "pnl_pct": -9.45, "hold_from": "2026-07-06T09:34:02.074886+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "101,901 (현재 99,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 134,296"}, {"label": "추세(20일선)", "ok": true, "detail": "96,645"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -733 · 기 +1,535"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,480"}]}
|
||||
{"ts": "2026-07-07T14:09:18.522957+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 13, "cost": 2301345, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118550, "target": 234350, "signals": [{"label": "손절선", "ok": true, "detail": "118,550 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 234,350"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 156,742"}]}
|
||||
{"ts": "2026-07-07T14:09:21.260290+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 287, "cost": 5956143, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17921, "target": 22396, "signals": [{"label": "손절선", "ok": true, "detail": "17,921 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,396"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-07T14:09:21.261209+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 606693, "target": 1007921, "signals": [{"label": "손절선", "ok": true, "detail": "606,693 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,007,921"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 738,777"}]}
|
||||
{"ts": "2026-07-08T09:00:18.745728+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 28, "proceeds": 3026487, "entry_price": 154786, "pnl": -1308163, "pnl_pct": -30.03, "hold_from": "2026-07-03T09:02:04.934570+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "129,511 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 230,609"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:18.747313+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 8, "proceeds": 4806609, "entry_price": 761000, "pnl": -1282304, "pnl_pct": -20.89, "hold_from": "2026-07-02T09:00:23.031459+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "665,669 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,046,992"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:12:05.975704+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18900, "qty": 600, "proceeds": 11317887, "entry_price": 19858, "pnl": -598670, "pnl_pct": -4.82, "hold_from": "2026-07-03T10:24:02.784405+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,904 (현재 18,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,721"}, {"label": "추세(20일선)", "ok": true, "detail": "18,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:02:04.473413+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 290, "cost": 5542731, "path": "pullback", "reason": "눌림목 지정가 19,657 도달", "stop": 18017, "target": 22388, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,657 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.473531+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 35, "cost": 5541331, "path": "pullback", "reason": "눌림목 지정가 158,582 도달", "stop": 158000, "target": 159200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,582 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:10:01.833875+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 40, "cost": 5292794, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121211, "target": 165566, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,100 vs 108,930"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,600 / 108,930"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T09:12:02.516283+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 35, "proceeds": 5480792, "entry_price": 158300, "pnl": -60540, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.473529+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:24:02.112068+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158900, "qty": 35, "cost": 5562334, "path": "pullback", "reason": "눌림목 지정가 159,557 도달", "stop": 158000, "target": 161600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,800 vs 149,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,400 / 149,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,400 / 113,205"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.62% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,627,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "5.62% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,557 (현재 158,800)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.630374+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110900, "qty": 50, "cost": 5545832, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 102716, "target": 135453, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "110,700 vs 97,340"}, {"label": "정배열(5>20)", "ok": true, "detail": "101,320 / 97,340"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,320 / 96,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -756 · 기 +893 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,541,113 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-10T09:28:02.630605+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 30, "cost": 5577837, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 171311, "target": 229666, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.483050+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 181, "cost": 2322578, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 20240, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.483909+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 168, "cost": 2327149, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 20240, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,240"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-13T09:00:11.568255+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 38, "cost": 5202980, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 121211, "target": 165566, "signals": [{"label": "손절선", "ok": true, "detail": "121,211 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,566"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:36:02.281862+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 29, "cost": 5539831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 171311, "target": 229666, "signals": [{"label": "손절선", "ok": true, "detail": "171,311 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,666"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.362715+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 35, "proceeds": 6563676, "entry_price": 158900, "pnl": 1001342, "pnl_pct": 18.25, "hold_from": "2026-07-10T09:24:02.112067+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T09:02:02.656005+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 135500, "qty": 15, "cost": 2032805, "path": "pullback", "reason": "눌림목 지정가 154,441 도달", "stop": 106641, "target": 222076, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "134,900 vs 120,585"}, {"label": "정배열(5>20)", "ok": true, "detail": "139,000 / 120,585"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "139,000 / 121,348"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,752 · 기 +1,989 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.30% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "636,187 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.30% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,441 (현재 134,900)"}]}
|
||||
{"ts": "2026-07-16T09:00:09.907774+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 290, "proceeds": 5377693, "entry_price": 19110, "pnl": -165038, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.473411+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,388"}, {"label": "추세(20일선)", "ok": false, "detail": "18,832"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-16T14:16:02.489161+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 145700, "qty": 14, "cost": 2040106, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 106641, "target": 222076, "signals": [{"label": "손절선", "ok": true, "detail": "106,641 (현재 145,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 222,076"}, {"label": "추세(20일선)", "ok": true, "detail": "121,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,717 · 기 +2,299"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,295"}]}
|
||||
{"ts": "2026-07-20T09:04:02.888178+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 102700, "qty": 50, "proceeds": 5124987, "entry_price": 110900, "pnl": -420845, "pnl_pct": -7.39, "hold_from": "2026-07-10T09:28:02.630373+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "102,716 (현재 102,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 135,453"}, {"label": "추세(20일선)", "ok": true, "detail": "96,940"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +265"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 113,514"}]}
|
||||
{"ts": "2026-07-20T09:04:02.888496+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 173000, "qty": 59, "proceeds": 10187096, "entry_price": 188407, "pnl": -930571, "pnl_pct": -8.18, "hold_from": "2026-07-10T09:28:02.630604+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "173,250 (현재 173,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,877"}, {"label": "추세(20일선)", "ok": true, "detail": "159,270"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -332 · 기 +291"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.323325+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 349, "proceeds": 3591174, "entry_price": 13321, "pnl": -1058554, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.483048+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,204"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T12:06:01.177447+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 14, "cost": 4823723, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 436576, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T11:56:00.834652+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 159800, "qty": 34, "cost": 5434015, "path": "pullback", "reason": "눌림목 지정가 159,932 도달", "stop": 158000, "target": 165200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "159,700 vs 149,775"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,580 / 149,775"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,580 / 113,220"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+75.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -408 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.73% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,371,014 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.73% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,932 (현재 159,700)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.746301+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 34, "proceeds": 5337771, "entry_price": 159800, "pnl": -96244, "pnl_pct": -1.56, "hold_from": "2026-07-22T11:56:00.834651+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,200"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,305"}]}
|
||||
{"ts": "2026-07-23T09:00:23.169012+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 34, "cost": 5444217, "path": "pullback", "reason": "눌림목 지정가 159,493 도달", "stop": 158000, "target": 166400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,493 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.419219+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 34, "proceeds": 5354738, "entry_price": 160100, "pnl": -89479, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:23.169005+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 166,400"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,669"}]}
|
||||
{"ts": "2026-07-23T09:44:04.294384+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 293, "cost": 5523878, "path": "pullback", "reason": "눌림목 지정가 19,627 도달", "stop": 17760, "target": 22120, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,627 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:46:06.368359+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88400, "qty": 55, "cost": 4862729, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 80433, "target": 112300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,300 vs 75,075"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,020 / 75,075"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,020 / 75,060"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "743,133 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.492004+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 242, "cost": 3422393, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 12315, "target": 19616, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,180 vs 10,944"}, {"label": "정배열(5>20)", "ok": true, "detail": "13,154 / 10,944"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T10:50:06.642810+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 110600, "qty": 29, "proceeds": 3201146, "entry_price": 140424, "pnl": -871765, "pnl_pct": -21.24, "hold_from": "2026-07-15T09:02:02.656003+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "111,041 (현재 110,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 228,575"}, {"label": "추세(20일선)", "ok": false, "detail": "119,375"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -847 · 기 +78"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T12:22:02.602685+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 436576, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 436,576"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T13:06:04.445125+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 91400, "qty": 53, "cost": 4844927, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 80433, "target": 112300, "signals": [{"label": "손절선", "ok": true, "detail": "80,433 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 112,300"}, {"label": "추세(20일선)", "ok": true, "detail": "75,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,159"}]}
|
||||
{"ts": "2026-07-24T09:00:06.353007+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 293, "proceeds": 5477189, "entry_price": 18850, "pnl": -46690, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.294383+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,120"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:02:04.050237+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 227, "cost": 3419133, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 12315, "target": 19616, "signals": [{"label": "손절선", "ok": true, "detail": "12,315 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,616"}, {"label": "추세(20일선)", "ok": true, "detail": "10,986"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T12:58:01.269380+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 132500, "qty": 29, "proceeds": 3835007, "entry_price": 160724, "pnl": -826692, "pnl_pct": -17.56, "hold_from": "2026-07-07T10:06:07.256791+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "132,997 (현재 132,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 243,905"}, {"label": "추세(20일선)", "ok": false, "detail": "135,040"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +177 · 기 -465"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:02:06.239541+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 139000, "qty": 14, "cost": 1946292, "path": "pullback", "reason": "눌림목 지정가 146,775 도달", "stop": 108775, "target": 229675, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "138,700 vs 135,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "168,380 / 135,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "168,380 / 99,428"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +238 · 기 -568 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.72% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "526,333 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.72% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 146,775 (현재 138,700)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.239758+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 289, "cost": 5520728, "path": "pullback", "reason": "눌림목 지정가 19,673 도달", "stop": 18023, "target": 22330, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,673 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.239937+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 533, "cost": 3982107, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6645, "target": 9944, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:04:05.323408+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12200, "qty": 469, "proceeds": 5710642, "entry_price": 14585, "pnl": -1130884, "pnl_pct": -16.35, "hold_from": "2026-07-23T10:30:02.492003+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,707 (현재 12,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,219"}, {"label": "추세(20일선)", "ok": true, "detail": "10,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:08:02.094585+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 503, "cost": 3979327, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6645, "target": 9944, "signals": [{"label": "손절선", "ok": true, "detail": "6,645 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,944"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:12:01.524339+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 188, "cost": 2472571, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10830, "target": 20110, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,150 vs 12,732"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,378 / 12,732"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T13:40:01.103071+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6780, "qty": 1036, "proceeds": 7010383, "entry_price": 7684, "pnl": -951051, "pnl_pct": -11.76, "hold_from": "2026-07-27T09:02:06.239936+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,854 (현재 6,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,174"}, {"label": "추세(20일선)", "ok": true, "detail": "4,841"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:16.577503+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 490, "cost": 3322698, "path": "pullback", "reason": "눌림목 지정가 7,596 도달", "stop": 5916, "target": 9373, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,596 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.750562+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 468, "cost": 3323298, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 9373, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,373"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T11:04:03.770897+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10790, "qty": 188, "proceeds": 2024564, "entry_price": 13150, "pnl": -448006, "pnl_pct": -17.95, "hold_from": "2026-07-27T09:12:01.524338+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,830 (현재 10,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,110"}, {"label": "추세(20일선)", "ok": false, "detail": "12,616"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 -156"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,003"}]}
|
||||
{"ts": "2026-07-29T09:24:10.002211+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 16, "cost": 1961894, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 108775, "target": 229675, "signals": [{"label": "손절선", "ok": true, "detail": "108,775 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,675"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 148,242"}]}
|
||||
{"ts": "2026-07-29T09:24:10.002379+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 291, "cost": 5515277, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 18023, "target": 22330, "signals": [{"label": "손절선", "ok": true, "detail": "18,023 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,330"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:10.002708+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 78, "proceeds": 10011240, "entry_price": 134541, "pnl": -484534, "pnl_pct": -4.42, "hold_from": "2026-07-09T09:10:01.833874+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "122,949 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 169,318"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.391374+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 808, "cost": 5163894, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 7566, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.450516+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 42, "cost": 5183577, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 115612, "target": 146764, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,400 vs 113,725"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,140 / 113,725"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:42:05.420086+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 808, "proceeds": 4822418, "entry_price": 6390, "pnl": -341477, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.391373+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,566"}, {"label": "추세(20일선)", "ok": true, "detail": "5,338"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T11:18:04.431976+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6000, "qty": 958, "proceeds": 5736791, "entry_price": 6936, "pnl": -909205, "pnl_pct": -13.5, "hold_from": "2026-07-28T09:00:16.577498+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,040 (현재 6,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,626"}, {"label": "추세(20일선)", "ok": true, "detail": "4,803"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:50:05.477470+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 108000, "qty": 30, "proceeds": 3233682, "entry_price": 130253, "pnl": -674504, "pnl_pct": -17.08, "hold_from": "2026-07-27T09:02:06.239540+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "108,775 (현재 108,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 213,434"}, {"label": "추세(20일선)", "ok": false, "detail": "133,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +449 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:30:01.454446+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 118000, "qty": 103, "proceeds": 12130300, "entry_price": 120181, "pnl": -250157, "pnl_pct": -1.81, "hold_from": "2026-07-01T09:46:03.099480+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 118,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,722"}, {"label": "추세(20일선)", "ok": false, "detail": "118,145"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T14:20:01.514442+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 115500, "qty": 42, "proceeds": 4841541, "entry_price": 123400, "pnl": -342037, "pnl_pct": -6.4, "hold_from": "2026-07-29T10:24:01.450515+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "115,612 (현재 115,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 146,764"}, {"label": "추세(20일선)", "ok": true, "detail": "113,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +44 · 기 +333"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,053"}]}
|
||||
{"ts": "2026-07-30T09:04:07.493862+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 402, "cost": 2464630, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 5127, "target": 9138, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.943258+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 36, "cost": 4713107, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 119833, "target": 164102, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "130,900 vs 108,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,360 / 108,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:16:11.943676+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 41, "cost": 5088863, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116280, "target": 147560, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,000 vs 113,755"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,260 / 113,755"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,260 / 110,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+54.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "518,220 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.31% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.181133+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 806, "cost": 5086623, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5927, "target": 7460, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T10:10:07.440123+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 39, "cost": 4981047, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116280, "target": 147560, "signals": [{"label": "손절선", "ok": true, "detail": "116,280 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,560"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,835"}]}
|
||||
{"ts": "2026-07-31T09:04:07.903300+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 108, "proceeds": 7448248, "entry_price": 89872, "pnl": -2259408, "pnl_pct": -23.11, "hold_from": "2026-07-23T09:46:06.368358+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,595 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,704"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.031863+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 376, "cost": 2463169, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 9138, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,138"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-08-03T09:36:12.045515+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 119700, "qty": 36, "proceeds": 4300797, "entry_price": 130900, "pnl": -412310, "pnl_pct": -8.56, "hold_from": "2026-07-30T09:16:11.943255+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,833 (현재 119,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 164,102"}, {"label": "추세(20일선)", "ok": true, "detail": "108,315"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,411"}]}
|
||||
{"ts": "2026-08-03T12:00:11.823818+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 324, "cost": 4183467, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 16502, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:09.768951+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 312, "cost": 4187668, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 16502, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,502"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:09.476526+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 12, "cost": 1631045, "path": "pullback", "reason": "눌림목 지정가 145,918 도달", "stop": 104818, "target": 229146, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 145,918 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-04T09:34:09.335260+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90000, "qty": 47, "cost": 4230634, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 81851, "target": 114446, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "89,800 vs 75,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,320 / 75,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,320 / 75,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "595,733 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T09:48:09.800491+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5920, "qty": 806, "proceeds": 4762216, "entry_price": 6310, "pnl": -324407, "pnl_pct": -6.18, "hold_from": "2026-07-30T09:18:10.181130+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,927 (현재 5,925)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,460"}, {"label": "추세(20일선)", "ok": true, "detail": "5,336"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +34 · 기 +9"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,429"}]}
|
||||
{"ts": "2026-08-04T10:32:12.794318+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 45, "cost": 4208131, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 81851, "target": 114446, "signals": [{"label": "손절선", "ok": true, "detail": "81,851 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,446"}, {"label": "추세(20일선)", "ok": true, "detail": "75,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,841"}]}
|
||||
{"ts": "2026-08-04T11:00:12.182013+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 12800, "qty": 156, "cost": 1997100, "path": "pullback", "reason": "눌림목 지정가 13,033 도달", "stop": 10340, "target": 20180, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,800 vs 12,715"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,308 / 12,715"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,308 / 13,263"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +49 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.75% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": true, "detail": "1,655,930 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": true, "detail": "2.75% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,033 (현재 12,800)"}]}
|
||||
{"ts": "2026-08-04T13:26:12.859117+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117200, "qty": 80, "proceeds": 9357717, "entry_price": 125855, "pnl": -712193, "pnl_pct": -6.88, "hold_from": "2026-07-30T09:16:11.943674+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,649 (현재 117,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,472"}, {"label": "추세(20일선)", "ok": true, "detail": "113,415"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -24 · 기 +268"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-05T09:00:16.277701+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 11, "cost": 1623844, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104818, "target": 229146, "signals": [{"label": "손절선", "ok": true, "detail": "104,818 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,146"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-05T09:02:13.253926+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 5710, "qty": 850, "cost": 4854228, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5372, "target": 6725, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "5,730 vs 5,326"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,612 / 5,326"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,612 / 5,611"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -2 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "99,627 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.46% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-08-05T09:20:12.636650+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13640, "qty": 147, "cost": 2005381, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 20180, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,630)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,180"}, {"label": "추세(20일선)", "ok": true, "detail": "12,756"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,577"}]}
|
||||
{"ts": "2026-08-06T09:00:19.554834+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 580, "proceeds": 10842216, "entry_price": 19025, "pnl": -193789, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.239756+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,071 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,887"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:14:10.574456+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 193600, "qty": 25, "cost": 4840726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 181108, "target": 231076, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "193,500 vs 177,765"}, {"label": "정배열(5>20)", "ok": true, "detail": "186,480 / 177,765"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,480 / 176,699"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,163,480 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-08-06T09:34:15.940820+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5350, "qty": 850, "proceeds": 4538632, "entry_price": 5710, "pnl": -315596, "pnl_pct": -6.3, "hold_from": "2026-08-05T09:02:13.253924+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,372 (현재 5,370)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,725"}, {"label": "추세(20일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -30 · 기 -23"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,829"}]}
|
||||
{"ts": "2026-08-06T09:34:15.941140+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 38, "cost": 4716507, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116569, "target": 146692, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,900 vs 113,750"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,240 / 113,750"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,240 / 110,083"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -53 · 기 +87 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "456,007 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.27% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-08-07T09:34:08.778095+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 198600, "qty": 24, "cost": 4767115, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 181108, "target": 231076, "signals": [{"label": "손절선", "ok": true, "detail": "181,108 (현재 198,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 231,076"}, {"label": "추세(20일선)", "ok": true, "detail": "178,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 197,939"}]}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"cash": 26692924.320500042,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 21,
|
||||
"entry_price": 343976.1904761905,
|
||||
"entry_at": "2026-07-13T09:06:07.906813+09:00",
|
||||
"stop": 302625,
|
||||
"target": 468030,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3813943.0504600187,
|
||||
"last_add_price": 350000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 81,
|
||||
"entry_price": 124881.48148148147,
|
||||
"entry_at": "2026-07-29T10:24:01.452555+09:00",
|
||||
"stop": 114155,
|
||||
"target": 157062,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5142605.848996199,
|
||||
"last_add_price": 126400
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 608,
|
||||
"entry_price": 6333.0921052631575,
|
||||
"entry_at": "2026-07-30T09:04:07.497844+09:00",
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1927621.6063135946,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 55,
|
||||
"entry_price": 133403.63636363635,
|
||||
"entry_at": "2026-07-30T09:16:11.947135+09:00",
|
||||
"stop": 117747,
|
||||
"target": 180373,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3759463.8630866953,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 506,
|
||||
"entry_price": 13159.9604743083,
|
||||
"entry_at": "2026-08-03T12:00:12.417020+09:00",
|
||||
"stop": 11445,
|
||||
"target": 18305,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3342042.065213833,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 73,
|
||||
"entry_price": 91726.02739726027,
|
||||
"entry_at": "2026-08-04T09:34:09.921371+09:00",
|
||||
"stop": 80361,
|
||||
"target": 125821,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3414906.320549933,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 297,
|
||||
"entry_price": 13423.030303030304,
|
||||
"entry_at": "2026-08-05T09:02:14.724353+09:00",
|
||||
"stop": 10340,
|
||||
"target": 22672,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1996058.5440871862,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 48,
|
||||
"entry_price": 196100.0,
|
||||
"entry_at": "2026-08-06T09:14:11.164447+09:00",
|
||||
"stop": 178744,
|
||||
"target": 248168,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4827704.554226948,
|
||||
"last_add_price": 198600
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18017783.52950002,
|
||||
"closed_trades": 27,
|
||||
"wins": 0,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.1859662521949996,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"003490": "2026-07-09",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582879+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.141744+09:00"
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{"ts": "2026-06-17T11:15:02.380225+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 169483, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.427084+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 11, "cost": 4109116, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 500222, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "373,000 vs 330,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "352,400 / 330,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.427459+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 17760, "target": 23360, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:12.660949+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.427458+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,360"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.245488+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.380224+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 169,483"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:04.197305+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 11, "proceeds": 3622922, "entry_price": 373500, "pnl": -486195, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:06.427083+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 500,222"}, {"label": "추세(10일선)", "ok": false, "detail": "335,050"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:02:02.388434+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 83200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,200 vs 52,550"}, {"label": "정배열(5>10)", "ok": true, "detail": "57,960 / 52,550"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:01.000377+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 13, "cost": 2020503, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 118951, "target": 264748, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,400 vs 128,090"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,100 / 128,090"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.759148+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 186, "cost": 5376206, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 36855, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "28,850 vs 25,540"}, {"label": "정배열(5>10)", "ok": true, "detail": "26,110 / 25,540"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:08.223657+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.388433+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,200"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.909836+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 12, "cost": 1979097, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118951, "target": 264748, "signals": [{"label": "손절선", "ok": true, "detail": "118,951 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 264,748"}, {"label": "추세(10일선)", "ok": true, "detail": "129,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:10.176412+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 43200, "target": 91600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.201756+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 11, "cost": 3823073, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 305863, "target": 472411, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "347,000 vs 306,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "315,600 / 306,050"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.693908+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 11, "cost": 3960594, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 305863, "target": 472411, "signals": [{"label": "손절선", "ok": true, "detail": "305,863 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 472,411"}, {"label": "추세(10일선)", "ok": true, "detail": "307,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-02T10:18:03.858031+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 139, "cost": 2221553, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 12444, "target": 26587, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "15,980 vs 13,620"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,104 / 13,620"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.965855+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 324, "cost": 6143961, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 22560, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": true, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:04:07.646365+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 182, "cost": 5388008, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 36855, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 36,855"}, {"label": "추세(10일선)", "ok": true, "detail": "25,615"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-02T11:20:02.070046+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22560, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,560"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:24:06.159937+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 596, "proceeds": 11218641, "entry_price": 20598, "pnl": -1059841, "pnl_pct": -8.44, "hold_from": "2026-07-02T10:40:02.965854+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,038 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 25,278"}, {"label": "추세(10일선)", "ok": false, "detail": "18,937"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:44:02.621986+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 123600, "qty": 25, "proceeds": 3083974, "entry_price": 159960, "pnl": -915625, "pnl_pct": -22.73, "hold_from": "2026-06-24T09:08:01.000376+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,125 (현재 123,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 267,466"}, {"label": "추세(10일선)", "ok": false, "detail": "124,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.786276+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 314, "cost": 5979457, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17760, "target": 22880, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:10.919264+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 154,452 도달", "stop": 96000, "target": 234400, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,452 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:34:02.077206+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 44, "cost": 4840726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99202, "target": 142394, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "110,300 vs 99,990"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,240 / 99,990"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T10:20:01.612833+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 311000, "qty": 22, "proceeds": 6828658, "entry_price": 353750, "pnl": -955009, "pnl_pct": -12.08, "hold_from": "2026-06-30T09:02:03.201755+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "311,470 (현재 311,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 480,590"}, {"label": "추세(10일선)", "ok": true, "detail": "302,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T09:48:07.758619+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.176402+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 91,600"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:28:06.473655+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12410, "qty": 139, "proceeds": 1721626, "entry_price": 15980, "pnl": -499927, "pnl_pct": -22.34, "hold_from": "2026-07-02T10:18:03.858030+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,444 (현재 12,430)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 26,587"}, {"label": "추세(10일선)", "ok": false, "detail": "13,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,543 · 기 +15"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,975"}]}
|
||||
{"ts": "2026-07-07T14:09:24.011447+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 9, "cost": 1649947, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 234400, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 234,400"}, {"label": "추세(10일선)", "ok": true, "detail": "123,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 139,025"}]}
|
||||
{"ts": "2026-07-07T14:09:24.013722+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 288, "cost": 5976896, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22880, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,880"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:18.851710+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 22, "proceeds": 2377954, "entry_price": 152159, "pnl": -970048, "pnl_pct": -28.82, "hold_from": "2026-07-06T09:00:10.919257+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,460 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 253,257"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:10:01.835828+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 31, "cost": 4101915, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117515, "target": 176655, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,100 vs 108,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,600 / 108,680"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.867096+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 368, "proceeds": 9732984, "entry_price": 29246, "pnl": -1031231, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:05.759146+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 37,480"}, {"label": "추세(10일선)", "ok": true, "detail": "25,305"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:18:05.236326+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 183700, "qty": 24, "cost": 4409461, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 164505, "target": 241284, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "183,600 vs 158,140"}, {"label": "정배열(5>10)", "ok": true, "detail": "159,500 / 158,140"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,500 / 157,335"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.73% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,553,373 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "0.73% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-10T09:26:06.450600+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 34, "cost": 4451268, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117686, "target": 170541, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,800 vs 120,640"}, {"label": "정배열(5>10)", "ok": true, "detail": "122,760 / 120,640"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,760 / 118,578"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -427 · 기 +555 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.60% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,646,513 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.60% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-07-10T11:06:06.480577+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 139, "cost": 1899025, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 23560, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.681313+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 216800, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-10T12:36:02.509050+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 188900, "qty": 23, "cost": 4345352, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 164505, "target": 241284, "signals": [{"label": "손절선", "ok": true, "detail": "164,505 (현재 188,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 241,284"}, {"label": "추세(10일선)", "ok": true, "detail": "158,670"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,220 · 기 +1,654"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 188,670"}]}
|
||||
{"ts": "2026-07-13T09:00:11.671524+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 30, "cost": 4107616, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117515, "target": 176655, "signals": [{"label": "손절선", "ok": true, "detail": "117,515 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,655"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:06:07.906612+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 112800, "qty": 42, "cost": 4738311, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 99202, "target": 142394, "signals": [{"label": "손절선", "ok": true, "detail": "99,202 (현재 112,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 142,394"}, {"label": "추세(10일선)", "ok": true, "detail": "100,240"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -358 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,792"}]}
|
||||
{"ts": "2026-07-13T09:06:07.906815+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 338500, "qty": 11, "cost": 3724059, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 297363, "target": 461911, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "338,500 vs 305,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "313,900 / 305,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "313,900 / 305,392"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.45% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "150,147 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.45% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:08:05.361952+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 34, "cost": 4566885, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 170541, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 134,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 170,541"}, {"label": "추세(10일선)", "ok": true, "detail": "120,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -277 · 기 +460"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,118"}]}
|
||||
{"ts": "2026-07-13T09:26:03.420105+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 216800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,800"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-15T14:32:01.893743+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 602, "proceeds": 11157341, "entry_price": 19858, "pnl": -799013, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.786275+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,675"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:22:02.314943+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 350000, "qty": 10, "cost": 3500525, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 297363, "target": 461911, "signals": [{"label": "손절선", "ok": true, "detail": "297,363 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 461,911"}, {"label": "추세(10일선)", "ok": true, "detail": "306,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 348,838"}]}
|
||||
{"ts": "2026-07-20T12:28:02.325141+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 139, "proceeds": 1430295, "entry_price": 13660, "pnl": -468729, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.480575+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,560"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-20T14:12:02.385143+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 100100, "qty": 86, "proceeds": 8591813, "entry_price": 111367, "pnl": -987223, "pnl_pct": -10.12, "hold_from": "2026-07-06T09:34:02.077204+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,198 (현재 100,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,876"}, {"label": "추세(10일선)", "ok": true, "detail": "98,970"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -168 · 기 +257"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T14:12:02.740945+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 166000, "qty": 47, "proceeds": 7786786, "entry_price": 186245, "pnl": -968027, "pnl_pct": -10.87, "hold_from": "2026-07-10T09:18:05.236324+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,364 (현재 166,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 245,885"}, {"label": "추세(10일선)", "ok": true, "detail": "156,380"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -440 · 기 +299"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:46:06.370395+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88400, "qty": 42, "cost": 3713357, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77778, "target": 120266, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,300 vs 80,910"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,020 / 80,910"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,020 / 75,060"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "743,133 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.494344+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 184, "cost": 2602150, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 21442, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T13:06:04.447130+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 91400, "qty": 40, "cost": 3656548, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77778, "target": 120266, "signals": [{"label": "손절선", "ok": true, "detail": "77,778 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 120,266"}, {"label": "추세(10일선)", "ok": true, "detail": "81,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,159"}]}
|
||||
{"ts": "2026-07-24T09:00:07.363723+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.681312+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,757"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:02:04.052216+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 172, "cost": 2590709, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 21442, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,442"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T10:02:04.447376+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 299, "cost": 5666900, "path": "pullback", "reason": "눌림목 지정가 19,643 도달", "stop": 17760, "target": 22520, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,643 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.242175+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 409, "cost": 3055688, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6370, "target": 10769, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,470 vs 5,392"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,452 / 5,392"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.096604+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 386, "cost": 3053718, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 10769, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,769"}, {"label": "추세(10일선)", "ok": true, "detail": "5,434"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:10:01.050818+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 356, "proceeds": 4274329, "entry_price": 14584, "pnl": -918530, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.494343+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,081 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,096"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.527099+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 159, "cost": 2091164, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10340, "target": 21580, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,150 vs 12,888"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,378 / 12,888"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:18:01.999209+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 43, "cost": 5491924, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117473, "target": 158380, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "127,400 vs 117,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,940 / 117,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,940 / 110,142"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.26% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "439,847 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.26% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-28T11:22:00.757711+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 795, "proceeds": 5260572, "entry_price": 7684, "pnl": -848834, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:06.242173+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 11,004"}, {"label": "추세(10일선)", "ok": true, "detail": "5,282"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T13:02:00.826309+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117400, "qty": 43, "proceeds": 5038356, "entry_price": 127700, "pnl": -453568, "pnl_pct": -8.07, "hold_from": "2026-07-27T09:18:01.999208+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,473 (현재 117,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 158,380"}, {"label": "추세(10일선)", "ok": true, "detail": "116,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 +324"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,353"}]}
|
||||
{"ts": "2026-07-29T09:02:02.242655+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 344, "cost": 2250097, "path": "pullback", "reason": "눌림목 지정가 7,526 도달", "stop": 5295, "target": 10276, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,540 vs 5,298"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,266 / 5,298"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,526 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:24:10.006738+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 299, "cost": 5666900, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22520, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,520"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,268"}]}
|
||||
{"ts": "2026-07-29T09:24:10.007015+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 61, "proceeds": 7829303, "entry_price": 134562, "pnl": -380228, "pnl_pct": -4.43, "hold_from": "2026-07-09T09:10:01.835827+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,106 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 180,931"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:10.007158+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6710, "qty": 335, "cost": 2248187, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5295, "target": 10276, "signals": [{"label": "손절선", "ok": true, "detail": "5,295 (현재 8,460)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,276"}, {"label": "추세(10일선)", "ok": true, "detail": "5,064"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,796"}]}
|
||||
{"ts": "2026-07-29T09:24:10.007360+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 11310, "qty": 185, "cost": 2092664, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21580, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 15,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,580"}, {"label": "추세(10일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +242 · 기 -182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-07-29T09:28:01.393233+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 820, "cost": 5240586, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7958, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.452556+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 41, "cost": 5060159, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113016, "target": 154552, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "123,400 vs 116,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,140 / 116,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:52:02.359379+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10340, "qty": 344, "proceeds": 3550024, "entry_price": 12160, "pnl": -633804, "pnl_pct": -14.97, "hold_from": "2026-07-27T09:12:01.527098+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,340 (현재 10,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,622"}, {"label": "추세(10일선)", "ok": false, "detail": "12,607"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +239 · 기 -181"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.697397+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 68, "proceeds": 8089794, "entry_price": 132600, "pnl": -928358, "pnl_pct": -10.11, "hold_from": "2026-07-10T09:26:06.450599+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,729 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,213"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:14:05.449804+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5580, "qty": 679, "proceeds": 3781432, "entry_price": 6624, "pnl": -716853, "pnl_pct": -15.76, "hold_from": "2026-07-29T09:02:02.242654+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,600 (현재 5,590)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,697"}, {"label": "추세(10일선)", "ok": true, "detail": "5,204"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.598735+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 820, "proceeds": 4795830, "entry_price": 6390, "pnl": -444756, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.393232+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,958"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.497847+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 314, "cost": 1925109, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.947137+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 28, "cost": 3665750, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 175169, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,900 vs 108,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,360 / 108,560"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.185462+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 830, "cost": 5238086, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7843, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,300 vs 5,583"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,726 / 5,583"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T09:50:07.301109+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 154552, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,552"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.629713+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 294, "cost": 1925989, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.631046+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 82, "proceeds": 6358976, "entry_price": 89863, "pnl": -1010930, "pnl_pct": -13.54, "hold_from": "2026-07-23T09:46:06.370394+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,827 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,973"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:12.417029+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 258, "cost": 3331280, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 17699, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.358546+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 248, "cost": 3328659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 17699, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,699"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:34:09.921381+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90000, "qty": 37, "cost": 3330500, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79135, "target": 122595, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "89,800 vs 81,060"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,320 / 81,060"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,320 / 75,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "595,733 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:13.380611+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 36, "cost": 3366505, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 79135, "target": 122595, "signals": [{"label": "손절선", "ok": true, "detail": "79,135 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,595"}, {"label": "추세(10일선)", "ok": true, "detail": "81,420"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,841"}]}
|
||||
{"ts": "2026-08-05T09:02:14.722976+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 830, "proceeds": 4721775, "entry_price": 6310, "pnl": -516311, "pnl_pct": -9.67, "hold_from": "2026-07-30T09:18:10.185459+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,799 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,843"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,423"}]}
|
||||
{"ts": "2026-08-05T09:02:14.724365+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 153, "cost": 1995419, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10340, "target": 21140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:12.648974+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 144, "cost": 1991819, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21140, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,140"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:20.679765+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 598, "proceeds": 11178699, "entry_price": 18950, "pnl": -155101, "pnl_pct": -1.16, "hold_from": "2026-07-24T10:02:04.447374+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,520"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:14:11.164457+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 193600, "qty": 24, "cost": 4647097, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 176944, "target": 243568, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "193,500 vs 180,840"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,480 / 180,840"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,480 / 176,699"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,163,480 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-08-07T09:34:09.368713+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 198600, "qty": 24, "cost": 4767115, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 176944, "target": 243568, "signals": [{"label": "손절선", "ok": true, "detail": "176,944 (현재 198,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 243,568"}, {"label": "추세(10일선)", "ok": true, "detail": "181,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 197,939"}]}
|
||||
{"ts": "2026-08-10T09:00:18.496804+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 27, "cost": 3672551, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116144, "target": 175169, "signals": [{"label": "손절선", "ok": true, "detail": "116,144 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 175,169"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,814"}]}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"cash": 26692924.320500042,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 21,
|
||||
"entry_price": 343976.1904761905,
|
||||
"entry_at": "2026-07-13T09:06:07.909051+09:00",
|
||||
"stop": 302625,
|
||||
"target": 426679,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3813943.0504600187,
|
||||
"last_add_price": 350000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 81,
|
||||
"entry_price": 124881.48148148147,
|
||||
"entry_at": "2026-07-29T10:24:01.454311+09:00",
|
||||
"stop": 114155,
|
||||
"target": 146335,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5142605.848996199,
|
||||
"last_add_price": 126400
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 608,
|
||||
"entry_price": 6333.0921052631575,
|
||||
"entry_at": "2026-07-30T09:04:07.501481+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1927621.6063135946,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 55,
|
||||
"entry_price": 133403.63636363635,
|
||||
"entry_at": "2026-07-30T09:16:11.950700+09:00",
|
||||
"stop": 117747,
|
||||
"target": 164716,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3759463.8630866953,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 506,
|
||||
"entry_price": 13159.9604743083,
|
||||
"entry_at": "2026-08-03T12:00:12.428946+09:00",
|
||||
"stop": 11445,
|
||||
"target": 16590,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3342042.065213833,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 73,
|
||||
"entry_price": 91726.02739726027,
|
||||
"entry_at": "2026-08-04T09:34:09.933331+09:00",
|
||||
"stop": 80361,
|
||||
"target": 114456,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3414906.320549933,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 297,
|
||||
"entry_price": 13423.030303030304,
|
||||
"entry_at": "2026-08-05T09:02:14.737713+09:00",
|
||||
"stop": 10340,
|
||||
"target": 19589,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1996058.5440871862,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 48,
|
||||
"entry_price": 196100.0,
|
||||
"entry_at": "2026-08-06T09:14:12.331155+09:00",
|
||||
"stop": 178744,
|
||||
"target": 230812,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4827704.554226948,
|
||||
"last_add_price": 198600
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18017783.52950002,
|
||||
"closed_trades": 27,
|
||||
"wins": 0,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.1859662521949996,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"003490": "2026-07-09",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582910+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.154115+09:00"
|
||||
}
|
||||
@@ -0,0 +1,87 @@
|
||||
{"ts": "2026-06-17T11:15:02.386716+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 156622, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.434317+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 11, "cost": 4109116, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 457982, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "373,000 vs 330,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "352,400 / 330,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.434691+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 17760, "target": 21960, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:12.773335+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.434690+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,960"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.249227+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.386715+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,622"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:04.199318+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 11, "proceeds": 3622922, "entry_price": 373500, "pnl": -486195, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:06.434316+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 457,982"}, {"label": "추세(10일선)", "ok": false, "detail": "335,050"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:02:02.390135+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 73200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,200 vs 52,550"}, {"label": "정배열(5>10)", "ok": true, "detail": "57,960 / 52,550"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:01.002080+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 13, "cost": 2020503, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 118951, "target": 228299, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,400 vs 128,090"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,100 / 128,090"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.760993+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 186, "cost": 5376206, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 34203, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "28,850 vs 25,540"}, {"label": "정배열(5>10)", "ok": true, "detail": "26,110 / 25,540"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:08.320457+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.390134+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,200"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.911409+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 12, "cost": 1979097, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118951, "target": 228299, "signals": [{"label": "손절선", "ok": true, "detail": "118,951 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 228,299"}, {"label": "추세(10일선)", "ok": true, "detail": "129,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:10.286868+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 43200, "target": 79500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.203506+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 11, "cost": 3823073, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 305863, "target": 430774, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "347,000 vs 306,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "315,600 / 306,050"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.695446+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 11, "cost": 3960594, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 305863, "target": 430774, "signals": [{"label": "손절선", "ok": true, "detail": "305,863 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,774"}, {"label": "추세(10일선)", "ok": true, "detail": "307,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-02T10:18:03.860524+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 139, "cost": 2221553, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 12444, "target": 23051, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "15,980 vs 13,620"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,104 / 13,620"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.967580+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 324, "cost": 6143961, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 21360, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": true, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:04:07.649962+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 182, "cost": 5388008, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 34203, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,203"}, {"label": "추세(10일선)", "ok": true, "detail": "25,615"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-02T11:20:02.071911+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21360, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,360"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:24:06.161794+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 596, "proceeds": 11218641, "entry_price": 20598, "pnl": -1059841, "pnl_pct": -8.44, "hold_from": "2026-07-02T10:40:02.967579+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,038 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,718"}, {"label": "추세(10일선)", "ok": false, "detail": "18,937"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:44:02.623817+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 123600, "qty": 25, "proceeds": 3083974, "entry_price": 159960, "pnl": -915625, "pnl_pct": -22.73, "hold_from": "2026-06-24T09:08:01.002079+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,125 (현재 123,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 231,630"}, {"label": "추세(10일선)", "ok": false, "detail": "124,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.787961+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 314, "cost": 5979457, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17760, "target": 21600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.019084+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 154,452 도달", "stop": 96000, "target": 199800, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,452 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:34:02.079679+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 44, "cost": 4840726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99202, "target": 131596, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "110,300 vs 99,990"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,240 / 99,990"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T10:20:01.614813+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 311000, "qty": 22, "proceeds": 6828658, "entry_price": 353750, "pnl": -955009, "pnl_pct": -12.08, "hold_from": "2026-06-30T09:02:03.203505+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "311,470 (현재 311,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 438,310"}, {"label": "추세(10일선)", "ok": true, "detail": "302,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T09:48:07.763662+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.286858+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 79,500"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:28:06.475455+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12410, "qty": 139, "proceeds": 1721626, "entry_price": 15980, "pnl": -499927, "pnl_pct": -22.34, "hold_from": "2026-07-02T10:18:03.860522+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,444 (현재 12,430)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,051"}, {"label": "추세(10일선)", "ok": false, "detail": "13,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,543 · 기 +15"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,975"}]}
|
||||
{"ts": "2026-07-07T14:09:30.150362+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 9, "cost": 1649947, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 199800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 199,800"}, {"label": "추세(10일선)", "ok": true, "detail": "123,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 139,025"}]}
|
||||
{"ts": "2026-07-07T14:09:30.152519+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 288, "cost": 5976896, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21600, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,600"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:19.833472+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 22, "proceeds": 2377954, "entry_price": 152159, "pnl": -970048, "pnl_pct": -28.82, "hold_from": "2026-07-06T09:00:11.019074+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,460 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 219,558"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:10:01.837490+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 31, "cost": 4101915, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117515, "target": 161870, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,100 vs 108,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,600 / 108,680"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.868938+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 368, "proceeds": 9732984, "entry_price": 29246, "pnl": -1031231, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:05.760992+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,735"}, {"label": "추세(10일선)", "ok": true, "detail": "25,305"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:18:05.238378+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 183700, "qty": 24, "cost": 4409461, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 164505, "target": 222089, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "183,600 vs 158,140"}, {"label": "정배열(5>10)", "ok": true, "detail": "159,500 / 158,140"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,500 / 157,335"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.73% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,553,373 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "0.73% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-10T09:26:06.452586+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 34, "cost": 4451268, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117686, "target": 157327, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,800 vs 120,640"}, {"label": "정배열(5>10)", "ok": true, "detail": "122,760 / 120,640"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,760 / 118,578"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -427 · 기 +555 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.60% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,646,513 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.60% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-07-10T11:06:06.482328+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 139, "cost": 1899025, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 20260, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.683072+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 186600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-10T12:36:02.511186+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 188900, "qty": 23, "cost": 4345352, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 164505, "target": 222089, "signals": [{"label": "손절선", "ok": true, "detail": "164,505 (현재 188,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 222,089"}, {"label": "추세(10일선)", "ok": true, "detail": "158,670"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,220 · 기 +1,654"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 188,670"}]}
|
||||
{"ts": "2026-07-13T09:00:11.775509+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 30, "cost": 4107616, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117515, "target": 161870, "signals": [{"label": "손절선", "ok": true, "detail": "117,515 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,870"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:06:07.908857+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 112800, "qty": 42, "cost": 4738311, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 99202, "target": 131596, "signals": [{"label": "손절선", "ok": true, "detail": "99,202 (현재 112,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,596"}, {"label": "추세(10일선)", "ok": true, "detail": "100,240"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -358 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,792"}]}
|
||||
{"ts": "2026-07-13T09:06:07.909053+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 338500, "qty": 11, "cost": 3724059, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 297363, "target": 420774, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "338,500 vs 305,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "313,900 / 305,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "313,900 / 305,392"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.45% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "150,147 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.45% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:08:05.363738+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 34, "cost": 4566885, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 157327, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 134,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,327"}, {"label": "추세(10일선)", "ok": true, "detail": "120,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -277 · 기 +460"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,118"}]}
|
||||
{"ts": "2026-07-13T09:26:03.421829+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 186600, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,600"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-15T14:32:01.895515+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 602, "proceeds": 11157341, "entry_price": 19858, "pnl": -799013, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.787960+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,403"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:22:02.316697+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 350000, "qty": 10, "cost": 3500525, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 297363, "target": 420774, "signals": [{"label": "손절선", "ok": true, "detail": "297,363 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 420,774"}, {"label": "추세(10일선)", "ok": true, "detail": "306,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 348,838"}]}
|
||||
{"ts": "2026-07-20T12:28:02.326967+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 139, "proceeds": 1430295, "entry_price": 13660, "pnl": -468729, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.482327+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,260"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-20T14:12:02.751263+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 100100, "qty": 86, "proceeds": 8591813, "entry_price": 111367, "pnl": -987223, "pnl_pct": -10.12, "hold_from": "2026-07-06T09:34:02.079678+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,198 (현재 100,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 133,706"}, {"label": "추세(10일선)", "ok": true, "detail": "98,970"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -168 · 기 +257"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T14:12:02.752134+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 166000, "qty": 47, "proceeds": 7786786, "entry_price": 186245, "pnl": -968027, "pnl_pct": -10.87, "hold_from": "2026-07-10T09:18:05.238376+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,364 (현재 166,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 226,005"}, {"label": "추세(10일선)", "ok": true, "detail": "156,380"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -440 · 기 +299"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:46:06.372104+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88400, "qty": 42, "cost": 3713357, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77778, "target": 109644, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,300 vs 80,910"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,020 / 80,910"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,020 / 75,060"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "743,133 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.496091+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 184, "cost": 2602150, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 19008, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T13:06:04.448860+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 91400, "qty": 40, "cost": 3656548, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77778, "target": 109644, "signals": [{"label": "손절선", "ok": true, "detail": "77,778 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 109,644"}, {"label": "추세(10일선)", "ok": true, "detail": "81,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,159"}]}
|
||||
{"ts": "2026-07-24T09:00:08.379451+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.683071+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 204,568"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:02:04.053909+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 172, "cost": 2590709, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 19008, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,008"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T10:02:04.449500+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 299, "cost": 5666900, "path": "pullback", "reason": "눌림목 지정가 19,643 도달", "stop": 17760, "target": 21330, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,643 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.244231+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 409, "cost": 3055688, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6370, "target": 9669, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,470 vs 5,392"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,452 / 5,392"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.098345+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 386, "cost": 3053718, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 9669, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,669"}, {"label": "추세(10일선)", "ok": true, "detail": "5,434"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:10:01.052569+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 356, "proceeds": 4274329, "entry_price": 14584, "pnl": -918530, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.496090+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,081 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,592"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.529454+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 159, "cost": 2091164, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10340, "target": 18770, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,150 vs 12,888"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,378 / 12,888"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:18:02.000974+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 43, "cost": 5491924, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117473, "target": 148153, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "127,400 vs 117,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,940 / 117,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,940 / 110,142"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.26% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "439,847 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.26% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-28T11:22:00.759696+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 795, "proceeds": 5260572, "entry_price": 7684, "pnl": -848834, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:06.244230+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,897"}, {"label": "추세(10일선)", "ok": true, "detail": "5,282"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T13:02:00.828310+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117400, "qty": 43, "proceeds": 5038356, "entry_price": 127700, "pnl": -453568, "pnl_pct": -8.07, "hold_from": "2026-07-27T09:18:02.000973+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,473 (현재 117,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 148,153"}, {"label": "추세(10일선)", "ok": true, "detail": "116,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 +324"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,353"}]}
|
||||
{"ts": "2026-07-29T09:02:02.245060+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 344, "cost": 2250097, "path": "pullback", "reason": "눌림목 지정가 7,526 도달", "stop": 5295, "target": 9031, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,540 vs 5,298"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,266 / 5,298"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,526 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:24:10.010772+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 299, "cost": 5666900, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21330, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,330"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,268"}]}
|
||||
{"ts": "2026-07-29T09:24:10.011056+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 61, "proceeds": 7829303, "entry_price": 134562, "pnl": -380228, "pnl_pct": -4.43, "hold_from": "2026-07-09T09:10:01.837488+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,106 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,475"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:10.011197+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6710, "qty": 335, "cost": 2248187, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5295, "target": 9031, "signals": [{"label": "손절선", "ok": true, "detail": "5,295 (현재 8,460)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,031"}, {"label": "추세(10일선)", "ok": true, "detail": "5,064"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,796"}]}
|
||||
{"ts": "2026-07-29T09:24:10.011401+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 11310, "qty": 185, "cost": 2092664, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18770, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 15,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,770"}, {"label": "추세(10일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +242 · 기 -182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-07-29T09:28:01.394949+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 820, "cost": 5240586, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7435, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.454312+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 41, "cost": 5060159, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113016, "target": 144168, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "123,400 vs 116,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,140 / 116,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:52:02.361082+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10340, "qty": 344, "proceeds": 3550024, "entry_price": 12160, "pnl": -633804, "pnl_pct": -14.97, "hold_from": "2026-07-27T09:12:01.529452+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,340 (현재 10,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,801"}, {"label": "추세(10일선)", "ok": false, "detail": "12,607"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +239 · 기 -181"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.699059+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 68, "proceeds": 8089794, "entry_price": 132600, "pnl": -928358, "pnl_pct": -10.11, "hold_from": "2026-07-10T09:26:06.452585+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,729 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 158,342"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:14:05.451456+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5580, "qty": 679, "proceeds": 3781432, "entry_price": 6624, "pnl": -716853, "pnl_pct": -15.76, "hold_from": "2026-07-29T09:02:02.245058+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,600 (현재 5,590)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,672"}, {"label": "추세(10일선)", "ok": true, "detail": "5,204"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.600416+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 820, "proceeds": 4795830, "entry_price": 6390, "pnl": -444756, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.394948+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,435"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.501484+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 314, "cost": 1925109, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 8804, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.950702+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 28, "cost": 3665750, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 160413, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,900 vs 108,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,360 / 108,560"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.189166+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 830, "cost": 5238086, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7332, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,300 vs 5,583"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,726 / 5,583"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T09:50:07.304413+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 144168, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,168"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.639526+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 294, "cost": 1925989, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.640655+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 82, "proceeds": 6358976, "entry_price": 89863, "pnl": -1010930, "pnl_pct": -13.54, "hold_from": "2026-07-23T09:46:06.372102+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,827 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,936"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:12.428952+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 258, "cost": 3331280, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 16103, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.370265+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 248, "cost": 3328659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 16103, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,103"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:34:09.933337+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90000, "qty": 37, "cost": 3330500, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79135, "target": 111730, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "89,800 vs 81,060"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,320 / 81,060"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,320 / 75,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "595,733 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:13.392266+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 36, "cost": 3366505, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 79135, "target": 111730, "signals": [{"label": "손절선", "ok": true, "detail": "79,135 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,730"}, {"label": "추세(10일선)", "ok": true, "detail": "81,420"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,841"}]}
|
||||
{"ts": "2026-08-05T09:02:14.736714+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 830, "proceeds": 4721775, "entry_price": 6310, "pnl": -516311, "pnl_pct": -9.67, "hold_from": "2026-07-30T09:18:10.189164+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,799 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,332"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,423"}]}
|
||||
{"ts": "2026-08-05T09:02:14.737719+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 153, "cost": 1995419, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10340, "target": 18440, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.237529+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 144, "cost": 1991819, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18440, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,440"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:21.666182+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 598, "proceeds": 11178699, "entry_price": 18950, "pnl": -155101, "pnl_pct": -1.16, "hold_from": "2026-07-24T10:02:04.449498+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,330"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:14:12.331161+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 193600, "qty": 24, "cost": 4647097, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 176944, "target": 226912, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "193,500 vs 180,840"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,480 / 180,840"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,480 / 176,699"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,163,480 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-08-07T09:34:11.057722+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 198600, "qty": 24, "cost": 4767115, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 176944, "target": 226912, "signals": [{"label": "손절선", "ok": true, "detail": "176,944 (현재 198,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 226,912"}, {"label": "추세(10일선)", "ok": true, "detail": "181,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 197,939"}]}
|
||||
{"ts": "2026-08-10T09:00:20.440298+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 27, "cost": 3672551, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116144, "target": 160413, "signals": [{"label": "손절선", "ok": true, "detail": "116,144 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 160,413"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,814"}]}
|
||||
@@ -0,0 +1,200 @@
|
||||
{
|
||||
"cash": 29414084.747000005,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 81,
|
||||
"entry_price": 124881.48148148147,
|
||||
"entry_at": "2026-07-29T10:24:01.456083+09:00",
|
||||
"stop": 114155,
|
||||
"target": 140972,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5164071.483514108,
|
||||
"last_add_price": 126400
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 617,
|
||||
"entry_price": 6332.852512155591,
|
||||
"entry_at": "2026-07-30T09:04:07.505690+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1956462.6546955872,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 57,
|
||||
"entry_price": 133405.26315789475,
|
||||
"entry_at": "2026-07-30T09:16:11.953984+09:00",
|
||||
"stop": 117749,
|
||||
"target": 156890,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3812991.5556229833,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 514,
|
||||
"entry_price": 13160.038910505837,
|
||||
"entry_at": "2026-08-03T12:00:12.437989+09:00",
|
||||
"stop": 11445,
|
||||
"target": 15732,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3393650.506937234,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 75,
|
||||
"entry_price": 91726.66666666667,
|
||||
"entry_at": "2026-08-04T09:34:09.942366+09:00",
|
||||
"stop": 80362,
|
||||
"target": 108774,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3469610.992924529,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 301,
|
||||
"entry_price": 13423.189368770763,
|
||||
"entry_at": "2026-08-05T09:02:14.746818+09:00",
|
||||
"stop": 10340,
|
||||
"target": 18048,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2028402.8880774078,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 49,
|
||||
"entry_price": 196048.97959183675,
|
||||
"entry_at": "2026-08-06T09:14:12.340235+09:00",
|
||||
"stop": 178693,
|
||||
"target": 222083,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4907695.663916428,
|
||||
"last_add_price": 198600
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 274,
|
||||
"entry_price": 19170,
|
||||
"entry_at": "2026-08-07T11:26:15.615754+09:00",
|
||||
"stop": 17760,
|
||||
"target": 21285,
|
||||
"peak": 19270,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,668 도달",
|
||||
"cur_price": 18970,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5272247.114625,
|
||||
"last_add_price": 19170
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16407799.75450002,
|
||||
"closed_trades": 29,
|
||||
"wins": 2,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.1727808549849999,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
"403870": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-08-07",
|
||||
"093370": "2026-07-20",
|
||||
"003490": "2026-07-09",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582926+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.161829+09:00"
|
||||
}
|
||||
@@ -0,0 +1,88 @@
|
||||
{"ts": "2026-06-17T11:15:02.389906+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 150191, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.437860+09:00", "side": "BUY", "code": "005930", "name": "삼성전자", "price": 373500, "qty": 11, "cost": 4109116, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 331259, "target": 436861, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "373,000 vs 330,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "352,400 / 330,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "352,400 / 258,005"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,427 · 기 +4,448 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.04% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 370,000"}, {"label": "거래량 급증", "ok": true, "detail": "60,950,213 (환산) vs 평균 31,088,390"}, {"label": "회전율 급증", "ok": true, "detail": "1.04% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-06-19T09:02:06.438237+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 17760, "target": 21260, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:12.876230+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.438236+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,260"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.253070+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.389905+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-23T12:32:04.201139+09:00", "side": "SELL", "code": "005930", "name": "삼성전자", "price": 330000, "qty": 11, "proceeds": 3622922, "entry_price": 373500, "pnl": -486195, "pnl_pct": -11.65, "hold_from": "2026-06-19T09:02:06.437859+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,259 (현재 330,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 436,861"}, {"label": "추세(10일선)", "ok": false, "detail": "335,050"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -3,792 · 기 +1,417"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 384,779"}]}
|
||||
{"ts": "2026-06-24T09:02:02.391817+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 68200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,200 vs 52,550"}, {"label": "정배열(5>10)", "ok": true, "detail": "57,960 / 52,550"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:01.003785+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 13, "cost": 2020503, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 118951, "target": 210074, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,400 vs 128,090"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,100 / 128,090"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.762805+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 186, "cost": 5376206, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 32878, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "28,850 vs 25,540"}, {"label": "정배열(5>10)", "ok": true, "detail": "26,110 / 25,540"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:08.420849+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.391816+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 68,200"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.912962+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 12, "cost": 1979097, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118951, "target": 210074, "signals": [{"label": "손절선", "ok": true, "detail": "118,951 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 210,074"}, {"label": "추세(10일선)", "ok": true, "detail": "129,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:10.386988+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 43200, "target": 73450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-06-30T09:02:03.205236+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 347500, "qty": 11, "cost": 3823073, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 305863, "target": 409956, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "347,000 vs 306,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "315,600 / 306,050"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,600 / 305,533"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -19 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+39%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.55% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "160,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.55% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-06-30T09:06:03.696979+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 360000, "qty": 11, "cost": 3960594, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 305863, "target": 409956, "signals": [{"label": "손절선", "ok": true, "detail": "305,863 (현재 360,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 409,956"}, {"label": "추세(10일선)", "ok": true, "detail": "307,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -19 · 기 +146"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 358,070"}]}
|
||||
{"ts": "2026-07-02T10:18:03.863005+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 139, "cost": 2221553, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 12444, "target": 21284, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "15,980 vs 13,620"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,104 / 13,620"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:40:02.969307+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18960, "qty": 324, "cost": 6143961, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 20760, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,960 vs 18,944"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,578 / 18,944"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,578 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.86% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": true, "detail": "986,112 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.86% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,960)"}]}
|
||||
{"ts": "2026-07-02T11:04:07.652692+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 182, "cost": 5388008, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 32878, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,878"}, {"label": "추세(10일선)", "ok": true, "detail": "25,615"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-02T11:20:02.073753+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20760, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,760"}, {"label": "추세(10일선)", "ok": true, "detail": "18,983"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,350"}]}
|
||||
{"ts": "2026-07-02T11:24:06.163503+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 596, "proceeds": 11218641, "entry_price": 20598, "pnl": -1059841, "pnl_pct": -8.44, "hold_from": "2026-07-02T10:40:02.969306+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,038 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,938"}, {"label": "추세(10일선)", "ok": false, "detail": "18,937"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:44:02.625487+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 123600, "qty": 25, "proceeds": 3083974, "entry_price": 159960, "pnl": -915625, "pnl_pct": -22.73, "hold_from": "2026-06-24T09:08:01.003784+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,125 (현재 123,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 213,713"}, {"label": "추세(10일선)", "ok": false, "detail": "124,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.789633+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 314, "cost": 5979457, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17760, "target": 20960, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.119619+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 154,452 도달", "stop": 96000, "target": 182500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,452 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:34:02.081926+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 110000, "qty": 44, "cost": 4840726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 99202, "target": 126197, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "110,300 vs 99,990"}, {"label": "정배열(5>10)", "ok": true, "detail": "101,240 / 99,990"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "101,240 / 96,630"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -717 · 기 +1,343 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.55% (환산) vs 평균 0.35% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 109,800"}, {"label": "거래량 급증", "ok": true, "detail": "2,617,853 (환산) vs 평균 1,653,581"}, {"label": "회전율 급증", "ok": true, "detail": "0.55% (환산) vs 평균 0.35%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T10:20:01.616549+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 311000, "qty": 22, "proceeds": 6828658, "entry_price": 353750, "pnl": -955009, "pnl_pct": -12.08, "hold_from": "2026-06-30T09:02:03.205234+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "311,470 (현재 311,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 417,170"}, {"label": "추세(10일선)", "ok": true, "detail": "302,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T09:48:07.767853+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.386979+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,450"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:28:06.477069+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12410, "qty": 139, "proceeds": 1721626, "entry_price": 15980, "pnl": -499927, "pnl_pct": -22.34, "hold_from": "2026-07-02T10:18:03.863004+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,444 (현재 12,430)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,284"}, {"label": "추세(10일선)", "ok": false, "detail": "13,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,543 · 기 +15"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,975"}]}
|
||||
{"ts": "2026-07-07T14:09:35.510986+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 288, "cost": 5976896, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20960, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,960"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:19.930868+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 13, "proceeds": 1405155, "entry_price": 130600, "pnl": -292900, "pnl_pct": -17.08, "hold_from": "2026-07-06T09:00:11.119610+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:10:01.839169+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132300, "qty": 31, "cost": 4101915, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117515, "target": 154477, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,100 vs 108,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,600 / 108,680"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,600 / 113,232"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "572,860 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.870803+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 368, "proceeds": 9732984, "entry_price": 29246, "pnl": -1031231, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:05.762803+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 33,363"}, {"label": "추세(10일선)", "ok": true, "detail": "25,305"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:18:05.240333+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 183700, "qty": 24, "cost": 4409461, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 164505, "target": 212492, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "183,600 vs 158,140"}, {"label": "정배열(5>10)", "ok": true, "detail": "159,500 / 158,140"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,500 / 157,335"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.73% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,553,373 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "0.73% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-10T09:26:06.454295+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 35, "cost": 4582187, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117686, "target": 150721, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,800 vs 120,640"}, {"label": "정배열(5>10)", "ok": true, "detail": "122,760 / 120,640"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,760 / 118,578"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -427 · 기 +555 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.60% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,646,513 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.60% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-07-10T11:06:06.484073+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 140, "cost": 1912687, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 18610, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.684804+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 171500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-10T12:36:02.513268+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 188900, "qty": 23, "cost": 4345352, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 164505, "target": 212492, "signals": [{"label": "손절선", "ok": true, "detail": "164,505 (현재 188,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 212,492"}, {"label": "추세(10일선)", "ok": true, "detail": "158,670"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,220 · 기 +1,654"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 188,670"}]}
|
||||
{"ts": "2026-07-13T09:00:11.877348+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 30, "cost": 4107616, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117515, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "117,515 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,164"}]}
|
||||
{"ts": "2026-07-13T09:06:07.911089+09:00", "side": "BUY", "code": "055550", "name": "신한지주", "price": 112800, "qty": 42, "cost": 4738311, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 99202, "target": 126197, "signals": [{"label": "손절선", "ok": true, "detail": "99,202 (현재 112,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 126,197"}, {"label": "추세(10일선)", "ok": true, "detail": "100,240"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -358 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 112,792"}]}
|
||||
{"ts": "2026-07-13T09:06:07.911276+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 338500, "qty": 11, "cost": 3724059, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 297363, "target": 400206, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "338,500 vs 305,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "313,900 / 305,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "313,900 / 305,392"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.45% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "150,147 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.45% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:08:05.365455+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 34, "cost": 4566885, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 150721, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 134,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,721"}, {"label": "추세(10일선)", "ok": true, "detail": "120,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -277 · 기 +460"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,118"}]}
|
||||
{"ts": "2026-07-13T09:26:03.423477+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 171500, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,500"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-15T14:32:01.897265+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 602, "proceeds": 11157341, "entry_price": 19858, "pnl": -799013, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.789631+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,766"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:22:02.318451+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 350000, "qty": 10, "cost": 3500525, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 297363, "target": 400206, "signals": [{"label": "손절선", "ok": true, "detail": "297,363 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 400,206"}, {"label": "추세(10일선)", "ok": true, "detail": "306,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 348,838"}]}
|
||||
{"ts": "2026-07-20T12:28:02.328809+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 140, "proceeds": 1440585, "entry_price": 13660, "pnl": -472101, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.484072+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,610"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-20T14:12:02.757886+09:00", "side": "SELL", "code": "055550", "name": "신한지주", "price": 100100, "qty": 86, "proceeds": 8591813, "entry_price": 111367, "pnl": -987223, "pnl_pct": -10.12, "hold_from": "2026-07-06T09:34:02.081925+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,198 (현재 100,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 128,122"}, {"label": "추세(10일선)", "ok": true, "detail": "98,970"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -168 · 기 +257"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T14:12:02.758626+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 166000, "qty": 47, "proceeds": 7786786, "entry_price": 186245, "pnl": -968027, "pnl_pct": -10.87, "hold_from": "2026-07-10T09:18:05.240331+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,364 (현재 166,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,065"}, {"label": "추세(10일선)", "ok": true, "detail": "156,380"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -440 · 기 +299"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:46:06.373869+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88400, "qty": 42, "cost": 3713357, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77778, "target": 104333, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,300 vs 80,910"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,020 / 80,910"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,020 / 75,060"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "743,133 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.497821+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 185, "cost": 2616292, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 17791, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T13:06:04.450612+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 91400, "qty": 41, "cost": 3747962, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77778, "target": 104333, "signals": [{"label": "손절선", "ok": true, "detail": "77,778 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,333"}, {"label": "추세(10일선)", "ok": true, "detail": "81,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,159"}]}
|
||||
{"ts": "2026-07-24T09:00:08.483241+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.684802+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,473"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:02:04.055579+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 174, "cost": 2620833, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 17791, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,791"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T10:02:04.451572+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 302, "cost": 5723758, "path": "pullback", "reason": "눌림목 지정가 19,643 도달", "stop": 17760, "target": 20735, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,643 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.246349+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 412, "cost": 3078102, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6370, "target": 9119, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,470 vs 5,392"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,452 / 5,392"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.100105+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 389, "cost": 3077452, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 9119, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,119"}, {"label": "추세(10일선)", "ok": true, "detail": "5,434"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:10:01.054297+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 359, "proceeds": 4310348, "entry_price": 14586, "pnl": -926777, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.497819+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,082 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,342"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.531681+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 160, "cost": 2104316, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10340, "target": 17365, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,150 vs 12,888"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,378 / 12,888"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:18:02.002747+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 44, "cost": 5619643, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117473, "target": 143040, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "127,400 vs 117,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,940 / 117,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,940 / 110,142"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.26% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "439,847 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.26% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-28T11:22:00.761394+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 801, "proceeds": 5300274, "entry_price": 7684, "pnl": -855279, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:06.246347+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,344"}, {"label": "추세(10일선)", "ok": true, "detail": "5,282"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T13:02:00.830227+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117400, "qty": 44, "proceeds": 5155527, "entry_price": 127700, "pnl": -464116, "pnl_pct": -8.07, "hold_from": "2026-07-27T09:18:02.002746+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,473 (현재 117,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 143,040"}, {"label": "추세(10일선)", "ok": true, "detail": "116,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 +324"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,353"}]}
|
||||
{"ts": "2026-07-29T09:02:02.247306+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 347, "cost": 2269720, "path": "pullback", "reason": "눌림목 지정가 7,526 도달", "stop": 5295, "target": 8408, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,540 vs 5,298"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,266 / 5,298"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,526 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:24:10.014921+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 61, "proceeds": 7829303, "entry_price": 134562, "pnl": -380228, "pnl_pct": -4.43, "hold_from": "2026-07-09T09:10:01.839168+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,106 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,747"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:10.015166+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 11310, "qty": 186, "cost": 2103976, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17365, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 15,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,365"}, {"label": "추세(10일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +242 · 기 -182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-07-29T09:26:01.914698+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18940, "qty": 302, "proceeds": 5708726, "entry_price": 18950, "pnl": -15032, "pnl_pct": -0.05, "hold_from": "2026-07-24T10:02:04.451570+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,645 (현재 18,950)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "18,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.914854+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6610, "qty": 347, "proceeds": 2289197, "entry_price": 6540, "pnl": 19477, "pnl_pct": 1.07, "hold_from": "2026-07-29T09:02:02.247304+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,526 (현재 6,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "5,306"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.396683+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 826, "cost": 5278932, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7174, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.456084+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 41, "cost": 5060159, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113016, "target": 138976, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "123,400 vs 116,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,140 / 116,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:52:02.362763+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10340, "qty": 346, "proceeds": 3570664, "entry_price": 12161, "pnl": -637628, "pnl_pct": -14.97, "hold_from": "2026-07-27T09:12:01.531679+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,340 (현재 10,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 14,892"}, {"label": "추세(10일선)", "ok": false, "detail": "12,607"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +239 · 기 -181"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.700752+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 69, "proceeds": 8208762, "entry_price": 132575, "pnl": -940311, "pnl_pct": -10.09, "hold_from": "2026-07-10T09:26:06.454294+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "119,704 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 151,882"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.602105+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 826, "proceeds": 4830921, "entry_price": 6390, "pnl": -448010, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.396682+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.505212+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19090, "qty": 279, "cost": 5326909, "path": "pullback", "reason": "눌림목 지정가 19,653 도달", "stop": 17760, "target": 21085, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,100 vs 18,958"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,606 / 18,958"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,606 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 +327 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.14% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "160,727 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.14% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,653 (현재 19,100)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.505693+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 319, "cost": 1955763, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 8135, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.953986+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 29, "cost": 3796669, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 153035, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,900 vs 108,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,360 / 108,560"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.192454+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 842, "cost": 5313817, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7077, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,300 vs 5,583"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,726 / 5,583"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T09:50:07.307619+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 138976, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,976"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.648347+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 298, "cost": 1952193, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.648789+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89882, "pnl": -1024795, "pnl_pct": -13.55, "hold_from": "2026-07-23T09:46:06.373868+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,845 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,437"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:12.437993+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 262, "cost": 3382927, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 15304, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "12,930 vs 12,003"}, {"label": "정배열(5>10)", "ok": true, "detail": "12,138 / 12,003"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.377561+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 252, "cost": 3382347, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(10일선)", "ok": true, "detail": "12,055"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:34:09.942370+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90000, "qty": 38, "cost": 3420513, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79135, "target": 106298, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "89,800 vs 81,060"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,320 / 81,060"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,320 / 75,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "595,733 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:13.399942+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 37, "cost": 3460019, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 79135, "target": 106298, "signals": [{"label": "손절선", "ok": true, "detail": "79,135 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,298"}, {"label": "추세(10일선)", "ok": true, "detail": "81,420"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,841"}]}
|
||||
{"ts": "2026-08-05T09:02:14.746101+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 842, "proceeds": 4790041, "entry_price": 6310, "pnl": -523776, "pnl_pct": -9.67, "hold_from": "2026-07-30T09:18:10.192452+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,799 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,077"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,423"}]}
|
||||
{"ts": "2026-08-05T09:02:14.746847+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 155, "cost": 2021503, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10340, "target": 17090, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.245715+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 146, "cost": 2019483, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17090, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,090"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:21.768781+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 279, "proceeds": 5215480, "entry_price": 19090, "pnl": -111429, "pnl_pct": -1.89, "hold_from": "2026-07-30T09:04:07.505210+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,085"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,459"}]}
|
||||
{"ts": "2026-08-06T09:14:12.340240+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 193600, "qty": 25, "cost": 4840726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 176944, "target": 218584, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "193,500 vs 180,840"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,480 / 180,840"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,480 / 176,699"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,163,480 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-08-07T09:34:11.068466+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 198600, "qty": 24, "cost": 4767115, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 176944, "target": 218584, "signals": [{"label": "손절선", "ok": true, "detail": "176,944 (현재 198,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 218,584"}, {"label": "추세(10일선)", "ok": true, "detail": "181,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 197,939"}]}
|
||||
{"ts": "2026-08-07T11:24:18.191138+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 21, "proceeds": 7461422, "entry_price": 343976, "pnl": 236838, "pnl_pct": 3.5, "hold_from": "2026-07-13T09:06:07.911275+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "372,486 (현재 354,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "306,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +101 · 기 +31"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-07T11:26:15.615759+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19170, "qty": 274, "cost": 5253368, "path": "pullback", "reason": "눌림목 지정가 19,668 도달", "stop": 17760, "target": 21285, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,160 vs 18,964"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,618 / 18,964"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,618 / 19,362"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -80 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "535,067 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,668 (현재 19,160)"}]}
|
||||
{"ts": "2026-08-10T09:00:20.545375+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 28, "cost": 3808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116144, "target": 153035, "signals": [{"label": "손절선", "ok": true, "detail": "116,144 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 153,035"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,814"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 23212628.033999994,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 28,
|
||||
"entry_price": 350250.0,
|
||||
"entry_at": "2026-07-21T12:06:01.185929+09:00",
|
||||
"stop": 318647,
|
||||
"target": 445059,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5085796.90859035,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 793,
|
||||
"entry_price": 6332.849936948298,
|
||||
"entry_at": "2026-07-30T09:04:07.509224+09:00",
|
||||
"stop": 5362,
|
||||
"target": 9244,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2514428.437642747,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 648,
|
||||
"entry_price": 13160.277777777777,
|
||||
"entry_at": "2026-08-03T12:00:12.444885+09:00",
|
||||
"stop": 11874,
|
||||
"target": 17019,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4271897.688361821,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 23,
|
||||
"entry_price": 141495.65217391305,
|
||||
"entry_at": "2026-08-04T09:04:10.089202+09:00",
|
||||
"stop": 111689,
|
||||
"target": 230917,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 145,918 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1723507.428441815,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 93,
|
||||
"entry_price": 91933.33333333333,
|
||||
"entry_at": "2026-08-04T09:50:10.213035+09:00",
|
||||
"stop": 83410,
|
||||
"target": 117505,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4327959.889890211,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 330,
|
||||
"entry_price": 13423.030303030304,
|
||||
"entry_at": "2026-08-05T09:02:14.754658+09:00",
|
||||
"stop": 11094,
|
||||
"target": 20412,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2219137.008862232,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 50,
|
||||
"entry_price": 194200.0,
|
||||
"entry_at": "2026-08-06T09:34:17.058691+09:00",
|
||||
"stop": 181408,
|
||||
"target": 232576,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4934881.2159687495,
|
||||
"last_add_price": 196400
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 258,
|
||||
"entry_price": 19120,
|
||||
"entry_at": "2026-08-07T09:00:20.292023+09:00",
|
||||
"stop": 18038,
|
||||
"target": 22366,
|
||||
"peak": 19330,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,668 도달",
|
||||
"cur_price": 18970,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4952128.404875,
|
||||
"last_add_price": 19120
|
||||
}
|
||||
},
|
||||
"realized_pnl": -22545666.930500023,
|
||||
"closed_trades": 39,
|
||||
"wins": 1,
|
||||
"peak_equity": 100344662.275,
|
||||
"max_drawdown": 0.23080444655370694,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-08-06",
|
||||
"403870": "2026-07-02",
|
||||
"003490": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-03",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-08",
|
||||
"319660": "2026-07-23",
|
||||
"105560": "2026-07-20",
|
||||
"095610": "2026-07-29",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-08-03",
|
||||
"090850": "2026-08-06",
|
||||
"138040": "2026-08-04",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583136+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.167447+09:00"
|
||||
}
|
||||
@@ -0,0 +1,113 @@
|
||||
{"ts": "2026-06-17T11:15:02.393160+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121254, "target": 159837, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.441745+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 18100, "target": 22339, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-19T13:32:02.883332+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 121100, "qty": 47, "proceeds": 5680601, "entry_price": 130900, "pnl": -472622, "pnl_pct": -7.49, "hold_from": "2026-06-17T11:15:02.393158+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,254 (현재 121,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 159,837"}, {"label": "추세(20일선)", "ok": true, "detail": "118,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +531 · 기 -129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,178"}]}
|
||||
{"ts": "2026-06-23T09:00:12.986591+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.441744+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,339"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-24T09:02:02.393486+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 83200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,200 vs 52,378"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,960 / 52,378"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:01.005474+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 18, "cost": 2797620, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 128063, "target": 237411, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,400 vs 121,610"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,100 / 121,610"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:05.764598+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 215, "cost": 6214432, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26911, "target": 34866, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:08.516061+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.393485+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.914528+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 17, "cost": 2803720, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 128063, "target": 237411, "signals": [{"label": "손절선", "ok": true, "detail": "128,063 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 237,411"}, {"label": "추세(20일선)", "ok": true, "detail": "122,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:10.486269+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 44022, "target": 89135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.231747+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 15, "cost": 5363304, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 325040, "target": 454880, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "357,000 vs 296,975"}, {"label": "정배열(5>20)", "ok": true, "detail": "317,600 / 296,975"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.331468+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 14, "cost": 5208781, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 325040, "target": 454880, "signals": [{"label": "손절선", "ok": true, "detail": "325,040 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 454,880"}, {"label": "추세(20일선)", "ok": true, "detail": "297,725"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T09:46:03.114409+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 52, "cost": 6147322, "path": "pullback", "reason": "눌림목 지정가 118,779 도달", "stop": 111000, "target": 139800, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,779 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T09:00:24.308786+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 707000, "qty": 4, "cost": 2828424, "path": "pullback", "reason": "눌림목 지정가 714,693 도달", "stop": 606693, "target": 1007921, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "714,000 vs 675,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "760,800 / 675,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "760,800 / 530,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -198 · 기 +92 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.32% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "230,413 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.32% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 714,693 (현재 714,000)"}]}
|
||||
{"ts": "2026-07-02T09:08:01.937356+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26900, "qty": 215, "proceeds": 5772222, "entry_price": 28900, "pnl": -442210, "pnl_pct": -6.92, "hold_from": "2026-06-25T09:04:05.764597+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,911 (현재 26,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,866"}, {"label": "추세(20일선)", "ok": true, "detail": "25,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -249 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,517"}]}
|
||||
{"ts": "2026-07-02T10:18:03.865687+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 185, "cost": 2956743, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 13328, "target": 23935, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "15,980 vs 12,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,104 / 12,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.865992+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 139800, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 139,800"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T10:34:04.139128+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 326, "cost": 6149282, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 22160, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.075672+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22160, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,160"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:22:01.984048+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 598, "proceeds": 11339844, "entry_price": 20538, "pnl": -943958, "pnl_pct": -7.49, "hold_from": "2026-07-02T10:34:04.139126+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,368 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 24,048"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:48:03.092195+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 133000, "qty": 35, "proceeds": 4645923, "entry_price": 160014, "pnl": -955417, "pnl_pct": -16.88, "hold_from": "2026-06-24T09:08:01.005473+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "133,138 (현재 133,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,643"}, {"label": "추세(20일선)", "ok": true, "detail": "120,490"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.204656+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:10.486263+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 89,135"}, {"label": "추세(20일선)", "ok": false, "detail": "51,912"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:02:04.942585+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 154,163 도달", "stop": 104263, "target": 220811, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,300 vs 120,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,680 / 120,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,163 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:50:01.686836+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 328500, "qty": 29, "proceeds": 9507923, "entry_price": 364500, "pnl": -1064162, "pnl_pct": -9.88, "hold_from": "2026-07-01T09:06:03.231746+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,504 (현재 331,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 463,487"}, {"label": "추세(20일선)", "ok": true, "detail": "295,675"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -127 · 기 +294"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:56:06.788151+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 13310, "qty": 185, "proceeds": 2457548, "entry_price": 15980, "pnl": -499195, "pnl_pct": -16.71, "hold_from": "2026-07-02T10:18:03.865686+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "13,328 (현재 13,320)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,935"}, {"label": "추세(20일선)", "ok": true, "detail": "12,716"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,944"}]}
|
||||
{"ts": "2026-07-03T10:24:02.791324+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 312, "cost": 5941371, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17921, "target": 22396, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T12:00:02.668056+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28800, "qty": 206, "cost": 5933690, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26795, "target": 34815, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,750 vs 25,942"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,090 / 25,942"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,090 / 25,214"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+8.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 +1,952 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.38% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,054,442 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.38% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T09:00:11.226791+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14510, "qty": 172, "cost": 2496094, "path": "pullback", "reason": "눌림목 지정가 16,248 도달", "stop": 11748, "target": 22796, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,490 vs 12,774"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,806 / 12,774"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,806 / 11,453"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,226 · 기 +134 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.02% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "20,667 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.02% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,248 (현재 14,490)"}]}
|
||||
{"ts": "2026-07-06T09:18:01.687101+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29500, "qty": 201, "cost": 5930389, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26795, "target": 34815, "signals": [{"label": "손절선", "ok": true, "detail": "26,795 (현재 29,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,815"}, {"label": "추세(20일선)", "ok": true, "detail": "25,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -142 · 기 +2,052"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,483"}]}
|
||||
{"ts": "2026-07-07T10:06:07.263963+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147500, "qty": 16, "cost": 2360354, "path": "pullback", "reason": "눌림목 지정가 148,050 도달", "stop": 118550, "target": 234350, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "147,400 vs 135,785"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,120 / 135,785"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,120 / 99,573"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +96 · 기 -196 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.06% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,366,200 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "7.06% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 148,050 (현재 147,400)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.254233+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 172, "proceeds": 2099458, "entry_price": 14510, "pnl": -396636, "pnl_pct": -15.71, "hold_from": "2026-07-06T09:00:11.226782+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,748 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,796"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,512"}]}
|
||||
{"ts": "2026-07-07T14:09:40.831175+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26600, "qty": 407, "proceeds": 10805089, "entry_price": 29146, "pnl": -1058990, "pnl_pct": -8.73, "hold_from": "2026-07-03T12:00:02.668055+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "27,098 (현재 26,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 35,289"}, {"label": "추세(20일선)", "ok": true, "detail": "25,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -532 · 기 +3,040"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T14:09:43.495607+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 12, "cost": 2199930, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104263, "target": 220811, "signals": [{"label": "손절선", "ok": true, "detail": "104,263 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 220,811"}, {"label": "추세(20일선)", "ok": true, "detail": "120,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 141,825"}]}
|
||||
{"ts": "2026-07-07T14:09:43.496883+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 13, "cost": 2301345, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118550, "target": 234350, "signals": [{"label": "손절선", "ok": true, "detail": "118,550 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 234,350"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 156,742"}]}
|
||||
{"ts": "2026-07-07T14:09:46.099690+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 286, "cost": 5935390, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17921, "target": 22396, "signals": [{"label": "손절선", "ok": true, "detail": "17,921 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,396"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-07T14:09:46.100799+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 606693, "target": 1007921, "signals": [{"label": "손절선", "ok": true, "detail": "606,693 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,007,921"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 738,777"}]}
|
||||
{"ts": "2026-07-08T09:00:20.034480+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 28, "proceeds": 3026487, "entry_price": 154786, "pnl": -1308163, "pnl_pct": -30.03, "hold_from": "2026-07-03T09:02:04.942583+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "129,511 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 230,609"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:20.036912+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 8, "proceeds": 4806609, "entry_price": 761000, "pnl": -1282304, "pnl_pct": -20.89, "hold_from": "2026-07-02T09:00:24.308779+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "665,669 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,046,992"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:12:05.982854+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18900, "qty": 598, "proceeds": 11280161, "entry_price": 19858, "pnl": -596601, "pnl_pct": -4.82, "hold_from": "2026-07-03T10:24:02.791323+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,904 (현재 18,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,720"}, {"label": "추세(20일선)", "ok": true, "detail": "18,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:02:04.480986+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 293, "cost": 5600070, "path": "pullback", "reason": "눌림목 지정가 19,657 도달", "stop": 18017, "target": 22388, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,657 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.481104+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 35, "cost": 5541331, "path": "pullback", "reason": "눌림목 지정가 158,582 도달", "stop": 158000, "target": 159200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,582 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:12:02.523061+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 35, "proceeds": 5480792, "entry_price": 158300, "pnl": -60540, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.481103+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.473481+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 39, "cost": 5148772, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120761, "target": 165716, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,900 vs 108,920"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,560 / 108,920"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:24:02.119172+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158900, "qty": 35, "cost": 5562334, "path": "pullback", "reason": "눌림목 지정가 159,557 도달", "stop": 158000, "target": 161600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,800 vs 149,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,400 / 149,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,400 / 113,205"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.62% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,627,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "5.62% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,557 (현재 158,800)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.638256+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 30, "cost": 5577837, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 171311, "target": 229666, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.489940+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 184, "cost": 2361074, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 20240, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.490846+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 170, "cost": 2354853, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 20240, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,240"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-10T12:14:02.686539+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 216800, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "126,200 vs 120,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "137,260 / 120,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:11.979434+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 38, "cost": 5202980, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120761, "target": 165716, "signals": [{"label": "손절선", "ok": true, "detail": "120,761 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,716"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:26:03.425107+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 216800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,800"}, {"label": "추세(20일선)", "ok": true, "detail": "120,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:36:02.288771+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 29, "cost": 5539831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 171311, "target": 229666, "signals": [{"label": "손절선", "ok": true, "detail": "171,311 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,666"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.369603+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 35, "proceeds": 6563676, "entry_price": 158900, "pnl": 1001342, "pnl_pct": 18.25, "hold_from": "2026-07-10T09:24:02.119171+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:12.110669+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 293, "proceeds": 5433324, "entry_price": 19110, "pnl": -166746, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.480985+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,388"}, {"label": "추세(20일선)", "ok": false, "detail": "18,832"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-20T09:04:02.896610+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 173000, "qty": 59, "proceeds": 10187096, "entry_price": 188407, "pnl": -930571, "pnl_pct": -8.18, "hold_from": "2026-07-10T09:28:02.638255+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "173,250 (현재 173,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,877"}, {"label": "추세(20일선)", "ok": true, "detail": "159,270"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -332 · 기 +291"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.330892+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 354, "proceeds": 3642623, "entry_price": 13320, "pnl": -1073304, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.489938+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,199"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T12:06:01.185931+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 14, "cost": 4823723, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 436576, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T11:56:00.841667+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 159800, "qty": 35, "cost": 5593839, "path": "pullback", "reason": "눌림목 지정가 159,932 도달", "stop": 158000, "target": 165200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "159,700 vs 149,775"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,580 / 149,775"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,580 / 113,220"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+75.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -408 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.73% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,371,014 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.73% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,932 (현재 159,700)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.753196+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 35, "proceeds": 5494764, "entry_price": 159800, "pnl": -99075, "pnl_pct": -1.56, "hold_from": "2026-07-22T11:56:00.841665+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,200"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,305"}]}
|
||||
{"ts": "2026-07-23T09:00:24.496838+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 34, "cost": 5444217, "path": "pullback", "reason": "눌림목 지정가 159,493 도달", "stop": 158000, "target": 166400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,493 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.426166+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 34, "proceeds": 5354738, "entry_price": 160100, "pnl": -89479, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:24.496830+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 166,400"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,669"}]}
|
||||
{"ts": "2026-07-23T09:44:04.302592+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 298, "cost": 5618143, "path": "pullback", "reason": "눌림목 지정가 19,627 도달", "stop": 17760, "target": 22120, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,627 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.528643+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 56, "cost": 4939941, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 80223, "target": 112132, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,200 vs 75,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,000 / 75,070"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.499551+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 246, "cost": 3478962, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 12315, "target": 19616, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,180 vs 10,944"}, {"label": "정배열(5>20)", "ok": true, "detail": "13,154 / 10,944"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:22:02.609780+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 436576, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 436,576"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.510618+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 54, "cost": 4909336, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 80223, "target": 112132, "signals": [{"label": "손절선", "ok": true, "detail": "80,223 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 112,132"}, {"label": "추세(20일선)", "ok": true, "detail": "75,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:08.588367+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.686538+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "102,302 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 221,851"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:08.589602+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 298, "proceeds": 5570656, "entry_price": 18850, "pnl": -47487, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.302591+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,120"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:02:04.057288+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 231, "cost": 3479382, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 12315, "target": 19616, "signals": [{"label": "손절선", "ok": true, "detail": "12,315 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,616"}, {"label": "추세(20일선)", "ok": true, "detail": "10,986"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T12:58:01.275864+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 132500, "qty": 29, "proceeds": 3835007, "entry_price": 160724, "pnl": -826692, "pnl_pct": -17.56, "hold_from": "2026-07-07T10:06:07.263962+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "132,997 (현재 132,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 243,905"}, {"label": "추세(20일선)", "ok": false, "detail": "135,040"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +177 · 기 -465"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:02:06.248330+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 139000, "qty": 15, "cost": 2085313, "path": "pullback", "reason": "눌림목 지정가 146,775 도달", "stop": 108775, "target": 229675, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "138,700 vs 135,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "168,380 / 135,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "168,380 / 99,428"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +238 · 기 -568 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.72% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "526,333 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.72% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 146,775 (현재 138,700)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.248457+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 295, "cost": 5635345, "path": "pullback", "reason": "눌림목 지정가 19,673 도달", "stop": 18023, "target": 22330, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,673 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.248634+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 543, "cost": 4056818, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6645, "target": 9944, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:04:05.331893+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12200, "qty": 477, "proceeds": 5808052, "entry_price": 14586, "pnl": -1150291, "pnl_pct": -16.36, "hold_from": "2026-07-23T10:30:02.499550+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,708 (현재 12,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,219"}, {"label": "추세(20일선)", "ok": true, "detail": "10,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:08:02.101845+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 513, "cost": 4058439, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6645, "target": 9944, "signals": [{"label": "손절선", "ok": true, "detail": "6,645 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,944"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:12:01.533928+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 191, "cost": 2512027, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10830, "target": 20110, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,150 vs 12,732"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,378 / 12,732"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T13:40:01.110173+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6780, "qty": 1056, "proceeds": 7145719, "entry_price": 7684, "pnl": -969538, "pnl_pct": -11.76, "hold_from": "2026-07-27T09:02:06.248633+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,854 (현재 6,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,174"}, {"label": "추세(20일선)", "ok": true, "detail": "4,841"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:17.897091+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 500, "cost": 3390509, "path": "pullback", "reason": "눌림목 지정가 7,596 도달", "stop": 5916, "target": 9373, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,596 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.757637+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 478, "cost": 3394309, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 9373, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,373"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T11:04:03.862281+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10790, "qty": 191, "proceeds": 2056871, "entry_price": 13150, "pnl": -455155, "pnl_pct": -17.95, "hold_from": "2026-07-27T09:12:01.533927+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,830 (현재 10,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,110"}, {"label": "추세(20일선)", "ok": false, "detail": "12,616"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 -156"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,003"}]}
|
||||
{"ts": "2026-07-29T09:24:10.018164+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 17, "cost": 2084513, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 108775, "target": 229675, "signals": [{"label": "손절선", "ok": true, "detail": "108,775 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,675"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 148,242"}]}
|
||||
{"ts": "2026-07-29T09:24:10.018323+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 297, "cost": 5628994, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 18023, "target": 22330, "signals": [{"label": "손절선", "ok": true, "detail": "18,023 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,330"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:10.018592+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 77, "proceeds": 9882891, "entry_price": 134418, "pnl": -468862, "pnl_pct": -4.33, "hold_from": "2026-07-09T09:36:03.473480+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "122,826 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 169,195"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.398381+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 824, "cost": 5266150, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 7566, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.457804+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 43, "cost": 5306996, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 115612, "target": 146764, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,400 vs 113,725"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,140 / 113,725"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:42:05.427012+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 824, "proceeds": 4917911, "entry_price": 6390, "pnl": -348238, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.398380+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,566"}, {"label": "추세(20일선)", "ok": true, "detail": "5,338"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T11:18:04.438536+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6000, "qty": 978, "proceeds": 5856557, "entry_price": 6936, "pnl": -928260, "pnl_pct": -13.5, "hold_from": "2026-07-28T09:00:17.897086+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,040 (현재 6,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,626"}, {"label": "추세(20일선)", "ok": true, "detail": "4,803"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:50:05.483924+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 108000, "qty": 32, "proceeds": 3449261, "entry_price": 130288, "pnl": -720565, "pnl_pct": -17.11, "hold_from": "2026-07-27T09:02:06.248329+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "108,775 (현재 108,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 213,468"}, {"label": "추세(20일선)", "ok": false, "detail": "133,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +449 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:30:01.461196+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 118000, "qty": 103, "proceeds": 12130300, "entry_price": 120181, "pnl": -250157, "pnl_pct": -1.81, "hold_from": "2026-07-01T09:46:03.114406+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 118,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,722"}, {"label": "추세(20일선)", "ok": false, "detail": "118,145"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T14:20:01.520902+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 115500, "qty": 43, "proceeds": 4956815, "entry_price": 123400, "pnl": -350181, "pnl_pct": -6.4, "hold_from": "2026-07-29T10:24:01.457803+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "115,612 (현재 115,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 146,764"}, {"label": "추세(20일선)", "ok": true, "detail": "113,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +44 · 기 +333"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,053"}]}
|
||||
{"ts": "2026-07-30T09:04:07.509226+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 410, "cost": 2513677, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 5127, "target": 9138, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:22:07.824435+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124400, "qty": 41, "cost": 5101165, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116537, "target": 147989, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,300 vs 113,770"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,320 / 113,770"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,320 / 110,090"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.37% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "615,133 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.37% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:24:07.557100+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 37, "cost": 4877331, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 165130, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.504703+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 820, "cost": 5166775, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 7450, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,280 vs 5,353"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,722 / 5,353"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T10:10:07.453421+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 40, "cost": 5108766, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116537, "target": 147989, "signals": [{"label": "손절선", "ok": true, "detail": "116,537 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,989"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 127,135"}]}
|
||||
{"ts": "2026-07-31T09:04:08.433229+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 110, "proceeds": 7586178, "entry_price": 89525, "pnl": -2263099, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.528642+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,291 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,229"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.654376+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 383, "cost": 2509026, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 9138, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,138"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-08-03T09:34:09.186164+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 120300, "qty": 37, "proceeds": 4442420, "entry_price": 131800, "pnl": -434911, "pnl_pct": -8.73, "hold_from": "2026-07-30T09:24:07.557097+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,690 (현재 120,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,130"}, {"label": "추세(20일선)", "ok": true, "detail": "108,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,311"}]}
|
||||
{"ts": "2026-08-03T12:00:12.444889+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 330, "cost": 4260939, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 16502, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.384620+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 318, "cost": 4268200, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 16502, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,502"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:10.089206+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 12, "cost": 1631045, "path": "pullback", "reason": "눌림목 지정가 145,918 도달", "stop": 104818, "target": 229146, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 145,918 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-04T09:50:10.213039+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90400, "qty": 47, "cost": 4249437, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82166, "target": 115103, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,300 vs 75,175"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,420 / 75,175"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,420 / 75,093"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.87% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "805,693 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.87% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:13.405182+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 46, "cost": 4301645, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82166, "target": 115103, "signals": [{"label": "손절선", "ok": true, "detail": "82,166 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 115,103"}, {"label": "추세(20일선)", "ok": true, "detail": "75,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 93,241"}]}
|
||||
{"ts": "2026-08-04T12:16:10.446121+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117800, "qty": 81, "proceeds": 9523193, "entry_price": 126030, "pnl": -686738, "pnl_pct": -6.53, "hold_from": "2026-07-30T09:22:07.824432+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,824 (현재 117,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,647"}, {"label": "추세(20일선)", "ok": true, "detail": "113,445"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -24 · 기 +268"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-04T13:26:13.440776+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5910, "qty": 820, "proceeds": 4836750, "entry_price": 6300, "pnl": -330025, "pnl_pct": -6.19, "hold_from": "2026-07-30T09:26:07.504700+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,917 (현재 5,910)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,450"}, {"label": "추세(20일선)", "ok": true, "detail": "5,335"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +36 · 기 +9"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,419"}]}
|
||||
{"ts": "2026-08-05T09:00:18.510059+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 11, "cost": 1623844, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104818, "target": 229146, "signals": [{"label": "손절선", "ok": true, "detail": "104,818 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,146"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-05T09:02:14.754261+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 5710, "qty": 867, "cost": 4951313, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5372, "target": 6725, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "5,730 vs 5,326"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,612 / 5,326"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,612 / 5,611"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -2 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "99,627 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.46% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-08-05T09:02:14.754660+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 170, "cost": 2217133, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10710, "target": 20029, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,040 vs 12,727"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,356 / 12,727"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.251161+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 160, "cost": 2213132, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10710, "target": 20029, "signals": [{"label": "손절선", "ok": true, "detail": "10,710 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,029"}, {"label": "추세(20일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:21.870261+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 592, "proceeds": 11066538, "entry_price": 19025, "pnl": -197801, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.248456+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,071 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,887"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:34:17.058695+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 25, "cost": 4800720, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 179508, "target": 229476, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "191,800 vs 177,680"}, {"label": "정배열(5>20)", "ok": true, "detail": "186,140 / 177,680"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-06T09:34:17.059340+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5350, "qty": 867, "proceeds": 4629405, "entry_price": 5710, "pnl": -321908, "pnl_pct": -6.3, "hold_from": "2026-08-05T09:02:14.754258+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,372 (현재 5,370)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,725"}, {"label": "추세(20일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -30 · 기 -23"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,829"}]}
|
||||
{"ts": "2026-08-07T09:00:20.292031+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19120, "qty": 258, "cost": 4933700, "path": "pullback", "reason": "눌림목 지정가 19,668 도달", "stop": 18038, "target": 22366, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,060 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,598 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,598 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -81 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.06% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "64,387 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.06% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,668 (현재 19,060)"}]}
|
||||
{"ts": "2026-08-07T09:12:17.863894+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 25, "cost": 4910736, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 179508, "target": 229476, "signals": [{"label": "손절선", "ok": true, "detail": "179,508 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,476"}, {"label": "추세(20일선)", "ok": true, "detail": "177,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 18871261.522500005,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 22,
|
||||
"entry_price": 347250.0,
|
||||
"entry_at": "2026-07-13T09:12:04.319241+09:00",
|
||||
"stop": 305399,
|
||||
"target": 472804,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3889733.683715179,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 89,
|
||||
"entry_price": 119185.39325842696,
|
||||
"entry_at": "2026-07-29T09:02:02.251620+09:00",
|
||||
"stop": 111200,
|
||||
"target": 143142,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5327150.576000001,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 79,
|
||||
"entry_price": 123225.3164556962,
|
||||
"entry_at": "2026-07-30T09:04:07.512389+09:00",
|
||||
"stop": 111000,
|
||||
"target": 159901,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4940372.790080874,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 606,
|
||||
"entry_price": 6333.069306930693,
|
||||
"entry_at": "2026-07-30T09:04:07.512664+09:00",
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1924945.6187384445,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 55,
|
||||
"entry_price": 133861.81818181818,
|
||||
"entry_at": "2026-07-30T09:24:07.560095+09:00",
|
||||
"stop": 118205,
|
||||
"target": 180831,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3791237.2526261737,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 395,
|
||||
"entry_price": 25667.46835443038,
|
||||
"entry_at": "2026-07-31T09:10:13.075428+09:00",
|
||||
"stop": 23650,
|
||||
"target": 31720,
|
||||
"peak": 27650,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 25,331 도달",
|
||||
"cur_price": 26850,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5089986.002562501,
|
||||
"last_add_price": 26100
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 300,
|
||||
"entry_price": 13424.466666666667,
|
||||
"entry_at": "2026-08-05T09:02:14.760491+09:00",
|
||||
"stop": 10340,
|
||||
"target": 22678,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2020520.412274148,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 49,
|
||||
"entry_price": 194155.10204081633,
|
||||
"entry_at": "2026-08-06T09:34:17.064741+09:00",
|
||||
"stop": 177099,
|
||||
"target": 245323,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4842897.369596543,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18257679.233000018,
|
||||
"closed_trades": 30,
|
||||
"wins": 0,
|
||||
"peak_equity": 101140808.32700005,
|
||||
"max_drawdown": 0.1947881632733674,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"010120": "2026-06-25",
|
||||
"298040": "2026-06-26",
|
||||
"403870": "2026-07-07",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"003490": "2026-07-23",
|
||||
"105560": "2026-07-20",
|
||||
"095610": "2026-07-29",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583184+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.173289+09:00"
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
{"ts": "2026-06-17T11:15:02.396449+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 169483, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.276360+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 35, "cost": 2201830, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 104714, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "62,800 vs 53,510"}, {"label": "정배열(5>10)", "ok": true, "detail": "59,880 / 53,510"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.445261+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 23360, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:13.090770+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.445260+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,360"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.259458+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.396448+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 169,483"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:04:06.140624+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 13, "cost": 2037406, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 266048, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "156,200 vs 128,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,260 / 128,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.751477+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 150, "cost": 2590889, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 27136, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "17,280 vs 13,750"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,364 / 13,750"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:05.157527+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 13, "cost": 2056908, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 270614, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "158,000 vs 153,380"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,240 / 153,380"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T10:06:01.722188+09:00", "side": "BUY", "code": "298040", "name": "효성중공업", "price": 3474000, "qty": 1, "cost": 3474521, "path": "pullback", "reason": "눌림목 지정가 3,598,344 도달", "stop": 2985000, "target": 4941000, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "3,475,000 vs 3,470,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "3,548,200 / 3,470,900"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "3,548,200 / 3,400,850"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-11.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +18 · 기 +0 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.75% (환산) vs 평균 0.63% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 4,085,000"}, {"label": "거래량 급증", "ok": true, "detail": "164,440 (환산) vs 평균 58,834"}, {"label": "회전율 급증", "ok": true, "detail": "1.75% (환산) vs 평균 0.63%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 3,598,344 (현재 3,475,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:06.249516+09:00", "side": "BUY", "code": "010120", "name": "LS ELECTRIC", "price": 231500, "qty": 14, "cost": 3241486, "path": "pullback", "reason": "눌림목 지정가 232,322 도달", "stop": 197600, "target": 333200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "231,250 vs 231,225"}, {"label": "정배열(5>10)", "ok": true, "detail": "235,350 / 231,225"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "235,350 / 221,484"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -72 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.88% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 291,000"}, {"label": "거래량 급증", "ok": true, "detail": "2,836,457 (환산) vs 평균 1,321,579"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.88%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 232,322 (현재 231,250)"}]}
|
||||
{"ts": "2026-06-24T11:12:06.251830+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 142, "cost": 2593309, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 27136, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 27,136"}, {"label": "추세(10일선)", "ok": true, "detail": "13,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:28.566324+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 11, "cost": 1970396, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 270614, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 270,614"}, {"label": "추세(10일선)", "ok": true, "detail": "155,410"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:06.164754+09:00", "side": "SELL", "code": "010120", "name": "LS ELECTRIC", "price": 228500, "qty": 14, "proceeds": 3192762, "entry_price": 231500, "pnl": -48724, "pnl_pct": -1.3, "hold_from": "2026-06-24T11:12:06.249500+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "197,600 (현재 229,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 333,200"}, {"label": "추세(10일선)", "ok": false, "detail": "231,000"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -56 · 기 -20"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 243,750"}]}
|
||||
{"ts": "2026-06-25T09:04:06.167535+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 187, "cost": 5405111, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 36855, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "28,850 vs 25,540"}, {"label": "정배열(5>10)", "ok": true, "detail": "26,110 / 25,540"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:09.636282+09:00", "side": "SELL", "code": "298040", "name": "효성중공업", "price": 3285000, "qty": 1, "proceeds": 3278594, "entry_price": 3474000, "pnl": -195927, "pnl_pct": -5.44, "hold_from": "2026-06-24T10:06:01.722186+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "2,985,000 (현재 3,290,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 4,941,000"}, {"label": "추세(10일선)", "ok": false, "detail": "3,651,600"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -14"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 3,613,320"}]}
|
||||
{"ts": "2026-06-26T09:00:09.637460+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 35, "proceeds": 1746588, "entry_price": 62900, "pnl": -455243, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:31.276353+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,714"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.082928+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 12, "cost": 2003100, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 266048, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 266,048"}, {"label": "추세(10일선)", "ok": true, "detail": "129,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.285630+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 3, "cost": 2235335, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 1141514, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "744,000 vs 735,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "766,800 / 735,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.506226+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 3, "cost": 2334350, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 1141514, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,141,514"}, {"label": "추세(10일선)", "ok": true, "detail": "739,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:10.587307+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 91600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.233594+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 487340, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "357,000 vs 307,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "317,600 / 307,050"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.333167+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 11, "cost": 4092614, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 487340, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 487,340"}, {"label": "추세(10일선)", "ok": true, "detail": "308,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-02T10:18:03.868151+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 43, "cost": 5255388, "path": "pullback", "reason": "눌림목 지정가 122,215 도달", "stop": 111000, "target": 155800, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "122,000 vs 119,760"}, {"label": "정배열(5>10)", "ok": true, "detail": "121,000 / 119,760"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "121,000 / 118,432"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +22 · 기 -44 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,199,199 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,215 (현재 122,000)"}]}
|
||||
{"ts": "2026-07-02T11:04:07.657762+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 183, "cost": 5417613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 36855, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 36,855"}, {"label": "추세(10일선)", "ok": true, "detail": "25,615"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:04:01.691036+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 292, "proceeds": 4187858, "entry_price": 17751, "pnl": -996340, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.751473+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 27,634"}, {"label": "추세(10일선)", "ok": true, "detail": "13,461"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.660946+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 25, "proceeds": 3136372, "entry_price": 161596, "pnl": -904134, "pnl_pct": -22.21, "hold_from": "2026-06-24T09:04:06.140622+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,761 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 269,102"}, {"label": "추세(10일선)", "ok": true, "detail": "125,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:16:03.263453+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 126200, "qty": 42, "cost": 5301195, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 155800, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 155,800"}, {"label": "추세(10일선)", "ok": true, "detail": "120,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +278"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 125,493"}]}
|
||||
{"ts": "2026-07-03T10:24:02.793046+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 313, "cost": 5960414, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 22880, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.332539+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 164,068 도달", "stop": 96000, "target": 234400, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,068 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:46:01.669394+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320500, "qty": 22, "proceeds": 7037251, "entry_price": 364750, "pnl": -988453, "pnl_pct": -12.13, "hold_from": "2026-07-01T09:06:03.233593+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,756 (현재 320,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 496,733"}, {"label": "추세(10일선)", "ok": true, "detail": "303,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T10:02:05.952893+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13370, "qty": 157, "cost": 2099405, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 22400, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,370 vs 13,359"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,582 / 13,359"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,582 / 11,434"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-11.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,199 · 기 +137 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "12.53% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "13,437,708 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "12.53% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,370)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.775522+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.587301+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 91,600"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.380594+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 6, "proceeds": 3760652, "entry_price": 761500, "pnl": -809033, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.285629+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,158,014"}, {"label": "추세(10일선)", "ok": false, "detail": "724,000"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.256643+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 157, "proceeds": 1916366, "entry_price": 13370, "pnl": -183039, "pnl_pct": -8.53, "hold_from": "2026-07-06T10:02:05.952891+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,400"}, {"label": "추세(10일선)", "ok": false, "detail": "13,245"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,372"}]}
|
||||
{"ts": "2026-07-07T14:09:48.825695+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 9, "cost": 1649947, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 234400, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 234,400"}, {"label": "추세(10일선)", "ok": true, "detail": "123,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 139,025"}]}
|
||||
{"ts": "2026-07-07T14:09:48.828069+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 287, "cost": 5956143, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22880, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,880"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:20.136302+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 22, "proceeds": 2377954, "entry_price": 152159, "pnl": -970048, "pnl_pct": -28.82, "hold_from": "2026-07-06T09:00:11.332530+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,460 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 253,257"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.475228+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 30, "cost": 3960594, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 176955, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "131,900 vs 108,660"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,560 / 108,660"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.874341+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 370, "proceeds": 9785880, "entry_price": 29246, "pnl": -1036843, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:06.167529+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 37,480"}, {"label": "추세(10일선)", "ok": true, "detail": "25,305"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:24:02.480679+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 184900, "qty": 23, "cost": 4253338, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 165505, "target": 243084, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "184,800 vs 158,260"}, {"label": "정배열(5>10)", "ok": true, "detail": "159,740 / 158,260"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,740 / 157,355"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,410,527 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "0.97% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T11:06:06.487503+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 140, "cost": 1912687, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 23560, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.688301+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 216800, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:12.086006+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 29, "cost": 3970696, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 176955, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,955"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:12:04.319243+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 11, "cost": 3757063, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 300363, "target": 464911, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "341,000 vs 305,450"}, {"label": "정배열(5>10)", "ok": true, "detail": "314,400 / 305,450"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,400 / 305,433"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.90% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "197,687 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.90% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:24:06.465547+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 190400, "qty": 23, "cost": 4379857, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 165505, "target": 243084, "signals": [{"label": "손절선", "ok": true, "detail": "165,505 (현재 190,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 243,084"}, {"label": "추세(10일선)", "ok": true, "detail": "158,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 189,927"}]}
|
||||
{"ts": "2026-07-13T09:26:03.426797+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 216800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 216,800"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-15T14:32:01.901012+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 600, "proceeds": 11120273, "entry_price": 19858, "pnl": -796284, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.793045+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,675"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:28:03.497807+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 353000, "qty": 11, "cost": 3883582, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 300363, "target": 464911, "signals": [{"label": "손절선", "ok": true, "detail": "300,363 (현재 352,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 464,911"}, {"label": "추세(10일선)", "ok": true, "detail": "306,600"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,963"}]}
|
||||
{"ts": "2026-07-20T12:28:02.332552+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 140, "proceeds": 1440585, "entry_price": 13660, "pnl": -472101, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.487501+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,560"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-20T12:58:05.500110+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 166600, "qty": 46, "proceeds": 7648656, "entry_price": 187650, "pnl": -984539, "pnl_pct": -11.22, "hold_from": "2026-07-10T09:24:02.480664+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "167,541 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 247,976"}, {"label": "추세(10일선)", "ok": true, "detail": "156,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T14:20:02.200881+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25350, "qty": 222, "cost": 5628544, "path": "pullback", "reason": "눌림목 지정가 25,328 도달", "stop": 23650, "target": 30450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,300 vs 25,185"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,400 / 25,185"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,400 / 25,157"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +524 · 기 +141 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.44% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,611,169 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.44% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,328 (현재 25,300)"}]}
|
||||
{"ts": "2026-07-22T14:18:05.440874+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 152, "cost": 2132880, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 22889, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,020 vs 12,975"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,552 / 12,975"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-23T09:00:25.487226+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 24900, "qty": 222, "proceeds": 5517021, "entry_price": 25350, "pnl": -111523, "pnl_pct": -1.78, "hold_from": "2026-07-21T14:20:02.200879+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 24,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 30,450"}, {"label": "추세(10일선)", "ok": false, "detail": "25,145"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -381 · 기 -427"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,990"}]}
|
||||
{"ts": "2026-07-23T09:50:01.530390+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 42, "cost": 3704956, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 120109, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,200 vs 80,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,000 / 80,900"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:24:01.519428+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 152100, "qty": 24, "proceeds": 3643282, "entry_price": 167779, "pnl": -384022, "pnl_pct": -9.35, "hold_from": "2026-06-24T09:46:05.157519+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "131,479 (현재 152,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 276,679"}, {"label": "추세(10일선)", "ok": false, "detail": "152,780"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -101 · 기 -107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T10:30:02.501278+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 185, "cost": 2616292, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 21442, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:54:04.512360+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 41, "cost": 3727459, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 120109, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 120,109"}, {"label": "추세(10일선)", "ok": true, "detail": "81,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:08.690208+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.688300+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,757"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:08.691322+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155500, "qty": 12, "cost": 1866280, "path": "pullback", "reason": "눌림목 지정가 158,093 도달", "stop": 117686, "target": 268942, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,000 vs 153,080"}, {"label": "정배열(5>10)", "ok": true, "detail": "171,640 / 153,080"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,640 / 99,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+44.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +200 · 기 -454 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+27%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.77% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "730,327 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.77% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,093 (현재 155,000)"}]}
|
||||
{"ts": "2026-07-24T09:02:04.058979+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 174, "cost": 2620833, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 21442, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,442"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T09:28:04.964451+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 147, "cost": 2133290, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 22889, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,889"}, {"label": "추세(10일선)", "ok": true, "detail": "13,113"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T10:02:04.455466+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 300, "cost": 5685853, "path": "pullback", "reason": "눌림목 지정가 20,012 도달", "stop": 17760, "target": 22520, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,012 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:10:01.057709+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 359, "proceeds": 4310348, "entry_price": 14586, "pnl": -926777, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.501277+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,082 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,098"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.535985+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7850, "qty": 404, "cost": 3171876, "path": "pullback", "reason": "눌림목 지정가 7,907 도달", "stop": 6743, "target": 11170, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,840 vs 5,428"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,526 / 5,428"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,526 / 4,895"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+91.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.17% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "693,433 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": true, "detail": "11.17% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": false, "detail": "80"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,907 (현재 7,840)"}]}
|
||||
{"ts": "2026-07-27T12:56:04.252088+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 8300, "qty": 382, "cost": 3171076, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6743, "target": 11170, "signals": [{"label": "손절선", "ok": true, "detail": "6,743 (현재 8,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 11,170"}, {"label": "추세(10일선)", "ok": true, "detail": "5,476"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 8,127"}]}
|
||||
{"ts": "2026-07-27T13:38:04.248084+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6880, "qty": 786, "proceeds": 5397135, "entry_price": 8069, "pnl": -945816, "pnl_pct": -14.73, "hold_from": "2026-07-27T09:12:01.535984+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,962 (현재 6,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 11,389"}, {"label": "추세(10일선)", "ok": true, "detail": "5,334"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:18.003017+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 379, "cost": 2570005, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5628, "target": 10237, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,050 vs 5,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,368 / 5,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.759359+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 362, "cost": 2570586, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5628, "target": 10237, "signals": [{"label": "손절선", "ok": true, "detail": "5,628 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,237"}, {"label": "추세(10일선)", "ok": true, "detail": "5,354"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T10:08:02.786746+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 299, "proceeds": 3333317, "entry_price": 14266, "pnl": -932852, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.440873+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,395"}, {"label": "추세(10일선)", "ok": false, "detail": "12,695"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.251621+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 45, "cost": 5306296, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 138000, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "117,800 vs 116,390"}, {"label": "정배열(5>10)", "ok": true, "detail": "117,020 / 116,390"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.482734+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 44, "cost": 5302795, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 138000, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,000"}, {"label": "추세(10일선)", "ok": true, "detail": "116,660"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:10.021522+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 15, "cost": 1839276, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 268942, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 268,942"}, {"label": "추세(10일선)", "ok": true, "detail": "148,710"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,742"}]}
|
||||
{"ts": "2026-07-29T09:24:10.021664+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 300, "cost": 5685853, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 22520, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,520"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,268"}]}
|
||||
{"ts": "2026-07-29T09:24:10.021870+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 59, "proceeds": 7572605, "entry_price": 134408, "pnl": -358685, "pnl_pct": -4.32, "hold_from": "2026-07-09T09:36:03.475227+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,952 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 180,777"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.400110+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 817, "cost": 5221413, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7958, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:18:05.390014+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 116400, "qty": 27, "proceeds": 3136672, "entry_price": 137222, "pnl": -568884, "pnl_pct": -15.17, "hold_from": "2026-07-24T09:00:08.691316+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,686 (현재 115,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 246,789"}, {"label": "추세(10일선)", "ok": false, "detail": "149,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +445 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.704033+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 85, "proceeds": 10112243, "entry_price": 124176, "pnl": -444341, "pnl_pct": -4.01, "hold_from": "2026-07-02T10:18:03.868150+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "111,006 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 163,689"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:06:06.533240+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5690, "qty": 741, "proceeds": 4208068, "entry_price": 6936, "pnl": -932523, "pnl_pct": -17.97, "hold_from": "2026-07-28T09:00:18.003009+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,741 (현재 5,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,522"}, {"label": "추세(10일선)", "ok": true, "detail": "5,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.605461+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 817, "proceeds": 4778284, "entry_price": 6390, "pnl": -443129, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.400109+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,958"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.512391+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 40, "cost": 4852728, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 152200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "121,200 vs 119,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,840 / 119,680"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.512666+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 313, "cost": 1918978, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.959636+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 39, "cost": 4883532, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 152200, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,200"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.560097+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 28, "cost": 3690954, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 176240, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.507665+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 832, "cost": 5242386, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7833, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:07.659623+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 293, "cost": 1919438, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.659937+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.530389+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,472"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:10:13.075437+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25250, "qty": 201, "cost": 5076011, "path": "pullback", "reason": "눌림목 지정가 25,331 도달", "stop": 23650, "target": 30050, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,200 vs 25,175"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,380 / 25,175"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,380 / 25,155"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -414 · 기 +642 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,295,520 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,331 (현재 25,200)"}]}
|
||||
{"ts": "2026-07-31T10:36:07.682246+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 26100, "qty": 194, "cost": 5064160, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 23650, "target": 30050, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 26,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 30,050"}, {"label": "추세(10일선)", "ok": true, "detail": "25,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -410 · 기 +640"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,884"}]}
|
||||
{"ts": "2026-08-05T09:02:14.760249+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 832, "proceeds": 4733152, "entry_price": 6300, "pnl": -509234, "pnl_pct": -9.52, "hold_from": "2026-07-30T09:26:07.507663+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,789 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,833"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,413"}]}
|
||||
{"ts": "2026-08-05T09:02:14.760494+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 154, "cost": 2008461, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 21140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.256802+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 146, "cost": 2019483, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21140, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,140"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:21.971147+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 600, "proceeds": 11216086, "entry_price": 18950, "pnl": -155620, "pnl_pct": -1.16, "hold_from": "2026-07-24T10:02:04.455464+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,520"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:34:17.064745+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 25, "cost": 4800720, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 175344, "target": 241968, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "191,800 vs 180,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,140 / 180,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:12:17.869983+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 24, "cost": 4714307, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 175344, "target": 241968, "signals": [{"label": "손절선", "ok": true, "detail": "175,344 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 241,968"}, {"label": "추세(10일선)", "ok": true, "detail": "181,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
{"ts": "2026-08-10T09:00:20.754734+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 27, "cost": 3672551, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 176240, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,240"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 29800724.662999995,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 21,
|
||||
"entry_price": 349976.1904761905,
|
||||
"entry_at": "2026-07-21T12:06:01.189281+09:00",
|
||||
"stop": 307839,
|
||||
"target": 434250,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3891157.6622701483,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 91,
|
||||
"entry_price": 119185.71428571429,
|
||||
"entry_at": "2026-07-29T09:02:02.253867+09:00",
|
||||
"stop": 111200,
|
||||
"target": 135157,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5467080.19828125,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 81,
|
||||
"entry_price": 123225.92592592593,
|
||||
"entry_at": "2026-07-30T09:04:07.515413+09:00",
|
||||
"stop": 111000,
|
||||
"target": 147678,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5075960.404438956,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 625,
|
||||
"entry_price": 6332.944,
|
||||
"entry_at": "2026-07-30T09:04:07.515982+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1981493.926440071,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 57,
|
||||
"entry_price": 133863.15789473685,
|
||||
"entry_at": "2026-07-30T09:24:07.563027+09:00",
|
||||
"stop": 118207,
|
||||
"target": 165176,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3902843.990735232,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 520,
|
||||
"entry_price": 13160.096153846154,
|
||||
"entry_at": "2026-08-03T12:00:12.455645+09:00",
|
||||
"stop": 11445,
|
||||
"target": 16590,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3433240.983007488,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 297,
|
||||
"entry_price": 13512.424242424242,
|
||||
"entry_at": "2026-08-05T09:08:12.223170+09:00",
|
||||
"stop": 10406,
|
||||
"target": 19724,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2017488.6720390161,
|
||||
"last_add_price": 13940
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 22,
|
||||
"entry_price": 141850.0,
|
||||
"entry_at": "2026-08-06T09:08:11.870293+09:00",
|
||||
"stop": 100700,
|
||||
"target": 224150,
|
||||
"peak": 147300,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,500 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1618968.8164385513,
|
||||
"last_add_price": 147100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16449084.01750002,
|
||||
"closed_trades": 33,
|
||||
"wins": 2,
|
||||
"peak_equity": 101368884.75700004,
|
||||
"max_drawdown": 0.1781330644140594,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-20",
|
||||
"403870": "2026-07-07",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"009150": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"319660": "2026-07-23",
|
||||
"003490": "2026-07-09",
|
||||
"105560": "2026-07-20",
|
||||
"095610": "2026-07-28",
|
||||
"252990": "2026-07-28",
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583198+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.178398+09:00"
|
||||
}
|
||||
@@ -0,0 +1,102 @@
|
||||
{"ts": "2026-06-17T11:15:02.399713+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 156622, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.300962+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 35, "cost": 2201830, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 90776, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.448808+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 21960, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:13.192302+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.448807+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,960"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.262317+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.399712+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,622"}, {"label": "추세(20일선)", "ok": false, "detail": "118,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:04:06.142397+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 13, "cost": 2037406, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 229599, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.763435+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 150, "cost": 2590889, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 23847, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:05.168479+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 13, "cost": 2056908, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 233143, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:06.260065+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 142, "cost": 2593309, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 23847, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,847"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:28.674701+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 11, "cost": 1970396, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 233143, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,143"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:06.175624+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 187, "cost": 5405111, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 34203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:09.738783+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 35, "proceeds": 1746588, "entry_price": 62900, "pnl": -455243, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:31.300954+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 90,776"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.084754+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 12, "cost": 2003100, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 229599, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,599"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.287474+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 3, "cost": 2235335, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 1009343, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.507919+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 3, "cost": 2334350, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 1009343, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,009,343"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:10.690453+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 41, "cost": 2267640, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 79500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.235448+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 444060, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "357,000 vs 296,975"}, {"label": "정배열(5>20)", "ok": true, "detail": "317,600 / 296,975"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.334919+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 11, "cost": 4092614, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 444060, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 444,060"}, {"label": "추세(20일선)", "ok": true, "detail": "297,725"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T09:46:03.120668+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 53, "cost": 6265540, "path": "pullback", "reason": "눌림목 지정가 122,286 도달", "stop": 111000, "target": 132600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,286 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.870508+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 132600, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 132,600"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T11:04:07.660273+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 183, "cost": 5417613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 34203, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,203"}, {"label": "추세(20일선)", "ok": true, "detail": "25,985"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:04:01.692769+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 292, "proceeds": 4187858, "entry_price": 17751, "pnl": -996340, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.763430+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 24,340"}, {"label": "추세(20일선)", "ok": true, "detail": "12,769"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.662768+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 25, "proceeds": 3136372, "entry_price": 161596, "pnl": -904134, "pnl_pct": -22.21, "hold_from": "2026-06-24T09:04:06.142396+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,761 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,266"}, {"label": "추세(20일선)", "ok": true, "detail": "120,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.794817+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 315, "cost": 5998500, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 21600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T15:10:02.663501+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1971000, "qty": 3, "cost": 5913887, "path": "pullback", "reason": "눌림목 지정가 1,978,439 도달", "stop": 1901000, "target": 2111000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,971,000 vs 1,967,250"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,036,600 / 1,967,250"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,036,600 / 1,295,300"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +146 · 기 +126 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.46% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": false, "detail": "1,835,275 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "2.46% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,978,439 (현재 1,971,000)"}]}
|
||||
{"ts": "2026-07-06T09:46:01.671189+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320500, "qty": 22, "proceeds": 7037251, "entry_price": 364750, "pnl": -988453, "pnl_pct": -12.13, "hold_from": "2026-07-01T09:06:03.235447+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,756 (현재 320,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 452,739"}, {"label": "추세(20일선)", "ok": true, "detail": "295,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T09:48:02.091313+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 124700, "qty": 16, "cost": 1995499, "path": "pullback", "reason": "눌림목 지정가 163,325 도달", "stop": 96000, "target": 182100, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,600 vs 120,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "136,940 / 120,070"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "136,940 / 121,177"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+40%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.99% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,430,353 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.99% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 163,325 (현재 124,600)"}]}
|
||||
{"ts": "2026-07-06T10:06:02.816817+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 3, "proceeds": 5688885, "entry_price": 1971000, "pnl": -225002, "pnl_pct": -3.6, "hold_from": "2026-07-03T15:10:02.663499+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,111,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,067,780"}]}
|
||||
{"ts": "2026-07-06T10:06:02.817154+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13270, "qty": 163, "cost": 2163334, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 19090, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,230 vs 12,711"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,554 / 12,711"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,554 / 11,432"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-12.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,199 · 기 +137 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "12.00% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "12,870,290 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "12.00% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,230)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.779252+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 41, "proceeds": 1759562, "entry_price": 55300, "pnl": -508078, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.690444+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 79,500"}, {"label": "추세(20일선)", "ok": false, "detail": "51,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.382202+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 6, "proceeds": 3760652, "entry_price": 761500, "pnl": -809033, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.287473+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,025,843"}, {"label": "추세(20일선)", "ok": false, "detail": "670,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.258820+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 163, "proceeds": 1989603, "entry_price": 13270, "pnl": -173732, "pnl_pct": -7.84, "hold_from": "2026-07-06T10:06:02.817152+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,090"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,272"}]}
|
||||
{"ts": "2026-07-07T14:09:59.571293+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 289, "cost": 5997650, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21600, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,600"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:20.234898+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 16, "proceeds": 1729421, "entry_price": 124700, "pnl": -266078, "pnl_pct": -13.15, "hold_from": "2026-07-06T09:48:02.091296+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.891322+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 36, "cost": 5800470, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 167300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.986112+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 36, "proceeds": 5662536, "entry_price": 161100, "pnl": -137933, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.891321+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 167,300"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.484896+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 36, "cost": 5699655, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 158900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:12:02.526379+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 36, "proceeds": 5637386, "entry_price": 158300, "pnl": -62269, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.484895+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.476928+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 30, "cost": 3960594, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 161970, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,900 vs 108,920"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,560 / 108,920"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.876138+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 370, "proceeds": 9785880, "entry_price": 29246, "pnl": -1036843, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:06.175619+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,735"}, {"label": "추세(20일선)", "ok": true, "detail": "25,830"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:00:13.958142+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 35, "cost": 5740861, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 176000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.641879+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 23, "cost": 4276341, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 166448, "target": 224803, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.493340+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 187, "cost": 2399570, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 17770, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T10:14:04.456468+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 173600, "qty": 33, "cost": 5729659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 176000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 173,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 176,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,470"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +205 · 기 -155"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 173,548"}]}
|
||||
{"ts": "2026-07-10T11:16:02.494297+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 174, "cost": 2410261, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 17770, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,770"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-10T12:14:02.690035+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 186600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "126,200 vs 120,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "137,260 / 120,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:12.188872+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 29, "cost": 3970696, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 161970, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,970"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:26:03.428469+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 14, "cost": 1947692, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 186600, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,600"}, {"label": "추세(20일선)", "ok": true, "detail": "120,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:36:02.292080+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 23, "cost": 4393659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 166448, "target": 224803, "signals": [{"label": "손절선", "ok": true, "detail": "166,448 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 224,803"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.372866+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 68, "proceeds": 12752284, "entry_price": 168659, "pnl": 1281764, "pnl_pct": 11.41, "hold_from": "2026-07-10T09:00:13.958136+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T14:32:01.902737+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 604, "proceeds": 11194408, "entry_price": 19858, "pnl": -801741, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.794816+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,403"}, {"label": "추세(20일선)", "ok": false, "detail": "18,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.334444+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 361, "proceeds": 3714652, "entry_price": 13322, "pnl": -1095179, "pnl_pct": -22.61, "hold_from": "2026-07-10T09:46:11.493339+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,245"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.296614+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 104, "proceeds": 13680471, "entry_price": 120162, "pnl": 1181796, "pnl_pct": 9.69, "hold_from": "2026-07-01T09:46:03.120666+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:48:03.492422+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 168100, "qty": 46, "proceeds": 7717521, "entry_price": 188450, "pnl": -952479, "pnl_pct": -10.8, "hold_from": "2026-07-10T09:28:02.641878+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "168,241 (현재 168,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 228,868"}, {"label": "추세(20일선)", "ok": true, "detail": "159,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T10:12:01.062793+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 34, "cost": 5678852, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 185000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.189282+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 11, "cost": 3790068, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 303577, "target": 426346, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:09.765866+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 32, "cost": 5684052, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 185000, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 185,000"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.835860+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 58, "cost": 5754463, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 113400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.756545+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 66, "proceeds": 10361555, "entry_price": 172139, "pnl": -1001349, "pnl_pct": -8.62, "hold_from": "2026-07-21T10:12:01.062791+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 200,418"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.442604+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 154, "cost": 2160944, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 19936, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-23T09:00:25.597059+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 35, "cost": 5604341, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 164300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.429516+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 35, "proceeds": 5512230, "entry_price": 160100, "pnl": -92110, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:25.597052+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.306334+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 302, "cost": 5693554, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 21030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.532132+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 42, "cost": 3704956, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 109473, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,200 vs 75,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,000 / 75,070"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T12:18:01.562114+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 56, "cost": 5774466, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 113400, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,400"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.613218+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 10, "cost": 3560534, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 303577, "target": 426346, "signals": [{"label": "손절선", "ok": true, "detail": "303,577 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 426,346"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.514100+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 41, "cost": 3727459, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 109473, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 109,473"}, {"label": "추세(20일선)", "ok": true, "detail": "75,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:08.795744+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 29, "proceeds": 3235878, "entry_price": 132428, "pnl": -605098, "pnl_pct": -15.58, "hold_from": "2026-07-10T12:14:02.690034+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 205,283"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:08.797642+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 302, "proceeds": 5645430, "entry_price": 18850, "pnl": -48124, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.306333+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,030"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:28:04.966114+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 149, "cost": 2162314, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 19936, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,936"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-27T09:02:06.252280+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 299, "cost": 5711757, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 17760, "target": 21780, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.252692+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 414, "cost": 3093044, "path": "pullback", "reason": "눌림목 지정가 7,910 도달", "stop": 6370, "target": 9669, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,910 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.105328+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 391, "cost": 3093274, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 9669, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,669"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-28T09:00:18.106536+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 126200, "qty": 24, "proceeds": 3022894, "entry_price": 167779, "pnl": -1004410, "pnl_pct": -24.78, "hold_from": "2026-06-24T09:46:05.168473+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,479 (현재 128,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,379"}, {"label": "추세(20일선)", "ok": false, "detail": "134,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T10:08:02.788479+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 303, "proceeds": 3377910, "entry_price": 14266, "pnl": -945348, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.442603+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,352"}, {"label": "추세(20일선)", "ok": false, "detail": "12,636"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T11:22:00.766355+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 805, "proceeds": 5326743, "entry_price": 7684, "pnl": -859575, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:06.252691+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,897"}, {"label": "추세(20일선)", "ok": true, "detail": "4,821"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.253534+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 351, "cost": 2295884, "path": "pullback", "reason": "눌림목 지정가 7,837 도달", "stop": 5295, "target": 9031, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,540 vs 4,829"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,266 / 4,829"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,837 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:02:02.253868+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 46, "cost": 5424214, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 131300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.484552+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 45, "cost": 5423313, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 131300, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,300"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:10.024717+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 301, "cost": 5704806, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21780, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,780"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:10.024961+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 59, "proceeds": 7572605, "entry_price": 134408, "pnl": -358685, "pnl_pct": -4.32, "hold_from": "2026-07-09T09:36:03.476927+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,952 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,321"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:10.025084+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6710, "qty": 343, "cost": 2301875, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5295, "target": 9031, "signals": [{"label": "손절선", "ok": true, "detail": "5,295 (현재 8,460)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,031"}, {"label": "추세(20일선)", "ok": true, "detail": "4,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,796"}]}
|
||||
{"ts": "2026-07-29T09:28:01.401823+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 838, "cost": 5355623, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7435, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T13:14:05.457905+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5580, "qty": 694, "proceeds": 3864969, "entry_price": 6624, "pnl": -732791, "pnl_pct": -15.76, "hold_from": "2026-07-29T09:02:02.253533+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,600 (현재 5,590)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,672"}, {"label": "추세(20일선)", "ok": true, "detail": "4,782"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.607125+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 838, "proceeds": 4901104, "entry_price": 6390, "pnl": -454519, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.401822+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,435"}, {"label": "추세(20일선)", "ok": true, "detail": "5,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.515415+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 41, "cost": 4974046, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 141900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.515984+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 323, "cost": 1980287, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 8804, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.962505+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 40, "cost": 5008751, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 141900, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,900"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.563029+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T11:58:08.466564+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 114, "proceeds": 10433415, "entry_price": 101116, "pnl": -1095514, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.835859+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,147"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.664664+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 302, "cost": 1978397, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.665122+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.532131+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T09:44:10.613772+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6120, "qty": 855, "cost": 5233385, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5629, "target": 7102, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 5,345"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,690 / 5,345"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,690 / 5,618"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 +5 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.61% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "132,260 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.61% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-03T12:00:12.455648+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 265, "cost": 3421663, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 16103, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.394192+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 255, "cost": 3422613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 16103, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,103"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-05T09:08:11.797804+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5580, "qty": 855, "proceeds": 4761597, "entry_price": 6120, "pnl": -471788, "pnl_pct": -8.82, "hold_from": "2026-08-03T09:44:10.613767+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,629 (현재 5,580)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,102"}, {"label": "추세(20일선)", "ok": true, "detail": "5,318"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,239"}]}
|
||||
{"ts": "2026-08-05T09:08:12.223187+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13110, "qty": 153, "cost": 2006131, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 18650, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,110 vs 12,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,370 / 12,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,370 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "308,907 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.51% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,110)"}]}
|
||||
{"ts": "2026-08-05T09:42:12.373226+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13940, "qty": 144, "cost": 2007661, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18650, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,930)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,650"}, {"label": "추세(20일선)", "ok": true, "detail": "12,772"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-08-06T09:00:22.079589+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 600, "proceeds": 11216086, "entry_price": 19025, "pnl": -200476, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.252279+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,554"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:08:11.870297+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 136600, "qty": 11, "cost": 1502825, "path": "pullback", "reason": "눌림목 지정가 156,500 도달", "stop": 100700, "target": 208400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "136,400 vs 135,235"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,920 / 135,235"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,920 / 99,390"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -609 · 기 +419 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,673 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,500 (현재 136,400)"}]}
|
||||
{"ts": "2026-08-10T09:00:20.864217+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 28, "cost": 3808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 161427, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,427"}, {"label": "추세(20일선)", "ok": true, "detail": "109,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
{"ts": "2026-08-10T13:04:18.279469+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147100, "qty": 11, "cost": 1618343, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 100700, "target": 208400, "signals": [{"label": "손절선", "ok": true, "detail": "100,700 (현재 147,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 208,400"}, {"label": "추세(20일선)", "ok": true, "detail": "135,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -349 · 기 +177"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 146,939"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 30872934.431500036,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 21,
|
||||
"entry_price": 349976.1904761905,
|
||||
"entry_at": "2026-07-21T12:06:01.191055+09:00",
|
||||
"stop": 307839,
|
||||
"target": 434250,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3848025.874946516,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 124881.92771084337,
|
||||
"entry_at": "2026-07-29T10:24:01.463012+09:00",
|
||||
"stop": 114155,
|
||||
"target": 146335,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5187375.1457318,
|
||||
"last_add_price": 126400
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 617,
|
||||
"entry_price": 6332.852512155591,
|
||||
"entry_at": "2026-07-30T09:04:07.518900+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1957851.3491824612,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 57,
|
||||
"entry_price": 133863.15789473685,
|
||||
"entry_at": "2026-07-30T09:24:07.565720+09:00",
|
||||
"stop": 118207,
|
||||
"target": 165176,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3832048.06532556,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 514,
|
||||
"entry_price": 13160.038910505837,
|
||||
"entry_at": "2026-08-03T12:00:12.460551+09:00",
|
||||
"stop": 11445,
|
||||
"target": 16590,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3393597.375168939,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 21,
|
||||
"entry_price": 141471.42857142858,
|
||||
"entry_at": "2026-08-04T09:04:10.104323+09:00",
|
||||
"stop": 101729,
|
||||
"target": 220957,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 145,918 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1613823.6225366697,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 301,
|
||||
"entry_price": 13423.189368770763,
|
||||
"entry_at": "2026-08-05T09:02:14.769293+09:00",
|
||||
"stop": 10340,
|
||||
"target": 19590,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2024244.4253400748,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 49,
|
||||
"entry_price": 194155.10204081633,
|
||||
"entry_at": "2026-08-06T09:34:17.073823+09:00",
|
||||
"stop": 177099,
|
||||
"target": 228267,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4815698.713054757,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16577774.35700002,
|
||||
"closed_trades": 33,
|
||||
"wins": 2,
|
||||
"peak_equity": 100182695.41500005,
|
||||
"max_drawdown": 0.17470945980237,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-20",
|
||||
"403870": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-08",
|
||||
"319660": "2026-07-27",
|
||||
"003490": "2026-07-09",
|
||||
"105560": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"095610": "2026-07-28",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583212+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.182579+09:00"
|
||||
}
|
||||
@@ -0,0 +1,101 @@
|
||||
{"ts": "2026-06-17T11:15:02.403081+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 156622, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.452507+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 17760, "target": 21960, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:13.294265+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.452506+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,960"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.265233+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.403080+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,622"}, {"label": "추세(20일선)", "ok": false, "detail": "118,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:02:02.398330+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 73200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,200 vs 52,378"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,960 / 52,378"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:01.010343+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 13, "cost": 2020503, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 118951, "target": 228299, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,400 vs 121,610"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,100 / 121,610"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:06.181643+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 187, "cost": 5405111, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 34203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:09.837424+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.398329+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.919139+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 12, "cost": 1979097, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118951, "target": 228299, "signals": [{"label": "손절선", "ok": true, "detail": "118,951 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 228,299"}, {"label": "추세(20일선)", "ok": true, "detail": "122,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:10.793015+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 43200, "target": 79500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.237217+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 444060, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "357,000 vs 296,975"}, {"label": "정배열(5>20)", "ok": true, "detail": "317,600 / 296,975"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.336712+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 10, "cost": 3720558, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 444060, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 444,060"}, {"label": "추세(20일선)", "ok": true, "detail": "297,725"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T09:46:03.123574+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 52, "cost": 6147322, "path": "pullback", "reason": "눌림목 지정가 118,779 도달", "stop": 111000, "target": 132600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,779 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T09:00:24.633647+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 707000, "qty": 4, "cost": 2828424, "path": "pullback", "reason": "눌림목 지정가 714,693 도달", "stop": 604000, "target": 913000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "714,000 vs 675,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "760,800 / 675,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "760,800 / 530,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -198 · 기 +92 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.32% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "230,413 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.32% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 714,693 (현재 714,000)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.872753+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 139, "cost": 2221553, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 12444, "target": 23051, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "15,980 vs 12,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,104 / 12,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.873047+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 132600, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 132,600"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T10:34:04.144316+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 328, "cost": 6187008, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 21060, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:04:07.662696+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 182, "cost": 5388008, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 34203, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,203"}, {"label": "추세(20일선)", "ok": true, "detail": "25,985"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-02T11:20:02.080921+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 274, "cost": 6179627, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21060, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,060"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:24:06.170288+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 602, "proceeds": 11331580, "entry_price": 20540, "pnl": -1035054, "pnl_pct": -8.18, "hold_from": "2026-07-02T10:34:04.144315+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,980 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,659"}, {"label": "추세(20일선)", "ok": true, "detail": "18,849"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:44:02.632371+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 123600, "qty": 25, "proceeds": 3083974, "entry_price": 159960, "pnl": -915625, "pnl_pct": -22.73, "hold_from": "2026-06-24T09:08:01.010342+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,125 (현재 123,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 231,630"}, {"label": "추세(20일선)", "ok": true, "detail": "120,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.796593+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 316, "cost": 6017542, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17760, "target": 21600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.535411+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 154,452 도달", "stop": 96000, "target": 199800, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,100 vs 120,495"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,640 / 120,495"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,452 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T10:02:06.373511+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320000, "qty": 21, "proceeds": 6706896, "entry_price": 364405, "pnl": -946752, "pnl_pct": -12.19, "hold_from": "2026-07-01T09:06:03.237216+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,410 (현재 320,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 452,393"}, {"label": "추세(20일선)", "ok": true, "detail": "295,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -108 · 기 +225"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T09:48:07.782659+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.793007+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 79,500"}, {"label": "추세(20일선)", "ok": false, "detail": "51,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:06:07.269470+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147500, "qty": 12, "cost": 1770266, "path": "pullback", "reason": "눌림목 지정가 148,050 도달", "stop": 108900, "target": 224700, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "147,400 vs 135,785"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,120 / 135,785"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,120 / 99,573"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +96 · 기 -196 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.06% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,366,200 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "7.06% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 148,050 (현재 147,400)"}]}
|
||||
{"ts": "2026-07-07T10:28:06.483619+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12410, "qty": 139, "proceeds": 1721626, "entry_price": 15980, "pnl": -499927, "pnl_pct": -22.34, "hold_from": "2026-07-02T10:18:03.872752+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,444 (현재 12,430)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,051"}, {"label": "추세(20일선)", "ok": false, "detail": "12,671"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,543 · 기 +15"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,975"}]}
|
||||
{"ts": "2026-07-07T14:10:05.011607+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 9, "cost": 1649947, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 199800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 199,800"}, {"label": "추세(20일선)", "ok": true, "detail": "120,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 139,025"}]}
|
||||
{"ts": "2026-07-07T14:10:05.014039+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 10, "cost": 1770266, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 108900, "target": 224700, "signals": [{"label": "손절선", "ok": true, "detail": "108,900 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 224,700"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 156,742"}]}
|
||||
{"ts": "2026-07-07T14:10:07.710976+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 290, "cost": 6018403, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21600, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,600"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-07T14:10:07.711904+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 604000, "target": 913000, "signals": [{"label": "손절선", "ok": true, "detail": "604,000 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 913,000"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 738,777"}]}
|
||||
{"ts": "2026-07-08T09:00:20.333570+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 22, "proceeds": 2377954, "entry_price": 152159, "pnl": -970048, "pnl_pct": -28.82, "hold_from": "2026-07-06T09:00:11.535404+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,460 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 219,558"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:20.334912+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 8, "proceeds": 4806609, "entry_price": 761000, "pnl": -1282304, "pnl_pct": -20.89, "hold_from": "2026-07-02T09:00:24.633638+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "633,892 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,015,215"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:02:04.486732+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 36, "cost": 5699655, "path": "pullback", "reason": "눌림목 지정가 158,582 도달", "stop": 158000, "target": 158900, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,582 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:12:02.528052+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 36, "proceeds": 5637386, "entry_price": 158300, "pnl": -62269, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.486731+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.478611+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 30, "cost": 3960594, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 161970, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,900 vs 108,920"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,560 / 108,920"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.877857+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 369, "proceeds": 9759432, "entry_price": 29245, "pnl": -1033687, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:06.181639+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,501 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,734"}, {"label": "추세(20일선)", "ok": true, "detail": "25,830"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:24:02.499399+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158900, "qty": 36, "cost": 5721258, "path": "pullback", "reason": "눌림목 지정가 159,557 도달", "stop": 158000, "target": 160700, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,800 vs 149,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,400 / 149,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,400 / 113,205"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.62% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,627,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "5.62% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,557 (현재 158,800)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.643670+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 23, "cost": 4276341, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 166448, "target": 224803, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.495094+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 186, "cost": 2386738, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 17770, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.496061+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 173, "cost": 2396409, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 17770, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,770"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-10T12:14:02.691785+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 186600, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "126,200 vs 120,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "137,260 / 120,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:12.293400+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 29, "cost": 3970696, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 161970, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,970"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:26:03.430157+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 14, "cost": 1947692, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 186600, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,600"}, {"label": "추세(20일선)", "ok": true, "detail": "120,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:36:02.293764+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 23, "cost": 4393659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 166448, "target": 224803, "signals": [{"label": "손절선", "ok": true, "detail": "166,448 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 224,803"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.374493+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 36, "proceeds": 6751209, "entry_price": 158900, "pnl": 1029951, "pnl_pct": 18.25, "hold_from": "2026-07-10T09:24:02.499393+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T14:32:01.904618+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 606, "proceeds": 11231476, "entry_price": 19858, "pnl": -804469, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.796592+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,403"}, {"label": "추세(20일선)", "ok": false, "detail": "18,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.336406+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 359, "proceeds": 3694072, "entry_price": 13322, "pnl": -1089075, "pnl_pct": -22.61, "hold_from": "2026-07-10T09:46:11.495093+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,245"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.298292+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 103, "proceeds": 13548928, "entry_price": 120181, "pnl": 1168471, "pnl_pct": 9.67, "hold_from": "2026-07-01T09:46:03.123573+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:48:03.494077+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 168100, "qty": 46, "proceeds": 7717521, "entry_price": 188450, "pnl": -952479, "pnl_pct": -10.8, "hold_from": "2026-07-10T09:28:02.643669+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "168,241 (현재 168,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 228,868"}, {"label": "추세(20일선)", "ok": true, "detail": "159,020"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T12:06:01.191056+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 11, "cost": 3790068, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 303577, "target": 426346, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T11:56:00.846714+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 159800, "qty": 35, "cost": 5593839, "path": "pullback", "reason": "눌림목 지정가 159,932 도달", "stop": 158000, "target": 163400, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "159,700 vs 149,775"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,580 / 149,775"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,580 / 113,220"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+75.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -408 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.73% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,371,014 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.73% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,932 (현재 159,700)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.758300+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 35, "proceeds": 5494764, "entry_price": 159800, "pnl": -99075, "pnl_pct": -1.56, "hold_from": "2026-07-22T11:56:00.846713+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 163,400"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,305"}]}
|
||||
{"ts": "2026-07-23T09:00:25.699142+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 35, "cost": 5604341, "path": "pullback", "reason": "눌림목 지정가 159,493 도달", "stop": 158000, "target": 164300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,493 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.431227+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 35, "proceeds": 5512230, "entry_price": 160100, "pnl": -92110, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:25.699135+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.308112+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 301, "cost": 5674701, "path": "pullback", "reason": "눌림목 지정가 19,627 도달", "stop": 17760, "target": 21030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,627 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.533918+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 42, "cost": 3704956, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 109473, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,200 vs 75,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,000 / 75,070"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.504689+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 187, "cost": 2644577, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 19008, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,180 vs 10,944"}, {"label": "정배열(5>20)", "ok": true, "detail": "13,154 / 10,944"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:22:02.614973+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 10, "cost": 3560534, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 303577, "target": 426346, "signals": [{"label": "손절선", "ok": true, "detail": "303,577 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 426,346"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.515832+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 41, "cost": 3727459, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 109473, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 109,473"}, {"label": "추세(20일선)", "ok": true, "detail": "75,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:08.902975+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 29, "proceeds": 3235878, "entry_price": 132428, "pnl": -605098, "pnl_pct": -15.58, "hold_from": "2026-07-10T12:14:02.691784+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 205,283"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:08.905145+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 301, "proceeds": 5626736, "entry_price": 18850, "pnl": -47965, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.308111+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,030"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:02:04.062281+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 175, "cost": 2635895, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 19008, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,008"}, {"label": "추세(20일선)", "ok": true, "detail": "10,986"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-27T09:02:06.254502+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 299, "cost": 5711757, "path": "pullback", "reason": "눌림목 지정가 19,673 도달", "stop": 17760, "target": 21780, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,673 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.254811+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 414, "cost": 3093044, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6370, "target": 9669, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.107067+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 391, "cost": 3093274, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 9669, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,669"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:10:01.061111+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 362, "proceeds": 4346368, "entry_price": 14585, "pnl": -934104, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.504688+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,081 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,593"}, {"label": "추세(20일선)", "ok": true, "detail": "10,836"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.540222+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 160, "cost": 2104316, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10340, "target": 18770, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,150 vs 12,732"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,378 / 12,732"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:30:01.185145+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 149900, "qty": 37, "cost": 5547132, "path": "pullback", "reason": "눌림목 지정가 157,993 도달", "stop": 149899, "target": 149902, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "149,800 vs 149,280"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,600 / 149,280"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,600 / 113,055"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +274 · 기 -315 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.69% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "780,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.69% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 157,993 (현재 149,800)"}]}
|
||||
{"ts": "2026-07-27T09:32:01.412064+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 148500, "qty": 37, "proceeds": 5483786, "entry_price": 149900, "pnl": -63346, "pnl_pct": -0.93, "hold_from": "2026-07-27T09:30:01.185144+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "149,899 (현재 148,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 149,902"}, {"label": "추세(20일선)", "ok": false, "detail": "149,215"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +274 · 기 -315"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 159,969"}]}
|
||||
{"ts": "2026-07-27T09:32:01.412365+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127900, "qty": 44, "cost": 5628444, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117645, "target": 148411, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "127,900 vs 113,950"}, {"label": "정배열(5>20)", "ok": true, "detail": "119,040 / 113,950"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "119,040 / 110,150"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "643,340 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-28T09:04:02.759310+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 123200, "qty": 22, "proceeds": 2705115, "entry_price": 160909, "pnl": -835416, "pnl_pct": -23.44, "hold_from": "2026-07-07T10:06:07.269469+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "123,940 (현재 123,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 234,847"}, {"label": "추세(20일선)", "ok": false, "detail": "134,595"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +269 · 기 -554"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T11:22:00.768046+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 805, "proceeds": 5326743, "entry_price": 7684, "pnl": -859575, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:06.254810+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,897"}, {"label": "추세(20일선)", "ok": true, "detail": "4,821"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T12:56:02.896515+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117400, "qty": 44, "proceeds": 5155527, "entry_price": 127900, "pnl": -472917, "pnl_pct": -8.21, "hold_from": "2026-07-27T09:32:01.412364+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,645 (현재 117,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 148,411"}, {"label": "추세(20일선)", "ok": true, "detail": "113,430"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +84 · 기 +324"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,553"}]}
|
||||
{"ts": "2026-07-29T09:02:02.255678+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 348, "cost": 2276261, "path": "pullback", "reason": "눌림목 지정가 7,526 도달", "stop": 5295, "target": 9031, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,540 vs 4,829"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,266 / 4,829"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,526 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:24:10.027865+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 301, "cost": 5704806, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21780, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,780"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:10.028115+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 59, "proceeds": 7572605, "entry_price": 134408, "pnl": -358685, "pnl_pct": -4.32, "hold_from": "2026-07-09T09:36:03.478610+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,952 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,321"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:24:10.028241+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6710, "qty": 339, "cost": 2275031, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5295, "target": 9031, "signals": [{"label": "손절선", "ok": true, "detail": "5,295 (현재 8,460)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,031"}, {"label": "추세(20일선)", "ok": true, "detail": "4,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,796"}]}
|
||||
{"ts": "2026-07-29T09:24:10.028406+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 11310, "qty": 187, "cost": 2115287, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18770, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 15,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,770"}, {"label": "추세(20일선)", "ok": true, "detail": "12,805"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +242 · 기 -182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-07-29T09:28:01.403531+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 828, "cost": 5291714, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7435, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.463013+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 42, "cost": 5183577, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113016, "target": 144168, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,400 vs 113,725"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,140 / 113,725"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:52:02.369415+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10340, "qty": 347, "proceeds": 3580983, "entry_price": 12158, "pnl": -638619, "pnl_pct": -14.96, "hold_from": "2026-07-27T09:12:01.540221+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,340 (현재 10,340)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,795"}, {"label": "추세(20일선)", "ok": false, "detail": "12,592"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +239 · 기 -181"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:14:05.459920+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5580, "qty": 687, "proceeds": 3825985, "entry_price": 6624, "pnl": -725308, "pnl_pct": -15.76, "hold_from": "2026-07-29T09:02:02.255677+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,600 (현재 5,590)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,672"}, {"label": "추세(20일선)", "ok": true, "detail": "4,782"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.608819+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 828, "proceeds": 4842618, "entry_price": 6390, "pnl": -449095, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.403529+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,435"}, {"label": "추세(20일선)", "ok": true, "detail": "5,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.518903+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 319, "cost": 1955763, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 8804, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:24:07.565722+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.513015+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 841, "cost": 5299095, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7322, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,280 vs 5,353"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,722 / 5,353"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T09:50:07.318850+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 41, "cost": 5183177, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 144168, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,168"}, {"label": "추세(20일선)", "ok": true, "detail": "113,865"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.669241+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 298, "cost": 1952193, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.669454+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.533917+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T12:00:12.460555+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 262, "cost": 3382927, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 16103, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.398435+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 252, "cost": 3382347, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 16103, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,103"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:10.104326+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 11, "cost": 1495124, "path": "pullback", "reason": "눌림목 지정가 145,918 도달", "stop": 100700, "target": 206300, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 145,918 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-05T09:00:18.831380+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 10, "cost": 1476221, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 100700, "target": 206300, "signals": [{"label": "손절선", "ok": true, "detail": "100,700 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 206,300"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-05T09:02:14.769091+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 841, "proceeds": 4784352, "entry_price": 6300, "pnl": -514742, "pnl_pct": -9.52, "hold_from": "2026-07-30T09:26:07.513013+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,789 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,322"}, {"label": "추세(20일선)", "ok": true, "detail": "5,326"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,413"}]}
|
||||
{"ts": "2026-08-05T09:02:14.769295+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 155, "cost": 2021503, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10340, "target": 18440, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,040 vs 12,727"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,356 / 12,727"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.266065+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 146, "cost": 2019483, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18440, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,440"}, {"label": "추세(20일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:22.181097+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 600, "proceeds": 11216086, "entry_price": 19025, "pnl": -200476, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.254501+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,554"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:34:17.073825+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 25, "cost": 4800720, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 175344, "target": 225312, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "191,800 vs 177,680"}, {"label": "정배열(5>20)", "ok": true, "detail": "186,140 / 177,680"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:12:17.879554+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 24, "cost": 4714307, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 175344, "target": 225312, "signals": [{"label": "손절선", "ok": true, "detail": "175,344 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 225,312"}, {"label": "추세(20일선)", "ok": true, "detail": "177,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
{"ts": "2026-08-10T09:00:20.971135+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 28, "cost": 3808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 161427, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,427"}, {"label": "추세(20일선)", "ok": true, "detail": "109,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 18871261.522500005,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 22,
|
||||
"entry_price": 347250.0,
|
||||
"entry_at": "2026-07-13T09:12:04.324564+09:00",
|
||||
"stop": 305399,
|
||||
"target": 430953,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3889733.683715179,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 89,
|
||||
"entry_price": 119185.39325842696,
|
||||
"entry_at": "2026-07-29T09:02:02.257865+09:00",
|
||||
"stop": 111200,
|
||||
"target": 135156,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5327150.576000001,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 79,
|
||||
"entry_price": 123225.3164556962,
|
||||
"entry_at": "2026-07-30T09:04:07.521823+09:00",
|
||||
"stop": 111000,
|
||||
"target": 147676,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4940372.790080874,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 606,
|
||||
"entry_price": 6333.069306930693,
|
||||
"entry_at": "2026-07-30T09:04:07.522091+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1924945.6187384445,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 55,
|
||||
"entry_price": 133861.81818181818,
|
||||
"entry_at": "2026-07-30T09:24:07.568342+09:00",
|
||||
"stop": 118205,
|
||||
"target": 165174,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3791237.2526261737,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 395,
|
||||
"entry_price": 25667.46835443038,
|
||||
"entry_at": "2026-07-31T09:10:13.091944+09:00",
|
||||
"stop": 23650,
|
||||
"target": 29702,
|
||||
"peak": 27650,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 25,331 도달",
|
||||
"cur_price": 26850,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5089986.002562501,
|
||||
"last_add_price": 26100
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 300,
|
||||
"entry_price": 13424.466666666667,
|
||||
"entry_at": "2026-08-05T09:02:14.773219+09:00",
|
||||
"stop": 10340,
|
||||
"target": 19593,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2020520.412274148,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 49,
|
||||
"entry_price": 194155.10204081633,
|
||||
"entry_at": "2026-08-06T09:34:17.077648+09:00",
|
||||
"stop": 177099,
|
||||
"target": 228267,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4842897.369596543,
|
||||
"last_add_price": 196400
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18257679.233000018,
|
||||
"closed_trades": 30,
|
||||
"wins": 0,
|
||||
"peak_equity": 101140808.32700005,
|
||||
"max_drawdown": 0.1947881632733674,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-29",
|
||||
"010120": "2026-06-25",
|
||||
"298040": "2026-06-26",
|
||||
"403870": "2026-07-07",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"003490": "2026-07-23",
|
||||
"105560": "2026-07-20",
|
||||
"095610": "2026-07-29",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583227+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.186290+09:00"
|
||||
}
|
||||
@@ -0,0 +1,95 @@
|
||||
{"ts": "2026-06-17T11:15:02.406376+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 156622, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "129,300 vs 118,950"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,400 / 118,950"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.348679+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 35, "cost": 2201830, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 90776, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "62,800 vs 53,510"}, {"label": "정배열(5>10)", "ok": true, "detail": "59,880 / 53,510"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.456154+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 21960, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,150 vs 18,963"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,616 / 18,963"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:13.389500+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.456153+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,960"}, {"label": "추세(10일선)", "ok": false, "detail": "18,919"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.268248+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.406375+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,622"}, {"label": "추세(10일선)", "ok": false, "detail": "119,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:04:06.145785+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 13, "cost": 2037406, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 229599, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "156,200 vs 128,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "143,260 / 128,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.775789+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 150, "cost": 2590889, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 23847, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "17,280 vs 13,750"}, {"label": "정배열(5>10)", "ok": true, "detail": "16,364 / 13,750"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:05.179971+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 13, "cost": 2056908, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 233143, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "158,000 vs 153,380"}, {"label": "정배열(5>10)", "ok": true, "detail": "172,240 / 153,380"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T10:06:01.728022+09:00", "side": "BUY", "code": "298040", "name": "효성중공업", "price": 3474000, "qty": 1, "cost": 3474521, "path": "pullback", "reason": "눌림목 지정가 3,598,344 도달", "stop": 2985000, "target": 4452000, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "3,475,000 vs 3,470,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "3,548,200 / 3,470,900"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "3,548,200 / 3,400,850"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-11.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +18 · 기 +0 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.75% (환산) vs 평균 0.63% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 4,085,000"}, {"label": "거래량 급증", "ok": true, "detail": "164,440 (환산) vs 평균 58,834"}, {"label": "회전율 급증", "ok": true, "detail": "1.75% (환산) vs 평균 0.63%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 3,598,344 (현재 3,475,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:06.270714+09:00", "side": "BUY", "code": "010120", "name": "LS ELECTRIC", "price": 231500, "qty": 14, "cost": 3241486, "path": "pullback", "reason": "눌림목 지정가 232,322 도달", "stop": 197600, "target": 299300, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "231,250 vs 231,225"}, {"label": "정배열(5>10)", "ok": true, "detail": "235,350 / 231,225"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "235,350 / 221,484"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -72 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.88% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 291,000"}, {"label": "거래량 급증", "ok": true, "detail": "2,836,457 (환산) vs 평균 1,321,579"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.88%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 232,322 (현재 231,250)"}]}
|
||||
{"ts": "2026-06-24T11:12:06.271547+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 142, "cost": 2593309, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 23847, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,847"}, {"label": "추세(10일선)", "ok": true, "detail": "13,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:28.880475+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 11, "cost": 1970396, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 233143, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,143"}, {"label": "추세(10일선)", "ok": true, "detail": "155,410"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:06.187066+09:00", "side": "SELL", "code": "010120", "name": "LS ELECTRIC", "price": 228500, "qty": 14, "proceeds": 3192762, "entry_price": 231500, "pnl": -48724, "pnl_pct": -1.3, "hold_from": "2026-06-24T11:12:06.270710+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "197,600 (현재 229,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 299,300"}, {"label": "추세(10일선)", "ok": false, "detail": "231,000"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -56 · 기 -20"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 243,750"}]}
|
||||
{"ts": "2026-06-25T09:04:06.187754+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 187, "cost": 5405111, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 34203, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "28,850 vs 25,540"}, {"label": "정배열(5>10)", "ok": true, "detail": "26,110 / 25,540"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:09.933144+09:00", "side": "SELL", "code": "298040", "name": "효성중공업", "price": 3285000, "qty": 1, "proceeds": 3278594, "entry_price": 3474000, "pnl": -195927, "pnl_pct": -5.44, "hold_from": "2026-06-24T10:06:01.728021+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "2,985,000 (현재 3,290,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 4,452,000"}, {"label": "추세(10일선)", "ok": false, "detail": "3,651,600"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -14"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 3,613,320"}]}
|
||||
{"ts": "2026-06-26T09:00:09.934097+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 35, "proceeds": 1746588, "entry_price": 62900, "pnl": -455243, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:31.348671+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 90,776"}, {"label": "추세(10일선)", "ok": false, "detail": "52,330"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.087844+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 12, "cost": 2003100, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 229599, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 229,599"}, {"label": "추세(10일선)", "ok": true, "detail": "129,220"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.290723+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 3, "cost": 2235335, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 1009343, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "744,000 vs 735,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "766,800 / 735,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.511202+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 3, "cost": 2334350, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 1009343, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,009,343"}, {"label": "추세(10일선)", "ok": true, "detail": "739,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:10.893524+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 40, "cost": 2212332, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 79500, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "53,700 vs 52,600"}, {"label": "정배열(5>10)", "ok": true, "detail": "58,060 / 52,600"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.238896+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 444060, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "357,000 vs 307,050"}, {"label": "정배열(5>10)", "ok": true, "detail": "317,600 / 307,050"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.338393+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 11, "cost": 4092614, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 444060, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 444,060"}, {"label": "추세(10일선)", "ok": true, "detail": "308,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-02T10:18:03.875115+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 43, "cost": 5255388, "path": "pullback", "reason": "눌림목 지정가 122,215 도달", "stop": 111000, "target": 144600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "122,000 vs 119,760"}, {"label": "정배열(5>10)", "ok": true, "detail": "121,000 / 119,760"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "121,000 / 118,432"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +22 · 기 -44 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "2,199,199 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.80% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,215 (현재 122,000)"}]}
|
||||
{"ts": "2026-07-02T11:04:07.665007+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 183, "cost": 5417613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 34203, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,203"}, {"label": "추세(10일선)", "ok": true, "detail": "25,615"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:04:01.696234+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 292, "proceeds": 4187858, "entry_price": 17751, "pnl": -996340, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.775786+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 24,340"}, {"label": "추세(10일선)", "ok": true, "detail": "13,461"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.666133+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 25, "proceeds": 3136372, "entry_price": 161596, "pnl": -904134, "pnl_pct": -22.21, "hold_from": "2026-06-24T09:04:06.145784+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,761 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 233,266"}, {"label": "추세(10일선)", "ok": true, "detail": "125,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:16:03.277539+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 126200, "qty": 42, "cost": 5301195, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 144600, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,600"}, {"label": "추세(10일선)", "ok": true, "detail": "120,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +278"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 125,493"}]}
|
||||
{"ts": "2026-07-03T10:24:02.798365+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 313, "cost": 5960414, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 21600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "19,030 vs 18,951"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,592 / 18,951"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.637613+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 164,068 도달", "stop": 96000, "target": 199800, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "133,100 vs 125,860"}, {"label": "정배열(5>10)", "ok": true, "detail": "138,640 / 125,860"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,068 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:46:01.674804+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320500, "qty": 22, "proceeds": 7037251, "entry_price": 364750, "pnl": -988453, "pnl_pct": -12.13, "hold_from": "2026-07-01T09:06:03.238895+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,756 (현재 320,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 452,739"}, {"label": "추세(10일선)", "ok": true, "detail": "303,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T10:02:06.384555+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13370, "qty": 157, "cost": 2099405, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 19390, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,370 vs 13,359"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,582 / 13,359"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,582 / 11,434"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-11.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,199 · 기 +137 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "12.53% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "13,437,708 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "12.53% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,370)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.786285+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 40, "proceeds": 1716646, "entry_price": 55300, "pnl": -495686, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:10.893514+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 79,500"}, {"label": "추세(10일선)", "ok": false, "detail": "51,535"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.385339+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 6, "proceeds": 3760652, "entry_price": 761500, "pnl": -809033, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.290722+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,025,843"}, {"label": "추세(10일선)", "ok": false, "detail": "724,000"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.262891+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 157, "proceeds": 1916366, "entry_price": 13370, "pnl": -183039, "pnl_pct": -8.53, "hold_from": "2026-07-06T10:02:06.384550+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,390"}, {"label": "추세(10일선)", "ok": false, "detail": "13,245"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,372"}]}
|
||||
{"ts": "2026-07-07T14:10:10.484381+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 183300, "qty": 9, "cost": 1649947, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 199800, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 183,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 199,800"}, {"label": "추세(10일선)", "ok": true, "detail": "123,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +263 · 기 -1,543"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 139,025"}]}
|
||||
{"ts": "2026-07-07T14:10:10.486606+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 287, "cost": 5956143, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21600, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,600"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:20.439012+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 22, "proceeds": 2377954, "entry_price": 152159, "pnl": -970048, "pnl_pct": -28.82, "hold_from": "2026-07-06T09:00:11.637606+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,460 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 219,558"}, {"label": "추세(10일선)", "ok": false, "detail": "123,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.480276+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 30, "cost": 3960594, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 161970, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "131,900 vs 108,660"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,560 / 108,660"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.879546+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 370, "proceeds": 9785880, "entry_price": 29246, "pnl": -1036843, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:06.187750+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 34,735"}, {"label": "추세(10일선)", "ok": true, "detail": "25,305"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:24:02.504790+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 184900, "qty": 23, "cost": 4253338, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 165505, "target": 223689, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "184,800 vs 158,260"}, {"label": "정배열(5>10)", "ok": true, "detail": "159,740 / 158,260"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,740 / 157,355"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,410,527 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "0.97% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T11:06:06.492597+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13660, "qty": 140, "cost": 1912687, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 20260, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,630 vs 13,385"}, {"label": "정배열(5>10)", "ok": true, "detail": "15,634 / 13,385"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,634 / 11,439"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +239 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+47%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "14.23% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "15,267,605 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "14.23% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 13,630)"}]}
|
||||
{"ts": "2026-07-10T12:14:02.693532+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 186600, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "126,200 vs 125,170"}, {"label": "정배열(5>10)", "ok": true, "detail": "137,260 / 125,170"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:12.396262+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 29, "cost": 3970696, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 161970, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,970"}, {"label": "추세(10일선)", "ok": true, "detail": "109,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:12:04.324565+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 341500, "qty": 11, "cost": 3757063, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 300363, "target": 423774, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "341,000 vs 305,450"}, {"label": "정배열(5>10)", "ok": true, "detail": "314,400 / 305,450"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "314,400 / 305,433"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -63 · 기 +144 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.90% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "197,687 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.90% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-13T09:24:06.471276+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 190400, "qty": 23, "cost": 4379857, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 165505, "target": 223689, "signals": [{"label": "손절선", "ok": true, "detail": "165,505 (현재 190,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 223,689"}, {"label": "추세(10일선)", "ok": true, "detail": "158,820"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 189,927"}]}
|
||||
{"ts": "2026-07-13T09:26:03.431888+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 13, "cost": 1808571, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 186600, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 186,600"}, {"label": "추세(10일선)", "ok": true, "detail": "126,460"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-15T14:32:01.906503+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 600, "proceeds": 11120273, "entry_price": 19858, "pnl": -796284, "pnl_pct": -6.49, "hold_from": "2026-07-03T10:24:02.798364+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,586 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,402"}, {"label": "추세(10일선)", "ok": false, "detail": "18,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:28:03.502833+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 353000, "qty": 11, "cost": 3883582, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 300363, "target": 423774, "signals": [{"label": "손절선", "ok": true, "detail": "300,363 (현재 352,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 423,774"}, {"label": "추세(10일선)", "ok": true, "detail": "306,600"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -33 · 기 +28"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 351,963"}]}
|
||||
{"ts": "2026-07-20T12:28:02.338385+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 140, "proceeds": 1440585, "entry_price": 13660, "pnl": -472101, "pnl_pct": -24.52, "hold_from": "2026-07-10T11:06:06.492596+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,260"}, {"label": "추세(10일선)", "ok": false, "detail": "12,013"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,626"}]}
|
||||
{"ts": "2026-07-20T12:58:05.505774+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 166600, "qty": 46, "proceeds": 7648656, "entry_price": 187650, "pnl": -984539, "pnl_pct": -11.22, "hold_from": "2026-07-10T09:24:02.504787+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "167,541 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 227,868"}, {"label": "추세(10일선)", "ok": true, "detail": "156,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T14:20:02.206535+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25350, "qty": 222, "cost": 5628544, "path": "pullback", "reason": "눌림목 지정가 25,328 도달", "stop": 23650, "target": 28750, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,300 vs 25,185"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,400 / 25,185"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,400 / 25,157"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +524 · 기 +141 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.44% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,611,169 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.44% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,328 (현재 25,300)"}]}
|
||||
{"ts": "2026-07-22T14:18:05.445917+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 152, "cost": 2132880, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 19936, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,020 vs 12,975"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,552 / 12,975"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-23T09:00:25.805090+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 24900, "qty": 222, "proceeds": 5517021, "entry_price": 25350, "pnl": -111523, "pnl_pct": -1.78, "hold_from": "2026-07-21T14:20:02.206534+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 24,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 28,750"}, {"label": "추세(10일선)", "ok": false, "detail": "25,145"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -381 · 기 -427"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,990"}]}
|
||||
{"ts": "2026-07-23T09:50:01.535676+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 42, "cost": 3704956, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 109473, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "88,200 vs 80,900"}, {"label": "정배열(5>10)", "ok": true, "detail": "83,000 / 80,900"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:24:01.524474+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 152100, "qty": 24, "proceeds": 3643282, "entry_price": 167779, "pnl": -384022, "pnl_pct": -9.35, "hold_from": "2026-06-24T09:46:05.179968+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "131,479 (현재 152,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 240,379"}, {"label": "추세(10일선)", "ok": false, "detail": "152,780"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -101 · 기 -107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T10:30:02.506420+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 185, "cost": 2616292, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11706, "target": 19008, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "14,180 vs 12,429"}, {"label": "정배열(5>10)", "ok": true, "detail": "13,154 / 12,429"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:54:04.517542+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 41, "cost": 3727459, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 109473, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 109,473"}, {"label": "추세(10일선)", "ok": true, "detail": "81,180"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:09.008368+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 28, "proceeds": 3124296, "entry_price": 132189, "pnl": -577559, "pnl_pct": -15.42, "hold_from": "2026-07-10T12:14:02.693531+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 204,568"}, {"label": "추세(10일선)", "ok": false, "detail": "123,880"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:09.009227+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155500, "qty": 12, "cost": 1866280, "path": "pullback", "reason": "눌림목 지정가 158,093 도달", "stop": 117686, "target": 231128, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "155,000 vs 153,080"}, {"label": "정배열(5>10)", "ok": true, "detail": "171,640 / 153,080"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,640 / 99,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+44.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +200 · 기 -454 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+27%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.77% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "730,327 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.77% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,093 (현재 155,000)"}]}
|
||||
{"ts": "2026-07-24T09:02:04.063974+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 174, "cost": 2620833, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11706, "target": 19008, "signals": [{"label": "손절선", "ok": true, "detail": "11,706 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,008"}, {"label": "추세(10일선)", "ok": true, "detail": "12,513"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-24T09:28:04.969410+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 147, "cost": 2133290, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 19936, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,936"}, {"label": "추세(10일선)", "ok": true, "detail": "13,113"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-24T10:02:04.460952+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 300, "cost": 5685853, "path": "pullback", "reason": "눌림목 지정가 20,012 도달", "stop": 17760, "target": 21330, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "18,950 vs 18,943"}, {"label": "정배열(5>10)", "ok": true, "detail": "19,576 / 18,943"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,576 / 19,358"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 -5 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.39% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "454,069 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.39% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,012 (현재 18,950)"}]}
|
||||
{"ts": "2026-07-27T09:10:01.062860+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12030, "qty": 359, "proceeds": 4310348, "entry_price": 14586, "pnl": -926777, "pnl_pct": -17.52, "hold_from": "2026-07-23T10:30:02.506419+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,082 (현재 12,030)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,594"}, {"label": "추세(10일선)", "ok": false, "detail": "12,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:12:01.542201+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7850, "qty": 404, "cost": 3171876, "path": "pullback", "reason": "눌림목 지정가 7,907 도달", "stop": 6743, "target": 10064, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,840 vs 5,428"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,526 / 5,428"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,526 / 4,895"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+91.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.17% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "693,433 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": true, "detail": "11.17% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": false, "detail": "80"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,907 (현재 7,840)"}]}
|
||||
{"ts": "2026-07-27T12:56:04.257218+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 8300, "qty": 382, "cost": 3171076, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6743, "target": 10064, "signals": [{"label": "손절선", "ok": true, "detail": "6,743 (현재 8,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,064"}, {"label": "추세(10일선)", "ok": true, "detail": "5,476"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 8,127"}]}
|
||||
{"ts": "2026-07-27T13:38:04.253231+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6880, "qty": 786, "proceeds": 5397135, "entry_price": 8069, "pnl": -945816, "pnl_pct": -14.73, "hold_from": "2026-07-27T09:12:01.542199+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,962 (현재 6,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,282"}, {"label": "추세(10일선)", "ok": true, "detail": "5,334"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:18.311555+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 379, "cost": 2570005, "path": "pullback", "reason": "눌림목 지정가 7,884 도달", "stop": 5628, "target": 9085, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "7,050 vs 5,350"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,368 / 5,350"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,884 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.764446+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 362, "cost": 2570586, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5628, "target": 9085, "signals": [{"label": "손절선", "ok": true, "detail": "5,628 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,085"}, {"label": "추세(10일선)", "ok": true, "detail": "5,354"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T10:08:02.791861+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 299, "proceeds": 3333317, "entry_price": 14266, "pnl": -932852, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.445916+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,352"}, {"label": "추세(10일선)", "ok": false, "detail": "12,695"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:02:02.257867+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 45, "cost": 5306296, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 131300, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "117,800 vs 116,390"}, {"label": "정배열(5>10)", "ok": true, "detail": "117,020 / 116,390"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.488056+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 44, "cost": 5302795, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 131300, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 131,300"}, {"label": "추세(10일선)", "ok": true, "detail": "116,660"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:10.030807+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 15, "cost": 1839276, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117686, "target": 231128, "signals": [{"label": "손절선", "ok": true, "detail": "117,686 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 231,128"}, {"label": "추세(10일선)", "ok": true, "detail": "148,710"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,742"}]}
|
||||
{"ts": "2026-07-29T09:24:10.030921+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 300, "cost": 5685853, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21330, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,330"}, {"label": "추세(10일선)", "ok": true, "detail": "18,901"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,268"}]}
|
||||
{"ts": "2026-07-29T09:24:10.031108+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 59, "proceeds": 7572605, "entry_price": 134408, "pnl": -358685, "pnl_pct": -4.32, "hold_from": "2026-07-09T09:36:03.480275+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,952 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,321"}, {"label": "추세(10일선)", "ok": true, "detail": "105,620"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.405241+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 817, "cost": 5221413, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7435, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,380 vs 5,591"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,742 / 5,591"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:18:05.395067+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 116400, "qty": 27, "proceeds": 3136672, "entry_price": 137222, "pnl": -568884, "pnl_pct": -15.17, "hold_from": "2026-07-24T09:00:09.009222+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,686 (현재 115,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 210,267"}, {"label": "추세(10일선)", "ok": false, "detail": "149,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +445 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T12:04:01.708942+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 119200, "qty": 85, "proceeds": 10112243, "entry_price": 124176, "pnl": -444341, "pnl_pct": -4.01, "hold_from": "2026-07-02T10:18:03.875113+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "111,006 (현재 119,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,518"}, {"label": "추세(10일선)", "ok": false, "detail": "119,490"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -11 · 기 -51"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:06:06.538231+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 5690, "qty": 741, "proceeds": 4208068, "entry_price": 6936, "pnl": -932523, "pnl_pct": -17.97, "hold_from": "2026-07-28T09:00:18.311548+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,741 (현재 5,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,327"}, {"label": "추세(10일선)", "ok": true, "detail": "5,214"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +185 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T13:34:03.610479+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 817, "proceeds": 4778284, "entry_price": 6390, "pnl": -443129, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.405240+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,435"}, {"label": "추세(10일선)", "ok": true, "detail": "5,539"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.521825+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 40, "cost": 4852728, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 141900, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "121,200 vs 119,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,840 / 119,680"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.522093+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 313, "cost": 1918978, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 8804, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.967598+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 39, "cost": 4883532, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 141900, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,900"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.568344+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 28, "cost": 3690954, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.515659+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 832, "cost": 5242386, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7322, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:07.673294+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 293, "cost": 1919438, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.673492+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.535674+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:10:13.091947+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25250, "qty": 201, "cost": 5076011, "path": "pullback", "reason": "눌림목 지정가 25,331 도달", "stop": 23650, "target": 28450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,200 vs 25,175"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,380 / 25,175"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,380 / 25,155"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -414 · 기 +642 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,295,520 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,331 (현재 25,200)"}]}
|
||||
{"ts": "2026-07-31T10:36:07.698613+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 26100, "qty": 194, "cost": 5064160, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 23650, "target": 28450, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 26,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 28,450"}, {"label": "추세(10일선)", "ok": true, "detail": "25,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -410 · 기 +640"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,884"}]}
|
||||
{"ts": "2026-08-05T09:02:14.773015+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5700, "qty": 832, "proceeds": 4733152, "entry_price": 6300, "pnl": -509234, "pnl_pct": -9.52, "hold_from": "2026-07-30T09:26:07.515657+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,789 (현재 5,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,322"}, {"label": "추세(10일선)", "ok": true, "detail": "5,526"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,413"}]}
|
||||
{"ts": "2026-08-05T09:02:14.773222+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 154, "cost": 2008461, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 18440, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,040 vs 12,877"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,356 / 12,877"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.270070+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 146, "cost": 2019483, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18440, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,440"}, {"label": "추세(10일선)", "ok": true, "detail": "12,959"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:22.286269+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 600, "proceeds": 11216086, "entry_price": 18950, "pnl": -155620, "pnl_pct": -1.16, "hold_from": "2026-07-24T10:02:04.460951+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,330"}, {"label": "추세(10일선)", "ok": false, "detail": "18,923"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:34:17.077651+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 25, "cost": 4800720, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 175344, "target": 225312, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "191,800 vs 180,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "186,140 / 180,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-07T09:12:17.883738+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 24, "cost": 4714307, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 175344, "target": 225312, "signals": [{"label": "손절선", "ok": true, "detail": "175,344 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 225,312"}, {"label": "추세(10일선)", "ok": true, "detail": "181,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
{"ts": "2026-08-10T09:00:21.079732+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 27, "cost": 3672551, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 161427, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 161,427"}, {"label": "추세(10일선)", "ok": true, "detail": "109,170"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 26742074.230499957,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 852,
|
||||
"entry_price": 6333.098591549296,
|
||||
"entry_at": "2026-07-30T09:04:07.525083+09:00",
|
||||
"stop": 5363,
|
||||
"target": 7789,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2702321.452399152,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 698,
|
||||
"entry_price": 13159.885386819484,
|
||||
"entry_at": "2026-08-03T12:00:12.468905+09:00",
|
||||
"stop": 11874,
|
||||
"target": 15089,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4597484.241421635,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 25,
|
||||
"entry_price": 141516.0,
|
||||
"entry_at": "2026-08-04T09:04:10.112981+09:00",
|
||||
"stop": 111709,
|
||||
"target": 186227,
|
||||
"peak": 148000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 145,918 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1856071.8339699174,
|
||||
"last_add_price": 147600
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 100,
|
||||
"entry_price": 91919.0,
|
||||
"entry_at": "2026-08-04T09:50:10.235258+09:00",
|
||||
"stop": 83395,
|
||||
"target": 104705,
|
||||
"peak": 101600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 97700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4659757.825201359,
|
||||
"last_add_price": 93500
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 355,
|
||||
"entry_price": 13422.760563380281,
|
||||
"entry_at": "2026-08-05T09:02:14.777207+09:00",
|
||||
"stop": 11093,
|
||||
"target": 16917,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,170 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2390089.3312908146,
|
||||
"last_add_price": 13830
|
||||
},
|
||||
"068270": {
|
||||
"code": "068270",
|
||||
"name": "셀트리온",
|
||||
"sources": [
|
||||
"interest"
|
||||
],
|
||||
"qty": 54,
|
||||
"entry_price": 194200.0,
|
||||
"entry_at": "2026-08-06T09:34:17.081460+09:00",
|
||||
"stop": 181408,
|
||||
"target": 213388,
|
||||
"peak": 201000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 201000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5316706.344343748,
|
||||
"last_add_price": 196400
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 278,
|
||||
"entry_price": 19120,
|
||||
"entry_at": "2026-08-07T09:00:20.838249+09:00",
|
||||
"stop": 18038,
|
||||
"target": 20743,
|
||||
"peak": 19330,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,668 도달",
|
||||
"cur_price": 18970,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5334796.2471562475,
|
||||
"last_add_price": 19120
|
||||
},
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 23,
|
||||
"entry_price": 391652.17391304346,
|
||||
"entry_at": "2026-08-10T09:00:21.187673+09:00",
|
||||
"stop": 355549,
|
||||
"target": 445806,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4726305.668282297,
|
||||
"last_add_price": 400000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16362952.80350003,
|
||||
"closed_trades": 43,
|
||||
"wins": 6,
|
||||
"peak_equity": 100344662.275,
|
||||
"max_drawdown": 0.16636733158011952,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-20",
|
||||
"030000": "2026-08-06",
|
||||
"403870": "2026-07-02",
|
||||
"003490": "2026-07-07",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-08-07",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-08",
|
||||
"319660": "2026-07-27",
|
||||
"095610": "2026-07-29",
|
||||
"105560": "2026-07-20",
|
||||
"010950": "2026-08-03",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-08-04",
|
||||
"252990": "2026-07-28",
|
||||
"090850": "2026-08-06",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583241+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.190010+09:00"
|
||||
}
|
||||
@@ -0,0 +1,119 @@
|
||||
{"ts": "2026-06-17T11:15:02.409673+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 47, "cost": 6153223, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121254, "target": 145369, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-19T09:02:06.459894+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 19,690 도달", "stop": 18100, "target": 20749, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,690 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-19T13:32:02.900378+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 121100, "qty": 47, "proceeds": 5680601, "entry_price": 130900, "pnl": -472622, "pnl_pct": -7.49, "hold_from": "2026-06-17T11:15:02.409672+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,254 (현재 121,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 145,369"}, {"label": "추세(20일선)", "ok": true, "detail": "118,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +531 · 기 -129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,178"}]}
|
||||
{"ts": "2026-06-23T09:00:13.491015+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.459893+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,100 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,749"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-24T09:02:02.401579+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 53200, "qty": 49, "cost": 2607191, "path": "pullback", "reason": "눌림목 지정가 60,114 도달", "stop": 43200, "target": 68200, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,200 vs 52,378"}, {"label": "정배열(5>20)", "ok": true, "detail": "57,960 / 52,378"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "57,960 / 49,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +711 · 기 -2,060 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.34% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,102,733 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "1.34% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,114 (현재 53,200)"}]}
|
||||
{"ts": "2026-06-24T09:08:01.013601+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 155400, "qty": 18, "cost": 2797620, "path": "pullback", "reason": "눌림목 지정가 155,963 도달", "stop": 128063, "target": 196406, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,400 vs 121,610"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,100 / 121,610"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,100 / 121,690"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.50% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,192,593 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "6.50% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 155,963 (현재 155,400)"}]}
|
||||
{"ts": "2026-06-25T09:04:06.192527+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 215, "cost": 6214432, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26911, "target": 31883, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:10.033266+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 49, "proceeds": 2445222, "entry_price": 53200, "pnl": -161969, "pnl_pct": -6.02, "hold_from": "2026-06-24T09:02:02.401577+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "43,200 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 68,200"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 57,056"}]}
|
||||
{"ts": "2026-06-26T09:04:03.922193+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 164900, "qty": 17, "cost": 2803720, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 128063, "target": 196406, "signals": [{"label": "손절선", "ok": true, "detail": "128,063 (현재 164,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 196,406"}, {"label": "추세(20일선)", "ok": true, "detail": "122,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -140 · 기 +323"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 164,359"}]}
|
||||
{"ts": "2026-06-30T09:00:10.993349+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 43, "cost": 2378257, "path": "pullback", "reason": "눌림목 지정가 60,222 도달", "stop": 44022, "target": 72218, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 60,222 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.240663+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 15, "cost": 5363304, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 325040, "target": 406190, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "357,000 vs 296,975"}, {"label": "정배열(5>20)", "ok": true, "detail": "317,600 / 296,975"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.340124+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 14, "cost": 5208781, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 325040, "target": 406190, "signals": [{"label": "손절선", "ok": true, "detail": "325,040 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 406,190"}, {"label": "추세(20일선)", "ok": true, "detail": "297,725"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T09:46:03.128913+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 52, "cost": 6147322, "path": "pullback", "reason": "눌림목 지정가 118,779 도달", "stop": 111000, "target": 129000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,779 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-02T09:00:24.843175+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 707000, "qty": 4, "cost": 2828424, "path": "pullback", "reason": "눌림목 지정가 714,693 도달", "stop": 606693, "target": 857461, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "714,000 vs 675,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "760,800 / 675,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "760,800 / 530,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -198 · 기 +92 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.32% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "230,413 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.32% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 714,693 (현재 714,000)"}]}
|
||||
{"ts": "2026-07-02T09:08:01.945995+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26900, "qty": 215, "proceeds": 5772222, "entry_price": 28900, "pnl": -442210, "pnl_pct": -6.92, "hold_from": "2026-06-25T09:04:06.192525+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,911 (현재 26,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 31,883"}, {"label": "추세(20일선)", "ok": true, "detail": "25,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -249 · 기 +991"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,517"}]}
|
||||
{"ts": "2026-07-02T10:18:03.877299+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 15980, "qty": 185, "cost": 2956743, "path": "pullback", "reason": "눌림목 지정가 16,358 도달", "stop": 13328, "target": 19958, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "15,980 vs 12,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,104 / 12,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,104 / 11,478"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,833 · 기 +437 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+25%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.98% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,701,165 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.98% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,358 (현재 15,980)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.877574+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 129000, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,000"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T10:34:04.147746+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18860, "qty": 326, "cost": 6149282, "path": "pullback", "reason": "눌림목 지정가 19,580 도달", "stop": 17760, "target": 20510, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,860 vs 18,848"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,558 / 18,848"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,558 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -339 · 기 +110 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.80% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "924,985 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.80% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,580 (현재 18,860)"}]}
|
||||
{"ts": "2026-07-02T11:20:02.084479+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 22550, "qty": 272, "cost": 6134520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20510, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 19,350)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,510"}, {"label": "추세(20일선)", "ok": true, "detail": "18,872"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,250"}]}
|
||||
{"ts": "2026-07-02T11:22:01.992492+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19000, "qty": 598, "proceeds": 11339844, "entry_price": 20538, "pnl": -943958, "pnl_pct": -7.49, "hold_from": "2026-07-02T10:34:04.147745+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,368 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,293"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -339 · 기 +110"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T14:48:03.100788+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 133000, "qty": 35, "proceeds": 4645923, "entry_price": 160014, "pnl": -955417, "pnl_pct": -16.88, "hold_from": "2026-06-24T09:08:01.013600+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "133,138 (현재 133,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 200,329"}, {"label": "추세(20일선)", "ok": true, "detail": "120,490"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +395 · 기 -1,516"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T15:04:06.212995+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43900, "qty": 43, "proceeds": 1884019, "entry_price": 55300, "pnl": -494238, "pnl_pct": -20.61, "hold_from": "2026-06-30T09:00:10.993341+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "44,022 (현재 43,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 72,218"}, {"label": "추세(20일선)", "ok": false, "detail": "51,912"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +2,379 · 기 -6,625"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,411"}]}
|
||||
{"ts": "2026-07-03T09:02:04.951718+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 133400, "qty": 16, "cost": 2134720, "path": "pullback", "reason": "눌림목 지정가 154,163 도달", "stop": 104263, "target": 177106, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,300 vs 120,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,680 / 120,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,680 / 121,322"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+18.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +674 · 기 -2,170 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "571,607 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,163 (현재 133,300)"}]}
|
||||
{"ts": "2026-07-03T09:50:01.694989+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 328500, "qty": 29, "proceeds": 9507923, "entry_price": 364500, "pnl": -1064162, "pnl_pct": -9.88, "hold_from": "2026-07-01T09:06:03.240662+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "331,504 (현재 331,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 413,994"}, {"label": "추세(20일선)", "ok": true, "detail": "295,675"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -127 · 기 +294"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:56:06.797073+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 13310, "qty": 185, "proceeds": 2457548, "entry_price": 15980, "pnl": -499195, "pnl_pct": -16.71, "hold_from": "2026-07-02T10:18:03.877298+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "13,328 (현재 13,320)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,958"}, {"label": "추세(20일선)", "ok": true, "detail": "12,716"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 16,944"}]}
|
||||
{"ts": "2026-07-03T10:24:02.800122+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 312, "cost": 5941371, "path": "pullback", "reason": "눌림목 지정가 19,631 도달", "stop": 17921, "target": 20718, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,631 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-03T12:00:02.677657+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28800, "qty": 206, "cost": 5933690, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26795, "target": 31807, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,750 vs 25,942"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,090 / 25,942"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,090 / 25,214"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+8.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 +1,952 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.38% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,054,442 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.38% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-07-06T09:00:11.744896+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 14510, "qty": 172, "cost": 2496094, "path": "pullback", "reason": "눌림목 지정가 16,248 도달", "stop": 11748, "target": 18653, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,490 vs 12,774"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,806 / 12,774"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,806 / 11,453"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,226 · 기 +134 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.02% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "20,667 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "0.02% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "54"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,248 (현재 14,490)"}]}
|
||||
{"ts": "2026-07-06T09:18:01.695485+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29500, "qty": 201, "cost": 5930389, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26795, "target": 31807, "signals": [{"label": "손절선", "ok": true, "detail": "26,795 (현재 29,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 31,807"}, {"label": "추세(20일선)", "ok": true, "detail": "25,980"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -142 · 기 +2,052"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,483"}]}
|
||||
{"ts": "2026-07-07T10:06:07.272817+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147500, "qty": 16, "cost": 2360354, "path": "pullback", "reason": "눌림목 지정가 148,050 도달", "stop": 118550, "target": 190925, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "147,400 vs 135,785"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,120 / 135,785"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,120 / 99,573"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +96 · 기 -196 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.06% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,366,200 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "7.06% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 148,050 (현재 147,400)"}]}
|
||||
{"ts": "2026-07-07T12:02:08.265020+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 172, "proceeds": 2099458, "entry_price": 14510, "pnl": -396636, "pnl_pct": -15.71, "hold_from": "2026-07-06T09:00:11.744888+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "11,748 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,653"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 15,512"}]}
|
||||
{"ts": "2026-07-07T14:10:15.944417+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26600, "qty": 407, "proceeds": 10805089, "entry_price": 29146, "pnl": -1058990, "pnl_pct": -8.73, "hold_from": "2026-07-03T12:00:02.677656+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "27,098 (현재 26,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,217"}, {"label": "추세(20일선)", "ok": true, "detail": "25,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -532 · 기 +3,040"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T14:10:18.610637+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 13, "cost": 2301345, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118550, "target": 190925, "signals": [{"label": "손절선", "ok": true, "detail": "118,550 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 190,925"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 156,742"}]}
|
||||
{"ts": "2026-07-07T14:10:21.227329+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 815000, "qty": 4, "cost": 3260489, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 606693, "target": 857461, "signals": [{"label": "손절선", "ok": true, "detail": "606,693 (현재 815,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 857,461"}, {"label": "추세(20일선)", "ok": true, "detail": "673,250"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 738,777"}]}
|
||||
{"ts": "2026-07-08T09:00:20.537372+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 16, "proceeds": 1729421, "entry_price": 133400, "pnl": -405299, "pnl_pct": -18.82, "hold_from": "2026-07-03T09:02:04.951717+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:20.538559+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 19110, "qty": 312, "proceeds": 5950693, "entry_price": 19040, "pnl": 9322, "pnl_pct": 0.37, "hold_from": "2026-07-03T10:24:02.800121+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,796 (현재 19,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "18,860"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +193 · 기 +193"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:00:20.539046+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 602000, "qty": 8, "proceeds": 4806609, "entry_price": 761000, "pnl": -1282304, "pnl_pct": -20.89, "hold_from": "2026-07-02T09:00:24.843168+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "665,669 (현재 602,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 903,996"}, {"label": "추세(20일선)", "ok": false, "detail": "669,550"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 -19"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:02:04.490070+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19110, "qty": 298, "cost": 5695634, "path": "pullback", "reason": "눌림목 지정가 19,657 도달", "stop": 18017, "target": 20749, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+0.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -10 · 기 +164 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.08% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "93,540 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.08% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,657 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-09T09:02:04.490181+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 36, "cost": 5699655, "path": "pullback", "reason": "눌림목 지정가 158,582 도달", "stop": 158000, "target": 158750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,582 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:12:02.531380+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 36, "proceeds": 5637386, "entry_price": 158300, "pnl": -62269, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.490180+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.481941+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 40, "cost": 5280792, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120761, "target": 148858, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,900 vs 108,920"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,560 / 108,920"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:24:02.510323+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158900, "qty": 36, "cost": 5721258, "path": "pullback", "reason": "눌림목 지정가 159,557 도달", "stop": 158000, "target": 160250, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,800 vs 149,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,400 / 149,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,400 / 113,205"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.62% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,627,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "5.62% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,557 (현재 158,800)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.647025+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 31, "cost": 5763764, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 171311, "target": 207783, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.498476+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 187, "cost": 2399570, "path": "pullback", "reason": "눌림목 지정가 15,971 도달", "stop": 10360, "target": 16535, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,971 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.499492+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 173, "cost": 2396409, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 16535, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,535"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-10T12:14:02.695248+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 151,752 도달", "stop": 96000, "target": 171500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "126,200 vs 120,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "137,260 / 120,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 151,752 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:12.503132+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 39, "cost": 5339901, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120761, "target": 148858, "signals": [{"label": "손절선", "ok": true, "detail": "120,761 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 148,858"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:26:03.433552+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 14, "cost": 1947692, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 171500, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,500"}, {"label": "추세(20일선)", "ok": true, "detail": "120,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:36:02.297086+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 30, "cost": 5730860, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 171311, "target": 207783, "signals": [{"label": "손절선", "ok": true, "detail": "171,311 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 207,783"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.377755+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 36, "proceeds": 6751209, "entry_price": 158900, "pnl": 1029951, "pnl_pct": 18.25, "hold_from": "2026-07-10T09:24:02.510319+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:12.628220+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 29, "proceeds": 6049181, "entry_price": 160724, "pnl": 1387482, "pnl_pct": 30.04, "hold_from": "2026-07-07T10:06:07.272816+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "138,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:12.629372+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18580, "qty": 298, "proceeds": 5526043, "entry_price": 19110, "pnl": -169591, "pnl_pct": -2.77, "hold_from": "2026-07-09T09:02:04.490068+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,017 (현재 18,560)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,749"}, {"label": "추세(20일선)", "ok": false, "detail": "18,832"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -120 · 기 -150"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,486"}]}
|
||||
{"ts": "2026-07-20T09:04:02.905960+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 173000, "qty": 61, "proceeds": 10532422, "entry_price": 188408, "pnl": -962202, "pnl_pct": -8.18, "hold_from": "2026-07-10T09:28:02.647023+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "173,252 (현재 173,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,143"}, {"label": "추세(20일선)", "ok": true, "detail": "159,270"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -332 · 기 +291"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.340218+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 360, "proceeds": 3704362, "entry_price": 13320, "pnl": -1091617, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.498474+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,760"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.301563+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 103, "proceeds": 13548928, "entry_price": 120181, "pnl": 1168471, "pnl_pct": 9.67, "hold_from": "2026-07-01T09:46:03.128911+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T12:06:01.194400+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 15, "cost": 5168275, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 313808, "target": 390538, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T11:56:00.850083+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 159800, "qty": 36, "cost": 5753663, "path": "pullback", "reason": "눌림목 지정가 159,932 도달", "stop": 158000, "target": 162500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "159,700 vs 149,775"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,580 / 149,775"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,580 / 113,220"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+75.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -408 · 기 +146 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+12%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.73% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,371,014 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.73% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,932 (현재 159,700)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.761634+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 36, "proceeds": 5651758, "entry_price": 159800, "pnl": -101905, "pnl_pct": -1.56, "hold_from": "2026-07-22T11:56:00.850081+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 162,500"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 169,305"}]}
|
||||
{"ts": "2026-07-23T09:00:25.909523+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 36, "cost": 5764465, "path": "pullback", "reason": "눌림목 지정가 159,493 도달", "stop": 158000, "target": 163250, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 159,493 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.434630+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 36, "proceeds": 5669722, "entry_price": 160100, "pnl": -94742, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:25.909516+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.311545+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 308, "cost": 5806671, "path": "pullback", "reason": "눌림목 지정가 19,627 도달", "stop": 17760, "target": 20485, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,627 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.537437+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 58, "cost": 5116367, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 80223, "target": 100166, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,200 vs 75,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,000 / 75,070"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T10:30:02.508176+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 14140, "qty": 255, "cost": 3606241, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 12315, "target": 16878, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,180 vs 10,944"}, {"label": "정배열(5>20)", "ok": true, "detail": "13,154 / 10,944"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "13,154 / 12,687"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "84.26% (환산) vs 평균 31.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 13,990"}, {"label": "거래량 급증", "ok": true, "detail": "12,639,979 (환산) vs 평균 4,720,532"}, {"label": "회전율 급증", "ok": true, "detail": "84.26% (환산) vs 평균 31.47%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
|
||||
{"ts": "2026-07-23T12:22:02.618391+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 14, "cost": 4984748, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 313808, "target": 390538, "signals": [{"label": "손절선", "ok": true, "detail": "313,808 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 390,538"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.519326+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 56, "cost": 5091164, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 80223, "target": 100166, "signals": [{"label": "손절선", "ok": true, "detail": "80,223 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,166"}, {"label": "추세(20일선)", "ok": true, "detail": "75,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:09.111297+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 29, "proceeds": 3235878, "entry_price": 132428, "pnl": -605098, "pnl_pct": -15.58, "hold_from": "2026-07-10T12:14:02.695247+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "102,540 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 177,258"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:09.112484+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 308, "proceeds": 5757591, "entry_price": 18850, "pnl": -49080, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.311543+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,485"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:02:04.065706+09:00", "side": "BUY", "code": "024060", "name": "흥구석유", "price": 15060, "qty": 239, "cost": 3599880, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 12315, "target": 16878, "signals": [{"label": "손절선", "ok": true, "detail": "12,315 (현재 15,020)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,878"}, {"label": "추세(20일선)", "ok": true, "detail": "10,986"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +208 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,766"}]}
|
||||
{"ts": "2026-07-27T09:02:06.258351+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 139000, "qty": 15, "cost": 2085313, "path": "pullback", "reason": "눌림목 지정가 146,775 도달", "stop": 108775, "target": 184337, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "138,700 vs 135,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "168,380 / 135,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "168,380 / 99,428"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +238 · 기 -568 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.72% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "526,333 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.72% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 146,775 (현재 138,700)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.258454+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 308, "cost": 5883682, "path": "pullback", "reason": "눌림목 지정가 19,673 도달", "stop": 18023, "target": 20715, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,673 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.258780+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 568, "cost": 4243596, "path": "pullback", "reason": "눌림목 지정가 7,635 도달", "stop": 6645, "target": 8707, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,635 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:04:05.341119+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 143200, "qty": 79, "proceeds": 11290740, "entry_price": 134419, "pnl": 670047, "pnl_pct": 6.53, "hold_from": "2026-07-09T09:36:03.481939+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "143,490 (현재 143,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "109,490"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +123 · 기 +226"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:04:05.341251+09:00", "side": "SELL", "code": "024060", "name": "흥구석유", "price": 12200, "qty": 494, "proceeds": 6015048, "entry_price": 14585, "pnl": -1191073, "pnl_pct": -16.35, "hold_from": "2026-07-23T10:30:02.508174+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "12,707 (현재 12,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,402"}, {"label": "추세(20일선)", "ok": true, "detail": "10,847"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -85 · 기 +2"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-27T09:08:02.110523+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 536, "cost": 4240396, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6645, "target": 8707, "signals": [{"label": "손절선", "ok": true, "detail": "6,645 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,707"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-27T09:12:01.544268+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13150, "qty": 199, "cost": 2617243, "path": "pullback", "reason": "눌림목 지정가 13,180 도달", "stop": 10830, "target": 16630, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,150 vs 12,732"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,378 / 12,732"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,378 / 13,268"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +27 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "274,967 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.46% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,180 (현재 13,150)"}]}
|
||||
{"ts": "2026-07-27T09:30:01.188634+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 149900, "qty": 38, "cost": 5697054, "path": "pullback", "reason": "눌림목 지정가 157,993 도달", "stop": 149899, "target": 149902, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "149,800 vs 149,280"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,600 / 149,280"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,600 / 113,055"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +274 · 기 -315 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.69% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "780,273 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.69% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 157,993 (현재 149,800)"}]}
|
||||
{"ts": "2026-07-27T09:32:01.415993+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 148500, "qty": 38, "proceeds": 5631996, "entry_price": 149900, "pnl": -65058, "pnl_pct": -0.93, "hold_from": "2026-07-27T09:30:01.188633+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "149,899 (현재 148,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 149,902"}, {"label": "추세(20일선)", "ok": false, "detail": "149,215"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +274 · 기 -315"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 159,969"}]}
|
||||
{"ts": "2026-07-27T09:32:01.416274+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127900, "qty": 45, "cost": 5756363, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120209, "target": 139437, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "127,900 vs 113,950"}, {"label": "정배열(5>20)", "ok": true, "detail": "119,040 / 113,950"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "119,040 / 110,150"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +106 · 기 +291 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "643,340 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-27T13:40:01.118855+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6780, "qty": 1104, "proceeds": 7470524, "entry_price": 7684, "pnl": -1013468, "pnl_pct": -11.76, "hold_from": "2026-07-27T09:02:06.258778+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,854 (현재 6,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,929"}, {"label": "추세(20일선)", "ok": true, "detail": "4,841"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +50 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T09:00:18.415985+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6780, "qty": 525, "cost": 3560034, "path": "pullback", "reason": "눌림목 지정가 7,596 도달", "stop": 5916, "target": 8077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,050 vs 4,855"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,368 / 4,855"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,368 / 4,882"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+73.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +86 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "813 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "69"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,596 (현재 7,050)"}]}
|
||||
{"ts": "2026-07-28T09:10:01.766164+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7100, "qty": 502, "cost": 3564735, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5916, "target": 8077, "signals": [{"label": "손절선", "ok": true, "detail": "5,916 (현재 7,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,077"}, {"label": "추세(20일선)", "ok": true, "detail": "4,857"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +86 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,079"}]}
|
||||
{"ts": "2026-07-28T09:38:04.856150+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 120100, "qty": 45, "proceeds": 5393961, "entry_price": 127900, "pnl": -362402, "pnl_pct": -6.1, "hold_from": "2026-07-27T09:32:01.416272+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,209 (현재 120,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 139,437"}, {"label": "추세(20일선)", "ok": true, "detail": "113,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 130,460"}]}
|
||||
{"ts": "2026-07-28T11:04:03.876316+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 10790, "qty": 199, "proceeds": 2143023, "entry_price": 13150, "pnl": -474220, "pnl_pct": -17.95, "hold_from": "2026-07-27T09:12:01.544267+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,830 (현재 10,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,630"}, {"label": "추세(20일선)", "ok": false, "detail": "12,616"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 -156"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,003"}]}
|
||||
{"ts": "2026-07-29T09:24:10.033574+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 122600, "qty": 17, "cost": 2084513, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 108775, "target": 184337, "signals": [{"label": "손절선", "ok": true, "detail": "108,775 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 184,337"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +453 · 기 -688"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 148,242"}]}
|
||||
{"ts": "2026-07-29T09:26:01.925323+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18940, "qty": 308, "proceeds": 5822145, "entry_price": 19100, "pnl": -61538, "pnl_pct": -0.84, "hold_from": "2026-07-27T09:02:06.258453+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "19,645 (현재 18,950)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "18,852"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.925475+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6610, "qty": 1027, "proceeds": 6775232, "entry_price": 6936, "pnl": -349536, "pnl_pct": -4.71, "hold_from": "2026-07-28T09:00:18.415977+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,526 (현재 6,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "4,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.406972+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 871, "cost": 5566525, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5998, "target": 6978, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T10:24:01.466402+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 123400, "qty": 45, "cost": 5553833, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 115612, "target": 135082, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "123,400 vs 113,725"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,140 / 113,725"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,140 / 110,075"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +47 · 기 +310 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.38% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "644,676 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.38% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-29T10:42:05.435654+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5980, "qty": 871, "proceeds": 5198423, "entry_price": 6390, "pnl": -368102, "pnl_pct": -6.42, "hold_from": "2026-07-29T09:28:01.406971+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,998 (현재 5,980)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,978"}, {"label": "추세(20일선)", "ok": true, "detail": "5,338"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,521"}]}
|
||||
{"ts": "2026-07-29T12:50:05.492063+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 108000, "qty": 32, "proceeds": 3449261, "entry_price": 130288, "pnl": -720565, "pnl_pct": -17.11, "hold_from": "2026-07-27T09:02:06.258350+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "108,775 (현재 108,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,878"}, {"label": "추세(20일선)", "ok": false, "detail": "133,815"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +449 · 기 -685"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T14:20:01.529112+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 115500, "qty": 45, "proceeds": 5187365, "entry_price": 123400, "pnl": -366468, "pnl_pct": -6.4, "hold_from": "2026-07-29T10:24:01.466401+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "115,612 (현재 115,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 135,082"}, {"label": "추세(20일선)", "ok": true, "detail": "113,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +44 · 기 +333"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,053"}]}
|
||||
{"ts": "2026-07-30T09:04:07.524832+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19090, "qty": 289, "cost": 5517838, "path": "pullback", "reason": "눌림목 지정가 19,653 도달", "stop": 17993, "target": 20736, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,100 vs 18,860"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,606 / 18,860"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,606 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +2 · 기 +327 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.14% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "160,727 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.14% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,653 (현재 19,100)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.525085+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 440, "cost": 2697605, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 5127, "target": 7634, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:22:07.837500+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124400, "qty": 44, "cost": 5474421, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116537, "target": 136194, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,300 vs 113,770"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,320 / 113,770"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,320 / 110,090"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.37% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "615,133 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.37% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:24:07.570832+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 40, "cost": 5272791, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 148465, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.518278+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 880, "cost": 5544832, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 6875, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,280 vs 5,353"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,722 / 5,353"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T10:10:07.466772+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 43, "cost": 5491924, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116537, "target": 136194, "signals": [{"label": "손절선", "ok": true, "detail": "116,537 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,194"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 127,135"}]}
|
||||
{"ts": "2026-07-31T09:04:08.455844+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 114, "proceeds": 7862039, "entry_price": 89526, "pnl": -2345492, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.537436+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,292 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,878"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.677038+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 412, "cost": 2699005, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 7634, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,634"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-08-03T09:34:09.209896+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 120300, "qty": 40, "proceeds": 4802617, "entry_price": 131800, "pnl": -470174, "pnl_pct": -8.73, "hold_from": "2026-07-30T09:24:07.570830+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,690 (현재 120,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 148,465"}, {"label": "추세(20일선)", "ok": true, "detail": "108,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -35 · 기 +48"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,311"}]}
|
||||
{"ts": "2026-08-03T12:00:12.468908+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 356, "cost": 4596649, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11713, "target": 14706, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.405836+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 342, "cost": 4590328, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11713, "target": 14706, "signals": [{"label": "손절선", "ok": true, "detail": "11,713 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 14,706"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-04T09:04:10.112983+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 135900, "qty": 13, "cost": 1766965, "path": "pullback", "reason": "눌림목 지정가 145,918 도달", "stop": 104818, "target": 182523, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "135,700 vs 135,200"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,780 / 135,200"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,780 / 99,378"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +23 · 기 +54 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.62% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,281,140 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "6.62% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 145,918 (현재 135,700)"}]}
|
||||
{"ts": "2026-08-04T09:50:10.235261+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90400, "qty": 51, "cost": 4611092, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82166, "target": 102752, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,300 vs 75,175"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,420 / 75,175"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,420 / 75,093"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +68 · 기 +117 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.87% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "805,693 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.87% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-04T10:32:13.426775+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 93500, "qty": 49, "cost": 4582187, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 82166, "target": 102752, "signals": [{"label": "손절선", "ok": true, "detail": "82,166 (현재 93,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 102,752"}, {"label": "추세(20일선)", "ok": true, "detail": "75,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +57 · 기 +117"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 93,241"}]}
|
||||
{"ts": "2026-08-04T12:16:10.467115+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 117800, "qty": 87, "proceeds": 10228615, "entry_price": 126031, "pnl": -737729, "pnl_pct": -6.53, "hold_from": "2026-07-30T09:22:07.837498+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "117,825 (현재 117,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,340"}, {"label": "추세(20일선)", "ok": true, "detail": "113,445"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -24 · 기 +268"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-04T13:26:13.462956+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5910, "qty": 880, "proceeds": 5190658, "entry_price": 6300, "pnl": -354173, "pnl_pct": -6.19, "hold_from": "2026-07-30T09:26:07.518276+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,917 (현재 5,910)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,875"}, {"label": "추세(20일선)", "ok": true, "detail": "5,335"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +36 · 기 +9"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,419"}]}
|
||||
{"ts": "2026-08-05T09:00:19.042122+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147600, "qty": 12, "cost": 1771466, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 104818, "target": 182523, "signals": [{"label": "손절선", "ok": true, "detail": "104,818 (현재 147,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 182,523"}, {"label": "추세(20일선)", "ok": true, "detail": "135,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +200"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 145,836"}]}
|
||||
{"ts": "2026-08-05T09:02:14.777027+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 5710, "qty": 934, "cost": 5333940, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5372, "target": 6218, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "5,730 vs 5,326"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,612 / 5,326"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,612 / 5,611"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -2 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.46% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "99,627 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.46% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
|
||||
{"ts": "2026-08-05T09:02:14.777209+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13040, "qty": 183, "cost": 2386678, "path": "pullback", "reason": "눌림목 지정가 13,170 도달", "stop": 10710, "target": 16534, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,040 vs 12,727"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,356 / 12,727"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,356 / 13,267"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "78,333 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,170 (현재 13,040)"}]}
|
||||
{"ts": "2026-08-05T09:38:13.273979+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13830, "qty": 172, "cost": 2379117, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10710, "target": 16534, "signals": [{"label": "손절선", "ok": true, "detail": "10,710 (현재 13,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,534"}, {"label": "추세(20일선)", "ok": true, "detail": "12,768"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,817"}]}
|
||||
{"ts": "2026-08-06T09:00:22.388193+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 289, "proceeds": 5402415, "entry_price": 19090, "pnl": -115423, "pnl_pct": -1.89, "hold_from": "2026-07-30T09:04:07.524830+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,993 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,736"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,459"}]}
|
||||
{"ts": "2026-08-06T09:34:17.081462+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 192000, "qty": 27, "cost": 5184778, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 179508, "target": 210738, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "191,800 vs 177,680"}, {"label": "정배열(5>20)", "ok": true, "detail": "186,140 / 177,680"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "186,140 / 176,671"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+20.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +255 · 기 -319 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 191,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,582,767 (환산) vs 평균 738,783"}, {"label": "회전율 급증", "ok": true, "detail": "0.67% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-06T09:34:17.081755+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5350, "qty": 934, "proceeds": 4987156, "entry_price": 5710, "pnl": -346784, "pnl_pct": -6.3, "hold_from": "2026-08-05T09:02:14.777025+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,372 (현재 5,370)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,218"}, {"label": "추세(20일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -30 · 기 -23"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,829"}]}
|
||||
{"ts": "2026-08-07T09:00:20.838255+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19120, "qty": 278, "cost": 5316157, "path": "pullback", "reason": "눌림목 지정가 19,668 도달", "stop": 18038, "target": 20743, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,060 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,598 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,598 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -81 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.06% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "64,387 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.06% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 19,668 (현재 19,060)"}]}
|
||||
{"ts": "2026-08-07T09:12:17.887713+09:00", "side": "BUY", "code": "068270", "name": "셀트리온", "price": 196400, "qty": 27, "cost": 5303595, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 179508, "target": 210738, "signals": [{"label": "손절선", "ok": true, "detail": "179,508 (현재 196,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 210,738"}, {"label": "추세(20일선)", "ok": true, "detail": "177,905"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +338 · 기 +73"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 196,264"}]}
|
||||
{"ts": "2026-08-07T11:24:18.220965+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 29, "proceeds": 10303868, "entry_price": 350052, "pnl": 150845, "pnl_pct": 1.7, "hold_from": "2026-07-21T12:06:01.194399+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "372,486 (현재 354,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "296,825"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +101 · 기 +31"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-10T09:00:21.187679+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 384000, "qty": 12, "cost": 4608691, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 349611, "target": 435583, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "383,000 vs 298,275"}, {"label": "정배열(5>20)", "ok": true, "detail": "322,800 / 298,275"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "322,800 / 306,133"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +35 · 기 -12 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+29%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "193,800 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.87% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-08-10T09:02:13.489860+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 400000, "qty": 11, "cost": 4400660, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 349611, "target": 435583, "signals": [{"label": "손절선", "ok": true, "detail": "349,611 (현재 399,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 435,583"}, {"label": "추세(20일선)", "ok": true, "detail": "299,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 -12"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 396,034"}]}
|
||||
@@ -0,0 +1,201 @@
|
||||
{
|
||||
"cash": 30345484.581500012,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
"code": "214450",
|
||||
"name": "파마리서치",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 22,
|
||||
"entry_price": 350250.0,
|
||||
"entry_at": "2026-07-21T12:06:01.196090+09:00",
|
||||
"stop": 308113,
|
||||
"target": 413456,
|
||||
"peak": 411500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 409000,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3939968.9939820534,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 93,
|
||||
"entry_price": 119186.02150537634,
|
||||
"entry_at": "2026-07-29T09:02:02.261876+09:00",
|
||||
"stop": 111200,
|
||||
"target": 131165,
|
||||
"peak": 127600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123200,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5570614.761375001,
|
||||
"last_add_price": 120500
|
||||
},
|
||||
"086790": {
|
||||
"code": "086790",
|
||||
"name": "하나금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 84,
|
||||
"entry_price": 123203.57142857143,
|
||||
"entry_at": "2026-07-30T09:04:07.527580+09:00",
|
||||
"stop": 111000,
|
||||
"target": 141509,
|
||||
"peak": 134600,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 130600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5217780.328505317,
|
||||
"last_add_price": 125200
|
||||
},
|
||||
"003680": {
|
||||
"code": "003680",
|
||||
"name": "한성기업",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 642,
|
||||
"entry_price": 6332.803738317757,
|
||||
"entry_at": "2026-07-30T09:04:07.528031+09:00",
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6840,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 6220,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2036737.90524699,
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 59,
|
||||
"entry_price": 133864.40677966102,
|
||||
"entry_at": "2026-07-30T09:24:07.573212+09:00",
|
||||
"stop": 118208,
|
||||
"target": 157349,
|
||||
"peak": 139900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 139600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4011548.961969723,
|
||||
"last_add_price": 136000
|
||||
},
|
||||
"194370": {
|
||||
"code": "194370",
|
||||
"name": "제이에스코퍼레이션",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 535,
|
||||
"entry_price": 13159.757009345794,
|
||||
"entry_at": "2026-08-03T12:00:12.472627+09:00",
|
||||
"stop": 11445,
|
||||
"target": 15732,
|
||||
"peak": 14120,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 13370,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3529514.3397388323,
|
||||
"last_add_price": 13420
|
||||
},
|
||||
"252990": {
|
||||
"code": "252990",
|
||||
"name": "샘씨엔에스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 306,
|
||||
"entry_price": 13511.437908496731,
|
||||
"entry_at": "2026-08-05T09:08:12.255584+09:00",
|
||||
"stop": 10405,
|
||||
"target": 18170,
|
||||
"peak": 15670,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 13,947 도달",
|
||||
"cur_price": 15670,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2074177.1346915166,
|
||||
"last_add_price": 13940
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 23,
|
||||
"entry_price": 141621.73913043478,
|
||||
"entry_at": "2026-08-06T09:08:11.885940+09:00",
|
||||
"stop": 100700,
|
||||
"target": 203004,
|
||||
"peak": 147300,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 156,500 도달",
|
||||
"cur_price": 143700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1664530.2588398196,
|
||||
"last_add_price": 147100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14111355.194000024,
|
||||
"closed_trades": 36,
|
||||
"wins": 5,
|
||||
"peak_equity": 101368884.75700004,
|
||||
"max_drawdown": 0.15532723273265314,
|
||||
"last_exit": {
|
||||
"030000": "2026-08-06",
|
||||
"086790": "2026-07-20",
|
||||
"403870": "2026-07-07",
|
||||
"095610": "2026-07-28",
|
||||
"009150": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"240810": "2026-07-24",
|
||||
"214450": "2026-07-06",
|
||||
"034730": "2026-07-07",
|
||||
"319660": "2026-07-23",
|
||||
"003490": "2026-07-09",
|
||||
"105560": "2026-07-20",
|
||||
"252990": "2026-07-28",
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-08-05",
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583273+09:00",
|
||||
"updated_at": "2026-08-10T15:28:16.193323+09:00"
|
||||
}
|
||||
@@ -0,0 +1,107 @@
|
||||
{"ts": "2026-06-17T11:15:02.413027+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 130900, "qty": 38, "cost": 4974946, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 118039, "target": 150191, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "129,300 vs 118,195"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,400 / 118,195"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,400 / 118,307"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +371 · 기 +158 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.12% (환산) vs 평균 0.38% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 126,500"}, {"label": "거래량 급증", "ok": true, "detail": "3,094,534 (환산) vs 평균 1,031,725"}, {"label": "회전율 급증", "ok": true, "detail": "1.12% (환산) vs 평균 0.38%"}, {"label": "RSI", "ok": true, "detail": "60"}]}
|
||||
{"ts": "2026-06-17T16:47:31.396578+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 62900, "qty": 35, "cost": 2201830, "path": "pullback", "reason": "눌림목 지정가 64,531 도달", "stop": 48962, "target": 83807, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "62,800 vs 52,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "59,880 / 52,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "59,880 / 49,831"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -4,434 · 기 +5,040 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "11.31% vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "9,309,211 vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": true, "detail": "11.31% vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 64,531 (현재 62,800)"}]}
|
||||
{"ts": "2026-06-19T09:02:06.463340+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19160, "qty": 325, "cost": 6227934, "path": "pullback", "reason": "눌림목 지정가 20,044 도달", "stop": 17760, "target": 21260, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,150 vs 18,862"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,616 / 18,862"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,616 / 19,361"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,162 · 기 +2,080 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "37,673 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,044 (현재 19,150)"}]}
|
||||
{"ts": "2026-06-23T09:00:13.593176+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18820, "qty": 325, "proceeds": 6104573, "entry_price": 19160, "pnl": -123361, "pnl_pct": -1.77, "hold_from": "2026-06-19T09:02:06.463339+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,710)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,260"}, {"label": "추세(20일선)", "ok": false, "detail": "18,840"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -318 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,528"}]}
|
||||
{"ts": "2026-06-23T12:04:04.273308+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 117700, "qty": 38, "proceeds": 4463878, "entry_price": 130900, "pnl": -511068, "pnl_pct": -10.08, "hold_from": "2026-06-17T11:15:02.413026+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,039 (현재 117,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 150,191"}, {"label": "추세(20일선)", "ok": false, "detail": "118,130"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +332 · 기 -364"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 134,300"}]}
|
||||
{"ts": "2026-06-24T09:04:06.149002+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 156700, "qty": 13, "cost": 2037406, "path": "pullback", "reason": "눌림목 지정가 165,075 도달", "stop": 120251, "target": 211374, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "156,200 vs 121,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "143,260 / 121,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "143,260 / 121,703"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +210 · 기 +143 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.83% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "2,860,073 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "5.83% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 165,075 (현재 156,200)"}]}
|
||||
{"ts": "2026-06-24T09:12:05.785677+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 17270, "qty": 150, "cost": 2590889, "path": "pullback", "reason": "눌림목 지정가 17,366 도달", "stop": 13981, "target": 22203, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "17,280 vs 12,914"}, {"label": "정배열(5>20)", "ok": true, "detail": "16,364 / 12,914"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "16,364 / 11,500"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+21.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,740 · 기 -508 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.34% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": false, "detail": "2,509,340 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": false, "detail": "2.34% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "65"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,366 (현재 17,280)"}]}
|
||||
{"ts": "2026-06-24T09:46:05.189379+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158200, "qty": 13, "cost": 2056908, "path": "pullback", "reason": "눌림목 지정가 158,264 도달", "stop": 120729, "target": 214407, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+56.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +41 · 기 +65 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+5%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.25% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "822,940 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "4.25% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,264 (현재 158,000)"}]}
|
||||
{"ts": "2026-06-24T11:12:06.280465+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 18260, "qty": 142, "cost": 2593309, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 13981, "target": 22203, "signals": [{"label": "손절선", "ok": true, "detail": "13,981 (현재 18,250)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,203"}, {"label": "추세(20일선)", "ok": true, "detail": "12,962"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,742 · 기 -508"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 18,094"}]}
|
||||
{"ts": "2026-06-25T09:00:29.074464+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 179100, "qty": 11, "cost": 1970396, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120729, "target": 214407, "signals": [{"label": "손절선", "ok": true, "detail": "120,729 (현재 178,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,407"}, {"label": "추세(20일선)", "ok": true, "detail": "137,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -56 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 167,275"}]}
|
||||
{"ts": "2026-06-25T09:04:06.196762+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 28900, "qty": 187, "cost": 5405111, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 26248, "target": 32878, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "28,850 vs 25,948"}, {"label": "정배열(5>20)", "ok": true, "detail": "26,110 / 25,948"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "26,110 / 25,216"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +1,577 · 기 -7 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.9/5"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.54% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": true, "detail": "5,629,873 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": true, "detail": "1.54% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
|
||||
{"ts": "2026-06-26T09:00:10.133337+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 50000, "qty": 35, "proceeds": 1746588, "entry_price": 62900, "pnl": -455243, "pnl_pct": -20.51, "hold_from": "2026-06-17T16:47:31.396571+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "48,962 (현재 51,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 83,807"}, {"label": "추세(20일선)", "ok": false, "detail": "52,268"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -311 · 기 -267"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 66,756"}]}
|
||||
{"ts": "2026-06-26T10:14:04.091073+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 166900, "qty": 12, "cost": 2003100, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 120251, "target": 211374, "signals": [{"label": "손절선", "ok": true, "detail": "120,251 (현재 166,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,374"}, {"label": "추세(20일선)", "ok": true, "detail": "122,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -126 · 기 +320"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,659"}]}
|
||||
{"ts": "2026-06-29T11:36:01.294138+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 745000, "qty": 3, "cost": 2235335, "path": "pullback", "reason": "눌림목 지정가 748,914 도달", "stop": 612829, "target": 943257, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "744,000 vs 676,650"}, {"label": "정배열(5>20)", "ok": true, "detail": "766,800 / 676,650"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "766,800 / 530,600"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -194 · 기 +152 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+8%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.35% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": true, "detail": "977,966 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": true, "detail": "1.35% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 748,914 (현재 744,000)"}]}
|
||||
{"ts": "2026-06-29T14:18:01.514472+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 778000, "qty": 3, "cost": 2334350, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 612829, "target": 943257, "signals": [{"label": "손절선", "ok": true, "detail": "612,829 (현재 779,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 943,257"}, {"label": "추세(20일선)", "ok": true, "detail": "678,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -200 · 기 +143"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 778,043"}]}
|
||||
{"ts": "2026-06-30T09:00:11.093487+09:00", "side": "BUY", "code": "403870", "name": "HPSP", "price": 55300, "qty": 41, "cost": 2267640, "path": "pullback", "reason": "눌림목 지정가 63,981 도달", "stop": 43200, "target": 73450, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "53,700 vs 52,402"}, {"label": "정배열(5>20)", "ok": true, "detail": "58,060 / 52,402"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "58,060 / 49,679"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+12.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +222 · 기 -821 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+28%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 5.97% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 71,500"}, {"label": "거래량 급증", "ok": false, "detail": "827 (환산) vs 평균 4,912,598"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 5.97%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 63,981 (현재 53,700)"}]}
|
||||
{"ts": "2026-07-01T09:06:03.242428+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 357500, "qty": 11, "cost": 3933090, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 314220, "target": 422420, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "357,000 vs 296,975"}, {"label": "정배열(5>20)", "ok": true, "detail": "317,600 / 296,975"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "317,600 / 305,700"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+32.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -75 · 기 +221 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.89% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "196,247 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "1.89% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-01T09:24:02.341813+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 372000, "qty": 11, "cost": 4092614, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 314220, "target": 422420, "signals": [{"label": "손절선", "ok": true, "detail": "314,220 (현재 372,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 422,420"}, {"label": "추세(20일선)", "ok": true, "detail": "297,725"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -75 · 기 +221"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 368,499"}]}
|
||||
{"ts": "2026-07-01T09:46:03.131564+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 118200, "qty": 53, "cost": 6265540, "path": "pullback", "reason": "눌림목 지정가 122,286 도달", "stop": 111000, "target": 129000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "118,200 vs 118,155"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,240 / 118,155"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,240 / 118,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +55 · 기 -166 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "969,420 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,286 (현재 118,200)"}]}
|
||||
{"ts": "2026-07-01T11:06:02.383642+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 212000, "qty": 24, "proceeds": 5078078, "entry_price": 167779, "pnl": 1050774, "pnl_pct": 26.36, "hold_from": "2026-06-24T09:46:05.189377+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "213,193 (현재 213,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "139,065"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -229 · 기 +300"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-02T10:18:03.879326+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1985000, "qty": 3, "cost": 5955893, "path": "pullback", "reason": "눌림목 지정가 1,994,011 도달", "stop": 1901000, "target": 2111000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,982,000 vs 1,967,800"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,038,800 / 1,967,800"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,038,800 / 1,295,483"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +337 · 기 +193 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.19% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": true, "detail": "3,133,469 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": true, "detail": "4.19% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,994,011 (현재 1,982,000)"}]}
|
||||
{"ts": "2026-07-02T10:18:03.879709+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 122200, "qty": 51, "cost": 6233135, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 129000, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 122,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,000"}, {"label": "추세(20일선)", "ok": true, "detail": "118,345"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +22 · 기 -44"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 121,743"}]}
|
||||
{"ts": "2026-07-02T11:04:07.669466+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 29600, "qty": 183, "cost": 5417613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 26248, "target": 32878, "signals": [{"label": "손절선", "ok": true, "detail": "26,248 (현재 29,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 32,878"}, {"label": "추세(20일선)", "ok": true, "detail": "25,985"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -206 · 기 +1,008"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 29,586"}]}
|
||||
{"ts": "2026-07-03T09:00:13.858285+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1895000, "qty": 3, "proceeds": 5673914, "entry_price": 1985000, "pnl": -281979, "pnl_pct": -4.53, "hold_from": "2026-07-02T10:18:03.879324+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,894,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,111,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,400"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +132 · 기 +129"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,084,495"}]}
|
||||
{"ts": "2026-07-03T09:04:01.699572+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 14370, "qty": 292, "proceeds": 4187858, "entry_price": 17751, "pnl": -996340, "pnl_pct": -19.05, "hold_from": "2026-06-24T09:12:05.785674+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "14,457 (현재 14,390)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,693"}, {"label": "추세(20일선)", "ok": true, "detail": "12,769"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,591 · 기 +253"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T09:28:01.669535+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 125700, "qty": 25, "proceeds": 3136372, "entry_price": 161596, "pnl": -904134, "pnl_pct": -22.21, "hold_from": "2026-06-24T09:04:06.149001+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "125,761 (현재 125,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,349"}, {"label": "추세(20일선)", "ok": true, "detail": "120,125"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +674 · 기 -2,170"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-03T10:24:02.801848+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19040, "qty": 318, "cost": 6055628, "path": "pullback", "reason": "눌림목 지정가 20,004 도달", "stop": 17760, "target": 20960, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,030 vs 18,856"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,592 / 18,856"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,592 / 19,359"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+2.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -35 · 기 +168 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "619,193 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.54% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,004 (현재 19,030)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.853391+09:00", "side": "BUY", "code": "009150", "name": "삼성전기", "price": 1993000, "qty": 3, "cost": 5979897, "path": "pullback", "reason": "눌림목 지정가 1,995,439 도달", "stop": 1901000, "target": 2131000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,975,000 vs 1,967,450"}, {"label": "정배열(5>20)", "ok": true, "detail": "2,037,400 / 1,967,450"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "2,037,400 / 1,295,367"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +151 · 기 +57 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+9%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.82% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 2,417,000"}, {"label": "거래량 급증", "ok": false, "detail": "615,080 (환산) vs 평균 1,312,239"}, {"label": "회전율 급증", "ok": false, "detail": "0.82% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,995,439 (현재 1,975,000)"}]}
|
||||
{"ts": "2026-07-06T09:00:11.855830+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 130600, "qty": 13, "cost": 1698055, "path": "pullback", "reason": "눌림목 지정가 164,068 도달", "stop": 96000, "target": 182500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "133,100 vs 120,495"}, {"label": "정배열(5>20)", "ok": true, "detail": "138,640 / 120,495"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "138,640 / 121,318"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +782 · 기 -1,979 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+31%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.01% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": false, "detail": "4,080 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": false, "detail": "0.01% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 164,068 (현재 133,100)"}]}
|
||||
{"ts": "2026-07-06T09:46:01.678190+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 320500, "qty": 22, "proceeds": 7037251, "entry_price": 364750, "pnl": -988453, "pnl_pct": -12.13, "hold_from": "2026-07-01T09:06:03.242427+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "320,756 (현재 320,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 430,741"}, {"label": "추세(20일선)", "ok": true, "detail": "295,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +227"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-06T09:48:02.508738+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13270, "qty": 165, "cost": 2189878, "path": "pullback", "reason": "눌림목 지정가 17,049 도달", "stop": 10360, "target": 17635, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,260 vs 12,712"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,560 / 12,712"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,560 / 11,433"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,226 · 기 +134 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "12.27% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "13,156,373 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "12.27% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 17,049 (현재 13,260)"}]}
|
||||
{"ts": "2026-07-06T10:06:02.828319+09:00", "side": "SELL", "code": "009150", "name": "삼성전기", "price": 1900000, "qty": 3, "proceeds": 5688885, "entry_price": 1993000, "pnl": -291012, "pnl_pct": -4.67, "hold_from": "2026-07-06T09:00:11.853382+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "1,901,000 (현재 1,901,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 2,131,000"}, {"label": "추세(20일선)", "ok": false, "detail": "1,963,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +135 · 기 +46"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 2,089,780"}]}
|
||||
{"ts": "2026-07-07T09:12:07.295107+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 155900, "qty": 12, "cost": 1871081, "path": "pullback", "reason": "눌림목 지정가 158,314 도달", "stop": 118529, "target": 211957, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "155,800 vs 136,205"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,800 / 136,205"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,800 / 99,713"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 -197 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+14%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.33% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "645,567 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "3.33% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,314 (현재 155,800)"}]}
|
||||
{"ts": "2026-07-07T09:48:07.792188+09:00", "side": "SELL", "code": "403870", "name": "HPSP", "price": 43000, "qty": 41, "proceeds": 1759562, "entry_price": 55300, "pnl": -508078, "pnl_pct": -22.24, "hold_from": "2026-06-30T09:00:11.093478+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,200 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 73,450"}, {"label": "추세(20일선)", "ok": false, "detail": "51,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +1,424 · 기 -5,706"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 59,449"}]}
|
||||
{"ts": "2026-07-07T10:30:07.388508+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 628000, "qty": 6, "proceeds": 3760652, "entry_price": 761500, "pnl": -809033, "pnl_pct": -17.53, "hold_from": "2026-06-29T11:36:01.294137+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "629,329 (현재 628,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 959,757"}, {"label": "추세(20일선)", "ok": false, "detail": "670,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -58 · 기 +6"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-07T12:02:08.267102+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 12230, "qty": 165, "proceeds": 2014015, "entry_price": 13270, "pnl": -175863, "pnl_pct": -7.84, "hold_from": "2026-07-06T09:48:02.508720+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 12,230)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,635"}, {"label": "추세(20일선)", "ok": false, "detail": "12,661"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -1,558 · 기 -4"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,272"}]}
|
||||
{"ts": "2026-07-07T14:10:26.687582+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 177000, "qty": 11, "cost": 1947292, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 118529, "target": 211957, "signals": [{"label": "손절선", "ok": true, "detail": "118,529 (현재 177,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 211,957"}, {"label": "추세(20일선)", "ok": true, "detail": "134,320"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +152 · 기 -281"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 165,142"}]}
|
||||
{"ts": "2026-07-07T14:10:29.432913+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 20750, "qty": 291, "cost": 6039156, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 20960, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,960"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +156 · 기 +113"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,358"}]}
|
||||
{"ts": "2026-07-08T09:00:20.636622+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 108300, "qty": 13, "proceeds": 1405155, "entry_price": 130600, "pnl": -292900, "pnl_pct": -17.08, "hold_from": "2026-07-06T09:00:11.855821+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "166,450 (현재 112,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": false, "detail": "119,475"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +243 · 기 -857"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-08T09:48:01.897845+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 161100, "qty": 36, "cost": 5800470, "path": "pullback", "reason": "눌림목 지정가 168,676 도달", "stop": 158000, "target": 165750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "161,600 vs 149,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,960 / 149,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,960 / 113,252"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+77.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +198 · 기 -309 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+11%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.83% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "1,110,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.83% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,676 (현재 161,600)"}]}
|
||||
{"ts": "2026-07-08T10:26:01.992536+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157600, "qty": 36, "proceeds": 5662536, "entry_price": 161100, "pnl": -137933, "pnl_pct": -2.17, "hold_from": "2026-07-08T09:48:01.897844+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 158,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 165,750"}, {"label": "추세(20일선)", "ok": true, "detail": "149,690"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +198 · 기 -312"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 170,862"}]}
|
||||
{"ts": "2026-07-09T09:02:04.491859+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 158300, "qty": 36, "cost": 5699655, "path": "pullback", "reason": "눌림목 지정가 168,455 도달", "stop": 158000, "target": 158750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,200 vs 149,700"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,280 / 149,700"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,280 / 113,195"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+81.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +296 · 기 -306 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.72% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,233 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.72% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 168,455 (현재 158,200)"}]}
|
||||
{"ts": "2026-07-09T09:12:02.533043+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 156900, "qty": 36, "proceeds": 5637386, "entry_price": 158300, "pnl": -62269, "pnl_pct": -0.88, "hold_from": "2026-07-09T09:02:04.491858+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 156,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,635"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +296 · 기 -306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-09T09:36:03.483809+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 132000, "qty": 31, "cost": 4092614, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117015, "target": 154477, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "131,900 vs 108,920"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,560 / 108,920"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,560 / 113,228"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -184 · 기 +964 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.91% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "1,026,867 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.91% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-09T12:12:04.882801+09:00", "side": "SELL", "code": "003490", "name": "대한항공", "price": 26500, "qty": 370, "proceeds": 9785880, "entry_price": 29246, "pnl": -1036843, "pnl_pct": -9.39, "hold_from": "2026-06-25T09:04:06.196759+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "26,502 (현재 26,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 33,363"}, {"label": "추세(20일선)", "ok": true, "detail": "25,830"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,444 · 기 +2,767"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-10T09:00:14.370382+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 164000, "qty": 35, "cost": 5740861, "path": "pullback", "reason": "눌림목 지정가 169,105 도달", "stop": 158000, "target": 173000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "162,200 vs 149,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "170,080 / 149,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "170,080 / 113,262"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+85.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +225 · 기 -178 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+10%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "746,107 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "56"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,105 (현재 162,200)"}]}
|
||||
{"ts": "2026-07-10T09:28:02.648741+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 185900, "qty": 24, "cost": 4462269, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 166448, "target": 215077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "185,600 vs 159,890"}, {"label": "정배열(5>20)", "ok": true, "detail": "159,900 / 159,890"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "159,900 / 157,368"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+26.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,310 · 기 +1,527 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+16%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.06% (환산) vs 평균 0.46% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 182,700"}, {"label": "거래량 급증", "ok": true, "detail": "3,715,113 (환산) vs 평균 1,640,325"}, {"label": "회전율 급증", "ok": true, "detail": "1.06% (환산) vs 평균 0.46%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-10T09:46:11.500206+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 12830, "qty": 189, "cost": 2425234, "path": "pullback", "reason": "눌림목 지정가 16,984 도달", "stop": 10360, "target": 16535, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,820 vs 12,690"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,472 / 12,690"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,472 / 11,425"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +228 · 기 +229 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+56%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.75% (환산) vs 평균 4.77% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 20,050"}, {"label": "거래량 급증", "ok": true, "detail": "10,460,473 (환산) vs 평균 5,114,125"}, {"label": "회전율 급증", "ok": true, "detail": "9.75% (환산) vs 평균 4.77%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 16,984 (현재 12,820)"}]}
|
||||
{"ts": "2026-07-10T11:16:02.501268+09:00", "side": "BUY", "code": "093370", "name": "후성", "price": 13850, "qty": 175, "cost": 2424114, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10360, "target": 16535, "signals": [{"label": "손절선", "ok": true, "detail": "10,360 (현재 13,850)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,535"}, {"label": "추세(20일선)", "ok": true, "detail": "12,742"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +210 · 기 +239"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,843"}]}
|
||||
{"ts": "2026-07-10T12:14:02.697000+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 126200, "qty": 15, "cost": 1893284, "path": "pullback", "reason": "눌림목 지정가 162,268 도달", "stop": 96000, "target": 171500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "126,200 vs 120,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "137,260 / 120,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "137,260 / 121,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+17.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +483 · 기 -241 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "7.53% (환산) vs 평균 2.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 183,300"}, {"label": "거래량 급증", "ok": true, "detail": "3,695,762 (환산) vs 평균 1,234,482"}, {"label": "회전율 급증", "ok": true, "detail": "7.53% (환산) vs 평균 2.51%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 162,268 (현재 126,200)"}]}
|
||||
{"ts": "2026-07-13T09:00:12.613767+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136900, "qty": 29, "cost": 3970696, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117015, "target": 154477, "signals": [{"label": "손절선", "ok": true, "detail": "117,015 (현재 136,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,477"}, {"label": "추세(20일선)", "ok": true, "detail": "109,140"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -64 · 기 +919"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,864"}]}
|
||||
{"ts": "2026-07-13T09:26:03.435229+09:00", "side": "BUY", "code": "240810", "name": "원익IPS", "price": 139100, "qty": 14, "cost": 1947692, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 96000, "target": 171500, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 139,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 171,500"}, {"label": "추세(20일선)", "ok": true, "detail": "120,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -213 · 기 +772"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,162"}]}
|
||||
{"ts": "2026-07-13T09:36:02.298797+09:00", "side": "BUY", "code": "105560", "name": "KB금융", "price": 191000, "qty": 23, "cost": 4393659, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 166448, "target": 215077, "signals": [{"label": "손절선", "ok": true, "detail": "166,448 (현재 191,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,077"}, {"label": "추세(20일선)", "ok": true, "detail": "160,160"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -867 · 기 +1,393"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 190,952"}]}
|
||||
{"ts": "2026-07-13T12:44:04.379393+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 187900, "qty": 35, "proceeds": 6563676, "entry_price": 164000, "pnl": 822815, "pnl_pct": 14.57, "hold_from": "2026-07-10T09:00:14.370375+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "189,133 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "151,185"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -254 · 기 +457"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-15T14:32:01.909939+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18570, "qty": 609, "proceeds": 11287077, "entry_price": 19857, "pnl": -807707, "pnl_pct": -6.48, "hold_from": "2026-07-03T10:24:02.801847+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "18,585 (현재 18,570)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,765"}, {"label": "추세(20일선)", "ok": false, "detail": "18,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +240"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-16T09:00:12.739588+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 209000, "qty": 23, "proceeds": 4797626, "entry_price": 165991, "pnl": 979254, "pnl_pct": 25.91, "hold_from": "2026-07-07T09:12:07.295106+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "210,764 (현재 207,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "138,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -799 · 기 +891"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:28:02.341884+09:00", "side": "SELL", "code": "093370", "name": "후성", "price": 10310, "qty": 364, "proceeds": 3745522, "entry_price": 13320, "pnl": -1103825, "pnl_pct": -22.6, "hold_from": "2026-07-10T09:46:11.500205+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "10,360 (현재 10,310)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,761"}, {"label": "추세(20일선)", "ok": false, "detail": "14,755"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -887 · 기 +515"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:46:02.303249+09:00", "side": "SELL", "code": "086790", "name": "하나금융지주", "price": 131800, "qty": 104, "proceeds": 13680471, "entry_price": 120162, "pnl": 1181796, "pnl_pct": 9.69, "hold_from": "2026-07-01T09:46:03.131562+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "131,911 (현재 131,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "118,840"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +424"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-20T12:50:02.312055+09:00", "side": "SELL", "code": "105560", "name": "KB금융", "price": 167800, "qty": 47, "proceeds": 7871221, "entry_price": 188396, "pnl": -984707, "pnl_pct": -10.93, "hold_from": "2026-07-10T09:28:02.648740+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "168,187 (현재 167,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 218,709"}, {"label": "추세(20일선)", "ok": true, "detail": "159,000"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -385 · 기 +288"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-21T10:12:01.069761+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 167000, "qty": 35, "cost": 5845877, "path": "pullback", "reason": "눌림목 지정가 169,640 도달", "stop": 158000, "target": 180500, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,000 vs 150,140"}, {"label": "정배열(5>20)", "ok": true, "detail": "171,040 / 150,140"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "171,040 / 113,342"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+92.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -534 · 기 +316 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+7%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "3.29% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "951,819 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "3.29% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "58"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,640 (현재 167,000)"}]}
|
||||
{"ts": "2026-07-21T12:06:01.196091+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 344500, "qty": 11, "cost": 3790068, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 303577, "target": 405884, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "344,500 vs 296,350"}, {"label": "정배열(5>20)", "ok": true, "detail": "315,100 / 296,350"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "315,100 / 305,492"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +1 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.38% (환산) vs 평균 0.93% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 334,500"}, {"label": "거래량 급증", "ok": true, "detail": "247,158 (환산) vs 평균 96,436"}, {"label": "회전율 급증", "ok": true, "detail": "2.38% (환산) vs 평균 0.93%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
{"ts": "2026-07-22T09:00:10.175022+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 177600, "qty": 32, "cost": 5684052, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 158000, "target": 180500, "signals": [{"label": "손절선", "ok": true, "detail": "158,000 (현재 178,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 180,500"}, {"label": "추세(20일선)", "ok": true, "detail": "150,715"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -377 · 기 +151"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,894"}]}
|
||||
{"ts": "2026-07-22T09:04:01.842572+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 99200, "qty": 59, "cost": 5853678, "path": "pullback", "reason": "눌림목 지정가 98,848 도달", "stop": 92100, "target": 109850, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "98,800 vs 98,505"}, {"label": "정배열(5>20)", "ok": true, "detail": "107,060 / 98,505"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "107,060 / 91,913"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +29 · 기 -34 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.16% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "272,433 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "1.16% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 98,848 (현재 98,800)"}]}
|
||||
{"ts": "2026-07-22T12:12:00.763311+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157300, "qty": 67, "proceeds": 10518549, "entry_price": 172063, "pnl": -1011380, "pnl_pct": -8.58, "hold_from": "2026-07-21T10:12:01.069760+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 193,157"}, {"label": "추세(20일선)", "ok": true, "detail": "149,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -407 · 기 +141"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-22T14:18:05.449230+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14030, "qty": 156, "cost": 2189008, "path": "pullback", "reason": "눌림목 지정가 14,023 도달", "stop": 11077, "target": 18460, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,020 vs 12,776"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,552 / 12,776"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,552 / 13,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -1,005 · 기 +1,723 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.97% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "585,754 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 14,023 (현재 14,020)"}]}
|
||||
{"ts": "2026-07-22T15:04:01.021107+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 158100, "qty": 12, "cost": 1897485, "path": "pullback", "reason": "눌림목 지정가 158,107 도달", "stop": 120314, "target": 214778, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,000 vs 136,315"}, {"label": "정배열(5>20)", "ok": true, "detail": "172,240 / 136,315"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "172,240 / 99,750"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -311 · 기 +22 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "5.02% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "971,360 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "5.02% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 158,107 (현재 158,000)"}]}
|
||||
{"ts": "2026-07-23T09:00:26.010701+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 160100, "qty": 35, "cost": 5604341, "path": "pullback", "reason": "눌림목 지정가 169,062 도달", "stop": 158000, "target": 163250, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "158,100 vs 149,695"}, {"label": "정배열(5>20)", "ok": true, "detail": "169,260 / 149,695"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "169,260 / 113,193"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+76.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -162 · 기 +37 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.05% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "303,687 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.05% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "55"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 169,062 (현재 158,100)"}]}
|
||||
{"ts": "2026-07-23T09:32:04.436337+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 157800, "qty": 35, "proceeds": 5512230, "entry_price": 160100, "pnl": -92110, "pnl_pct": -1.44, "hold_from": "2026-07-23T09:00:26.010694+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "158,000 (현재 157,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "149,685"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -162 · 기 +37"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-23T09:44:04.313306+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18850, "qty": 306, "cost": 5768965, "path": "pullback", "reason": "눌림목 지정가 20,001 도달", "stop": 17760, "target": 20485, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "18,850 vs 18,847"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,556 / 18,847"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,556 / 19,356"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +6 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+34%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "388,767 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,001 (현재 18,850)"}]}
|
||||
{"ts": "2026-07-23T09:50:01.539143+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 88200, "qty": 43, "cost": 3793169, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 77564, "target": 104155, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "88,200 vs 75,070"}, {"label": "정배열(5>20)", "ok": true, "detail": "83,000 / 75,070"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "83,000 / 75,058"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -150 · 기 +299 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.85% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "785,587 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.85% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-23T12:18:01.568808+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 103100, "qty": 57, "cost": 5877582, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 92100, "target": 109850, "signals": [{"label": "손절선", "ok": true, "detail": "92,100 (현재 103,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 109,850"}, {"label": "추세(20일선)", "ok": true, "detail": "98,720"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +222 · 기 -227"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 103,029"}]}
|
||||
{"ts": "2026-07-23T12:22:02.620162+09:00", "side": "BUY", "code": "214450", "name": "파마리서치", "price": 356000, "qty": 11, "cost": 3916587, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 303577, "target": 405884, "signals": [{"label": "손절선", "ok": true, "detail": "303,577 (현재 356,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 405,884"}, {"label": "추세(20일선)", "ok": true, "detail": "296,925"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +6 · 기 +26"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 355,034"}]}
|
||||
{"ts": "2026-07-23T12:54:04.521033+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 90900, "qty": 42, "cost": 3818373, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 77564, "target": 104155, "signals": [{"label": "손절선", "ok": true, "detail": "77,564 (현재 91,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,155"}, {"label": "추세(20일선)", "ok": true, "detail": "75,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -169 · 기 +311"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,945"}]}
|
||||
{"ts": "2026-07-24T09:00:09.216831+09:00", "side": "SELL", "code": "240810", "name": "원익IPS", "price": 111800, "qty": 29, "proceeds": 3235878, "entry_price": 132428, "pnl": -605098, "pnl_pct": -15.58, "hold_from": "2026-07-10T12:14:02.696999+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "96,000 (현재 113,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 187,069"}, {"label": "추세(20일선)", "ok": false, "detail": "119,505"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -480 · 기 -206"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-24T09:00:09.218482+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 306, "proceeds": 5720204, "entry_price": 18850, "pnl": -48761, "pnl_pct": -0.64, "hold_from": "2026-07-23T09:44:04.313305+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,730)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,485"}, {"label": "추세(20일선)", "ok": false, "detail": "18,841"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -5 · 기 -5"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,219"}]}
|
||||
{"ts": "2026-07-24T09:28:04.972694+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14510, "qty": 151, "cost": 2191339, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11077, "target": 18460, "signals": [{"label": "손절선", "ok": true, "detail": "11,077 (현재 15,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,460"}, {"label": "추세(20일선)", "ok": true, "detail": "12,845"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -857 · 기 +1,172"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,791"}]}
|
||||
{"ts": "2026-07-27T09:02:06.260444+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19100, "qty": 304, "cost": 5807271, "path": "pullback", "reason": "눌림목 지정가 20,032 도달", "stop": 17760, "target": 21110, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,070 vs 18,858"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,600 / 18,858"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,600 / 19,360"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+16.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +101 · 기 -3 (천주)"}, {"label": "투자의견", "ok": true, "detail": "4.0/5"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.13% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "146,760 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.13% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,032 (현재 19,070)"}]}
|
||||
{"ts": "2026-07-27T09:02:06.260602+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7470, "qty": 421, "cost": 3145342, "path": "pullback", "reason": "눌림목 지정가 7,910 도달", "stop": 6370, "target": 9119, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "7,470 vs 4,876"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,452 / 4,876"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,452 / 4,889"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+82.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "49,327 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "0.79% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "74"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,910 (현재 7,470)"}]}
|
||||
{"ts": "2026-07-27T09:08:02.112215+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 7910, "qty": 398, "cost": 3148652, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 6370, "target": 9119, "signals": [{"label": "손절선", "ok": true, "detail": "6,370 (현재 7,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,119"}, {"label": "추세(20일선)", "ok": true, "detail": "4,897"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +49 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,747"}]}
|
||||
{"ts": "2026-07-28T10:08:02.795319+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 11170, "qty": 307, "proceeds": 3422503, "entry_price": 14266, "pnl": -957844, "pnl_pct": -21.7, "hold_from": "2026-07-22T14:18:05.449229+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "11,223 (현재 11,220)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,831"}, {"label": "추세(20일선)", "ok": false, "detail": "12,636"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -64"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T11:22:00.772935+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6630, "qty": 819, "proceeds": 5419382, "entry_price": 7684, "pnl": -874612, "pnl_pct": -13.71, "hold_from": "2026-07-27T09:02:06.260601+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "6,577 (현재 6,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,344"}, {"label": "추세(20일선)", "ok": true, "detail": "4,821"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +96 · 기 +0"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-28T11:34:01.995508+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 120300, "qty": 12, "proceeds": 1440785, "entry_price": 158100, "pnl": -456700, "pnl_pct": -23.91, "hold_from": "2026-07-22T15:04:01.021105+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "120,314 (현재 120,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 214,778"}, {"label": "추세(20일선)", "ok": false, "detail": "134,430"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +285 · 기 -563"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 168,711"}]}
|
||||
{"ts": "2026-07-29T09:02:02.261523+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6540, "qty": 358, "cost": 2341671, "path": "pullback", "reason": "눌림목 지정가 7,837 도달", "stop": 5295, "target": 8408, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,540 vs 4,829"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,266 / 4,829"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,266 / 4,873"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+70.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +188 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.87% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "116,047 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.87% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "63"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,837 (현재 6,540)"}]}
|
||||
{"ts": "2026-07-29T09:02:02.261877+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 117900, "qty": 47, "cost": 5542131, "path": "pullback", "reason": "눌림목 지정가 118,115 도달", "stop": 111200, "target": 127950, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,800 vs 113,445"}, {"label": "정배열(5>20)", "ok": true, "detail": "117,020 / 113,445"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,020 / 109,982"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+45.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +39 · 기 +307 (천주)"}, {"label": "투자의견", "ok": true, "detail": "3.8/5"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.03% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "44,660 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.03% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "57"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 118,115 (현재 117,800)"}]}
|
||||
{"ts": "2026-07-29T09:16:04.491611+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120500, "qty": 46, "cost": 5543831, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 127950, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 120,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 127,950"}, {"label": "추세(20일선)", "ok": true, "detail": "113,580"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +39 · 기 +307"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 120,492"}]}
|
||||
{"ts": "2026-07-29T09:24:10.036116+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 18950, "qty": 307, "cost": 5818523, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 17760, "target": 21110, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 20,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,110"}, {"label": "추세(20일선)", "ok": true, "detail": "18,884"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +99 · 기 +138"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,418"}]}
|
||||
{"ts": "2026-07-29T09:24:10.036308+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 128600, "qty": 60, "proceeds": 7700954, "entry_price": 134368, "pnl": -362356, "pnl_pct": -4.29, "hold_from": "2026-07-09T09:36:03.483808+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "118,912 (현재 116,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 157,553"}, {"label": "추세(20일선)", "ok": true, "detail": "107,870"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +43 · 기 +245"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:26:01.927146+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 6610, "qty": 358, "proceeds": 2361766, "entry_price": 6540, "pnl": 20094, "pnl_pct": 1.07, "hold_from": "2026-07-29T09:02:02.261522+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "7,526 (현재 6,610)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "4,833"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +188 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-29T09:28:01.408657+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6390, "qty": 854, "cost": 5457879, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5867, "target": 7174, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,380 vs 5,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,742 / 5,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,742 / 5,622"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +73 · 기 -3 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.62% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "134,413 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.62% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "73"}]}
|
||||
{"ts": "2026-07-29T13:34:03.613777+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5860, "qty": 854, "proceeds": 4994681, "entry_price": 6390, "pnl": -463197, "pnl_pct": -8.29, "hold_from": "2026-07-29T09:28:01.408655+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,867 (현재 5,860)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,174"}, {"label": "추세(20일선)", "ok": true, "detail": "5,332"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +73 · 기 -3"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,525"}]}
|
||||
{"ts": "2026-07-30T09:04:07.527582+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 43, "cost": 5216682, "path": "pullback", "reason": "눌림목 지정가 122,665 도달", "stop": 111000, "target": 136750, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "121,200 vs 118,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,840 / 118,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 122,665 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:07.528033+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 332, "cost": 2035465, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 8135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.972281+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 41, "cost": 5133970, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 136750, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,750"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.573214+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 30, "cost": 3954593, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T11:58:08.476701+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 116, "proceeds": 10616457, "entry_price": 101116, "pnl": -1114802, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.842571+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,641"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.680660+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 310, "cost": 2030805, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.681033+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 85, "proceeds": 6591621, "entry_price": 89534, "pnl": -1019920, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.539141+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,555 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,003"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-03T09:44:10.630065+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6120, "qty": 878, "cost": 5374166, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5629, "target": 6857, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 5,345"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,690 / 5,345"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,690 / 5,618"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+31.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +80 · 기 +5 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.61% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "132,260 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.61% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-08-03T12:00:12.472629+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 12910, "qty": 273, "cost": 3524959, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 11314, "target": 15304, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "12,930 vs 11,922"}, {"label": "정배열(5>20)", "ok": true, "detail": "12,138 / 11,922"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "12,138 / 11,924"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+27.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +7 · 기 +10 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+74%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.72% (환산) vs 평균 0.34% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 12,870"}, {"label": "거래량 급증", "ok": true, "detail": "208,994 (환산) vs 평균 99,303"}, {"label": "회전율 급증", "ok": true, "detail": "0.72% (환산) vs 평균 0.34%"}, {"label": "RSI", "ok": true, "detail": "63"}]}
|
||||
{"ts": "2026-08-03T12:02:10.409213+09:00", "side": "BUY", "code": "194370", "name": "제이에스코퍼레이션", "price": 13420, "qty": 262, "cost": 3516567, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 11314, "target": 15304, "signals": [{"label": "손절선", "ok": true, "detail": "11,314 (현재 13,450)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 15,304"}, {"label": "추세(20일선)", "ok": true, "detail": "11,948"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +7 · 기 +10"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,339"}]}
|
||||
{"ts": "2026-08-05T09:08:12.255231+09:00", "side": "SELL", "code": "090850", "name": "현대이지웰", "price": 5580, "qty": 878, "proceeds": 4889686, "entry_price": 6120, "pnl": -484480, "pnl_pct": -8.82, "hold_from": "2026-08-03T09:44:10.630062+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "5,629 (현재 5,580)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,857"}, {"label": "추세(20일선)", "ok": true, "detail": "5,318"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +14 · 기 -2"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,239"}]}
|
||||
{"ts": "2026-08-05T09:08:12.255588+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13110, "qty": 158, "cost": 2071691, "path": "pullback", "reason": "눌림목 지정가 13,947 도달", "stop": 10340, "target": 17265, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,110 vs 12,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,370 / 12,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,370 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -72 · 기 +134 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "308,907 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.51% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,947 (현재 13,110)"}]}
|
||||
{"ts": "2026-08-05T09:42:12.394579+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13940, "qty": 148, "cost": 2063429, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17265, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,930)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,265"}, {"label": "추세(20일선)", "ok": true, "detail": "12,772"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -72 · 기 +134"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,887"}]}
|
||||
{"ts": "2026-08-06T09:00:22.493715+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18730, "qty": 611, "proceeds": 11421714, "entry_price": 19025, "pnl": -204079, "pnl_pct": -1.55, "hold_from": "2026-07-27T09:02:06.260443+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,922"}, {"label": "추세(20일선)", "ok": false, "detail": "18,842"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -203 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-08-06T09:08:11.885943+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 136600, "qty": 12, "cost": 1639446, "path": "pullback", "reason": "눌림목 지정가 156,500 도달", "stop": 100700, "target": 190450, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "136,400 vs 135,235"}, {"label": "정배열(5>20)", "ok": true, "detail": "167,920 / 135,235"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "167,920 / 99,390"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -609 · 기 +419 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.58% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": false, "detail": "499,673 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": false, "detail": "2.58% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,500 (현재 136,400)"}]}
|
||||
{"ts": "2026-08-10T09:00:21.288242+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 136000, "qty": 29, "cost": 3944592, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116987, "target": 154020, "signals": [{"label": "손절선", "ok": true, "detail": "116,987 (현재 137,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,020"}, {"label": "추세(20일선)", "ok": true, "detail": "109,175"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -253 · 기 +225"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 135,714"}]}
|
||||
{"ts": "2026-08-10T13:04:18.294941+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 147100, "qty": 11, "cost": 1618343, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 100700, "target": 190450, "signals": [{"label": "손절선", "ok": true, "detail": "100,700 (현재 147,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 190,450"}, {"label": "추세(20일선)", "ok": true, "detail": "135,765"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -349 · 기 +177"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 146,939"}]}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user