auto: 일일 백업 2026-09-11 02:00

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hyowons
2026-09-11 02:00:03 +09:00
parent 92d0d96368
commit b4f510d1ad
188 changed files with 4782 additions and 3353 deletions
+9
View File
@@ -21,6 +21,8 @@ node_modules/
exec-approvals.json exec-approvals.json
update-check.json update-check.json
.claude/ .claude/
# 설정 저널 서명키 (2026.9.3 신규) — 32B 바이너리, 권한 600
config-journal-fingerprint.key
# 에이전트별 auth / 런타임 (auth-profiles, codex-home, 세션, inbox 메시지) # 에이전트별 auth / 런타임 (auth-profiles, codex-home, 세션, inbox 메시지)
/agents/*/agent/ /agents/*/agent/
@@ -60,6 +62,13 @@ update-check.json
/subagents/ /subagents/
/.playwright-mcp/ /.playwright-mcp/
# ----- 2026.9.3 업그레이드 산물 (런타임·마이그레이션 잔재) -----
# doctor 가 남기는 `<원본>.migrated.<hash>.<uuid>` 백업. 롤백용이라 파일은 두되 추적은 안 한다
*.migrated.*
/agent/
/session-sqlite-migration-runs/
**/session-sqlite-import-archive/
# 플러그인 · 플로우 · 태스크 런타임 # 플러그인 · 플로우 · 태스크 런타임
/flows/ /flows/
/tasks/ /tasks/
+20 -10
View File
File diff suppressed because one or more lines are too long
+105
View File
@@ -0,0 +1,105 @@
# 월간 점검 체크리스트 (코디)
매월 1일 헬스체크가 텔레그램으로 알린다. 관리자님이 코디 세션을 열고 "월간 점검 해줘"라고 하면 이 문서를 따른다.
**여기 있는 건 전부 "스크립트로는 못 잡는 것"이다.** 주기 잡이 죽었는지·결과가 stale 한지는 `scripts/health_check.py` 가 매일 본다(대상은 `TASKS.md` §4). 이 문서는 **바깥이 변해서 우리 쪽이 조용히 어긋나는** 종류만 다룬다 — 2026-09-10 점검에서 하드 실패는 0건인데 아래 유형이 4건 나왔다.
**원칙:** 점검은 조회만 한다. 고칠 게 나오면 관리자님께 보고하고 승인받은 것만 손댄다. 업그레이드·트리거 변경은 특히.
---
## 1. 모델 카탈로그 — deprecated·신규·단가
```bash
# 세 에이전트 라우팅 현황
for a in main stock budget; do echo "== $a"; ~/.local/bin/openclaw models list --agent $a | grep -E "default|fallback"; done
# 카탈로그의 status/replacedBy/cost (본체 업그레이드 때마다 바뀐다)
python3 -c "
import json
d=json.load(open('/opt/homebrew/lib/node_modules/openclaw/dist/extensions/openai/openclaw.plugin.json'))
for m in d['modelCatalog']['providers']['openai']['models']:
c=m.get('cost',{})
print(f\"{m['id']:22} {m.get('status','-'):11} →{m.get('replacedBy','-'):16} in {c.get('input','?')} / out {c.get('output','?')}\")"
```
- **deprecated 인데 쓰고 있는 모델**이 있는지가 핵심. 2026-09-10 에 `gpt-5.5`(primary)·`gpt-5.5-pro`(fallback#3) 둘 다 deprecated 인 걸 뒤늦게 발견해 정리했다
- ⚠️ **폴백 체인 전체가 과금 0 이어야 한다**(관리자님 요구) — 현재 `sol → terra → luna → openrouter/free`. 새 모델을 폴백·allow 에 넣을 땐 **구독(codex) 경로인지 실측**한다: `openclaw agent --model <id> -m ping` 후 trajectory 의 `modelApi` 가 `openai-chatgpt-responses` 면 구독이다. 카탈로그의 정적 제외 규칙만 보고 판단하면 틀린다(`gpt-5.4` 는 카탈로그에 있는데 은퇴했고, terra·luna 는 제외 규칙에 걸리는데 실제로는 된다)
- `modelPolicy.allow` 에 유료 모델이 없는지 확인한다 — 폴백 순서만으로는 수동 지정 과금을 못 막는다
- 신규 모델이 보이면 단가·codex 카탈로그 포함 여부를 먼저 본다. `gpt-6-astra` 를 왜 안 쓰기로 했는지는 `CLAUDE.md` **Key Configuration** 참조(다시 검토하기 전에 그 세 근거부터 확인)
## 2. OpenClaw 본체 버전
```bash
~/.local/bin/openclaw --version && npm view openclaw version # 현재 vs 최신
```
- **올릴지 말지는 관리자님 결정.** 올린다면 `CLAUDE.md` **Runtime** 의 함정 3종(node 24 필수 / npm 11 의 `--allow-scripts` / doctor 가 워크스페이스·cron 을 손댐)을 먼저 읽는다
- ⚠️ **업그레이드 후엔 "무엇이 조용히 죽었는지" 반드시 확인한다.** 2026.9.3 이 trajectory 를 파일에서 sqlite 로 옮겨 `codex_fallback_monitor` 가 예외 없이 '폴백 없음'만 반환하며 무력화됐다. 파일 경로·테이블·스키마에 의존하는 코드는 전부 재검증 대상
## 3. 외부 데이터 소스 생존
우리가 긁는 곳은 예고 없이 막힌다. **각 소스의 CLI 를 한 번씩 돌려 본다.**
```bash
cd ~/.openclaw/agents/stock/workspace
python3 scripts/holiday_sync.py --show | head -5 # nager (investing 은 이미 403)
python3 scripts/fomc_calendar_sync.py --list | head -5 # federalreserve.gov
python3 scripts/fnguide_client.py 005930 | head -5 # FnGuide
python3 scripts/wisereport_client.py 005930 | head -5 # WISEreport
python3 ~/.openclaw/workspace/scripts/youtube_briefing_digest.py latest us
python3 ~/.openclaw/workspace/scripts/youtube_briefing_digest.py latest behive
```
- ⚠️ **"실패해도 조용한" 소스가 위험하다.** `holiday_sync` 는 investing 403 이후 2개월간 stale 이었는데, 폴백(nager)이 있는데도 "investing 0건이면 저장 자체를 건너뛰는" 가드 때문에 아무 일도 안 했다. 주 소스가 죽었을 때 **폴백이 단독으로 설 수 있는지**를 본다
- 유튜브는 스크랩 구조(`lockupViewModel`)가 바뀌면 조용히 빈 결과가 된다 → 브리핑에서 시황 카드만 사라진다
## 4. 문서 드리프트 — TASKS.md·CLAUDE.md vs 실제
```bash
# plist 실제 스케줄 전수
cd ~/Library/LaunchAgents && for p in ai.openclaw.*.plist; do
echo "== $(basename $p .plist)"; plutil -p "$p" | grep -A6 StartCalendarInterval | head -8; done
~/.local/bin/openclaw cron list # cron 은 sqlite(state/openclaw.sqlite)
```
- `TASKS.md` §1·§2 의 트리거 표기와 대조. 2026-09-10 에 IPO 요일·시뮬 주기·자본금·sim-web 탭 수·cron ID 등 **9건이 어긋나** 있었다
- `TASKS.md` §4(헬스체크 표)의 **증거 파일이 여전히 "돌면 반드시 갱신되는" 것인지** 확인. 스크립트가 바뀌면 이 전제가 깨진다
- 문서에 없는 launchd 잡이 있는지도 본다 (2026-09-10 `nxt-probe-oneshot` 고아 발견 → 정리)
- ⚠️ **health-check 자신이 돌고 있는지 확인한다** — 감시자가 죽으면 알림도 같이 죽어서 아무 신호가 없다. `ls -la ~/.openclaw/logs/health-check.log` 의 mtime 이 어제 이후인지 본다
## 5. 자격증명·토큰 만료
```bash
cd ~/.openclaw/agents/stock/workspace && python3 scripts/kiwoom_client.py token # 키움
ls -la ~/.openclaw/credentials/
```
- 키움 REST 토큰, 텔레그램 봇(동결 이력 있음 — `getMyName` 까지 확인), 후잉 API, gog(Gmail/Calendar) 인증
- ⚠️ gog 는 **코디 셸에서 인증이 안 된다**(키체인 ACL). 검증은 `--list` 류 인증 불필요 CLI 로 하거나 launchd oneshot 경유
## 6. 코디 inbox
```bash
ls ~/.openclaw/agents/cody/inbox/incoming/ | wc -l
find ~/.openclaw/agents/cody/inbox/processed -mtime +7 | head # GC 대상
```
`CLAUDE.md` **Cody Inbox** 의 처리 흐름을 따른다. `processed/` 7일 초과분은 이때 정리한다.
## 7. 디스크·백업
```bash
du -sh ~/.openclaw/logs ~/.openclaw/state ~/.openclaw/agents/*/workspace/state
cd ~/.openclaw && git log -1 --format='%cd %s' --date=format:'%m-%d %H:%M'
```
- 로그 총량은 헬스체크가 매일 보지만(상한 200MB), **어느 파일이 커지고 있는지**는 사람이 봐야 판단이 된다
- git autopush 가 매일 02:00 도는지, `.gitignore` 로 빠진 시크릿·sqlite 의 별도 백업이 있는지
---
## 점검 후
`agents/cody/inbox/processed/` 에 리포트를 남기는 대신, **고친 게 있으면 `CLAUDE.md`·`TASKS.md` 에 그 사실과 근거를 적는다.** 다음 점검 때 같은 걸 다시 파헤치지 않도록 "왜 그렇게 뒀는지"를 남기는 게 이 워크스페이스의 방식이다.
+54 -11
View File
@@ -14,26 +14,31 @@
| **OpenClaw Gateway** | `openclaw gateway --port 18789` | launchd `ai.openclaw.gateway` (상시) | | **OpenClaw Gateway** | `openclaw gateway --port 18789` | launchd `ai.openclaw.gateway` (상시) |
| **비하이브 웹뷰** | `python3 ~/.openclaw/agents/stock/workspace/scripts/behive_web.py serve` | launchd `ai.openclaw.stock.behive-web` (상시) | | **비하이브 웹뷰** | `python3 ~/.openclaw/agents/stock/workspace/scripts/behive_web.py serve` | launchd `ai.openclaw.stock.behive-web` (상시) |
| **후잉 동기화** | `python3 ~/.openclaw/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py` | launchd `ai.openclaw.budget.whooing-sync` (매 15분). 매 사이클 끝에 **가희 잔액 리마인더·자동분개** 모듈(`gahee_reminder.run`)도 함께 호출 — 매월 25일 10:00 KST 이후 첫 사이클에서 가희님께 iMessage 1회 발신, 이후 답신 폴링 → 텍스트면 후잉 가희주머니 차액 자동 분개, 이미지면 텔레그램 알림만 | | **후잉 동기화** | `python3 ~/.openclaw/agents/budget/workspace/skills/whooing-sync/scripts/whooing_sync.py` | launchd `ai.openclaw.budget.whooing-sync` (매 15분). 매 사이클 끝에 **가희 잔액 리마인더·자동분개** 모듈(`gahee_reminder.run`)도 함께 호출 — 매월 25일 10:00 KST 이후 첫 사이클에서 가희님께 iMessage 1회 발신, 이후 답신 폴링 → 텍스트면 후잉 가희주머니 차액 자동 분개, 이미지면 텔레그램 알림만 |
| **주식 포트폴리오 스냅샷** | `python3 ~/.openclaw/agents/stock/workspace/scripts/stock_portfolio_report.py send --no-mail` | launchd `ai.openclaw.stock.briefing` (평일 20:10). **메일 발송 중지**(2026-08-12 관리자님 결정 — 메일 통수 축소). `--no-mail`은 휴장일 self-skip·실패 텔레그램 알림은 유지하고 메일만 건너뜀. 목적은 자산웹 '당일 평가손익' 기준값이 되는 스냅샷 확보. 리포트 본문을 눈으로 보려면 `run`(메일 없이 평문+`/tmp/stock_report_preview.html`) | | **주식 포트폴리오 스냅샷** | `python3 ~/.openclaw/agents/stock/workspace/scripts/stock_portfolio_report.py send --no-mail` | launchd `ai.openclaw.stock.briefing` (평일 20:10) + 폴백 `-fallback-2030`(20:30, 스냅샷 없을 때만) · `-fallback-2100`(21:00, **무조건 fresh 재조회**). **메일 발송 중지**(2026-08-12 관리자님 결정 — 메일 통수 축소). `--no-mail`은 휴장일 self-skip·실패 텔레그램 알림은 유지하고 메일만 건너뜀. 목적은 자산웹 '당일 평가손익' 기준값이 되는 스냅샷 확보. 리포트 본문을 눈으로 보려면 `run`(메일 없이 평문+`/tmp/stock_report_preview.html`) |
| **증권잔액 → 골디 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/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 진입부에서 자동 호출. 수동 점검·재처리용 | | **골디 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/watchlist_monitor.py check` | launchd `ai.openclaw.stock.watchlist-monitor` (평일 **10/12/14시 3회** — 2026-05-12 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` (평일 **08:00–19:59 매 1분**, 720엔트리 — 2026-08-25 plist 실측 정정. 스크립트가 장외·휴장 self-skip). 하는 일 둘: ①자산웹에서 PIN 승인된 트레일링 예약의 조건단가를 고점 갱신 시 kt10002로 **상향만** 정정 ②**예약 트레일링(TRAILING_ARM) 발동·만료** — 발동가 도달 시 스톱주문 신규 발주 + 예약 승격, 미발동으로 등록일이 지난 대기 예약은 자동 취소(둘 다 2026-08-25 추가, 관리자님 승인). ⚠️ "신규 발주 없음"은 더 이상 사실이 아니다. 예약 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/trailing_monitor.py {check [--repeat N --gap S] [--force] [--dry-run]\|list}` | launchd `ai.openclaw.stock.trailing-monitor` (평일 **08:00–19:59 매 1분**, 720엔트리 — 2026-08-25 plist 실측 정정. 스크립트가 장외·휴장 self-skip). 하는 일 둘: ①자산웹에서 PIN 승인된 트레일링 예약의 조건단가를 고점 갱신 시 kt10002로 **상향만** 정정 ②**예약 트레일링(TRAILING_ARM) 발동·만료** — 발동가 도달 시 스톱주문 신규 발주 + 예약 승격, 미발동으로 등록일이 지난 대기 예약은 자동 취소(둘 다 2026-08-25 추가, 관리자님 승인). ⚠️ "신규 발주 없음"은 더 이상 사실이 아니다. 예약 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) | | **급등락 알림** | `python3 ~/.openclaw/agents/stock/workspace/scripts/surge_monitor.py {check [--force]\|dry-run\|list}` | launchd `ai.openclaw.stock.surge-monitor` (09:00–15:35 매 1분, 396엔트리 — 스크립트가 휴장·장외 self-skip). 토글 켠 종목만 감시(상·하한가 / VI 발동 / 자기이력 분위수) → 레이 텔레그램. 토글 0건이면 API 콜 0 |
| **codex 폴백 감시** | `python3 ~/.openclaw/workspace/scripts/codex_fallback_monitor.py [--dry-run]` | launchd `ai.openclaw.codex-fallback-monitor` (매 5분). 주 모델이 죽어 유료 OpenRouter 로 폴백하면 클로 텔레그램. 무비용(on-disk sqlite 스캔) |
| **git 자동 백업** | `sh ~/.openclaw/scripts/git_autopush.sh` | launchd `ai.openclaw.git-autopush` (매일 02:00). 변경 있을 때만 커밋·푸시 |
| **헬스체크** | `python3 ~/.openclaw/scripts/health_check.py [--dry-run] [--verbose]` | launchd `ai.openclaw.health-check` (**매일 09:00**). §4 표를 파싱해 stale·데몬 사망 검사, 이상 있을 때만 텔레그램(같은 이상은 7일간 재발송 안 함). 매월 1일엔 `MAINTENANCE.md` 월간 점검 리마인더 |
| **로그 로테이션** | `python3 ~/.openclaw/scripts/log_rotate.py [--dry-run]` | launchd `ai.openclaw.log-rotate` (매주 일요일 04:00). 30일 초과 로그 trash + 20MB 초과 활성 로그 in-place 축소 |
| **공모주 캘린더 동기화** | `python3 ~/.openclaw/agents/stock/workspace/scripts/ipo_calendar_sync.py` | launchd `ai.openclaw.stock.ipo-calendar-sync` (**월·수·금 17: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`는 파싱 결과만(캘린더 미접근) | | **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) | | **휴장일 동기화** | `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 이관 | | **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) | | **매매 기록 적재** | `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 {scan [--force]\|status\|report\|reset --yes}` | launchd `ai.openclaw.stock.sim-scan` (09–15:30 **매 2분**, 196엔트리 — 엔진이 장외·휴장 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`만 쓰기 | | **자동매매 시뮬 대시보드** | `cd ~/.openclaw/agents/stock/workspace && python3 -m sim.sim_web {serve\|render}` | launchd `ai.openclaw.stock.sim-web` (상시). 포트 18792 → `sim.hyowons.net`(reverse proxy 수동 등록 대기). **3탭**(전략·관심종목·시장 — 계좌·튜닝 탭은 2026-06-10 삭제), 읽기전용+`/save_params`만 쓰기 |
| **시뮬 파라미터 스윕(튜닝 비교)** | `cd ~/.openclaw/agents/stock/workspace && python3 -m sim {sweep [frac]\|backtest}` | 트리거 없음(on-demand). 81조합 백테스트 학습/검증 비교 → `state/sim/backtest_results.json`(웹 백테스트 탭 표시). 튜닝값은 `state/sim/params.json`(웹 튜닝 탭) | | **시뮬 파라미터 스윕(튜닝 비교)** | `cd ~/.openclaw/agents/stock/workspace && python3 -m sim {sweep [frac]\|backtest}` | 트리거 없음(on-demand). **1536조합** 백테스트 학습/검증 비교 → `state/sim/backtest_results.json`(웹 백테스트 탭 표시). 튜닝값은 `state/sim/params.json`(웹 튜닝 탭) |
| **Claude Code 원격 세션** (on-demand, 다중) | `python3 ~/.openclaw/workspace/skills/claude-code-session/scripts/session_tool.py {profile\|session} ...` (legacy 단일: `ensure_session.sh {open\|close\|status}`) | 세션 plist는 `~/Library/LaunchAgents/ai.claude-session.<profile>-<N>.plist`로 ephemeral, 레거시 단일은 `ai.openclaw.claude-remote-control`. 모두 RunAtLoad=false, KeepAlive=false. 클로 `claude-code-session` 스킬이 자연어 라우팅. | | **Claude Code 원격 세션** (on-demand, 다중) | `python3 ~/.openclaw/workspace/skills/claude-code-session/scripts/session_tool.py {profile\|session} ...` (legacy 단일: `ensure_session.sh {open\|close\|status}`) | 세션 plist는 `~/Library/LaunchAgents/ai.claude-session.<profile>-<N>.plist`로 ephemeral, 레거시 단일은 `ai.openclaw.claude-remote-control`. 모두 RunAtLoad=false, KeepAlive=false. 클로 `claude-code-session` 스킬이 자연어 라우팅. |
수동 실행: 진입점 명령만 그대로 터미널에서 실행하면 된다. launchctl 만지지 마라. 수동 실행: 진입점 명령만 그대로 터미널에서 실행하면 된다. launchctl 만지지 마라.
--- ---
## 2. LLM 자연어 작업 (OpenClaw cron — `cron/jobs.json`) ## 2. LLM 자연어 작업 (OpenClaw cron — `state/openclaw.sqlite` 의 `cron_jobs` 테이블)
LLM이 자막 요약·뉴스 평문 생성·결산 보고서 등 본문을 만들어야 하는 작업만 여기 남는다. LLM이 자막 요약·뉴스 평문 생성·결산 보고서 등 본문을 만들어야 하는 작업만 여기 남는다.
@@ -41,10 +46,10 @@ LLM이 자막 요약·뉴스 평문 생성·결산 보고서 등 본문을 만
|---|---|---| |---|---|---|
| **오전 브리핑** (main/클로) | "오전 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 (미국증시 요약 포함) | OpenClaw cron `56d66b54` (**월~토** 07:30) + 1차폴백 `c4f2d3e5...0755` (07:55) + 2차폴백·최종 `b3f1c2d4...0830` (08:30, US 미게시여도 발송). **일요일 없음**. **토요일은 해외 전용**(스크립트가 `overseas_only` 판정 → 해외 뉴스만·일정·IPO 생략) | | **오전 브리핑** (main/클로) | "오전 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 (미국증시 요약 포함) | OpenClaw cron `56d66b54` (**월~토** 07:30) + 1차폴백 `c4f2d3e5...0755` (07:55) + 2차폴백·최종 `b3f1c2d4...0830` (08:30, US 미게시여도 발송). **일요일 없음**. **토요일은 해외 전용**(스크립트가 `overseas_only` 판정 → 해외 뉴스만·일정·IPO 생략) |
| **오후 브리핑** (main/클로) | "오후 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 | OpenClaw cron `9d2c105f` (**평일** 19:00). 주말 없음 | | **오후 브리핑** (main/클로) | "오후 브리핑 메일 보내줘" → cron payload의 step 그대로 실행 | OpenClaw cron `9d2c105f` (**평일** 19:00). 주말 없음 |
| **비하이브 종목분석 요약** (stock/레이) | "비하이브 신규 영상 점검해줘" → cron payload의 step 그대로 실행 | OpenClaw cron `747e1013` (평일 07/12/18시) | | **비하이브 종목분석 요약** (stock/레이) | "비하이브 신규 영상 점검해줘" → cron payload의 step 그대로 실행 | OpenClaw cron `80052b62` (평일 07/12/18시). 등록명은 "비하이브 추천영상 요약" |
| **월간 결산** (budget/골디) | "월간 결산 돌려줘" → cron payload의 step 그대로 실행 | OpenClaw cron `08e9a978` (매월 1일 05:00) | | **월간 결산** (budget/골디) | "월간 결산 돌려줘" → cron payload의 step 그대로 실행 | OpenClaw cron `08e9a978` (매월 1일 05:00) |
수동 실행: 사용자가 해당 에이전트에게 작업 이름만 말하면, 에이전트는 `jobs.json`의 동일 ID 페이로드 step을 그대로 따라 실행한다. **cron 활성화 여부·스케줄 시간을 만지는 작업은 트리거 변경 요청이 명시적으로 있을 때만.** 수동 실행: 사용자가 해당 에이전트에게 작업 이름만 말하면, 에이전트는 `openclaw cron show <id>` 의 동일 ID 페이로드 step을 그대로 따라 실행한다. **cron 활성화 여부·스케줄 시간을 만지는 작업은 트리거 변경 요청이 명시적으로 있을 때만.**
--- ---
@@ -53,12 +58,50 @@ LLM이 자막 요약·뉴스 평문 생성·결산 보고서 등 본문을 만
1. **트리거(언제)와 작업(무엇)은 별개다.** "지금 X 실행"은 항상 §1·§2의 진입점 명령만 실행. cron/launchd 등록·해제·재실행은 별도 요청. 1. **트리거(언제)와 작업(무엇)은 별개다.** "지금 X 실행"은 항상 §1·§2의 진입점 명령만 실행. cron/launchd 등록·해제·재실행은 별도 요청.
2. **payload에 "매일 X시 자동 실행" 같은 자가묘사 메타 문구를 넣지 마라.** 페이로드는 "무엇을 어떻게"만 담는다. "언제"는 schedule 필드가 단일 진실 공급원. 2. **payload에 "매일 X시 자동 실행" 같은 자가묘사 메타 문구를 넣지 마라.** 페이로드는 "무엇을 어떻게"만 담는다. "언제"는 schedule 필드가 단일 진실 공급원.
3. **새 트리거를 만들 땐 단순 스크립트면 launchd, LLM이 본문을 생성해야 하면 OpenClaw cron.** 이중 등록 금지. 이관 시 한쪽 완전 제거. 3. **새 트리거를 만들 땐 단순 스크립트면 launchd, LLM이 본문을 생성해야 하면 OpenClaw cron.** 이중 등록 금지. 이관 시 한쪽 완전 제거.
4. **Disabled 좀비 잡 즉시 제거.** `enabled:false`로 두지 말고 jobs.json에서 빼라. 검색에 잡혀서 혼선 유발. 4. **Disabled 좀비 잡 즉시 제거.** `enabled:false`로 두지 말고 `openclaw cron delete <id>` 로 빼라. 검색에 잡혀서 혼선 유발.
5. **트리거 추가/이관/제거는 담당 에이전트의 MEMORY.md에 반드시 기록.** 5. **트리거 추가/이관/제거는 담당 에이전트의 MEMORY.md에 반드시 기록.**
--- ---
## 4. 알려진 이슈 / 진단 절차 ## 4. 헬스체크 (자동 감시 대상)
`scripts/health_check.py` 가 **이 표를 파싱해서** 돈다. 행을 고치면 감시가 바뀐다 — 표가 곧 설정이라, 트리거를 바꾸고 표를 안 고치면 알림이 떠서 드리프트가 스스로 드러난다.
**증거 고르는 법:** "그 잡이 돌면 **반드시** 갱신되는" 파일이어야 한다. `surge_alerts.json`·`trailing_stops.json`·`whooing_synced.json` 처럼 **일이 있을 때만** 쓰이는 파일은 조용한 날 stale 로 보여 오탐이 된다 — 그런 잡은 로그 파일을 증거로 쓴다. 반대로 `holiday_sync` 처럼 "돌긴 도는데 결과가 옛것"인 실패(2026-07~09 2개월 stale)를 잡으려면 로그가 아니라 **결과 파일**이어야 한다.
**기대 주기:** 평일 전용 잡은 금→월 72h 에 여유를 더해 `100h`. ⚠️ 설·추석 등 3일 초과 연휴엔 오탐이 날 수 있다(휴장일 보정은 넣지 않았다 — 연 2회 오탐을 감수하는 대신 로직을 단순하게 뒀다). `daemon:` 접두는 주기 대신 **프로세스 생존**(PID)을 본다.
| 작업 | 증거 (mtime 기준) | 기대 주기 |
|---|---|---|
| OpenClaw Gateway | `daemon:ai.openclaw.gateway` | - |
| 비하이브 웹뷰 | `daemon:ai.openclaw.stock.behive-web` | - |
| 시뮬 대시보드 | `daemon:ai.openclaw.stock.sim-web` | - |
| 후잉 동기화 | `logs/whooing-sync.log` | 2h |
| codex 폴백 감시 | `logs/codex-fallback-monitor.log` | 2h |
| 급등락 알림 | `logs/stock-surge-monitor.log` | 100h |
| 트레일링 스톱 감시 | `agents/stock/workspace/state/trailing_monitor_heartbeat` | 100h |
| 워치리스트 모니터링 | `logs/watchlist-monitor.log` | 100h |
| 자동매매 시뮬 스캔 | `agents/stock/workspace/state/sim/last_scan.json` | 100h |
| 주식 포트폴리오 스냅샷 | `agents/stock/workspace/state/portfolio_daily_snapshot.json` | 100h |
| 매매 기록 적재 | `agents/stock/workspace/state/trade_journal.jsonl` | 100h |
| 시장지표 적재 | `agents/stock/workspace/state/market_indicators_history.jsonl` | 100h |
| Gmail 라벨 분류 | `workspace/state/gmail_label_classify.log` | 30h |
| git 자동 백업 | `logs/git-autopush.log` | 30h |
| 휴장일 동기화 | `agents/stock/workspace/state/market_holidays.json` | 8d |
| 공모주 캘린더 동기화 | `agents/stock/workspace/state/ipo_calendar_sync.json` | 5d |
| FOMC 캘린더 동기화 | `agents/stock/workspace/state/fomc_calendar_sync.json` | 35d |
| 증권잔액 → 골디 inbox | `logs/send-balance.log` | 35d |
| 로그 로테이션 | `logs/log-rotate.log` | 8d |
감시하지 **않는** 것과 이유:
- **OpenClaw cron 4종**(브리핑·비하이브·월간결산) — 실패하면 메일·텔레그램이 안 와서 관리자님이 바로 아신다. 게다가 `openclaw cron list` 의 `Last`/`Status` 가 이미 이력을 들고 있다
- **시뮬 스윕·골디 inbox 처리** — on-demand 라 기대 주기가 없다
- **`sim.backfill_flow`·`sim universe`** — `stock.trade-journal` plist 가 묶어 도는 5개 명령 중 3·4번째다(5번째는 `kiwoom_client refresh-codes --if-stale 7` — 종목코드 캐시 주 1회 갱신, 2026-09-10 추가. 이 캐시의 `nxt_enable` 이 자산웹 NXT 판정 근거라 낡으면 🔥배지·거래가능 초록점이 틀어진다. 금액엔 영향 없음). 앞 2개(매매기록·시장지표)는 위에서 감시하지만 이 둘은 뺐다 — 결과물(`flow_history.sqlite`·`auto_seen.json`)이 stale 해도 백테스트 수급게이트가 중립으로 비활성되고 sim 관찰목록 자동편입이 멈출 뿐, **실매매·실주문에는 영향이 없다**. ⚠️ 다만 plist 는 `하나 실패해도 나머지 시도` 구조라 이 둘만 조용히 죽을 수 있다 — sim 백테스트 결과가 이상하면 여기부터 본다
- **Claude Code 원격 세션** — ephemeral
---
## 5. 알려진 이슈 / 진단 절차
- **bonjour 광고 stuck → gateway crash 루프** (2026-04-28 한 차례 발생, 현재는 정상) - **bonjour 광고 stuck → gateway crash 루프** (2026-04-28 한 차례 발생, 현재는 정상)
- 증상: `~/.openclaw/logs/stability/` 에 `*unhandled_rejection.json` 누적, gateway PID 계속 변경, `openclaw cron list`가 `gateway closed (1006)` 응답 - 증상: `~/.openclaw/logs/stability/` 에 `*unhandled_rejection.json` 누적, gateway PID 계속 변경, `openclaw cron list`가 `gateway closed (1006)` 응답
@@ -1,4 +0,0 @@
{
"version": 1,
"setupCompletedAt": "2026-04-23T06:17:48.250Z"
}
+93
View File
@@ -105,3 +105,96 @@ LLM-LLM 자연어 통신은 프롬프트 인젝션·할루시네이션 증폭
## 직접 고쳐 써라 ## 직접 고쳐 써라
이 문서는 출발점이다. 패턴이 보이면 직접 업데이트해라. 정비는 코디가 하지만, 이 매뉴얼의 작가는 너다. 이 문서는 출발점이다. 패턴이 보이면 직접 업데이트해라. 정비는 코디가 하지만, 이 매뉴얼의 작가는 너다.
## Tools
### Local notes (migrated from TOOLS.md)
# TOOLS.md - Local Notes
가계부 관련 파일·스크립트·발신번호 메모. 모든 경로는 `agents/budget/workspace/` 기준.
## Whooing
- 가계부 시스템: https://whooing.com
- **웹훅 URL:** `/Users/snowoyh/.openclaw/credentials/whooing.json` 의 `webhook_url` 필드.
형식: `https://whooing.com/webhook/s/xxxx-xxxx-xxxx-xxxx`
- 웹훅 페이로드 종류:
- **raw 문자**: `message=<원문>` 보내면 후잉이 알아서 파싱
- **구조화 JSON**: `{entry_date, item, money, left, right, memo}` (left=차변, right=대변)
- 결제 취소/승인취소도 같이 전송해야 후잉에서 -금액으로 상쇄됨.
## State
- `state/whooing_synced.json` — `{ "last_message_at": <ISO>, "last_synced_at": "ISO" }`. dedupe 기준.
- `state/whooing_account_map.json` — 발신번호 → 후잉 매핑. `confirmed: true`인 엔트리만 후잉으로 자동 전송. `confirmed: false`는 발견 시 로그만 남기고 사용자 확인 대기.
- `state/whooing_accounts.json` — **관리자님 후잉 계정과목 차트** (자산/부채/순자산/비용/수익 + carrier→결제수단 매핑). 구조화 입력으로 left/right 채울 때 항상 이 파일에서 정확한 계정명을 끌어쓴다. 차트에 없는 계정명은 후잉이 거부하므로 절대 추측해 보내지 말 것.
- `state/whooing_failures.json` — 후잉이 4xx/5xx로 거절한 건. 수동 확인용.
## Scripts (python3)
- `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).
## 발신번호
`state/whooing_account_map.json`이 정답. 아래는 사람이 읽기 쉬운 요약.
**확인됨 (관리자님이 직접 확인):**
| 발신처 | 발신번호 |
|--------|---------|
| 하나 계좌이체 | `+8215991111` |
| 신한은행 | `+8215778000` |
| 신한카드 | `+8215447000` (※ 과거 오타 `+8215447200` 쓴 적 있음 — 실사용 X, 현재 confirmed=false 로 대기) |
**추정 (모델 사전지식 기반, 실제 메시지 들어오면 confirmed로 승격 필요):**
| 발신처 | 추정 발신번호 |
|--------|--------------|
| 삼성카드 | `+8215888900` |
| KB국민카드 | `+8215881688` |
| 현대카드 | `+8215776200` |
| 롯데카드 | `+8215888100` |
| 하나카드 | `+8218001111` |
| 우리카드 | `+8215889955` |
| BC카드 | `+8215884000` |
| NH농협카드 | `+8216444000` |
| 카카오페이 | `+8216447405` |
| 네이버페이 | `+8215883819` |
| 토스 | `+8215994905` |
| KB국민은행 | `+8215889999` |
| 우리은행 | `+8215885000` |
| NH농협은행 | `+8216613000` |
| 카카오뱅크 | `+8215993333` |
**정책:** 미확인 번호 메시지가 들어오면 무시 또는 `failures.json`에 "unmapped"로 기록만 한다. 잘못된 자동 등록을 막기 위함.
## 관리자님 관련
- 가계부 질문이 들어오면 먼저 `state/whooing_synced.json`과 `whooing_failures.json`을 본다.
- 잔액·계정 총합은 `whooing_balance.py`로 조회한다. 후잉 OpenAPI(`bs.json`/`accounts.json`/`sections.json`) 연동 완료.
## Playwright MCP (브라우저 자동화)
OpenClaw가 `openclaw.json` 의 MCP 서버 `playwright`로 노출. 도구는 `playwright__browser_*` prefix로 약 23개.
- **탐색:** `navigate / navigate_back / tabs / wait_for`
- **관찰:** `snapshot` (접근성 트리 — 클릭 대상 ref 식별에 **우선 사용**) / `take_screenshot` / `console_messages` / `network_requests` / `network_request`
- **조작:** `click / type / fill_form / press_key / hover / select_option / drag / drop / file_upload / handle_dialog / resize / close`
- **평가:** `evaluate` (페이지 JS 컨텍스트) / `run_code_unsafe` (Playwright 코드 직접 — **RCE 등급, 마지막 수단**)
**표준 흐름:** `navigate` → `snapshot`으로 ref 확보 → `click`/`type`/`fill_form` → `wait_for`로 결과 대기 → `snapshot` 또는 `network_requests`로 검증. 스크린샷은 사람 보고용이지 다음 동작 분기 근거로 쓰지 말 것.
**운영 특성:**
- 기본값 `--headless --isolated`. 매 세션 쿠키·로그인 폐기.
- 영속 로그인 필요한 사이트는 시도 전 **코디에게 `user-data-dir` 분리·등록 요청**.
- 첫 호출 시 npx spawn 1~2초 지연.
- 은행·카드사 공동인증서·간편비밀번호 화면이 나오면 **즉시 중단하고 관리자님께 보고**, 우회 시도 X.
**활용 시나리오 (골디 맥락):**
- 후잉 웹 직접 분개 수정/삭제 — 현재 inbox·webhook 단방향 한계 보완용. **영속 로그인 필요** → 코디에게 user-data-dir 분리 요청 후 진행
- 카드사 웹 청구서 PDF 수집 (월별 명세 검증·보조). 공동인증서·간편비번 화면 진입 시 중단
- 우선순위는 항상 **API · iMessage 결제문자 → 후잉 webhook 자동 동기화**. 브라우저는 자동 흐름이 못 메꾸는 잔여 영역만
+4 -2
View File
@@ -19,6 +19,8 @@
- **스케줄러는 launchd** (OpenClaw cron 아님). plist: `~/Library/LaunchAgents/ai.openclaw.budget.whooing-sync.plist`, label `ai.openclaw.budget.whooing-sync`, 매시 0/15/30/45분. 로그는 `/Users/snowoyh/.openclaw/logs/whooing-sync.{log,err.log}`. OpenClaw 의 `후잉 가계부 동기화` cron 잡은 의도적으로 `enabled: false` — LLM 세션 비용(월 ~70M 토큰) 때문에 전환된 것. **다시 enable 하지 말 것.** - **스케줄러는 launchd** (OpenClaw cron 아님). plist: `~/Library/LaunchAgents/ai.openclaw.budget.whooing-sync.plist`, label `ai.openclaw.budget.whooing-sync`, 매시 0/15/30/45분. 로그는 `/Users/snowoyh/.openclaw/logs/whooing-sync.{log,err.log}`. OpenClaw 의 `후잉 가계부 동기화` cron 잡은 의도적으로 `enabled: false` — LLM 세션 비용(월 ~70M 토큰) 때문에 전환된 것. **다시 enable 하지 말 것.**
- **FDA 필수**: launchd 는 FDA 상속 안 받음. `/opt/homebrew/bin/imsg` 를 "시스템 설정 → 개인정보 보호 및 보안 → 전체 디스크 접근 권한" 에 등록해야 Messages DB 읽힘. 누락 시 `imsg chats 실행 실패` stderr + stdout "새 결제 메시지 없음" 으로 조용히 넘어감. 맥 이전·imsg 재설치 시 재등록. - **FDA 필수**: launchd 는 FDA 상속 안 받음. `/opt/homebrew/bin/imsg` 를 "시스템 설정 → 개인정보 보호 및 보안 → 전체 디스크 접근 권한" 에 등록해야 Messages DB 읽힘. 누락 시 `imsg chats 실행 실패` stderr + stdout "새 결제 메시지 없음" 으로 조용히 넘어감. 맥 이전·imsg 재설치 시 재등록.
- **페어 매칭**: `whooing_sync.py` 가 동일 금액 입↔출 SMS 를 5분 윈도우(`PAIR_WINDOW_SECONDS=300`) 로 짝지어 1건의 자산↔자산 structured 이체로 합성. 짝 없는 입출금이 5분 이내(`HOLD_GRACE_SECONDS=300`) 면 hold → 다음 cron 재시도. 상세는 SKILL.md 의 "페어 매칭" 섹션. - **페어 매칭**: `whooing_sync.py` 가 동일 금액 입↔출 SMS 를 5분 윈도우(`PAIR_WINDOW_SECONDS=300`) 로 짝지어 1건의 자산↔자산 structured 이체로 합성. 짝 없는 입출금이 5분 이내(`HOLD_GRACE_SECONDS=300`) 면 hold → 다음 cron 재시도. 상세는 SKILL.md 의 "페어 매칭" 섹션.
- **증권 이체 매칭** (2026-09-10): 은행→증권 이체는 은행 SMS 에 **입금자명만** 찍혀 짝이 없다. `securities_match.py` 가 capital-block 직전에 키움 kt00015 에서 짝(같은 날·같은 금액·반대 방향·`is_principal_flow` 적요)을 찾아 `증권(효원) ← 하나은행(효원)` 이체로 분개한다. **평시 키움 콜 0**(자본 분개로 갈 뻔한 건이 있을 때만 4콜). 애매하면(후보 여럿·조회 실패) 매칭 안 하고 기존 알림 경로로 보낸다. 상세는 SKILL.md 의 "증권 이체 매칭" 섹션.
- **비결제/비거래 메시지 자동 스킵**: `SKIP_PATTERNS` 에 `"인증번호"`, `"간편인증서"`, `"개설되었습니다"`, `"계좌개설"` 포함. 또한 금액 패턴(`숫자원`)이 없는 문자는 후잉 raw 폴백으로 보내지 않는다. 인증/간편인증서/계좌개설 안내 문자는 후잉 처리하지 않는다. - **비결제/비거래 메시지 자동 스킵**: `SKIP_PATTERNS` 에 `"인증번호"`, `"간편인증서"`, `"개설되었습니다"`, `"계좌개설"` 포함. 또한 금액 패턴(`숫자원`)이 없는 문자는 후잉 raw 폴백으로 보내지 않는다. 인증/간편인증서/계좌개설 안내 문자는 후잉 처리하지 않는다.
## 발신번호 주의 ## 발신번호 주의
@@ -27,9 +29,9 @@
- 신한은행: `+8215778000` (1577-8000). - 신한은행: `+8215778000` (1577-8000).
- 하나 계좌이체: `+8215991111`. - 하나 계좌이체: `+8215991111`.
## merchant_map 한계 (미해결) ## merchant_map 한계 (일부 해소)
`exact: "방효원"` 룰은 본인 이름만으론 이체 상대계좌를 식별 못 함. 페어 매칭이 1차 방어선이지만, 한쪽 은행이 confirmed=false 거나 시간창 벗어나면 이 룰이 폴백으로 타서 **기초잔액(효원) 경유로 잘못 기록**될 수 있다. 발견 시 `whooing_manual.py` 로 역분개하거나 후잉 UI 에서 삭제 후 올바른 이체 1건으로 재등록. 근본 해결은 메모에 "카뱅/신한" 같은 목적지 키워드를 일관되게 넣고 `merchant_map.contains` 에 등록하는 것. `exact: "방효원"` 룰은 본인 이름만으론 이체 상대계좌를 식별 못 함. ⚠️ **상대가 증권 계좌인 경우는 2026-09-10 증권 이체 매칭으로 해소**됐다(키움 kt00015 가 짝을 알려준다). 아래는 그 외 상대계좌(다른 은행·타인 송금) 이야기다. 페어 매칭이 1차 방어선이지만, 한쪽 은행이 confirmed=false 거나 시간창 벗어나면 이 룰이 폴백으로 타서 **기초잔액(효원) 경유로 잘못 기록**될 수 있다. 발견 시 `whooing_manual.py` 로 역분개하거나 후잉 UI 에서 삭제 후 올바른 이체 1건으로 재등록. 근본 해결은 메모에 "카뱅/신한" 같은 목적지 키워드를 일관되게 넣고 `merchant_map.contains` 에 등록하는 것.
## 우선 룰 (whooing_overrides.json) — 2026-04-29 도입 ## 우선 룰 (whooing_overrides.json) — 2026-04-29 도입
-88
View File
@@ -1,88 +0,0 @@
# TOOLS.md - Local Notes
가계부 관련 파일·스크립트·발신번호 메모. 모든 경로는 `agents/budget/workspace/` 기준.
## Whooing
- 가계부 시스템: https://whooing.com
- **웹훅 URL:** `/Users/snowoyh/.openclaw/credentials/whooing.json` 의 `webhook_url` 필드.
형식: `https://whooing.com/webhook/s/xxxx-xxxx-xxxx-xxxx`
- 웹훅 페이로드 종류:
- **raw 문자**: `message=<원문>` 보내면 후잉이 알아서 파싱
- **구조화 JSON**: `{entry_date, item, money, left, right, memo}` (left=차변, right=대변)
- 결제 취소/승인취소도 같이 전송해야 후잉에서 -금액으로 상쇄됨.
## State
- `state/whooing_synced.json` — `{ "last_message_at": <ISO>, "last_synced_at": "ISO" }`. dedupe 기준.
- `state/whooing_account_map.json` — 발신번호 → 후잉 매핑. `confirmed: true`인 엔트리만 후잉으로 자동 전송. `confirmed: false`는 발견 시 로그만 남기고 사용자 확인 대기.
- `state/whooing_accounts.json` — **관리자님 후잉 계정과목 차트** (자산/부채/순자산/비용/수익 + carrier→결제수단 매핑). 구조화 입력으로 left/right 채울 때 항상 이 파일에서 정확한 계정명을 끌어쓴다. 차트에 없는 계정명은 후잉이 거부하므로 절대 추측해 보내지 말 것.
- `state/whooing_failures.json` — 후잉이 4xx/5xx로 거절한 건. 수동 확인용.
## Scripts (python3)
- `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).
## 발신번호
`state/whooing_account_map.json`이 정답. 아래는 사람이 읽기 쉬운 요약.
**확인됨 (관리자님이 직접 확인):**
| 발신처 | 발신번호 |
|--------|---------|
| 하나 계좌이체 | `+8215991111` |
| 신한은행 | `+8215778000` |
| 신한카드 | `+8215447000` (※ 과거 오타 `+8215447200` 쓴 적 있음 — 실사용 X, 현재 confirmed=false 로 대기) |
**추정 (모델 사전지식 기반, 실제 메시지 들어오면 confirmed로 승격 필요):**
| 발신처 | 추정 발신번호 |
|--------|--------------|
| 삼성카드 | `+8215888900` |
| KB국민카드 | `+8215881688` |
| 현대카드 | `+8215776200` |
| 롯데카드 | `+8215888100` |
| 하나카드 | `+8218001111` |
| 우리카드 | `+8215889955` |
| BC카드 | `+8215884000` |
| NH농협카드 | `+8216444000` |
| 카카오페이 | `+8216447405` |
| 네이버페이 | `+8215883819` |
| 토스 | `+8215994905` |
| KB국민은행 | `+8215889999` |
| 우리은행 | `+8215885000` |
| NH농협은행 | `+8216613000` |
| 카카오뱅크 | `+8215993333` |
**정책:** 미확인 번호 메시지가 들어오면 무시 또는 `failures.json`에 "unmapped"로 기록만 한다. 잘못된 자동 등록을 막기 위함.
## 관리자님 관련
- 가계부 질문이 들어오면 먼저 `state/whooing_synced.json`과 `whooing_failures.json`을 본다.
- 잔액·계정 총합은 `whooing_balance.py`로 조회한다. 후잉 OpenAPI(`bs.json`/`accounts.json`/`sections.json`) 연동 완료.
## Playwright MCP (브라우저 자동화)
OpenClaw가 `openclaw.json` 의 MCP 서버 `playwright`로 노출. 도구는 `playwright__browser_*` prefix로 약 23개.
- **탐색:** `navigate / navigate_back / tabs / wait_for`
- **관찰:** `snapshot` (접근성 트리 — 클릭 대상 ref 식별에 **우선 사용**) / `take_screenshot` / `console_messages` / `network_requests` / `network_request`
- **조작:** `click / type / fill_form / press_key / hover / select_option / drag / drop / file_upload / handle_dialog / resize / close`
- **평가:** `evaluate` (페이지 JS 컨텍스트) / `run_code_unsafe` (Playwright 코드 직접 — **RCE 등급, 마지막 수단**)
**표준 흐름:** `navigate` → `snapshot`으로 ref 확보 → `click`/`type`/`fill_form` → `wait_for`로 결과 대기 → `snapshot` 또는 `network_requests`로 검증. 스크린샷은 사람 보고용이지 다음 동작 분기 근거로 쓰지 말 것.
**운영 특성:**
- 기본값 `--headless --isolated`. 매 세션 쿠키·로그인 폐기.
- 영속 로그인 필요한 사이트는 시도 전 **코디에게 `user-data-dir` 분리·등록 요청**.
- 첫 호출 시 npx spawn 1~2초 지연.
- 은행·카드사 공동인증서·간편비밀번호 화면이 나오면 **즉시 중단하고 관리자님께 보고**, 우회 시도 X.
**활용 시나리오 (골디 맥락):**
- 후잉 웹 직접 분개 수정/삭제 — 현재 inbox·webhook 단방향 한계 보완용. **영속 로그인 필요** → 코디에게 user-data-dir 분리 요청 후 진행
- 카드사 웹 청구서 PDF 수집 (월별 명세 검증·보조). 공동인증서·간편비번 화면 진입 시 중단
- 우선순위는 항상 **API · iMessage 결제문자 → 후잉 webhook 자동 동기화**. 브라우저는 자동 흐름이 못 메꾸는 잔여 영역만
@@ -0,0 +1 @@
- 하나은행 2026-09-10 09:27 `방효원` 3,000,000원 출금은 관리자님 확인으로 주식계좌 이체였다. 후잉에 `증권(효원) ← 하나은행(효원)`, item `증권이체`, memo 원문으로 수동 등록했고 응답 200/done 확인. 등록 후 하나은행 후잉 잔액 `35,689,680원`이 SMS 잔액과 일치해 `state/whooing_failures.json`의 `capital_blocked` 보류 건을 비웠다.
@@ -1,4 +0,0 @@
{
"version": 1,
"setupCompletedAt": "2026-04-23T06:17:48.250Z"
}
@@ -1,3 +1,8 @@
---
name: monthly-settlement
description: 매월 1일 후잉 잔액을 스냅샷으로 저장하고 전월 스냅샷과 비교해 자산 변동 리포트를 생성·발송한다. "이번달 결산", "월간 결산", "자산 변동 요약" 요청에 사용. 매월 1일 05:00 KST cron(agent: budget) 자동 실행.
---
# monthly-settlement # monthly-settlement
매월 1일에 후잉 잔액을 스냅샷으로 저장하고, 전월 스냅샷과 비교해 자산 변동을 리포트한다. 매월 1일에 후잉 잔액을 스냅샷으로 저장하고, 전월 스냅샷과 비교해 자산 변동을 리포트한다.
@@ -1,3 +1,8 @@
---
name: whooing-sync
description: iMessage 카드·은행 결제 알림을 후잉(whooing.com) 가계부로 자동 동기화한다. 발신번호→계정 매핑(whooing_account_map.json), 결제 취소 감액 처리, 미매핑 발신처 보고, 수동 분개 등록(whooing_manual.py), 잔액 조회(whooing_balance.py)를 포함. "가계부 동기화", "후잉 동기화", "결제내역 정리", "이번달 지출 얼마야?" 같은 요청에 사용. 기본 운용은 launchd가 매시 0/15/30/45분 자동 실행.
---
# whooing-sync # whooing-sync
iMessage에 들어오는 카드/은행 결제 알림을 후잉(whooing.com) 웹훅으로 자동 전송한다. iMessage에 들어오는 카드/은행 결제 알림을 후잉(whooing.com) 웹훅으로 자동 전송한다.
@@ -51,7 +56,7 @@ launchd/cron 이 이 줄을 그대로 결과로 받는다.
- **실패 알림** — 후잉 웹훅이 거절(HTTP 에러, 본문 `fail` / `Error :`)한 건. 실패 1건당 1메시지, 4건 이상이면 앞 3건 + 초과분 요약. `_format_sync_failure()` 포맷. - **실패 알림** — 후잉 웹훅이 거절(HTTP 에러, 본문 `fail` / `Error :`)한 건. 실패 1건당 1메시지, 4건 이상이면 앞 3건 + 초과분 요약. `_format_sync_failure()` 포맷.
- **raw 폴백 알림** — 후잉은 200 받았지만 structured 매칭 실패로 raw 모드로 넘어간 건. sync 사이클당 **1메시지**(최대 3건 나열, 초과 시 카운트). parser / carrier_to_account / merchant_map 보완 신호. `_format_raw_fallback()` 포맷. - **raw 폴백 알림** — 후잉은 200 받았지만 structured 매칭 실패로 raw 모드로 넘어간 건. sync 사이클당 **1메시지**(최대 3건 나열, 초과 시 카운트). parser / carrier_to_account / merchant_map 보완 신호. `_format_raw_fallback()` 포맷.
- **기초잔액(자본) 분개 보류 알림** (2026-09-07) — 분개의 좌·우 어느 쪽이든 `순자산` 계정(`기초잔액(효원)`/`기초잔액(가희)`)이면 **후잉에 넣지 않고 알림만** 보낸다(관리자님 지시). `_format_capital_blocked()` 포맷, 기록은 `whooing_failures.json` 의 `capital_blocked` 키. - **기초잔액(자본) 분개 보류 알림** (2026-09-07) — 분개의 좌·우 어느 쪽이든 `순자산` 계정(`기초잔액(효원)`/`기초잔액(가희)`)이면 **후잉에 넣지 않고 알림만** 보낸다(관리자님 지시). ⚠️ 2026-09-10 부터 **여기 오기 전에 증권 이체 매칭을 먼저 시도**한다(아래 「증권 이체 매칭」) — 짝을 찾으면 자본이 아니라 자산↔자산 이체로 분개되고, 이 알림은 짝을 못 찾은 건에만 남는다. `_format_capital_blocked()` 포맷, 기록은 `whooing_failures.json` 의 `capital_blocked` 키.
- 배경: `merchant_map` 의 `방효원` exact 룰(`left: 기초잔액(효원)`, "본인 명의 자체이체")은 **짝이 되는 출금 SMS 가 같이 와서 상계되는 것**을 전제한다. 짝이 없으면 자본 한쪽만 남아 **순자산이 조용히 부풀려진다.** 2026-09-07 카카오뱅크 879,993 실사고 — 처제 대납금 상환인데 입금자명이 "방효원"이라 이 룰에 걸렸고, 금액이 08/27 클럽호핑과 정확히 일치해서 겨우 눈에 걸렸다(어중간한 금액이면 지나갔다). - 배경: `merchant_map` 의 `방효원` exact 룰(`left: 기초잔액(효원)`, "본인 명의 자체이체")은 **짝이 되는 출금 SMS 가 같이 와서 상계되는 것**을 전제한다. 짝이 없으면 자본 한쪽만 남아 **순자산이 조용히 부풀려진다.** 2026-09-07 카카오뱅크 879,993 실사고 — 처제 대납금 상환인데 입금자명이 "방효원"이라 이 룰에 걸렸고, 금액이 08/27 클럽호핑과 정확히 일치해서 겨우 눈에 걸렸다(어중간한 금액이면 지나갔다).
- ⚠️ **커서는 `latest_skip` 으로 진행시킨다** — 재시도해도 같은 룰이 같은 결과를 내므로 여기서 커서를 막으면 **이 메시지 뒤의 모든 거래가 영구히 멈춘다.** `blocked_at` 을 세우지 않는 이유. - ⚠️ **커서는 `latest_skip` 으로 진행시킨다** — 재시도해도 같은 룰이 같은 결과를 내므로 여기서 커서를 막으면 **이 메시지 뒤의 모든 거래가 영구히 멈춘다.** `blocked_at` 을 세우지 않는 이유.
- 후잉엔 아무것도 안 들어가므로 그 계좌의 **잔액 불일치 알림이 뒤이어 뜬다** — 알림을 놓쳐도 두 번째 그물이 있다. - 후잉엔 아무것도 안 들어가므로 그 계좌의 **잔액 불일치 알림이 뒤이어 뜬다** — 알림을 놓쳐도 두 번째 그물이 있다.
@@ -158,6 +163,30 @@ node@22 가 2026-07-20 에 `22.22.2` → `22.23.1` 로 올라가며 **바이너
- 한쪽 은행이 confirmed=false → SMS 수집 안 됨. 메모 키워드("카뱅오픈방효원")가 `merchant_map.contains` 와 맞으면 withdrawal-only structured 로 처리. 아니면 raw. - 한쪽 은행이 confirmed=false → SMS 수집 안 됨. 메모 키워드("카뱅오픈방효원")가 `merchant_map.contains` 와 맞으면 withdrawal-only structured 로 처리. 아니면 raw.
- 시간창 벗어남 / 단독 입출금 / 외부 송금 → 각자 개별 처리. - 시간창 벗어남 / 단독 입출금 / 외부 송금 → 각자 개별 처리.
## 증권 이체 매칭 (은행 SMS ↔ 키움 kt00015)
**은행에서 증권으로 이체하면 은행 SMS 에는 입금자명(=본인 이름)만 찍혀 목적지를 알 수 없다.** 그래서 `방효원` exact 룰에 걸려 `기초잔액 ← 은행` 이 되고, 위 자본 분개 가드에 막혀 **미반영**된다. 반대편(증권 입금)은 **SMS 가 아예 없어** 월 1회 `securities_balance` reconcile 의 차액으로만 나타나는데, 그 차액은 전부 `주식평가수익` 으로 분개되므로 **이체가 손익으로 둔갑**한다. 양쪽에서 동시에 새던 구멍이다.
2026-09-10 부터 그 짝을 **키움 kt00015 입출금 내역에서 찾아** `증권(효원) ← 하나은행(효원)` 이체 한 건으로 만든다. 모듈 `scripts/securities_match.py`, 진입점은 `whooing_sync.try_securities_transfer()`.
- **호출 시점은 capital-block 직전뿐** — 평시 키움 콜 0. 자본 분개로 갈 뻔한 건이 있는 사이클에만 계좌 수만큼(4콜) 조회한다. 그래서 15분 주기에 상시 조회가 붙지 않는다.
- **매칭 조건**: 같은 날짜 + 금액 일치 + 방향 반대(은행 출금↔증권 IN) + `investment_principal.is_principal_flow(적요)`. 적요 필터가 **배당·이자·수익분배금·공모주환불금을 걸러낸다** — 그것들은 이체가 아니라 수익이라 은행 SMS 와 짝이 될 수 없다.
- ⚠️ **애매하면 매칭하지 않는다** — 후보가 여럿이면 시각 근접(`TIME_TIEBREAK_SECONDS` 600초)으로 좁히고, 그래도 하나로 안 줄면 포기하고 기존 알림 경로로 보낸다. 틀린 분개보다 사람이 보는 편이 낫다. 조회가 한 계좌라도 실패하면 **전체를 포기**한다(일부만 보고 판단하면 오매칭).
- ⚠️ **증권 계좌 간 대체는 후보에서 뺀다**(`_drop_internal_transfers`) — 가희_일반→가희_ISA 같은 내부 이동은 후잉에선 같은 `증권(가희)` 자산이라 분개 대상이 아닌데, 금액이 같으면 은행 SMS 와 오매칭될 수 있다. 서로 다른 계좌에 같은 금액의 IN/OUT 이 함께 있으면 제외(2026-04-23 가희 100만원 실사례로 검증).
- ⚠️ **kt00015 행에는 고유 ID 가 없다** — 중복 분개 방지 키는 `날짜|계좌|IN,OUT|금액|시각` 합성이고 `state/whooing_securities_matched.json` 에 남는다(180일 후 정리). **POST 성공 후에만 기록**한다 — 실패하면 다음 사이클에 다시 짝으로 잡혀야 한다.
- 양방향 지원: 은행 출금→`증권 ← 은행`, 은행 입금(증권에서 뺀 돈)→`은행 ← 증권`.
- 부수효과: 이체가 실시간으로 들어가므로 **월 1회 reconcile 차액에 순수 평가손익만 남는다.**
출력 예시:
```
✅ [securities] 하나 2026-09-10T00:27:44Z 200 | 증권(효원) ← 하나은행(효원) 3,000,000원 (증권 일반 이체)
```
진단 CLI (매칭만 확인, 분개 없음):
```bash
python3 scripts/securities_match.py 20260910 3000000 withdrawal 2026-09-10T00:27:44.111Z
```
### merchant_map 주의사항 ### merchant_map 주의사항
`state/whooing_merchant_map.json` exact 룰에 `"방효원": { "left": "기초잔액(효원)" }` 가 등록돼 있다. 페어 미성립 시 이 룰로 폴백해서 **기초잔액을 경유한 잘못된 분개**가 기록될 수 있다. 한쪽 carrier 가 confirmed=false 일 때 구멍이 크다. `state/whooing_merchant_map.json` exact 룰에 `"방효원": { "left": "기초잔액(효원)" }` 가 등록돼 있다. 페어 미성립 시 이 룰로 폴백해서 **기초잔액을 경유한 잘못된 분개**가 기록될 수 있다. 한쪽 carrier 가 confirmed=false 일 때 구멍이 크다.
@@ -0,0 +1,220 @@
"""은행 이체 SMS ↔ 증권 계좌 입출금(kt00015) 짝 맞추기.
은행에서 증권으로 이체하면 은행 SMS 에는 **입금자명(=본인 이름)만** 찍혀서
어디로 갔는지 알 수 없다. 그래서 `방효원` 같은 자체이체 룰에 걸려
`기초잔액 ← 은행` 이 되고, 자본 분개 금지 가드에 막혀 **미반영**된다.
반대편(증권 입금)은 SMS 가 아예 없어 월 1회 reconcile 차액으로만 나타나는데,
그 차액은 전부 `주식평가수익` 으로 분개되므로 **이체가 손익으로 둔갑**한다.
이 모듈은 그 짝을 키움 kt00015 입출금 내역에서 찾아
`증권(효원) ← 하나은행(효원)` 이체 한 건으로 만들어 준다.
⚠️ **capital-block 직전에만 호출한다** — 평시 키움 콜 0. 이체가 실제로 있었던
사이클에만 계좌 수만큼(4콜) 조회한다.
⚠️ **애매하면 매칭하지 않는다** — 후보가 여럿이면 포기하고 기존 알림 경로로
보낸다. 틀린 분개보다 사람이 보는 편이 낫다.
"""
from __future__ import annotations
import json
import os
import sys
from datetime import datetime, timedelta
from pathlib import Path
from zoneinfo import ZoneInfo
KST = ZoneInfo("Asia/Seoul")
ROOT = Path("/Users/snowoyh/.openclaw")
STOCK_SCRIPTS = ROOT / "agents" / "stock" / "workspace" / "scripts"
MATCHED_FILE = ROOT / "agents" / "budget" / "workspace" / "state" / "whooing_securities_matched.json"
# 증권 계좌 라벨 → 후잉 자산 계정명. 라벨 prefix 규칙은 send_balance_to_budget.py 와 동일.
GAHEE_PREFIX = "가희"
OWNER_ASSET = {"self": "증권(효원)", "gahee": "증권(가희)"}
# 은행 SMS 종류 → 기대되는 증권 쪽 방향.
OPPOSITE = {"withdrawal": "IN", "deposit": "OUT"}
# 시각까지 일치하는 후보를 우선한다 (오픈뱅킹은 즉시 반영이라 실측 12초 차).
# 후보가 여럿일 때만 쓰는 tie-breaker 이지 1차 필터가 아니다 —
# 증권사 처리가 늦어 분 단위로 벌어지는 경우가 있어 창으로 잘라내면 놓친다.
TIME_TIEBREAK_SECONDS = 600
def _owner_of(label: str) -> str:
return "gahee" if label.startswith(GAHEE_PREFIX) else "self"
def row_key(label: str, row: dict) -> str:
"""kt00015 행에는 고유 ID 가 없다. 중복 분개 방지용 합성 키.
같은 날 같은 금액을 두 번 이체하면 time 으로 갈린다."""
return f"{row['date']}|{label}|{row['io_tp']}|{row['amount']}|{row.get('time') or ''}"
def _load_matched() -> dict:
try:
with MATCHED_FILE.open(encoding="utf-8") as f:
return json.load(f)
except (OSError, ValueError):
return {}
def mark_matched(key: str, meta: dict) -> None:
"""분개 성공 후 호출. POST 성공한 뒤에만 기록해야 재시도 여지가 남는다."""
data = _load_matched()
data[key] = {**meta, "matched_at": datetime.now(KST).isoformat()}
# 오래된 항목 정리 (180일) — 무한 증식 방지.
cutoff = (datetime.now(KST) - timedelta(days=180)).strftime("%Y%m%d")
data = {k: v for k, v in data.items() if k.split("|", 1)[0] >= cutoff}
MATCHED_FILE.parent.mkdir(parents=True, exist_ok=True)
tmp = MATCHED_FILE.with_suffix(".tmp")
with tmp.open("w", encoding="utf-8") as f:
json.dump(data, f, ensure_ascii=False, indent=2)
os.replace(tmp, MATCHED_FILE)
def _fetch_day(base_dt: str) -> dict[str, list[dict]] | None:
"""전 계좌의 그날 입출금. 조회 실패는 None (= 판단 보류, 매칭 안 함)."""
sys.path.insert(0, str(STOCK_SCRIPTS))
try:
import kiwoom_client as kc
import investment_principal as ip
except Exception as e: # noqa: BLE001 — import 실패해도 후잉 동기화는 계속돼야 한다
sys.stderr.write(f"securities_match: 키움 모듈 import 실패: {e}\n")
return None
out: dict[str, list[dict]] = {}
for acc in kc.list_accounts():
label = acc["label"]
try:
rows = kc.get_cash_flow(label, base_dt=base_dt)
except Exception as e: # noqa: BLE001
sys.stderr.write(f"securities_match: {label} kt00015 조회 실패: {e}\n")
return None # 일부만 보고 판단하면 오매칭 — 전부 성공해야 진행
out[label] = [r for r in rows if ip.is_principal_flow(r["rmrk"])]
return out
def _drop_internal_transfers(day: dict[str, list[dict]]) -> dict[str, list[dict]]:
"""증권 계좌 간 대체(예: 가희_일반 → 가희_ISA)를 후보에서 뺀다.
후잉에선 같은 자산이라 분개 대상이 아닌데, 금액이 같으면 은행 SMS 와
오매칭될 수 있다. 서로 다른 계좌에 같은 금액의 IN/OUT 이 함께 있으면 제외."""
ins = {(lb, r["amount"]) for lb, rows in day.items() for r in rows if r["io_tp"] == "IN"}
outs = {(lb, r["amount"]) for lb, rows in day.items() for r in rows if r["io_tp"] == "OUT"}
paired = {a for lb, a in ins} & {a for lb, a in outs}
if not paired:
return day
cleaned: dict[str, list[dict]] = {}
for lb, rows in day.items():
keep = []
for r in rows:
if r["amount"] in paired and any(
other != lb and any(
o["amount"] == r["amount"] and o["io_tp"] != r["io_tp"] for o in day[other]
)
for other in day
):
continue
keep.append(r)
cleaned[lb] = keep
return cleaned
def _sms_time(created_at_utc: str | None) -> datetime | None:
if not created_at_utc:
return None
try:
return datetime.fromisoformat(created_at_utc.replace("Z", "+00:00")).astimezone(KST)
except ValueError:
return None
def find_match(entry_date: str, amount: int, bank_kind: str,
created_at_utc: str | None = None) -> dict | None:
"""은행 SMS 한 건에 대응하는 증권 입출금 행을 찾는다.
entry_date: 'YYYYMMDD' (은행 SMS 기준일)
amount: 원 (양수)
bank_kind: 'withdrawal' (은행→증권) | 'deposit' (증권→은행)
created_at_utc: SMS 수신 시각 ISO — 후보가 여럿일 때 tie-break 에만 쓴다
반환 (매칭 성공 시): {label, asset, row, key}
반환 None: 후보 없음 / 후보 여럿 / 이미 처리됨 / 조회 실패
"""
want_io = OPPOSITE.get(bank_kind)
if want_io is None:
return None
day = _fetch_day(entry_date)
if day is None:
return None
day = _drop_internal_transfers(day)
matched = _load_matched()
cands = [
{"label": lb, "row": r, "key": row_key(lb, r)}
for lb, rows in day.items()
for r in rows
if r["io_tp"] == want_io and r["amount"] == amount and row_key(lb, r) not in matched
]
if not cands:
return None
if len(cands) > 1:
# 시각이 가까운 후보가 정확히 하나면 그걸 고른다. 아니면 포기.
sms_at = _sms_time(created_at_utc)
near = []
if sms_at is not None:
for c in cands:
t = c["row"].get("time")
if not t:
continue
try:
rt = datetime.strptime(f"{entry_date} {t}", "%Y%m%d %H:%M:%S").replace(tzinfo=KST)
except ValueError:
continue
if abs((rt - sms_at).total_seconds()) <= TIME_TIEBREAK_SECONDS:
near.append(c)
if len(near) != 1:
sys.stderr.write(
f"securities_match: {entry_date} {amount:,}원 {want_io} 후보 {len(cands)}건 — 매칭 포기\n")
return None
cands = near
c = cands[0]
c["asset"] = OWNER_ASSET[_owner_of(c["label"])]
return c
def build_payload(match: dict, bank_asset: str, entry_date: str, amount: int,
bank_kind: str, balance: int | None = None) -> dict:
"""후잉 이체 payload. 은행→증권이면 left=증권, 증권→은행이면 left=은행."""
if bank_kind == "withdrawal":
left, right = match["asset"], bank_asset
else:
left, right = bank_asset, match["asset"]
memo = f"{match['label']} {match['row']['rmrk']}"
if balance is not None:
memo += f" / 잔액 : {balance:,}원"
return {
"entry_date": entry_date,
"money": amount,
"item": "이체",
"left": left,
"right": right,
"memo": memo,
}
if __name__ == "__main__":
# 진단용: python3 securities_match.py YYYYMMDD 금액 withdrawal|deposit
if len(sys.argv) < 4:
print(__doc__)
print("usage: securities_match.py YYYYMMDD AMOUNT withdrawal|deposit [SMS_ISO_UTC]")
raise SystemExit(2)
m = find_match(sys.argv[1], int(sys.argv[2]), sys.argv[3],
sys.argv[4] if len(sys.argv) > 4 else None)
if m is None:
print("매칭 없음")
raise SystemExit(1)
print(json.dumps(m, ensure_ascii=False, indent=2))
@@ -25,6 +25,7 @@ import imsg_cli
import notify import notify
import whooing_balance import whooing_balance
import gahee_reminder import gahee_reminder
import securities_match
# 후잉 웹훅은 HTTP 200을 반환하면서 본문에 "fail"/"Error : ..." 를 줄 수 있어 본문 검증 필수. # 후잉 웹훅은 HTTP 200을 반환하면서 본문에 "fail"/"Error : ..." 를 줄 수 있어 본문 검증 필수.
SUCCESS_BODY = "done" SUCCESS_BODY = "done"
@@ -753,6 +754,32 @@ def detect_pairs(candidates, accounts):
return pairs, used return pairs, used
def try_securities_transfer(parsed, cand, accounts):
"""자본 분개로 갈 뻔한 은행 SMS 가 실은 증권 이체인지 확인.
은행 SMS 에는 입금자명(본인 이름)만 찍혀 목적지를 알 수 없지만, 반대편은
키움 kt00015 에 남는다. 짝을 찾으면 자본이 아니라 자산↔자산 이체로 분개한다.
반환: {payload, key, label} | None (짝 없음·애매·조회 실패)
"""
if not parsed or parsed.get("kind") not in ("withdrawal", "deposit"):
return None
bank_asset = accounts.get("carrier_to_account", {}).get(cand["info"].get("carrier"))
if not bank_asset:
return None # 은행 자산 계정을 모르면 이체를 구성할 수 없다
entry_date = parsed.get("entry_date")
amount = parsed.get("amount")
if not entry_date or not amount:
return None
match = securities_match.find_match(
entry_date, amount, parsed["kind"], cand.get("created_at"))
if match is None:
return None
payload = securities_match.build_payload(
match, bank_asset, entry_date, amount, parsed["kind"], parsed.get("balance"))
return {"payload": payload, "key": match["key"], "label": match["label"]}
def post_to_whooing(webhook_url, payload, dry_run=False): def post_to_whooing(webhook_url, payload, dry_run=False):
"""payload는 dict. 반환: (ok: bool, status: int, body: str). """payload는 dict. 반환: (ok: bool, status: int, body: str).
HTTP 2xx + body가 'done' 으로 시작해야 성공. 그 외(HTTP 200 + 'fail' 포함) 모두 실패.""" HTTP 2xx + body가 'done' 으로 시작해야 성공. 그 외(HTTP 200 + 'fail' 포함) 모두 실패."""
@@ -879,6 +906,7 @@ def main():
sent_transfer = 0 sent_transfer = 0
sent_structured = 0 sent_structured = 0
sent_raw = 0 sent_raw = 0
sent_securities = 0
sent_cancel = 0 sent_cancel = 0
failed = 0 failed = 0
new_failures = [] new_failures = []
@@ -994,10 +1022,22 @@ def main():
# 처제 대납금 상환이었는데 입금자명이 "방효원"이라 자체이체 룰에 걸렸다). # 처제 대납금 상환이었는데 입금자명이 "방효원"이라 자체이체 룰에 걸렸다).
# ⚠️ 커서는 latest_skip 으로 진행시킨다 — 재시도해도 같은 룰이 같은 결과를 내므로 # ⚠️ 커서는 latest_skip 으로 진행시킨다 — 재시도해도 같은 룰이 같은 결과를 내므로
# 여기서 커서를 막으면 이 메시지 뒤의 모든 거래가 영구히 멈춘다. # 여기서 커서를 막으면 이 메시지 뒤의 모든 거래가 영구히 멈춘다.
sec_key = None
if mode == "structured" and ( if mode == "structured" and (
structured.get("left") in capital_accounts structured.get("left") in capital_accounts
or structured.get("right") in capital_accounts or structured.get("right") in capital_accounts
): ):
# 자본으로 갈 뻔한 건이 실은 증권 이체일 수 있다. 은행 SMS 는 입금자명만
# 주지만 반대편이 키움 kt00015 에 남으므로, 짝을 찾으면 자본이 아니라
# 자산↔자산 이체로 분개한다. 짝이 없으면 기존대로 미반영+알림.
sec = try_securities_transfer(parsed, c, accounts)
if sec:
payload = {k: str(v) for k, v in sec["payload"].items()}
mode = "securities"
sec_key = sec["key"]
display = (f"{sec['payload']['left']} ← {sec['payload']['right']} "
f"{sec['payload']['money']:,}원 (증권 {sec['label']} 이체)")
else:
capital_blocked.append({ capital_blocked.append({
"label": c["info"]["label"], "label": c["info"]["label"],
"created_at": c["created_at"], "created_at": c["created_at"],
@@ -1011,7 +1051,16 @@ def main():
ok, status, body = post_to_whooing(webhook_url, payload, dry_run=args.dry_run) ok, status, body = post_to_whooing(webhook_url, payload, dry_run=args.dry_run)
if ok: if ok:
if mode == "structured": if mode == "securities":
sent_securities += 1
# POST 성공 후에만 기록한다 — 실패하면 다음에 다시 짝으로 잡혀야 한다.
if not args.dry_run:
securities_match.mark_matched(sec_key, {
"sms_at": c["created_at"],
"money": int(payload["money"]),
"entry": display,
})
elif mode == "structured":
sent_structured += 1 sent_structured += 1
carrier_key = c["info"].get("carrier") carrier_key = c["info"].get("carrier")
if carrier_key: if carrier_key:
@@ -1353,9 +1402,9 @@ def main():
save_json(SYNC_STATE_FILE, sync_state) save_json(SYNC_STATE_FILE, sync_state)
if blocked_at: if blocked_at:
print(f"⚠️ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, raw {sent_raw}건, 취소감액 {sent_cancel}건, 실패 {failed}건 — {blocked_at} 에서 중단(다음 cron 재시도)") print(f"⚠️ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, 증권이체 {sent_securities}건, raw {sent_raw}건, 취소감액 {sent_cancel}건, 실패 {failed}건 — {blocked_at} 에서 중단(다음 cron 재시도)")
else: else:
print(f"✅ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, raw {sent_raw}건, 취소감액 {sent_cancel}건, 실패 {failed}건 (last={final_latest or latest})") print(f"✅ 후잉 동기화: transfer {sent_transfer}건, structured {sent_structured}건, 증권이체 {sent_securities}건, raw {sent_raw}건, 취소감액 {sent_cancel}건, 실패 {failed}건 (last={final_latest or latest})")
# 가희 잔액 리마인더 & 답신 자동 분개 (격리 — 실패해도 결제 sync 결과는 위에서 이미 출력됨) # 가희 잔액 리마인더 & 답신 자동 분개 (격리 — 실패해도 결제 sync 결과는 위에서 이미 출력됨)
run_gahee_reminder() run_gahee_reminder()
@@ -1,5 +0,0 @@
{
"version": 1,
"bootstrapSeededAt": "2026-04-17T03:21:06.738Z",
"setupCompletedAt": "2026-04-17T05:20:30.244Z"
}
+61
View File
@@ -110,3 +110,64 @@ LLM-LLM 자연어 통신은 프롬프트 인젝션·할루시네이션 증폭
## 직접 고쳐 써라 ## 직접 고쳐 써라
이 문서는 출발점이다. 패턴이 보이면 직접 업데이트해라. 정비는 코디가 하지만, 이 매뉴얼의 작가는 너다. 이 문서는 출발점이다. 패턴이 보이면 직접 업데이트해라. 정비는 코디가 하지만, 이 매뉴얼의 작가는 너다.
## Tools
### Local notes (migrated from TOOLS.md)
# TOOLS.md - Local Notes
환경 세팅 메모. 관리자님 자산 관련 파일과 명령어 위치.
## Stock Data
모든 경로는 `agents/stock/workspace/` 기준.
- `memory/portfolio.json` — 보유 종목 **v2 스키마 스냅샷** (`accounts.{일반,ISA,가희_일반,가희_ISA}.positions`). 참고용. 실제 리포트 숫자는 항상 키움 REST 실시간 조회.
- `state/portfolio_daily_snapshot.json` — 일별 owner-그룹 스냅샷. v4 스키마: `{date: {owner: {holdings: {stock:{...}}, deposit: int, trade_journal: [...], realized_pl_total: int, realized_fees_total: int}}}`. 전날대비 순자산(평가+예수금) + 월별 실현손익/회전율/수수료 통계용. `stock_portfolio_report.py`가 작성. legacy v1/v2/v3 호환.
- `state/kiwoom_tokens/{일반,ISA,가희_일반,가희_ISA}.json` — 키움 REST OAuth 토큰 캐시 (계좌별 분리). `expires_dt` 기준 자동 갱신.
- `state/ipo_calendar_sync.json` — 공모주 캘린더 동기화 상태.
- `state/behive_watchlist.json` — **비하이브 종목분석 워치리스트**. 관리자님이 "OO 목표가 얼마야?" 같은 비하이브 분석 관련 질문하면 `skills/behive-watchlist` 사용. 종목별 목표/매입/손절/요약/출처영상 포함.
- `state/behive_youtube_seen.json` / `state/behive_last_fetch.json` — 비하이브 스크립트 내부 상태.
- `/Users/snowoyh/.openclaw/credentials/kiwoom.json` — 키움 자격증명 (계좌별 AppKey/SecretKey 분리 v2 스키마). 예제: `kiwoom.json.example`.
## Scripts (python3)
- `scripts/kiwoom_client.py {token|accounts|summary|balance|positions}` — 키움 REST 조회 전용 클라이언트. 잔고/보유/계좌평가. **주문 함수 절대 부재**(매매 절대 원칙, SOUL.md 참조). 자세한 사용법은 `skills/kiwoom-rest`.
- `scripts/stock_portfolio_report.py {run|send} [--by-account]` — 리포트 생성/이메일. 평일 20:10 launchd로 `send`. owner 그룹(본인 / 가희)별 블록 표시가 기본 (그룹 내 종목 합산), `--by-account`는 owner 블록 안에서 4계좌별 분리 뷰까지.
- `scripts/ipo_calendar_sync.py` — 공모주 일정 구글 캘린더 등록. 매월 1일 cron.
- `scripts/behive_youtube_digest.py {fetch|save|email|notify|list|show|remove}` — 비하이브투자자문 '종목분석' 영상 감지·요약·워치리스트 저장·이메일/텔레그램 발송. 평일 07/12/18시 cron.
## 관리자님 관련
- 잔고·보유·수익률 질문이 들어오면 **키움 REST로 실시간 조회**. `memory/portfolio.json`은 스냅샷이라 stale 할 수 있음.
- 이메일 수신자: `mini.snowoyh@gmail.com` (리포트 발송 대상)
## 증권사
- 키움증권. iMessage 체결통보 파싱은 2026-04-24 REST API 연동으로 폐기됨 — 모든 체결·잔고 정보는 `kiwoom_client.py`로 조회.
## Playwright MCP (브라우저 자동화)
OpenClaw가 `openclaw.json` 의 MCP 서버 `playwright`로 노출. 도구는 `playwright__browser_*` prefix로 약 23개.
- **탐색:** `navigate / navigate_back / tabs / wait_for`
- **관찰:** `snapshot` (접근성 트리 — 클릭 대상 ref 식별에 **우선 사용**) / `take_screenshot` / `console_messages` / `network_requests` / `network_request`
- **조작:** `click / type / fill_form / press_key / hover / select_option / drag / drop / file_upload / handle_dialog / resize / close`
- **평가:** `evaluate` (페이지 JS 컨텍스트) / `run_code_unsafe` (Playwright 코드 직접 — **RCE 등급, 마지막 수단**)
**표준 흐름:** `navigate` → `snapshot`으로 ref 확보 → `click`/`type`/`fill_form` → `wait_for`로 결과 대기 → `snapshot` 또는 `network_requests`로 검증. 스크린샷은 사람 보고용이지 다음 동작 분기 근거로 쓰지 말 것.
**운영 특성:**
- 기본값 `--headless --isolated`. 매 세션 쿠키·로그인 폐기.
- 영속 로그인 필요한 사이트는 시도 전 **코디에게 `user-data-dir` 분리·등록 요청**.
- 첫 호출 시 npx spawn 1~2초 지연.
- **키움 영웅문·HTS는 보안프로그램이 Playwright 탐지·차단할 가능성 큼 → 시도 자제**. 잔고·시세는 항상 `kiwoom_client.py` REST 우선.
- 공동인증서·OTP·CAPTCHA 화면이 나오면 **즉시 중단하고 관리자님께 보고**, 우회 시도 X.
**활용 시나리오 (레이 맥락):**
- DART 공시 검색·본문 추출·PDF 다운로드 (정정·합병·유상증자 키워드 모니터링)
- 네이버 증권 외국인·기관 매매동향 등 키움 REST에 없는 보조 지표 스크래핑
- 비하이브 페이지 보조(댓글·공지 등 유튜브 자막 외 정보) — 기존 `behive_youtube_digest`와 상호 보완
- 종목별 공시·뉴스 변화 감지 → 워치리스트 알림 보강 (LLM 미경유 모니터에 결과만 넘김)
- 매매(주문) 흐름에는 **절대 사용 금지** — 주문은 `orders/kiwoom_order.py` REST 한 경로만 (SOUL.md 매매 원칙 참조)
+1 -1
View File
@@ -53,7 +53,7 @@
| `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 미호출) | | `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`. 실패 시 기존 파일 보존 | | `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 필요 | | `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`. **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` | | `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`. **2026-09-10 5번째 명령 추가**: `kiwoom_client.py refresh-codes --if-stale 7` — 종목코드 캐시(`state/stock_codes.json`) 주 1회 갱신. `--if-stale N` 이 파일 mtime 을 보고 N일 미만이면 건너뛰므로 매일 발화해도 실제 ka10099 조회는 주 1회. ⚠️ 이 캐시의 `nxt_enable` 이 자산웹의 NXT 거래 종목 판정 근거(`behive_web._is_nxt_traded`)라 낡으면 🔥거래량 배지·거래가능 초록점이 틀어진다(금액·매매엔 영향 없음). 기존 lazy 갱신은 '모르는 종목명 검색' 때만 돌아 8/20~9/10 3주간 방치돼 있었고, 갱신하니 4300종목 중 nxt_enable 3건 변경·신규 17·삭제 13이 실제로 나왔다 |
| `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-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 고정이라 장중 안 바뀌던 것 수정) | | `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이 매 스캔 메인+변이 함께 갱신 | | (트리거 없음) | 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이 매 스캔 메인+변이 함께 갱신 |
-56
View File
@@ -1,56 +0,0 @@
# TOOLS.md - Local Notes
환경 세팅 메모. 관리자님 자산 관련 파일과 명령어 위치.
## Stock Data
모든 경로는 `agents/stock/workspace/` 기준.
- `memory/portfolio.json` — 보유 종목 **v2 스키마 스냅샷** (`accounts.{일반,ISA,가희_일반,가희_ISA}.positions`). 참고용. 실제 리포트 숫자는 항상 키움 REST 실시간 조회.
- `state/portfolio_daily_snapshot.json` — 일별 owner-그룹 스냅샷. v4 스키마: `{date: {owner: {holdings: {stock:{...}}, deposit: int, trade_journal: [...], realized_pl_total: int, realized_fees_total: int}}}`. 전날대비 순자산(평가+예수금) + 월별 실현손익/회전율/수수료 통계용. `stock_portfolio_report.py`가 작성. legacy v1/v2/v3 호환.
- `state/kiwoom_tokens/{일반,ISA,가희_일반,가희_ISA}.json` — 키움 REST OAuth 토큰 캐시 (계좌별 분리). `expires_dt` 기준 자동 갱신.
- `state/ipo_calendar_sync.json` — 공모주 캘린더 동기화 상태.
- `state/behive_watchlist.json` — **비하이브 종목분석 워치리스트**. 관리자님이 "OO 목표가 얼마야?" 같은 비하이브 분석 관련 질문하면 `skills/behive-watchlist` 사용. 종목별 목표/매입/손절/요약/출처영상 포함.
- `state/behive_youtube_seen.json` / `state/behive_last_fetch.json` — 비하이브 스크립트 내부 상태.
- `/Users/snowoyh/.openclaw/credentials/kiwoom.json` — 키움 자격증명 (계좌별 AppKey/SecretKey 분리 v2 스키마). 예제: `kiwoom.json.example`.
## Scripts (python3)
- `scripts/kiwoom_client.py {token|accounts|summary|balance|positions}` — 키움 REST 조회 전용 클라이언트. 잔고/보유/계좌평가. **주문 함수 절대 부재**(매매 절대 원칙, SOUL.md 참조). 자세한 사용법은 `skills/kiwoom-rest`.
- `scripts/stock_portfolio_report.py {run|send} [--by-account]` — 리포트 생성/이메일. 평일 20:10 launchd로 `send`. owner 그룹(본인 / 가희)별 블록 표시가 기본 (그룹 내 종목 합산), `--by-account`는 owner 블록 안에서 4계좌별 분리 뷰까지.
- `scripts/ipo_calendar_sync.py` — 공모주 일정 구글 캘린더 등록. 매월 1일 cron.
- `scripts/behive_youtube_digest.py {fetch|save|email|notify|list|show|remove}` — 비하이브투자자문 '종목분석' 영상 감지·요약·워치리스트 저장·이메일/텔레그램 발송. 평일 07/12/18시 cron.
## 관리자님 관련
- 잔고·보유·수익률 질문이 들어오면 **키움 REST로 실시간 조회**. `memory/portfolio.json`은 스냅샷이라 stale 할 수 있음.
- 이메일 수신자: `mini.snowoyh@gmail.com` (리포트 발송 대상)
## 증권사
- 키움증권. iMessage 체결통보 파싱은 2026-04-24 REST API 연동으로 폐기됨 — 모든 체결·잔고 정보는 `kiwoom_client.py`로 조회.
## Playwright MCP (브라우저 자동화)
OpenClaw가 `openclaw.json` 의 MCP 서버 `playwright`로 노출. 도구는 `playwright__browser_*` prefix로 약 23개.
- **탐색:** `navigate / navigate_back / tabs / wait_for`
- **관찰:** `snapshot` (접근성 트리 — 클릭 대상 ref 식별에 **우선 사용**) / `take_screenshot` / `console_messages` / `network_requests` / `network_request`
- **조작:** `click / type / fill_form / press_key / hover / select_option / drag / drop / file_upload / handle_dialog / resize / close`
- **평가:** `evaluate` (페이지 JS 컨텍스트) / `run_code_unsafe` (Playwright 코드 직접 — **RCE 등급, 마지막 수단**)
**표준 흐름:** `navigate` → `snapshot`으로 ref 확보 → `click`/`type`/`fill_form` → `wait_for`로 결과 대기 → `snapshot` 또는 `network_requests`로 검증. 스크린샷은 사람 보고용이지 다음 동작 분기 근거로 쓰지 말 것.
**운영 특성:**
- 기본값 `--headless --isolated`. 매 세션 쿠키·로그인 폐기.
- 영속 로그인 필요한 사이트는 시도 전 **코디에게 `user-data-dir` 분리·등록 요청**.
- 첫 호출 시 npx spawn 1~2초 지연.
- **키움 영웅문·HTS는 보안프로그램이 Playwright 탐지·차단할 가능성 큼 → 시도 자제**. 잔고·시세는 항상 `kiwoom_client.py` REST 우선.
- 공동인증서·OTP·CAPTCHA 화면이 나오면 **즉시 중단하고 관리자님께 보고**, 우회 시도 X.
**활용 시나리오 (레이 맥락):**
- DART 공시 검색·본문 추출·PDF 다운로드 (정정·합병·유상증자 키워드 모니터링)
- 네이버 증권 외국인·기관 매매동향 등 키움 REST에 없는 보조 지표 스크래핑
- 비하이브 페이지 보조(댓글·공지 등 유튜브 자막 외 정보) — 기존 `behive_youtube_digest`와 상호 보완
- 종목별 공시·뉴스 변화 감지 → 워치리스트 알림 보강 (LLM 미경유 모니터에 결과만 넘김)
- 매매(주문) 흐름에는 **절대 사용 금지** — 주문은 `orders/kiwoom_order.py` REST 한 경로만 (SOUL.md 매매 원칙 참조)
@@ -1,5 +0,0 @@
{
"version": 1,
"bootstrapSeededAt": "2026-04-17T03:21:06.738Z",
"setupCompletedAt": "2026-04-17T05:20:30.244Z"
}
+260 -122
View File
@@ -862,6 +862,40 @@ def _load_interests() -> list[dict]:
return sorted(data.values(), key=lambda e: e.get('saved_at', ''), reverse=True) return sorted(data.values(), key=lambda e: e.get('saved_at', ''), reverse=True)
_NXT_ENABLE_TTL = 300.0
_nxt_enable_cache: dict = {'ts': 0.0, 'map': {}}
def _nxt_enable_map() -> dict:
"""종목코드 → NXT 거래가능 여부(bool). `state/stock_codes.json` 캐시 읽기라 키움 콜 0.
⚠️ `kc.lookup_stock_meta` 는 호출마다 954KB JSON 을 다시 읽고 3500종목을 순회하므로
100종목에 부르면 렌더가 멈춘다 — 코드 키 역인덱스를 만들어 5분 캐시한다.
⚠️ 캐시에 없는 종목(신규 상장 등)은 여기서 빠지고, 호출측이 보수적으로 True 취급한다
(조회를 한 번 더 하는 쪽이 값이 틀리는 것보다 낫다).
"""
now = time.time()
if now - _nxt_enable_cache['ts'] <= _NXT_ENABLE_TTL and _nxt_enable_cache['map']:
return _nxt_enable_cache['map']
try:
import kiwoom_client as kc
m = {info['code']: bool(info.get('nxt_enable'))
for info in kc._load_code_cache().values() if info.get('code')}
except Exception:
m = {}
if m:
_nxt_enable_cache['map'] = m
_nxt_enable_cache['ts'] = now
return m
def _is_nxt_traded(code: str) -> bool:
"""NXT 에서 거래되는 종목인가. 모르면 True(보수적) — 아래 KRX 보정 조회를 한 번 더 한다."""
if not code:
return True
return _nxt_enable_map().get(code, True)
def _fetch_quotes_batch(entries: list[dict]) -> list[dict]: def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
"""ka10095(관심종목정보) 한 콜로 워치리스트 시세 일괄 조회. 19종목 ~0.05s. """ka10095(관심종목정보) 한 콜로 워치리스트 시세 일괄 조회. 19종목 ~0.05s.
캐시 히트인 entry는 캐시 사용, 미스인 entry만 batch에 포함. 캐시 히트인 entry는 캐시 사용, 미스인 entry만 batch에 포함.
@@ -901,9 +935,8 @@ def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
out['high'] = snap.get('high') out['high'] = snap.get('high')
out['low'] = snap.get('low') out['low'] = snap.get('low')
out['volume'] = snap.get('volume') out['volume'] = snap.get('volume')
out['_nxt_volume'] = snap.get('_nxt_volume', 0) out['_krx_volume'] = snap.get('_krx_volume', 0)
out['_krx_price'] = snap.get('_krx_price', 0) out['_krx_price'] = snap.get('_krx_price', 0)
out['_nxt_price'] = snap.get('_nxt_price', 0)
continue continue
if code: if code:
miss_codes.append(code) miss_codes.append(code)
@@ -915,8 +948,10 @@ def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
if not miss_codes: if not miss_codes:
return cards return cards
nxt_probe_codes = list(miss_codes) # KRX 보정 조회 대상 — NXT 에서도 거래되는 종목만. NXT 미거래 종목은 AL 이 곧 KRX 값이라
nxt_probe_indices = list(miss_indices) # 조회해봐야 같은 값이 온다(실측 101종목 예외 0건). 종목이 늘어도 이 규칙은 그대로 성립한다.
krx_probe_codes = [c for c in miss_codes if _is_nxt_traded(c)]
krx_probe_indices = [i for i, c in zip(miss_indices, miss_codes) if _is_nxt_traded(c)]
# WS 허브 연결 시 — 미스 종목 시세를 허브 메모리(0B 실시간, KRX+NXT 통합)에서 우선 충당. # WS 허브 연결 시 — 미스 종목 시세를 허브 메모리(0B 실시간, KRX+NXT 통합)에서 우선 충당.
# 서버가 동일 렌더러로 OHLC를 그린다. 단, NXT 거래가능 초록점은 허브 exchange가 아니라 # 서버가 동일 렌더러로 OHLC를 그린다. 단, NXT 거래가능 초록점은 허브 exchange가 아니라
@@ -943,7 +978,7 @@ def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
out['low'] = q.get('low') or None out['low'] = q.get('low') or None
out['volume'] = q.get('volume') out['volume'] = q.get('volume')
out['_krx_price'] = price out['_krx_price'] = price
out['_nxt_price'] = 0 out['_krx_volume'] = q.get('volume') or 0
miss_codes, miss_indices = rest_codes, rest_indices miss_codes, miss_indices = rest_codes, rest_indices
batch: dict[str, dict] = {} batch: dict[str, dict] = {}
@@ -955,20 +990,20 @@ def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
for idx in miss_indices: for idx in miss_indices:
cards[idx] = _fetch_quote(entries[idx]) cards[idx] = _fetch_quote(entries[idx])
# NXT 비교용 batch — 마크(KRX/NXT) 판정에 사용. 실패해도 fallback X (마크만 KRX로 처리). # KRX 단독 batch — RVOL 이 KRX 기준(일봉 ka10081 이 KRX 거래량이라 분모와 맞춰야 한다)이라
# get_watchlist_quotes는 NXT 단독 suffix를 'NX'로 받는다. 'NXT'는 suffix 없이 KRX/기본값으로 # 필요하다. 예전엔 AL−NXT 로 역산했는데 두 조회의 시점차만큼 오차가 났다(실측 삼성전자 14주).
# 떨어져 NXT 미거래 종목도 거래 가능처럼 보이므로 쓰면 안 된다. # 실패해도 fallback X — 아래에서 AL 값으로 떨어진다.
nxt_batch: dict[str, dict] = {} krx_batch: dict[str, dict] = {}
try: try:
nxt_batch = kc.get_watchlist_quotes(nxt_probe_codes, exchange='NX') krx_batch = kc.get_watchlist_quotes(krx_probe_codes, exchange='KRX')
except Exception as ex: except Exception as ex:
sys.stderr.write(f'ka10095 NXT batch 실패 (마크 판정용): {ex}\n') sys.stderr.write(f'ka10095 KRX batch 실패 (RVOL 보정용): {ex}\n')
for idx, code in zip(nxt_probe_indices, nxt_probe_codes): for idx, code in zip(krx_probe_indices, krx_probe_codes):
nxt_q = nxt_batch.get(code) if nxt_batch else None krx_q = krx_batch.get(code) if krx_batch else None
cards[idx]['_nxt_price'] = (nxt_q or {}).get('price', 0) if nxt_q else 0 if krx_q:
# NXT 거래량 — RVOL은 KRX 기준(일봉 평균과 동일)이라 KRX=AL−NXT 계산에 사용. cards[idx]['_krx_price'] = krx_q.get('price', 0)
cards[idx]['_nxt_volume'] = (nxt_q or {}).get('volume', 0) if nxt_q else 0 cards[idx]['_krx_volume'] = krx_q.get('volume', 0)
for idx, code in zip(miss_indices, miss_codes): for idx, code in zip(miss_indices, miss_codes):
q = batch.get(code) q = batch.get(code)
@@ -987,10 +1022,12 @@ def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
out['volume'] = q.get('volume') out['volume'] = q.get('volume')
else: else:
out['quote_error'] = '가격 0' out['quote_error'] = '가격 0'
# 마크 판정: NXT batch 가격 vs 기본 batch 가격 비교. # ⚠️ KRX 값은 위 krx_batch 루프가 이미 채웠을 수 있다 — 덮어쓰지 말 것.
nxt_price = out.get('_nxt_price', 0) or 0 # 비어 있는 종목(NXT 미거래 또는 KRX 조회 실패)은 AL 이 곧 KRX 값이다.
if not out.get('_krx_price'):
out['_krx_price'] = price out['_krx_price'] = price
out['_nxt_price'] = nxt_price if not out.get('_krx_volume'):
out['_krx_volume'] = out.get('volume') or 0
snap = { snap = {
'price': out['price'], 'price': out['price'],
'day_change': out['day_change'], 'day_change': out['day_change'],
@@ -1000,9 +1037,8 @@ def _fetch_quotes_batch(entries: list[dict]) -> list[dict]:
'high': out['high'], 'high': out['high'],
'low': out['low'], 'low': out['low'],
'volume': out.get('volume'), 'volume': out.get('volume'),
'_nxt_volume': out.get('_nxt_volume', 0), '_krx_volume': out.get('_krx_volume', 0),
'_krx_price': price, '_krx_price': out.get('_krx_price', 0),
'_nxt_price': nxt_price,
} }
with _quote_cache_lock: with _quote_cache_lock:
_quote_cache[code] = (snap, time.time() + QUOTE_CACHE_TTL) _quote_cache[code] = (snap, time.time() + QUOTE_CACHE_TTL)
@@ -1209,6 +1245,14 @@ def _build_owner_data(positions_by_acc: dict, balances: dict, journal_by_label:
# 부풀려지는 문제를 해결한다. 합계 KPI는 동일 NXT 스냅샷의 prev_eval과 비교하므로 # 부풀려지는 문제를 해결한다. 합계 KPI는 동일 NXT 스냅샷의 prev_eval과 비교하므로
# 개별 합 ≈ 합계로 자연스럽게 일치한다. # 개별 합 ≈ 합계로 자연스럽게 일치한다.
prev_holdings = (prev_snap_all or {}).get(owner, {}).get('holdings') or {} prev_holdings = (prev_snap_all or {}).get(owner, {}).get('holdings') or {}
# ⚠️ rebase 는 '당일 등락' 계산용 baseline 을 만드는 함수라, 어제 보유가 없는 종목
# (= 오늘 신규 매수)엔 매수 평단을 넣는다. 그건 손익 관점에선 맞지만 전일종가가 아니다.
# 미니표 '전일종가' 칸이 그 값을 쓰면 평단이 전일종가로 표시되므로(실측 우리기술
# 평단 13,780 이 전일종가 자리에 노출), 진짜 어제 종가만 따로 보존해 둔다.
for _r in consolidated:
_pp = (prev_holdings.get(_r.get('stock')) or {}).get('price', 0) or 0
if _pp > 0:
_r['pred_close_snap'] = _pp
rebase_to_nxt_close(consolidated, prev_holdings) rebase_to_nxt_close(consolidated, prev_holdings)
total_cost = sum(r['buy_amount'] for r in consolidated) total_cost = sum(r['buy_amount'] for r in consolidated)
@@ -1399,39 +1443,33 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
except Exception as e: except Exception as e:
sys.stderr.write(f'positions fetch failed: {e}\n') sys.stderr.write(f'positions fetch failed: {e}\n')
positions_by_acc = {} positions_by_acc = {}
# 가격 보정 — KRX와 NXT 각각 ka10095 batch 호출. # 가격 보정 — KRX·AL(통합) 2콜. exchange: 'KRX'=KRX 단독 / 'AL'=KRX+NXT 통합.
# kiwoom_client.get_watchlist_quotes 의 exchange: 'KRX'=KRX 단독 / 'NX'=NXT 단독 / 'AL'=통합. # ⚠️ NXT 단독('NX') 조회는 2026-09-10 제거 — 통합(AL)이 NXT 시간대엔 NXT 최신 체결과
# ('NXT' 값은 함수에서 인식 안 되고 KRX 기본으로 떨어짐 — 사용 X) # 같은 값을 주고(실측 가격 4값 일치), NXT 거래 여부는 종목 목록(nxt_enable)으로 안다.
# phase별 우선 시장: # 현재가 보정은 시간대와 무관하게 AL — AL 이 곧 '지금 활성 시장의 최신 체결'이라
# - regular(09:00~15:30): KRX 라이브 가격 # 예전의 phase별 분기(regular=KRX / nxt=NXT)가 필요 없다.
# - nxt(08:00~09:00, 15:30~20:00): NXT 라이브 가격 # 장외(closed/holiday/weekend)엔 보정하지 않고 kt00018 응답을 그대로 둔다.
# - 그 외(closed/holiday/weekend): kt00018 NXT 응답 그대로 유지
held_codes_set: set[str] = set() held_codes_set: set[str] = set()
for _items in positions_by_acc.values(): for _items in positions_by_acc.values():
for _p in _items: for _p in _items:
if _p.get('code'): if _p.get('code'):
held_codes_set.add(_p['code']) held_codes_set.add(_p['code'])
ohlc_map_krx: dict[str, dict] = {} ohlc_map_krx: dict[str, dict] = {}
ohlc_map_nxt: dict[str, dict] = {}
ohlc_map_al: dict[str, dict] = {} ohlc_map_al: dict[str, dict] = {}
# KRX/NX 2콜은 가격 보정뿐 아니라 보유종목 행의 KRX·NXT 듀얼 OHLC 미니(r['ohlc_krx']·['ohlc_nxt']) # KRX 1콜 = 보유행 듀얼 OHLC 미니의 KRX 열(r['ohlc_krx']), AL 1콜 = 통합 열(r['ohlc_al'])
# 데이터원이다. _AL 허브는 거래소별 단일 최신값만 들어 두 컬럼을 동시에 못 주므로 skip 불가 — WS 연결과 무관하게 호출. # + 요약 행 단일 캔들(r['ohlc']) + 현재가 보정. 허브(_AL 구독)는 거래소별 단일 최신값만
# AL(통합) 1콜은 요약 행 단일 캔들(r['ohlc']) 전용 — 시가는 NXT 프리마켓 시가, 고저는 두 시장 극값. # 들어 두 열을 동시에 못 주므로 skip 불가 — WS 연결과 무관하게 호출.
if held_codes_set: if held_codes_set:
try: try:
ohlc_map_krx = kc.get_watchlist_quotes(list(held_codes_set), exchange='KRX') ohlc_map_krx = kc.get_watchlist_quotes(list(held_codes_set), exchange='KRX')
except Exception as e: except Exception as e:
sys.stderr.write(f'KRX positions price fetch failed: {e}\n') sys.stderr.write(f'KRX positions price fetch failed: {e}\n')
try:
ohlc_map_nxt = kc.get_watchlist_quotes(list(held_codes_set), exchange='NX')
except Exception as e:
sys.stderr.write(f'NXT positions price fetch failed: {e}\n')
try: try:
ohlc_map_al = kc.get_watchlist_quotes(list(held_codes_set), exchange='AL') ohlc_map_al = kc.get_watchlist_quotes(list(held_codes_set), exchange='AL')
except Exception as e: except Exception as e:
sys.stderr.write(f'AL positions price fetch failed: {e}\n') sys.stderr.write(f'AL positions price fetch failed: {e}\n')
_phase = _market_phase_state().get('phase') _phase = _market_phase_state().get('phase')
active_map = ohlc_map_nxt if _phase == 'nxt' else (ohlc_map_krx if _phase == 'regular' else None) active_map = ohlc_map_al if _phase in ('regular', 'nxt') else None
if active_map: if active_map:
for _items in positions_by_acc.values(): for _items in positions_by_acc.values():
for _p in _items: for _p in _items:
@@ -1563,6 +1601,9 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
bucket['orders'].append(ord_entry) bucket['orders'].append(ord_entry)
g['orders'].append(ord_entry) g['orders'].append(ord_entry)
# 대기 중 예약 트레일링 — 키움 미체결에 안 잡히므로 상태파일에서 따로 읽어 같이 주입한다.
arms_by_code = _arms_by_code()
holdings_map = _holdings_map_from_positions(positions_by_acc) holdings_map = _holdings_map_from_positions(positions_by_acc)
for c in cards: for c in cards:
_annotate_card(c, holdings_map) _annotate_card(c, holdings_map)
@@ -1572,6 +1613,9 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
c['pending_buy_qty'] = p['buy_qty'] c['pending_buy_qty'] = p['buy_qty']
c['pending_sell_qty'] = p['sell_qty'] c['pending_sell_qty'] = p['sell_qty']
c['pending_orders'] = p['orders'] c['pending_orders'] = p['orders']
a = arms_by_code.get(c.get('code') or '')
if a:
c['arm_pending'] = a
prev_key = None prev_key = None
prev_snap_all: dict = {} prev_snap_all: dict = {}
@@ -1629,7 +1673,11 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
balances.get(lb, {}).get('pending_buy_locked', 0) for lb in od.get('labels', []) balances.get(lb, {}).get('pending_buy_locked', 0) for lb in od.get('labels', [])
) )
# consolidated/phantom 행에 미체결 수량 주입 (owner 단위) # consolidated/phantom 행에 미체결 수량 + 대기 예약 주입 (owner 단위)
def _owner_arms(owner_name: str, code: str) -> list:
return [a for a in arms_by_code.get(code or '', [])
if derive_owner(a.get('account', '')) == owner_name]
for owner_name, od in owner_data.items(): for owner_name, od in owner_data.items():
owner_pending = pending_by_owner.get(owner_name, {}) owner_pending = pending_by_owner.get(owner_name, {})
for r in od.get('consolidated', []): for r in od.get('consolidated', []):
@@ -1638,12 +1686,18 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
r['pending_buy_qty'] = p['buy_qty'] r['pending_buy_qty'] = p['buy_qty']
r['pending_sell_qty'] = p['sell_qty'] r['pending_sell_qty'] = p['sell_qty']
r['pending_orders'] = p['orders'] r['pending_orders'] = p['orders']
a = _owner_arms(owner_name, r.get('code') or '')
if a:
r['arm_pending'] = a
for r in od.get('phantom', []) if isinstance(od.get('phantom'), list) else []: for r in od.get('phantom', []) if isinstance(od.get('phantom'), list) else []:
p = owner_pending.get(r.get('code') or '') p = owner_pending.get(r.get('code') or '')
if p: if p:
r['pending_buy_qty'] = p['buy_qty'] r['pending_buy_qty'] = p['buy_qty']
r['pending_sell_qty'] = p['sell_qty'] r['pending_sell_qty'] = p['sell_qty']
r['pending_orders'] = p['orders'] r['pending_orders'] = p['orders']
a = _owner_arms(owner_name, r.get('code') or '')
if a:
r['arm_pending'] = a
# 미체결 매수 주문 중 owner 미보유 종목 → owner 패널 별도 섹션 노출. # 미체결 매수 주문 중 owner 미보유 종목 → owner 패널 별도 섹션 노출.
# consolidated에 들어가지 않은 코드만 추림 (보유 + 당일정산 모두 제외). # consolidated에 들어가지 않은 코드만 추림 (보유 + 당일정산 모두 제외).
@@ -1683,43 +1737,35 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
r['open'] = q.get('open') # 미리보기 등락은 시가 대비 → open 필요 r['open'] = q.get('open') # 미리보기 등락은 시가 대비 → open 필요
# 보유 종목 OHLC batch — 카드 펼치면 보이는 오늘 단일 캔들 + 자세히 보기 mini-table용. # 보유 종목 OHLC batch — 카드 펼치면 보이는 오늘 단일 캔들 + 자세히 보기 mini-table용.
# ohlc_map_krx (exchange='KRX')와 ohlc_map_nxt (exchange='NX'=NXT 단독)는 positions 보정에서 이미 호출 — 재사용. # ohlc_map_krx(KRX 단독)·ohlc_map_al(통합)은 positions 보정에서 이미 호출 — 재사용.
# 각 컬럼은 그 시장 데이터로 정확히 채움 (서로 섞이지 않도록). primary 단일 캔들은 통합(AL) 기준. # 미니표 두 열은 'KRX 단독' vs '하루 전체 통합'이다. primary 단일 캔들도 통합(AL) 기준.
if ohlc_map_krx or ohlc_map_nxt or ohlc_map_al: if ohlc_map_krx or ohlc_map_al:
_phase = _market_phase_state().get('phase')
for od in owner_data.values(): for od in owner_data.values():
for r in od.get('consolidated', []): for r in od.get('consolidated', []):
code = r.get('code') code = r.get('code')
qk = ohlc_map_krx.get(code) if code else None qk = ohlc_map_krx.get(code) if code else None
qn = ohlc_map_nxt.get(code) if code else None qa = ohlc_map_al.get(code) if code else None
# price 만 있어도 valid — 거래 없는 시간대(시가/고가/저가=0)도 종가만 표시되도록. # price 만 있어도 valid — 거래 없는 시간대(시가/고가/저가=0)도 종가만 표시되도록.
qk_valid = bool(qk and qk.get('price')) qk_valid = bool(qk and qk.get('price'))
qn_valid = bool(qn and qn.get('price')) qa_valid = bool(qa and qa.get('price'))
if qk_valid: if qk_valid:
r['ohlc_krx'] = { r['ohlc_krx'] = {
'open': qk['open'], 'high': qk['high'], 'low': qk['low'], 'open': qk['open'], 'high': qk['high'], 'low': qk['low'],
'price': qk.get('price', 0), 'change_pct': qk.get('change_pct', 0.0), 'price': qk.get('price', 0), 'change_pct': qk.get('change_pct', 0.0),
'change': qk.get('change', 0), 'volume': qk.get('volume', 0), 'change': qk.get('change', 0), 'volume': qk.get('volume', 0),
} }
if qn_valid: if qa_valid:
r['ohlc_nxt'] = { r['ohlc_al'] = {
'open': qn['open'], 'high': qn['high'], 'low': qn['low'], 'open': qa['open'], 'high': qa['high'], 'low': qa['low'],
'price': qn.get('price', 0), 'change_pct': qn.get('change_pct', 0.0), 'price': qa.get('price', 0), 'change_pct': qa.get('change_pct', 0.0),
'change': qn.get('change', 0), 'volume': qn.get('volume', 0), 'change': qa.get('change', 0), 'volume': qa.get('volume', 0),
} }
# 단일 캔들 primary — 4값(open/high/low/price) 모두 있는 응답만 후보. 거래 없는 시간대 0값 응답 배제. # 단일 캔들 primary — 4값(open/high/low/price) 모두 있는 응답만 후보. 거래 없는 시간대 0값 응답 배제.
# AL(통합) 우선 — 시간대에 따라 KRX↔NXT 로 캔들이 뒤바뀌지 않고 하루 한 개로 유지된다. # 통합(AL) 우선 — 시간대에 따라 캔들이 뒤바뀌지 않고 하루 한 개로 유지된다.
# NXT 미거래 종목은 AL == KRX 라 결과가 같다. AL 응답이 불완전할 때만 phase 우선순위로 폴백. # NXT 미거래 종목은 AL == KRX 라 결과가 같다. AL 이 불완전할 때만 KRX 로 폴백.
qa = ohlc_map_al.get(code) if code else None
qk_full = qk_valid and qk.get('open') and qk.get('high') and qk.get('low') qk_full = qk_valid and qk.get('open') and qk.get('high') and qk.get('low')
qn_full = qn_valid and qn.get('open') and qn.get('high') and qn.get('low') qa_full = qa_valid and qa.get('open') and qa.get('high') and qa.get('low')
qa_full = bool(qa and qa.get('price') and qa.get('open') and qa.get('high') and qa.get('low')) primary = qa if qa_full else (qk if qk_full else None)
if qa_full:
primary = qa
elif _phase == 'regular':
primary = qk if qk_full else (qn if qn_full else None)
else:
primary = qn if qn_full else (qk if qk_full else None)
if primary: if primary:
r['ohlc'] = {'o': primary['open'], 'h': primary['high'], 'l': primary['low'], 'c': primary.get('price', 0) or r.get('price', 0)} r['ohlc'] = {'o': primary['open'], 'h': primary['high'], 'l': primary['low'], 'c': primary.get('price', 0) or r.get('price', 0)}
@@ -2902,9 +2948,9 @@ def _render_row(c: dict, source: str = 'watchlist') -> str:
else: else:
# 거래가능 표시 — 지금 거래시간이면 초록점, 아니면 점 없음. # 거래가능 표시 — 지금 거래시간이면 초록점, 아니면 점 없음.
# 정규장: KRX+NXT 모두 거래 → 초록점 # 정규장: KRX+NXT 모두 거래 → 초록점
# NXT 시간대: NXT 거래되는 종목(_nxt_price 살아있음)만 초록점 # NXT 시간대: NXT 거래 종목(종목 목록의 nxt_enable)만 초록점
# 장마감·휴장·주말: 점 없음 # 장마감·휴장·주말: 점 없음
nxt_p = c.get('_nxt_price', 0) or 0 nxt_p = 1 if _is_nxt_traded(c.get('code') or '') else 0
_phase = _market_phase_state()['phase'] _phase = _market_phase_state()['phase']
if _phase == 'regular': if _phase == 'regular':
_tradable = True _tradable = True
@@ -3141,7 +3187,7 @@ def _render_row(c: dict, source: str = 'watchlist') -> str:
return f'''<details class="row {cls} mode-{mode}" data-row-key="{row_key}"> return f'''<details class="row {cls} mode-{mode}" data-row-key="{row_key}">
<summary> <summary>
<div class="left"> <div class="left">
<div class="line1">{dot_html}<span class="stock">{stock}</span>{tag_chip}{status_cell}{trade_mark}{alert_badge}{_vol_surge_badge(code, (max(0, (c.get('volume') or 0) - (c.get('_nxt_volume') or 0)) or None))}</div> <div class="line1">{dot_html}<span class="stock">{stock}</span>{tag_chip}{status_cell}{trade_mark}{alert_badge}{_vol_surge_badge(code, (c.get('_krx_volume') or c.get('volume') or None))}</div>
</div> </div>
<div class="right"> <div class="right">
<div class="price">{price_cell}<span class="caret" aria-hidden="true">▾</span></div> <div class="price">{price_cell}<span class="caret" aria-hidden="true">▾</span></div>
@@ -3755,28 +3801,22 @@ def _render_account_kpi(owner: str, label: str, owner_d: dict, balances: dict, j
</section>''' </section>'''
def _render_ohlc_mini_dual(krx: dict | None, nxt: dict | None, active_market: str = 'none', al_price: int = 0, krx_closed: bool = False, nxt_closed: bool = False) -> str: def _render_ohlc_mini_dual(krx: dict | None, al: dict | None, active_market: str = 'none', al_price: int = 0, krx_closed: bool = False, al_closed: bool = False) -> str:
"""보유종목 자세히 보기용 OHLC mini-table — KRX/NXT 두 거래소 가격·등락률 분리 표시. """보유종목 자세히 보기용 OHLC mini-table — 'KRX 단독' / '통합(KRX+NXT)' 2열.
각 dict: {open, high, low, price, change_pct} (price=종가/현재가, change_pct=직전 영업일 종가 대비). 각 dict: {open, high, low, price, change_pct} (price=종가/현재가, change_pct=직전 영업일 종가 대비).
한쪽이 None이면 해당 컬럼 전체 '-' placeholder. 4행(현재가/시가/고가/저가) × 2컬럼(KRX/NXT). 한쪽이 None이면 그 열 전체 '-' placeholder. 7행(전일종가/현재가/시가/고가/저가/당일종가/거래량).
active_market: 'krx' / 'nxt' / 'none'. 활성 시장 컬럼은 기본 색, 비활성은 회색 처리. active_market: 'krx' / 'al' / 'none'. 활성 열은 기본 색, 비활성은 회색 처리.
⚠️ 2026-09-10 이전엔 두 번째 열이 NXT 단독이었다. NXT 조회를 없애면서 통합으로 바꿨다 —
통합 시가는 NXT 프리마켓 첫 체결이라 KRX 시가와 다른 값이고, 그대로 보여준다.
""" """
# price 만 있어도 컬럼 표시 — 거래 없는 시간대도 종가 노출. open/high/low 0 셀은 _cell 안에서 '-' 처리. # price 만 있어도 열 표시 — 거래 없는 시간대도 종가 노출. open/high/low 0 셀은 _cell 안에서 '-' 처리.
has_krx = bool(krx and krx.get('price')) has_krx = bool(krx and krx.get('price'))
has_nxt = bool(nxt and nxt.get('price')) has_al = bool(al and al.get('price'))
if not (has_krx or has_nxt): if not (has_krx or has_al):
return '' return ''
# NXT 시가 baseline 은 호출처에서 어제 NXT 스냅샷 종가(r['pred_close'])로 미리 박아 전달.
# 자동 baseline 계산(price - change)은 호출처가 못 박은 경우만 fallback.
if has_nxt and nxt and not nxt.get('open'):
nxt_baseline = (nxt.get('price', 0) or 0) - (nxt.get('change', 0) or 0)
if nxt_baseline > 0:
nxt = dict(nxt)
nxt['open'] = nxt_baseline
def _cell(d: dict | None, key: str, dim: bool, closed: bool = False) -> str: def _cell(d: dict | None, key: str, dim: bool, closed: bool = False) -> str:
dim_cls = ' ohlc-dim' if dim else '' dim_cls = ' ohlc-dim' if dim else ''
if not d: if not d:
@@ -3823,18 +3863,9 @@ def _render_ohlc_mini_dual(krx: dict | None, nxt: dict | None, active_market: st
f'<span class="ohlc-pct {cls}">{sgn}{pct:.2f}%</span></span>' f'<span class="ohlc-pct {cls}">{sgn}{pct:.2f}%</span></span>'
) )
krx_dim = active_market not in ('krx', 'none-active-krx') # 'krx' 활성 또는 양쪽 비활성-krx강조 시만 밝게 # 'none' (장외·휴장) — 둘 다 dim / 'al' (장중) — 통합 열만 밝게
nxt_dim = active_market != 'nxt' krx_dim = active_market != 'krx'
# 'none' (양쪽 비활성, 휴장/심야) — 둘 다 dim al_dim = active_market != 'al'
if active_market == 'none':
krx_dim = True
nxt_dim = True
elif active_market == 'krx':
krx_dim = False
nxt_dim = True
elif active_market == 'nxt':
krx_dim = True
nxt_dim = False
rows = [ rows = [
('전일종가', 'prev_close'), ('전일종가', 'prev_close'),
@@ -3846,17 +3877,17 @@ def _render_ohlc_mini_dual(krx: dict | None, nxt: dict | None, active_market: st
('거래량', 'volume'), ('거래량', 'volume'),
] ]
krx_th_dim = ' ohlc-dim' if krx_dim else '' krx_th_dim = ' ohlc-dim' if krx_dim else ''
nxt_th_dim = ' ohlc-dim' if nxt_dim else '' al_th_dim = ' ohlc-dim' if al_dim else ''
parts = [ parts = [
'<div class="ohlc-mini ohlc-dual">', '<div class="ohlc-mini ohlc-dual">',
'<span class="ohlc-th"></span>', '<span class="ohlc-th"></span>',
f'<span class="ohlc-th{krx_th_dim}">KRX</span>', f'<span class="ohlc-th{krx_th_dim}">KRX</span>',
f'<span class="ohlc-th{nxt_th_dim}">NXT</span>', f'<span class="ohlc-th{al_th_dim}">통합</span>',
] ]
for lbl, key in rows: for lbl, key in rows:
parts.append(f'<span class="ohlc-rl">{lbl}</span>') parts.append(f'<span class="ohlc-rl">{lbl}</span>')
parts.append(_cell(krx if has_krx else None, key, krx_dim, krx_closed)) parts.append(_cell(krx if has_krx else None, key, krx_dim, krx_closed))
parts.append(_cell(nxt if has_nxt else None, key, nxt_dim, nxt_closed)) parts.append(_cell(al if has_al else None, key, al_dim, al_closed))
parts.append('</div>') parts.append('</div>')
return ''.join(parts) return ''.join(parts)
@@ -3944,6 +3975,7 @@ def _interleave_kv_pairs(left: list[str], right: list[str]) -> str:
def _pending_badges_html(r: dict) -> str: def _pending_badges_html(r: dict) -> str:
"""미리보기 💰 배지 — 색만으로 매수(빨강)/매도(파랑) 구분. """미리보기 💰 배지 — 색만으로 매수(빨강)/매도(파랑) 구분.
대기 중 예약 트레일링은 키움 주문이 아니라서 ⏳ 로 따로 표시한다.
수량·상세 정보는 자세히보기(`_pending_detail_html`)에서. 수량·상세 정보는 자세히보기(`_pending_detail_html`)에서.
""" """
buy = r.get('pending_buy_qty', 0) buy = r.get('pending_buy_qty', 0)
@@ -3957,6 +3989,12 @@ def _pending_badges_html(r: dict) -> str:
parts.append( parts.append(
f'<span class="badge pending-sell" title="키움 미체결 매도 {sell:,}주 — 자세히보기에서 확인">💰</span>' f'<span class="badge pending-sell" title="키움 미체결 매도 {sell:,}주 — 자세히보기에서 확인">💰</span>'
) )
arms = r.get('arm_pending') or []
if arms:
aq = sum(a.get('qty', 0) for a in arms)
parts.append(
f'<span class="badge pending-arm" title="예약 트레일링 대기 {aq:,}주 — 자세히보기에서 확인">⏳</span>'
)
return ''.join(parts) return ''.join(parts)
@@ -4013,6 +4051,35 @@ def _arm_rows() -> list:
return out return out
def _arms_by_code() -> dict:
"""종목코드 → 대기 중 예약 트레일링 요약 리스트. 상태파일 읽기라 키움 콜 0.
⚠️ 예약 트레일링은 키움에 주문이 없어 ka10075 미체결에 안 잡힌다 — 종목 행 배지·상세의
유일한 근거가 이 맵이다(미체결 기반 `pending_*` 만 보면 화면이 통째로 조용해진다).
owner 필터는 주입 측이 `account` 로 한다.
"""
out: dict[str, list] = {}
try:
from orders import trailing as _trl
arms = _trl.list_arms()
except Exception:
return out
for a in arms:
try:
expired = _trl.is_arm_expired(a)
except Exception:
expired = False
out.setdefault(a.get('symbol') or '', []).append({
'id': a.get('id', ''), 'account': a.get('account', ''), 'qty': a.get('qty', 0),
'trigger_price': a.get('trigger_price', 0),
'min_sell_price': a.get('min_sell_price'),
'steps': a.get('steps') or [],
'firing_at': a.get('firing_at'), 'created_at': a.get('created_at'),
'expired': expired,
})
return out
def _trailing_info_for(ord_no: str): def _trailing_info_for(ord_no: str):
"""미체결 주문번호 → 트레일링 예약 요약 (없으면 None). """미체결 주문번호 → 트레일링 예약 요약 (없으면 None).
@@ -4084,7 +4151,8 @@ def _pending_detail_html(r: dict) -> str:
레이아웃: dt(라벨, 컬러) / dd 2~3줄(상단=수량@가격, 조건줄, 하단=계좌·시각·주문번호 muted). 레이아웃: dt(라벨, 컬러) / dd 2~3줄(상단=수량@가격, 조건줄, 하단=계좌·시각·주문번호 muted).
""" """
orders = r.get('pending_orders') or [] orders = r.get('pending_orders') or []
if not orders: arms = r.get('arm_pending') or []
if not orders and not arms:
return '' return ''
buys = [o for o in orders if o.get('side') == 'BUY'] buys = [o for o in orders if o.get('side') == 'BUY']
sells = [o for o in orders if o.get('side') == 'SELL'] sells = [o for o in orders if o.get('side') == 'SELL']
@@ -4187,11 +4255,69 @@ def _pending_detail_html(r: dict) -> str:
f'</dd>' f'</dd>'
) )
def _arm_row(a: dict) -> str:
"""대기 중 예약 트레일링 — 키움 주문이 없어 주문번호·지정가가 없다.
미체결 행과 같은 골격(주요 줄 / 조건 줄 / meta)으로 맞춰 나란히 읽히게 한다."""
qty = a.get('qty', 0)
trig = a.get('trigger_price', 0) or 0
steps = a.get('steps') or []
if a.get('firing_at'):
label = '예약 발동 중단'
elif a.get('expired'):
label = '예약 만료'
else:
label = '예약 트레일링'
if a.get('firing_at'):
# 발동 도중 중단된 상태 — 주문이 나갔는지 모르므로 자동 재발동하지 않는다.
cond_line = ('<div class="small pending-line-cond">발동 처리 중단 — 미체결 확인 후 '
'진행중 팝업에서 수동 취소</div>')
elif a.get('expired'):
# 감시는 08:00~19:59 에만 돌아 20:00 직후엔 파일에 남아 있다. 숨기면 화면이 거짓말.
cond_line = ('<div class="small pending-line-cond">만료 — 다음 거래일 첫 감시 사이클에 정리'
'</div>')
else:
cond_line = (f'<div class="small pending-line-cond trailing">'
f'{trig:,}원 닿으면 트레일링 시작</div>')
mini = [f'<dt>발동가</dt><dd><b>{trig:,}원</b> 도달 시</dd>']
if cur_price > 0 and trig > 0:
# 발동가까지 남은 거리 — 미체결 트레일링의 '손절선 대비'와 같은 자리·같은 읽는 법.
mini.append(f'<dt>발동가까지</dt><dd>{(trig - cur_price) / cur_price * 100:+.1f}% '
f'<span class="muted">(현재 {cur_price:,}원)</span></dd>')
if steps:
desc = ' · '.join(
f'−{x.get("pct"):g}%→'
+ ('전량' if (x.get('cum') or 0) >= 100 else f'{x.get("cum") or 0:g}%')
for x in steps)
mini.append(f'<dt>계단</dt><dd><b>{len(steps)}단</b> · {desc}</dd>')
if a.get('min_sell_price'):
mini.append(f'<dt>최저 매도가</dt><dd>{a["min_sell_price"]:,}원</dd>')
cond_line += f'<dl class="trail-mini">{"".join(mini)}</dl>'
meta_parts = [html.escape(a.get('account', ''))]
ct = (a.get('created_at') or '')[5:16].replace('T', ' ')
if ct:
meta_parts.append(ct)
if a.get('id'):
meta_parts.append(html.escape(a['id']))
return (
f'<dt class="pending-arm-label">{label}</dt>'
f'<dd>'
f'<div class="num pending-line-main">{qty:,}주 매도 예약</div>'
f'{cond_line}'
f'<div class="muted small pending-line-meta">{" · ".join(meta_parts)}</div>'
f'</dd>'
)
pairs: list[str] = [] pairs: list[str] = []
for o in buys: for o in buys:
pairs.append(_row(o, 'buy')) pairs.append(_row(o, 'buy'))
for o in sells: for o in sells:
pairs.append(_row(o, 'sell')) pairs.append(_row(o, 'sell'))
for a in arms:
pairs.append(_arm_row(a))
return f'<dl class="pending-detail">{"".join(pairs)}</dl>' return f'<dl class="pending-detail">{"".join(pairs)}</dl>'
@@ -4306,27 +4432,24 @@ def _render_holding_row(r: dict, total_value: int, show_day_change: bool = False
f'<dt>당일 등락</dt><dd class="num"><span class="{dcls} rt-daychange">{dsign}{day_change:,}원 ' f'<dt>당일 등락</dt><dd class="num"><span class="{dcls} rt-daychange">{dsign}{day_change:,}원 '
f'({dsign}{day_change_pct:.2f}%)</span></dd>' f'({dsign}{day_change_pct:.2f}%)</span></dd>'
) )
# 활성 시장 판정 — OHLC 미니테이블 컬럼 강조용(active_market). cur_price 가 어느 시장 가격과 일치하는지. # 활성 열 판정 — OHLC 미니테이블 강조용. 두 열은 'KRX 단독' vs '하루 전체 통합'이라
nxt_p = (r.get('ohlc_nxt') or {}).get('price', 0) # 장중이면 항상 통합 열이 최신(현재가와 같은 값)이고, KRX 열은 15:30 이후 마감값으로 고정된다.
krx_p = (r.get('ohlc_krx') or {}).get('price', 0)
mark = 'NXT' if (nxt_p and nxt_p == price and nxt_p != krx_p) else 'KRX'
# 거래가능 표시 — 지금 거래시간이면 초록점, 아니면 점 없음. (미리보기 행과 동일 규칙)
# 정규장: KRX+NXT 모두 거래 → 초록점 / NXT 시간대: NXT 거래종목(ohlc_nxt 가격 살아있음)만 / 장외·휴장·주말: 점 없음
_phase = _market_phase_state()['phase'] _phase = _market_phase_state()['phase']
mark = 'AL' if _phase in ('regular', 'nxt') else 'NONE'
# 거래가능 표시 — 지금 거래시간이면 초록점, 아니면 점 없음. (미리보기 행과 동일 규칙)
# 정규장: KRX+NXT 모두 거래 → 초록점 / NXT 시간대: NXT 거래 종목(종목 목록의 nxt_enable)만 / 장외·휴장·주말: 점 없음
if _phase == 'regular': if _phase == 'regular':
_tradable = True _tradable = True
elif _phase == 'nxt': elif _phase == 'nxt':
_tradable = bool(nxt_p) _tradable = _is_nxt_traded(r.get('code') or '')
else: else:
_tradable = False _tradable = False
mark_html = '<span class="px-dot tradable" title="지금 거래 가능"></span>' if _tradable else '' mark_html = '<span class="px-dot tradable" title="지금 거래 가능"></span>' if _tradable else ''
# OHLC mini-table — ka10095 NX/NXT batch 결과를 각 컬럼에 분리 표시. 활성 시장만 밝게. # OHLC mini-table — ka10095 KRX/AL batch 결과를 각 열에 표시. 활성 열만 밝게.
# _nxt_inactive 마커는 stock_portfolio_report의 NX 응답 기반 판정이라 ETF처럼 NXT 정상거래 종목도 # 두 열의 전일종가 기준이 다르다: KRX 열 = KRX 전일종가, 통합 열 = 어제 NXT 스냅샷 종가
# 잘못 잡힘 → 여기선 무시하고 실제 ohlc_nxt 데이터 유무로 표시 결정. # (r['pred_close']). 통합 열 baseline 을 스냅샷으로 두는 이유 — 보유행 day_change 가 같은
# NXT 컬럼 baseline 을 어제 NXT 스냅샷 종가(r['pred_close']) 로 통일. # 값을 baseline 으로 쓰므로, 여기만 AL 자체 전일종가를 쓰면 한 화면에서 등락률이 갈린다.
# change/change_pct 도 스냅샷 baseline 기준으로 재계산 → cell 안 pct 표시도 일관.
# 전 거래일 종가 행: KRX = pred_close_krx (KRX 전일종가), NXT = r['pred_close'] (어제 NXT 스냅샷).
ohlc_krx_for_render = r.get('ohlc_krx') ohlc_krx_for_render = r.get('ohlc_krx')
if ohlc_krx_for_render: if ohlc_krx_for_render:
ohlc_krx_for_render = dict(ohlc_krx_for_render) ohlc_krx_for_render = dict(ohlc_krx_for_render)
@@ -4337,26 +4460,36 @@ def _render_holding_row(r: dict, total_value: int, show_day_change: bool = False
_krx_prev = r.get('pred_close_krx', 0) or 0 _krx_prev = r.get('pred_close_krx', 0) or 0
if _krx_prev > 0: if _krx_prev > 0:
ohlc_krx_for_render['prev_close'] = _krx_prev ohlc_krx_for_render['prev_close'] = _krx_prev
ohlc_nxt_for_render = r.get('ohlc_nxt') ohlc_al_for_render = r.get('ohlc_al')
_snap_prev = r.get('pred_close', 0) or 0 # 통합 열 전일종가: ①어제 보유였으면 그날 NXT 종가(스냅샷) ②아니면 ka10095 AL 의
if ohlc_nxt_for_render and _snap_prev > 0: # (현재가 − 전일대비). ⚠️ r['pred_close'] 를 쓰면 안 된다 — 신규 매수 종목엔 매수 평단이
ohlc_nxt_for_render = dict(ohlc_nxt_for_render) # 들어 있어 '전일종가' 라벨이 거짓말이 된다(2026-09-10 우리기술로 실측).
ohlc_nxt_for_render['open'] = _snap_prev _snap_prev = r.get('pred_close_snap', 0) or 0
ohlc_nxt_for_render['prev_close'] = _snap_prev if not _snap_prev:
_nxt_px = ohlc_nxt_for_render.get('price', 0) or 0 _al_raw = r.get('ohlc_al') or {}
ohlc_nxt_for_render['change'] = _nxt_px - _snap_prev _snap_prev = (_al_raw.get('price', 0) or 0) - (_al_raw.get('change', 0) or 0)
ohlc_nxt_for_render['change_pct'] = ((_nxt_px - _snap_prev) / _snap_prev * 100) if _snap_prev else 0.0 if _snap_prev < 0:
# 당일종가: KRX는 정규장 마감(15:30) 후, NXT는 마감(20:00) 후에만 그 시장 종가 표시. _snap_prev = 0
if ohlc_al_for_render and _snap_prev > 0:
ohlc_al_for_render = dict(ohlc_al_for_render)
# ⚠️ 시가는 덮어쓰지 않는다 — 통합 시가는 NXT 프리마켓(08:00) 첫 체결이라 그 자체가 정보다
# (실측 삼성전자 통합 268,000 vs KRX 269,000). 예전 NXT 열은 시가 칸에 전일종가를
# 넣었는데, 통합 열에서는 진짜 시가를 보여준다.
ohlc_al_for_render['prev_close'] = _snap_prev
_al_px = ohlc_al_for_render.get('price', 0) or 0
ohlc_al_for_render['change'] = _al_px - _snap_prev
ohlc_al_for_render['change_pct'] = ((_al_px - _snap_prev) / _snap_prev * 100) if _snap_prev else 0.0
# 당일종가: KRX는 정규장 마감(15:30) 후, 통합은 NXT 마감(20:00) 후에만 종가 표시.
_now_ohlc = datetime.now(KST) _now_ohlc = datetime.now(KST)
_hm_ohlc = _now_ohlc.hour * 60 + _now_ohlc.minute _hm_ohlc = _now_ohlc.hour * 60 + _now_ohlc.minute
_trd_ohlc = _market_phase_state().get('phase') not in ('holiday', 'weekend') _trd_ohlc = _market_phase_state().get('phase') not in ('holiday', 'weekend')
ohlc_mini_html = _render_ohlc_mini_dual( ohlc_mini_html = _render_ohlc_mini_dual(
ohlc_krx_for_render, ohlc_krx_for_render,
ohlc_nxt_for_render, ohlc_al_for_render,
active_market=mark.lower(), active_market=mark.lower(),
al_price=price, # 현재가 행은 AL(통합) 현재가를 양 컬럼 공통 — 등락률만 각 시장 전일종가 대비. al_price=price, # 현재가 행은 통합 현재가를 양 열 공통 — 등락률만 각 기준 전일종가 대비.
krx_closed=_trd_ohlc and _hm_ohlc >= 15 * 60 + 30, krx_closed=_trd_ohlc and _hm_ohlc >= 15 * 60 + 30,
nxt_closed=_trd_ohlc and _hm_ohlc >= 20 * 60, al_closed=_trd_ohlc and _hm_ohlc >= 20 * 60,
) )
# 미리보기 등락은 rebase 후 day_change_pct 사용 — 어제 NXT 종가 baseline. # 미리보기 등락은 rebase 후 day_change_pct 사용 — 어제 NXT 종가 baseline.
@@ -5847,11 +5980,13 @@ details.row + .section-label { margin-top: 14px; padding-top: 24px; border-top-c
.badge.held { background: #2a1820; color: #ff8a96; border: 1px solid rgba(255,77,94,0.3); font-size: 10px; padding: 2px 7px; } .badge.held { background: #2a1820; color: #ff8a96; border: 1px solid rgba(255,77,94,0.3); font-size: 10px; padding: 2px 7px; }
.badge.pending-buy { background: #2a1822; color: #ff9fb3; border: 1px solid rgba(255,140,170,0.32); font-weight: 600; padding: 2px 6px; letter-spacing: 0; } .badge.pending-buy { background: #2a1822; color: #ff9fb3; border: 1px solid rgba(255,140,170,0.32); font-weight: 600; padding: 2px 6px; letter-spacing: 0; }
.badge.pending-sell { background: #182030; color: #7fb8ff; border: 1px solid rgba(122,180,255,0.32); font-weight: 600; padding: 2px 6px; letter-spacing: 0; } .badge.pending-sell { background: #182030; color: #7fb8ff; border: 1px solid rgba(122,180,255,0.32); font-weight: 600; padding: 2px 6px; letter-spacing: 0; }
.badge.pending-arm { background: #262013; color: #d9a84a; border: 1px solid rgba(217,168,74,0.35); font-weight: 600; padding: 2px 6px; letter-spacing: 0; }
dl.pending-detail { margin-top: 8px; padding-top: 8px; border-top: 1px dashed rgba(255,255,255,0.08); grid-template-columns: 92px minmax(0, 1fr); } dl.pending-detail { margin-top: 8px; padding-top: 8px; border-top: 1px dashed rgba(255,255,255,0.08); grid-template-columns: 92px minmax(0, 1fr); }
.row.mode-held .detail dl.pending-detail { grid-template-columns: 92px minmax(0, 1fr); } .row.mode-held .detail dl.pending-detail { grid-template-columns: 92px minmax(0, 1fr); }
dl.pending-detail dt { font-weight: 600; letter-spacing: 0; white-space: nowrap; } dl.pending-detail dt { font-weight: 600; letter-spacing: 0; white-space: nowrap; }
dl.pending-detail dt.pending-buy-label { color: #ff9fb3; } dl.pending-detail dt.pending-buy-label { color: #ff9fb3; }
dl.pending-detail dt.pending-sell-label { color: #7fb8ff; } dl.pending-detail dt.pending-sell-label { color: #7fb8ff; }
dl.pending-detail dt.pending-arm-label { color: #d9a84a; }
dl.pending-detail dd { line-height: 1.45; } dl.pending-detail dd { line-height: 1.45; }
dl.pending-detail .pending-line-main { font-variant-numeric: tabular-nums; } dl.pending-detail .pending-line-main { font-variant-numeric: tabular-nums; }
dl.pending-detail .pending-line-meta { margin-top: 2px; } dl.pending-detail .pending-line-meta { margin-top: 2px; }
@@ -13947,7 +14082,10 @@ window.openPinModal = openPinModal;
.then(function(r){ return r.json(); }) .then(function(r){ return r.json(); })
.then(function(d){ .then(function(d){
setWsStatus(d && d.connected); setWsStatus(d && d.connected);
if(!d || !d.connected) return; // 끊기면 마지막 스냅샷을 버린다. 남겨두면 connected:true 인 옛 응답이 그대로 남아
// panels-loaded 훅의 재적용이 서버가 방금 조회한 값을 옛 틱으로 덮어쓴다
// (20:00 NXT 마감 후 허브 종료 → 재렌더를 해도 화면이 19:5x 값에 고착되던 원인).
if(!d || !d.connected){ window.__rtState=null; window.__rtPx=null; return; }
window.__rtState = d; window.__rtState = d;
if(codes.length) applyState(d); if(codes.length) applyState(d);
// 체결 신호 변화 → 패널 새로고침(수량·예수금·당일정산 등 사건 기반 값). 첫 관측은 기준값만 저장(공회전 방지). // 체결 신호 변화 → 패널 새로고침(수량·예수금·당일정산 등 사건 기반 값). 첫 관측은 기준값만 저장(공회전 방지).
+20 -6
View File
@@ -222,20 +222,34 @@ def cmd_sync(years_forward: int) -> int:
# 양쪽 다 0건이면 영구 변경/네트워크 차단 의심 — health 카운트 + 2회 연속 시 알림. # 양쪽 다 0건이면 영구 변경/네트워크 차단 의심 — health 카운트 + 2회 연속 시 알림.
both_failed = (not investing_data) and (not nager_data_raw) both_failed = (not investing_data) and (not nager_data_raw)
_update_health(both_failed, errors) _update_health(both_failed, errors)
if not investing_data: if not investing_data and not nager_data_raw:
sys.stderr.write('no holidays parsed — investing.com 미반영. state file은 옛 데이터 유지.\n') sys.stderr.write('no holidays parsed — 두 소스 모두 실패. state file은 옛 데이터 유지.\n')
return 3 return 3
# KRX는 다음 연도 휴장 캘린더를 보통 11~12월에 공식 발표 → 그 전엔 investing.com도 비어 있음. # 채울 연도 판정. KRX는 다음 연도 휴장 캘린더를 보통 11~12월에 공식 발표하므로,
# investing이 한 건이라도 잡은 연도에만 nager 보강 — 미발표 연도의 일반 공휴일이 KRX 휴장으로 잘못 등록되는 것 차단. # 미발표 연도의 일반 공휴일을 KRX 휴장으로 잘못 등록하지 않도록 게이트를 둔다.
investing_years = {int(d[:4]) for d in investing_data} # - investing(거래소 캘린더)이 살아 있으면 그게 곧 발표 신호 → 그 연도만 채운다(원래 규칙).
nager_data = {d: n for d, n in nager_data_raw.items() if int(d[:4]) in investing_years} # - investing이 죽었으면(2026-09 이후 403 차단) 달력으로 대신 판정 — 올해는 항상,
# 내년은 11월 이후에만. 이래야 12월→1월 갭도 막고 미발표 연도도 오염되지 않는다.
if investing_data:
allowed_years = {int(d[:4]) for d in investing_data}
else:
now = datetime.now(KST)
allowed_years = {now.year} | ({now.year + 1} if now.month >= 11 else set())
nager_data = {d: n for d, n in nager_data_raw.items() if int(d[:4]) in allowed_years}
# investing.com(거래소 캘린더) 우선 — KRX 휴장 권위. nager는 누락분만 채움. # investing.com(거래소 캘린더) 우선 — KRX 휴장 권위. nager는 누락분만 채움.
holidays = {**nager_data, **investing_data} holidays = {**nager_data, **investing_data}
nager_extra = sorted(d for d in nager_data if d not in investing_data) nager_extra = sorted(d for d in nager_data if d not in investing_data)
# nager는 '공휴일'이라 거래소 전용 휴장인 연말 폐장일(12/31)이 없다. 평일일 때만 보강.
for y in sorted(allowed_years):
eoy = date(y, 12, 31)
key = eoy.isoformat()
if eoy.weekday() < 5 and key not in holidays:
holidays[key] = '연말 휴장'
STATE_FILE.parent.mkdir(parents=True, exist_ok=True) STATE_FILE.parent.mkdir(parents=True, exist_ok=True)
payload = { payload = {
'fetched_at': datetime.now(KST).isoformat(), 'fetched_at': datetime.now(KST).isoformat(),
'sources': {'primary': URL, 'fallback': NAGER_URL.format(year='YYYY')}, 'sources': {'primary': URL, 'fallback': NAGER_URL.format(year='YYYY')},
'source_used': 'investing+nager' if investing_data else 'nager-only',
'years': years, 'years': years,
'holidays': dict(sorted(holidays.items())), 'holidays': dict(sorted(holidays.items())),
} }
@@ -814,11 +814,30 @@ def get_watchlist_quotes(codes: list[str], account_label: str | None = None,
for i in range(0, len(clean_codes), WATCHLIST_BATCH_MAX): for i in range(0, len(clean_codes), WATCHLIST_BATCH_MAX):
chunk = clean_codes[i:i + WATCHLIST_BATCH_MAX] chunk = clean_codes[i:i + WATCHLIST_BATCH_MAX]
stk_cd_param = '|'.join(f'{c}{suffix}' for c in chunk) 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(_watchlist_batch_call(label, stk_cd_param)))
out.update(_parse_watchlist_rows(resp))
return out return out
def _watchlist_batch_call(label: str, stk_cd_param: str) -> dict:
"""ka10095 1콜 + 429 재시도.
behive_web 은 패널 렌더 1회에 이 TR 을 최대 7콜(보유 KRX/NX/AL · 워치리스트 · NXT 마크
판정 · phantom · 미보유 미체결) 병렬 발사하는데 키움 유량은 초당 5건이라 일부가 429 로
튕긴다. ⚠️ 튕긴 콜은 예외가 호출측에서 로그만 남고 삼켜져 **그 조각이 화면에서 조용히
빈다** — 실측 `NXT positions price fetch failed` 25건, 그때마다 보유종목 NXT 컬럼이
통째로 사라진다(NXT 실거래가 있는 삼성전자·SK하이닉스만 눈에 띈다).
⚠️ ka10001·ka10004 처럼 `_QUOTE_GATE` 로 직렬화하면 7콜이 줄서서 렌더가 1초 이상
느려지므로, 정상 경로는 병렬 그대로 두고 튕긴 콜만 백오프 후 1회 다시 친다.
"""
try:
return _call(label, TR_WATCHLIST_INFO, {'stk_cd': stk_cd_param}, endpoint=ENDPOINT_STKINFO)
except RuntimeError as e:
if not _is_quote_rate_limit(str(e)):
raise
time.sleep(_QUOTE_BACKOFF_SEC)
return _call(label, TR_WATCHLIST_INFO, {'stk_cd': stk_cd_param}, endpoint=ENDPOINT_STKINFO)
def _parse_watchlist_rows(resp: dict) -> dict[str, dict]: def _parse_watchlist_rows(resp: dict) -> dict[str, dict]:
out: dict[str, dict] = {} out: dict[str, dict] = {}
for row in resp.get('atn_stk_infr') or []: for row in resp.get('atn_stk_infr') or []:
@@ -1363,6 +1382,22 @@ def main():
print(f"{info['name']} ({info['code']}) · {info.get('market','?')}") print(f"{info['name']} ({info['code']}) · {info.get('market','?')}")
return 0 return 0
if cmd == 'refresh-codes': if cmd == 'refresh-codes':
# --if-stale N: 캐시가 N일보다 최신이면 건너뛴다(정기 실행용).
# ⚠️ 이 캐시의 nxt_enable 은 자산웹의 'NXT 거래 종목' 판정 근거다(behive_web._is_nxt_traded).
# 낡으면 새로 NXT 편입된 종목을 놓쳐 🔥 배지·거래가능 초록점이 틀어진다(금액엔 영향 없음).
# lazy 갱신은 '모르는 종목명 검색' 때만 돌아, 알던 종목만 다루면 영영 안 바뀐다.
stale_days = 0.0
if '--if-stale' in sys.argv:
try:
stale_days = float(sys.argv[sys.argv.index('--if-stale') + 1])
except (IndexError, ValueError):
print('usage: refresh-codes [--if-stale <days>]', file=sys.stderr)
return 2
if stale_days > 0 and STOCK_CODES_CACHE.exists():
age_days = (time.time() - STOCK_CODES_CACHE.stat().st_mtime) / 86400
if age_days < stale_days:
print(f'종목코드 캐시 {age_days:.1f}일 — {stale_days:g}일 미만이라 갱신 생략')
return 0
stocks = refresh_stock_codes() stocks = refresh_stock_codes()
print(f"종목코드 캐시 갱신 완료: {len(stocks)}종목 → {STOCK_CODES_CACHE}") print(f"종목코드 캐시 갱신 완료: {len(stocks)}종목 → {STOCK_CODES_CACHE}")
return 0 return 0
@@ -79,11 +79,27 @@ from orders.handler import send_telegram # noqa: E402
# 정정 실패 알림 쿨다운 — NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 반복된다. # 정정 실패 알림 쿨다운 — NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 반복된다.
FAIL_NOTICE_COOLDOWN_SEC = 1800 FAIL_NOTICE_COOLDOWN_SEC = 1800
# 사이클마다 mtime 만 갱신하는 생존 신호. 이 감시가 죽으면 예약 트레일링(ARM)이
# 아예 발동하지 않는데, 예약 0건이면 로그를 한 줄도 남기지 않아 바깥에서 죽었는지
# 구분할 방법이 없었다(2026-08-28 이후 13일간 로그 무갱신이 정상인지 장애인지 불명).
# 로그로 찍으면 분당 1줄 × 720회/일이 쌓여 실제 이벤트를 덮으므로 파일 mtime 만 쓴다.
# scripts/health_check.py 가 이 파일을 읽는다.
HEARTBEAT_FILE = WORKSPACE / 'state' / 'trailing_monitor_heartbeat'
def _log(msg: str) -> None: def _log(msg: str) -> None:
print(f'[{datetime.now(KST).strftime("%Y-%m-%d %H:%M:%S")}] {msg}', flush=True) print(f'[{datetime.now(KST).strftime("%Y-%m-%d %H:%M:%S")}] {msg}', flush=True)
def _heartbeat() -> None:
"""감시가 이번 사이클을 돌았다는 신호. 실패해도 감시를 막지 않는다."""
try:
HEARTBEAT_FILE.write_text(
datetime.now(KST).isoformat(timespec='seconds'), encoding='utf-8')
except Exception:
pass
def session_now() -> tuple[bool, str]: def session_now() -> tuple[bool, str]:
"""(감시할 세션인가, 세션명). 주말·휴장일·거래시간 외는 False. """(감시할 세션인가, 세션명). 주말·휴장일·거래시간 외는 False.
@@ -435,6 +451,7 @@ def _worth_running(force: bool) -> bool:
def check(force: bool = False, dry_run: bool = False) -> int: def check(force: bool = False, dry_run: bool = False) -> int:
_heartbeat()
reservations = trailing.list_active() reservations = trailing.list_active()
arms = trailing.list_arms() arms = trailing.list_arms()
if not reservations and not arms: if not reservations and not arms:
@@ -152,3 +152,5 @@
{"date": "2026-09-08", "market": "KOSPI", "market_label": "코스피", "rise": 231, "upper": 0, "fall": 634, "lower": 0, "steady": 45, "adr": 36.44, "personal": -30329, "foreign": 6316, "institutional": 6427, "captured_at": "2026-09-08T21:00:05.322694+09:00"} {"date": "2026-09-08", "market": "KOSPI", "market_label": "코스피", "rise": 231, "upper": 0, "fall": 634, "lower": 0, "steady": 45, "adr": 36.44, "personal": -30329, "foreign": 6316, "institutional": 6427, "captured_at": "2026-09-08T21:00:05.322694+09:00"}
{"date": "2026-09-09", "market": "KOSDAQ", "market_label": "코스닥", "rise": 962, "upper": 6, "fall": 672, "lower": 0, "steady": 99, "adr": 144.05, "personal": -2548, "foreign": 2646, "institutional": -190, "captured_at": "2026-09-09T21:00:02.199305+09:00"} {"date": "2026-09-09", "market": "KOSDAQ", "market_label": "코스닥", "rise": 962, "upper": 6, "fall": 672, "lower": 0, "steady": 99, "adr": 144.05, "personal": -2548, "foreign": 2646, "institutional": -190, "captured_at": "2026-09-09T21:00:02.199305+09:00"}
{"date": "2026-09-09", "market": "KOSPI", "market_label": "코스피", "rise": 463, "upper": 0, "fall": 400, "lower": 0, "steady": 50, "adr": 115.75, "personal": -22879, "foreign": -4348, "institutional": 9422, "captured_at": "2026-09-09T21:00:02.199305+09:00"} {"date": "2026-09-09", "market": "KOSPI", "market_label": "코스피", "rise": 463, "upper": 0, "fall": 400, "lower": 0, "steady": 50, "adr": 115.75, "personal": -22879, "foreign": -4348, "institutional": 9422, "captured_at": "2026-09-09T21:00:02.199305+09:00"}
{"date": "2026-09-10", "market": "KOSDAQ", "market_label": "코스닥", "rise": 827, "upper": 3, "fall": 796, "lower": 1, "steady": 115, "adr": 104.14, "personal": -2698, "foreign": -11253, "institutional": 13996, "captured_at": "2026-09-10T21:00:02.740511+09:00"}
{"date": "2026-09-10", "market": "KOSPI", "market_label": "코스피", "rise": 419, "upper": 3, "fall": 443, "lower": 0, "steady": 53, "adr": 95.26, "personal": 3802, "foreign": -26217, "institutional": 5744, "captured_at": "2026-09-10T21:00:02.740511+09:00"}
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 5572914.42378125, "tranche_value": 5572914.42378125,
"last_add_price": 130800 "last_add_price": 130800
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 5640114.3750312505, "tranche_value": 5640114.3750312505,
"last_add_price": 353000 "last_add_price": 353000
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4803063.4110624995, "tranche_value": 4803063.4110624995,
"last_add_price": 13420 "last_add_price": 13420
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 118900, "cur_price": 118100,
"tranches": 2, "tranches": 2,
"tranche_value": 5036191.884468749, "tranche_value": 5036191.884468749,
"last_add_price": 122000 "last_add_price": 122000
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 4801549.203874999, "tranche_value": 4801549.203874999,
"last_add_price": 11590 "last_add_price": 11590
@@ -123,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,168 도달", "entry_reason": "눌림목 지정가 13,168 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 2, "tranches": 2,
"tranche_value": 3703169.8275951464, "tranche_value": 3703169.8275951464,
"last_add_price": 13820 "last_add_price": 13820
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 4823066.232562499, "tranche_value": 4823066.232562499,
"last_add_price": 129800 "last_add_price": 129800
@@ -165,7 +165,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 4783418.996406249, "tranche_value": 4783418.996406249,
"last_add_price": 133000 "last_add_price": 133000
@@ -175,7 +175,7 @@
"closed_trades": 30, "closed_trades": 30,
"wins": 1, "wins": 1,
"peak_equity": 100102462.48, "peak_equity": 100102462.48,
"max_drawdown": 0.25031497364019717, "max_drawdown": 0.2653841787639111,
"last_exit": { "last_exit": {
"030000": "2026-08-06", "030000": "2026-08-06",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -197,5 +197,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-11T09:00:01.943184+09:00", "created_at": "2026-06-11T09:00:01.943184+09:00",
"updated_at": "2026-09-09T15:28:22.215589+09:00" "updated_at": "2026-09-10T15:28:26.343034+09:00"
} }
@@ -1,5 +1,5 @@
{ {
"cash": 47128117.454250015, "cash": 45846238.59775002,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"194370": { "194370": {
@@ -18,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3504336.4241500003, "tranche_value": 3504336.4241500003,
"last_add_price": 13420 "last_add_price": 13420
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:16.771867+09:00",
"stop": 358791,
"target": 484313,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3615738.9231707016,
"last_add_price": 415500
},
"001790": { "001790": {
"code": "001790", "code": "001790",
"name": "대한제당", "name": "대한제당",
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5588552.318031251, "tranche_value": 5588552.318031251,
"last_add_price": 2945 "last_add_price": 2945
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 3334430.645615085, "tranche_value": 3334430.645615085,
"last_add_price": 11590 "last_add_price": 11590
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 33500, "cur_price": 34200,
"tranches": 1, "tranches": 1,
"tranche_value": 4741640.48120924, "tranche_value": 4741640.48120924,
"last_add_price": 35250 "last_add_price": 35250
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1651454.8079885093, "tranche_value": 1651454.8079885093,
"last_add_price": 7390 "last_add_price": 7390
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 5710, "cur_price": 5970,
"tranches": 2, "tranches": 2,
"tranche_value": 3924128.001144519, "tranche_value": 3924128.001144519,
"last_add_price": 6010 "last_add_price": 6010
@@ -155,24 +134,45 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 157, "qty": 304,
"entry_price": 13090, "entry_price": 13496.184210526315,
"entry_at": "2026-09-07T15:06:35.044589+09:00", "entry_at": "2026-09-07T15:06:35.044589+09:00",
"stop": 10340, "stop": 10420,
"target": 17215, "target": 18110,
"peak": 13550, "peak": 14130,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,160 도달", "entry_reason": "눌림목 지정가 13,160 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 2,
"tranche_value": 2059070.58259455, "tranche_value": 2059070.58259455,
"last_add_price": 13090 "last_add_price": 13930
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 12,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:37.654100+09:00",
"stop": 375781,
"target": 462578,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 411,461 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 5117479.911622797,
"last_add_price": 410500
} }
}, },
"realized_pnl": -12493091.635500023, "realized_pnl": -13345196.035500024,
"closed_trades": 35, "closed_trades": 36,
"wins": 4, "wins": 4,
"peak_equity": 100172467.23000002, "peak_equity": 100172467.23000002,
"max_drawdown": 0.14748235408916366, "max_drawdown": 0.14748235408916366,
@@ -181,7 +181,7 @@
"086790": "2026-07-28", "086790": "2026-07-28",
"403870": "2026-07-07", "403870": "2026-07-07",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"055550": "2026-07-20", "055550": "2026-07-20",
"024060": "2026-07-27", "024060": "2026-07-27",
@@ -195,5 +195,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-11T09:00:01.944232+09:00", "created_at": "2026-06-11T09:00:01.944232+09:00",
"updated_at": "2026-09-09T15:28:28.818628+09:00" "updated_at": "2026-09-10T15:28:33.172712+09:00"
} }
@@ -99,3 +99,6 @@
{"ts": "2026-09-07T15:06:35.044591+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13090, "qty": 157, "cost": 2055438, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 17215, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,100 vs 12,883"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,368 / 12,883"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,368 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +407 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.25% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "754,723 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.25% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,100)"}]} {"ts": "2026-09-07T15:06:35.044591+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13090, "qty": 157, "cost": 2055438, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 17215, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,100 vs 12,883"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,368 / 12,883"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,368 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +407 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.25% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "754,723 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.25% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,100)"}]}
{"ts": "2026-09-08T09:02:32.216263+09:00", "side": "BUY", "code": "088350", "name": "한화생명", "price": 6010, "qty": 652, "cost": 3919108, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5177, "target": 6784, "signals": [{"label": "손절선", "ok": true, "detail": "5,177 (현재 6,010)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,784"}, {"label": "추세(10일선)", "ok": true, "detail": "4,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,497 · 기 +2,372"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,980"}]} {"ts": "2026-09-08T09:02:32.216263+09:00", "side": "BUY", "code": "088350", "name": "한화생명", "price": 6010, "qty": 652, "cost": 3919108, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5177, "target": 6784, "signals": [{"label": "손절선", "ok": true, "detail": "5,177 (현재 6,010)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,784"}, {"label": "추세(10일선)", "ok": true, "detail": "4,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,497 · 기 +2,372"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,980"}]}
{"ts": "2026-09-08T12:32:31.602963+09:00", "side": "BUY", "code": "079650", "name": "서산", "price": 7390, "qty": 223, "cost": 1648217, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5081, "target": 9603, "signals": [{"label": "손절선", "ok": true, "detail": "5,081 (현재 7,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,603"}, {"label": "추세(10일선)", "ok": true, "detail": "5,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +103 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,329"}]} {"ts": "2026-09-08T12:32:31.602963+09:00", "side": "BUY", "code": "079650", "name": "서산", "price": 7390, "qty": 223, "cost": 1648217, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5081, "target": 9603, "signals": [{"label": "손절선", "ok": true, "detail": "5,081 (현재 7,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,603"}, {"label": "추세(10일선)", "ok": true, "detail": "5,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +103 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,329"}]}
{"ts": "2026-09-10T09:06:30.772066+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:16.771867+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 484,313"}, {"label": "추세(10일선)", "ok": true, "detail": "307,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T11:38:28.224555+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13930, "qty": 147, "cost": 2048017, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17215, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,910)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,215"}, {"label": "추세(10일선)", "ok": true, "detail": "12,964"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,859"}]}
{"ts": "2026-09-10T14:02:37.654102+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 12, "cost": 4926739, "path": "pullback", "reason": "눌림목 지정가 411,461 도달", "stop": 375781, "target": 462578, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 411,461 (현재 410,500)"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 36168875.40500005, "cash": 36935013.70500006,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 5150762.675171776, "tranche_value": 5150762.675171776,
"last_add_price": 125200 "last_add_price": 125200
@@ -39,32 +39,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3497500.5799993444, "tranche_value": 3497500.5799993444,
"last_add_price": 13420 "last_add_price": 13420
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:16.774335+09:00",
"stop": 358791,
"target": 484313,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3599778.576622015,
"last_add_price": 415500
},
"316140": { "316140": {
"code": "316140", "code": "316140",
"name": "우리금융지주", "name": "우리금융지주",
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 5336831.603500004, "tranche_value": 5336831.603500004,
"last_add_price": 32750 "last_add_price": 32750
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 118900, "cur_price": 118100,
"tranches": 1, "tranches": 1,
"tranche_value": 4443232.642308382, "tranche_value": 4443232.642308382,
"last_add_price": 122000 "last_add_price": 122000
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,946 도달", "entry_reason": "눌림목 지정가 13,946 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 1928587.8820308954, "tranche_value": 1928587.8820308954,
"last_add_price": 13590 "last_add_price": 13590
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1653071.9448850204, "tranche_value": 1653071.9448850204,
"last_add_price": 7390 "last_add_price": 7390
@@ -165,14 +144,35 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 3179542.968018449, "tranche_value": 3179542.968018449,
"last_add_price": 141500 "last_add_price": 141500
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 12,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:37.657664+09:00",
"stop": 375781,
"target": 462578,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,141 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 5122592.989336174,
"last_add_price": 410500
} }
}, },
"realized_pnl": -13599130.92600003, "realized_pnl": -14451235.326000031,
"closed_trades": 38, "closed_trades": 39,
"wins": 5, "wins": 5,
"peak_equity": 101529111.72700004, "peak_equity": 101529111.72700004,
"max_drawdown": 0.16624243648348033, "max_drawdown": 0.16624243648348033,
@@ -183,7 +183,7 @@
"095610": "2026-07-29", "095610": "2026-07-29",
"093370": "2026-07-20", "093370": "2026-07-20",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"034730": "2026-07-07", "034730": "2026-07-07",
"055550": "2026-07-20", "055550": "2026-07-20",
"024060": "2026-07-27", "024060": "2026-07-27",
@@ -196,5 +196,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-11T09:00:01.944251+09:00", "created_at": "2026-06-11T09:00:01.944251+09:00",
"updated_at": "2026-09-09T15:28:28.821136+09:00" "updated_at": "2026-09-10T15:28:33.175199+09:00"
} }
@@ -111,3 +111,5 @@
{"ts": "2026-09-08T15:20:32.428940+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 93, "proceeds": 12066424, "entry_price": 119186, "pnl": 980462, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.218181+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "117,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T15:20:32.428940+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 93, "proceeds": 12066424, "entry_price": 119186, "pnl": 980462, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.218181+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "117,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:02:32.227738+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 135800, "qty": 23, "cost": 3123869, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117206, "target": 163692, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,800 vs 115,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "116,420 / 115,200"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "116,420 / 113,853"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -280 · 기 +899 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.32% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 122,600"}, {"label": "거래량 급증", "ok": true, "detail": "1,470,387 (환산) vs 평균 648,608"}, {"label": "회전율 급증", "ok": true, "detail": "1.32% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "66"}]} {"ts": "2026-09-09T09:02:32.227738+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 135800, "qty": 23, "cost": 3123869, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117206, "target": 163692, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,800 vs 115,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "116,420 / 115,200"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "116,420 / 113,853"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -280 · 기 +899 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.32% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 122,600"}, {"label": "거래량 급증", "ok": true, "detail": "1,470,387 (환산) vs 평균 648,608"}, {"label": "회전율 급증", "ok": true, "detail": "1.32% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
{"ts": "2026-09-09T09:06:32.111702+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 22, "cost": 3113467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 163692, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 163,692"}, {"label": "추세(10일선)", "ok": true, "detail": "115,740"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]} {"ts": "2026-09-09T09:06:32.111702+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 22, "cost": 3113467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 163692, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 163,692"}, {"label": "추세(10일선)", "ok": true, "detail": "115,740"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]}
{"ts": "2026-09-10T09:06:30.775863+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:16.774335+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 484,313"}, {"label": "추세(10일선)", "ok": true, "detail": "307,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:37.657665+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 12, "cost": 4926739, "path": "pullback", "reason": "눌림목 지정가 420,141 도달", "stop": 375781, "target": 462578, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,141 (현재 410,500)"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 36312647.66125005, "cash": 38270356.09325004,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"327260": { "327260": {
@@ -13,12 +13,12 @@
"entry_at": "2026-08-20T09:02:17.450989+09:00", "entry_at": "2026-08-20T09:02:17.450989+09:00",
"stop": 26851, "stop": 26851,
"target": 49986, "target": 49986,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1699505.011186723, "tranche_value": 1699505.011186723,
"last_add_price": 35800 "last_add_price": 35800
@@ -39,53 +39,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,946 도달", "entry_reason": "눌림목 지정가 31,946 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 4850367.628093753, "tranche_value": 4850367.628093753,
"last_add_price": 32400 "last_add_price": 32400
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 253,
"entry_price": 19190,
"entry_at": "2026-08-25T12:16:22.494706+09:00",
"stop": 18112,
"target": 21346,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,031 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 4858670.683812503,
"last_add_price": 19190
},
"010950": {
"code": "010950",
"name": "S-Oil",
"sources": [
"auto"
],
"qty": 64,
"entry_price": 137992.1875,
"entry_at": "2026-08-26T09:36:23.410654+09:00",
"stop": 153508,
"target": 162077,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 4470879.072969298,
"last_add_price": 143200
},
"252990": { "252990": {
"code": "252990", "code": "252990",
"name": "샘씨엔에스", "name": "샘씨엔에스",
@@ -102,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,982 도달", "entry_reason": "눌림목 지정가 13,982 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 2363869.6412348715, "tranche_value": 2363869.6412348715,
"last_add_price": 13520 "last_add_price": 13520
@@ -113,20 +71,20 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 4, "qty": 8,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:32.233010+09:00", "entry_at": "2026-09-09T09:02:32.233010+09:00",
"stop": 998000, "stop": 998000,
"target": 1088000, "target": 1151000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5038415.947093753, "tranche_value": 5038415.947093753,
"last_add_price": 1028000 "last_add_price": 1070000
}, },
"004370": { "004370": {
"code": "004370", "code": "004370",
@@ -144,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,748 도달", "entry_reason": "눌림목 지정가 420,748 도달",
"cur_price": 414000, "cur_price": 409500,
"tranches": 1, "tranches": 1,
"tranche_value": 5045227.910078128, "tranche_value": 5045227.910078128,
"last_add_price": 418500 "last_add_price": 418500
@@ -165,19 +123,61 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 15,087 도달", "entry_reason": "눌림목 지정가 15,087 도달",
"cur_price": 14920, "cur_price": 14640,
"tranches": 1, "tranches": 1,
"tranche_value": 3899629.8305211784, "tranche_value": 3899629.8305211784,
"last_add_price": 14750 "last_add_price": 14750
},
"041520": {
"code": "041520",
"name": "이엘씨",
"sources": [
"auto"
],
"qty": 367,
"entry_price": 11890,
"entry_at": "2026-09-10T09:00:55.814433+09:00",
"stop": 10784,
"target": 14102,
"peak": 11900,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 12,003 도달",
"cur_price": 11700,
"tranches": 1,
"tranche_value": 4373273.034451844,
"last_add_price": 11890
},
"078930": {
"code": "078930",
"name": "GS",
"sources": [
"auto"
],
"qty": 33,
"entry_price": 117800,
"entry_at": "2026-09-10T14:02:37.660601+09:00",
"stop": 105837,
"target": 141726,
"peak": 118200,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 117100,
"tranches": 1,
"tranche_value": 3977003.979830668,
"last_add_price": 117800
} }
}, },
"realized_pnl": -21606641.178750042, "realized_pnl": -20804646.077750042,
"closed_trades": 56, "closed_trades": 58,
"wins": 5, "wins": 6,
"peak_equity": 101695667.93550003, "peak_equity": 101695667.93550003,
"max_drawdown": 0.24548980547857824, "max_drawdown": 0.24548980547857824,
"last_exit": { "last_exit": {
"030000": "2026-08-13", "030000": "2026-09-10",
"035420": "2026-06-23", "035420": "2026-06-23",
"403870": "2026-07-02", "403870": "2026-07-02",
"095610": "2026-09-09", "095610": "2026-09-09",
@@ -192,7 +192,7 @@
"086790": "2026-07-21", "086790": "2026-07-21",
"003680": "2026-09-09", "003680": "2026-09-09",
"252990": "2026-08-25", "252990": "2026-08-25",
"010950": "2026-08-03", "010950": "2026-09-10",
"090850": "2026-08-05", "090850": "2026-08-05",
"161890": "2026-07-30", "161890": "2026-07-30",
"078930": "2026-07-31", "078930": "2026-07-31",
@@ -202,5 +202,5 @@
"068270": "2026-08-26" "068270": "2026-08-26"
}, },
"created_at": "2026-06-11T09:00:01.944270+09:00", "created_at": "2026-06-11T09:00:01.944270+09:00",
"updated_at": "2026-09-09T15:28:28.823695+09:00" "updated_at": "2026-09-10T15:28:33.177720+09:00"
} }
@@ -156,3 +156,8 @@
{"ts": "2026-09-09T09:04:29.143163+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 418500, "qty": 12, "cost": 5022753, "path": "pullback", "reason": "눌림목 지정가 420,748 도달", "stop": 393372, "target": 468756, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "418,000 vs 384,125"}, {"label": "정배열(5>20)", "ok": true, "detail": "406,100 / 384,125"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "406,100 / 370,025"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +11 · 기 -28 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "10,720 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "64"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,748 (현재 418,000)"}]} {"ts": "2026-09-09T09:04:29.143163+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 418500, "qty": 12, "cost": 5022753, "path": "pullback", "reason": "눌림목 지정가 420,748 도달", "stop": 393372, "target": 468756, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "418,000 vs 384,125"}, {"label": "정배열(5>20)", "ok": true, "detail": "406,100 / 384,125"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "406,100 / 370,025"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +11 · 기 -28 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "10,720 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "64"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,748 (현재 418,000)"}]}
{"ts": "2026-09-09T09:10:28.368498+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 150800, "qty": 25, "proceeds": 3762648, "entry_price": 150996, "pnl": -12818, "pnl_pct": -0.13, "hold_from": "2026-08-20T09:02:17.451490+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "122,357 (현재 150,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 208,274"}, {"label": "추세(20일선)", "ok": true, "detail": "135,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +129 · 기 +107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:10:28.368498+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 150800, "qty": 25, "proceeds": 3762648, "entry_price": 150996, "pnl": -12818, "pnl_pct": -0.13, "hold_from": "2026-08-20T09:02:17.451490+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "122,357 (현재 150,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 208,274"}, {"label": "추세(20일선)", "ok": true, "detail": "135,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +129 · 기 +107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:10:28.369785+09:00", "side": "BUY", "code": "060250", "name": "NHN KCP", "price": 14750, "qty": 264, "cost": 3894584, "path": "pullback", "reason": "눌림목 지정가 15,087 도달", "stop": 13230, "target": 17790, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,690 vs 14,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,356 / 14,358"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,356 / 13,592"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +52 · 기 +69 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.42% (환산) vs 평균 1.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 16,190"}, {"label": "거래량 급증", "ok": false, "detail": "166,893 (환산) vs 평균 608,910"}, {"label": "회전율 급증", "ok": false, "detail": "0.42% (환산) vs 평균 1.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,087 (현재 14,690)"}]} {"ts": "2026-09-09T09:10:28.369785+09:00", "side": "BUY", "code": "060250", "name": "NHN KCP", "price": 14750, "qty": 264, "cost": 3894584, "path": "pullback", "reason": "눌림목 지정가 15,087 도달", "stop": 13230, "target": 17790, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,690 vs 14,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,356 / 14,358"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,356 / 13,592"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +52 · 기 +69 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.42% (환산) vs 평균 1.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 16,190"}, {"label": "거래량 급증", "ok": false, "detail": "166,893 (환산) vs 평균 608,910"}, {"label": "회전율 급증", "ok": false, "detail": "0.42% (환산) vs 평균 1.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,087 (현재 14,690)"}]}
{"ts": "2026-09-10T09:00:55.811688+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 253, "proceeds": 4749650, "entry_price": 19190, "pnl": -106148, "pnl_pct": -1.98, "hold_from": "2026-08-25T12:16:22.494706+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,112 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,346"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,555"}]}
{"ts": "2026-09-10T09:00:55.814439+09:00", "side": "BUY", "code": "041520", "name": "이엘씨", "price": 11890, "qty": 367, "cost": 4364285, "path": "pullback", "reason": "눌림목 지정가 12,003 도달", "stop": 10784, "target": 14102, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "11,900 vs 10,158"}, {"label": "정배열(5>20)", "ok": true, "detail": "11,810 / 10,158"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "11,810 / 9,431"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +5 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 0.30% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 13,450"}, {"label": "거래량 급증", "ok": false, "detail": "0 (환산) vs 평균 36,789"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 0.30%"}, {"label": "RSI", "ok": true, "detail": "66"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 12,003 (현재 11,900)"}]}
{"ts": "2026-09-10T10:04:32.005765+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 64, "proceeds": 9740968, "entry_price": 137992, "pnl": 908143, "pnl_pct": 10.51, "hold_from": "2026-08-26T09:36:23.410654+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "109,965"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T13:40:32.100659+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 4, "cost": 4280642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1088000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,088,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
{"ts": "2026-09-10T14:02:37.660602+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 117800, "qty": 33, "cost": 3887983, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 105837, "target": 141726, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,700 vs 76,545"}, {"label": "정배열(5>20)", "ok": true, "detail": "88,900 / 76,545"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "88,900 / 75,550"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+67.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +196 · 기 -113 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.95% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "884,443 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.95% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "82"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 5180051.180047499, "tranche_value": 5180051.180047499,
"last_add_price": 125200 "last_add_price": 125200
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4464385.527789056, "tranche_value": 4464385.527789056,
"last_add_price": 13420 "last_add_price": 13420
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,982 도달", "entry_reason": "눌림목 지정가 13,982 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 2517324.6404987266, "tranche_value": 2517324.6404987266,
"last_add_price": 13520 "last_add_price": 13520
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 3,140 도달", "entry_reason": "눌림목 지정가 3,140 도달",
"cur_price": 3100, "cur_price": 3065,
"tranches": 2, "tranches": 2,
"tranche_value": 4146153.6468727933, "tranche_value": 4146153.6468727933,
"last_add_price": 3255 "last_add_price": 3255
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 2135715.450247605, "tranche_value": 2135715.450247605,
"last_add_price": 7390 "last_add_price": 7390
@@ -118,12 +118,12 @@
"entry_at": "2026-09-07T15:06:35.464006+09:00", "entry_at": "2026-09-07T15:06:35.464006+09:00",
"stop": 129556, "stop": 129556,
"target": 215088, "target": 215088,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 157,907 도달", "entry_reason": "눌림목 지정가 157,907 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 2264272.8858473194, "tranche_value": 2264272.8858473194,
"last_add_price": 163200 "last_add_price": 163200
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,641 도달", "entry_reason": "눌림목 지정가 420,641 도달",
"cur_price": 414000, "cur_price": 409500,
"tranches": 1, "tranches": 1,
"tranche_value": 5254723.901984375, "tranche_value": 5254723.901984375,
"last_add_price": 414000 "last_add_price": 414000
@@ -165,7 +165,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 4078950.2461283705, "tranche_value": 4078950.2461283705,
"last_add_price": 141500 "last_add_price": 141500
@@ -197,5 +197,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-11T09:00:01.944290+09:00", "created_at": "2026-06-11T09:00:01.944290+09:00",
"updated_at": "2026-09-09T15:28:28.826025+09:00" "updated_at": "2026-09-10T15:28:33.180139+09:00"
} }
@@ -1,5 +1,5 @@
{ {
"cash": 4747789.112999955, "cash": 2485260.966499955,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": { "214450": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 5184250.1290937485, "tranche_value": 5184250.1290937485,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 118,115 도달", "entry_reason": "눌림목 지정가 118,115 도달",
"cur_price": 125000, "cur_price": 127600,
"tranches": 2, "tranches": 2,
"tranche_value": 4675255.455593748, "tranche_value": 4675255.455593748,
"last_add_price": 120500 "last_add_price": 120500
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 4550435.925312498, "tranche_value": 4550435.925312498,
"last_add_price": 125200 "last_add_price": 125200
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 4604300.898906248, "tranche_value": 4604300.898906248,
"last_add_price": 136000 "last_add_price": 136000
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4446388.7381874975, "tranche_value": 4446388.7381874975,
"last_add_price": 13420 "last_add_price": 13420
@@ -118,12 +118,12 @@
"entry_at": "2026-08-20T09:02:17.459458+09:00", "entry_at": "2026-08-20T09:02:17.459458+09:00",
"stop": 24273, "stop": 24273,
"target": 65401, "target": 65401,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 2315542.8746463708, "tranche_value": 2315542.8746463708,
"last_add_price": 35800 "last_add_price": 35800
@@ -144,40 +144,40 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 4361206.427093747, "tranche_value": 4361206.427093747,
"last_add_price": 32750 "last_add_price": 32750
}, },
"030000": { "252990": {
"code": "030000", "code": "252990",
"name": "제일기획", "name": "샘씨엔에스",
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 240, "qty": 500,
"entry_price": 19310, "entry_price": 13534.22,
"entry_at": "2026-09-01T09:10:27.800353+09:00", "entry_at": "2026-09-10T09:00:57.076883+09:00",
"stop": 17896, "stop": 10458,
"target": 23553, "target": 22762,
"peak": 19340, "peak": 14130,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,043 도달", "entry_reason": "눌림목 지정가 13,977 도달",
"cur_price": 18890, "cur_price": 14040,
"tranches": 1, "tranches": 2,
"tranche_value": 4643795.892062497, "tranche_value": 3390239.348206665,
"last_add_price": 19310 "last_add_price": 13930
} }
}, },
"realized_pnl": -32126433.44050002, "realized_pnl": -32255931.680500023,
"closed_trades": 38, "closed_trades": 39,
"wins": 1, "wins": 1,
"peak_equity": 103066363.367, "peak_equity": 103066363.367,
"max_drawdown": 0.32975382516389357, "max_drawdown": 0.32975382516389357,
"last_exit": { "last_exit": {
"030000": "2026-08-06", "030000": "2026-09-10",
"086790": "2026-07-29", "086790": "2026-07-29",
"005930": "2026-06-23", "005930": "2026-06-23",
"403870": "2026-07-07", "403870": "2026-07-07",
@@ -199,5 +199,5 @@
"161890": "2026-07-30" "161890": "2026-07-30"
}, },
"created_at": "2026-06-15T14:55:00.582771+09:00", "created_at": "2026-06-15T14:55:00.582771+09:00",
"updated_at": "2026-09-09T15:28:29.410364+09:00" "updated_at": "2026-09-10T15:28:34.349812+09:00"
} }
@@ -112,3 +112,6 @@
{"ts": "2026-08-25T11:36:18.000274+09:00", "side": "BUY", "code": "316140", "name": "우리금융지주", "price": 32750, "qty": 133, "cost": 4356403, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 29900, "target": 37900, "signals": [{"label": "손절선", "ok": true, "detail": "29,900 (현재 32,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 37,900"}, {"label": "추세(20일선)", "ok": true, "detail": "31,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,322 · 기 +436"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 32,722"}]} {"ts": "2026-08-25T11:36:18.000274+09:00", "side": "BUY", "code": "316140", "name": "우리금융지주", "price": 32750, "qty": 133, "cost": 4356403, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 29900, "target": 37900, "signals": [{"label": "손절선", "ok": true, "detail": "29,900 (현재 32,750)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 37,900"}, {"label": "추세(20일선)", "ok": true, "detail": "31,450"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,322 · 기 +436"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 32,722"}]}
{"ts": "2026-09-01T09:08:24.413227+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 12680, "qty": 513, "proceeds": 6492156, "entry_price": 13423, "pnl": -395107, "pnl_pct": -5.54, "hold_from": "2026-08-05T09:02:13.227814+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 12,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,674"}, {"label": "추세(20일선)", "ok": false, "detail": "12,707"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -53 · 기 -347"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-01T09:08:24.413227+09:00", "side": "SELL", "code": "252990", "name": "샘씨엔에스", "price": 12680, "qty": 513, "proceeds": 6492156, "entry_price": 13423, "pnl": -395107, "pnl_pct": -5.54, "hold_from": "2026-08-05T09:02:13.227814+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 12,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,674"}, {"label": "추세(20일선)", "ok": false, "detail": "12,707"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -53 · 기 -347"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-01T09:10:27.800360+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19310, "qty": 240, "cost": 4635095, "path": "pullback", "reason": "눌림목 지정가 20,043 도달", "stop": 17896, "target": 23553, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,310 vs 18,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,648 / 18,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,648 / 19,364"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -11 · 기 +18 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+30%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.16% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "182,700 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.16% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,043 (현재 19,310)"}]} {"ts": "2026-09-01T09:10:27.800360+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19310, "qty": 240, "cost": 4635095, "path": "pullback", "reason": "눌림목 지정가 20,043 도달", "stop": 17896, "target": 23553, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,310 vs 18,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,648 / 18,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,648 / 19,364"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -11 · 기 +18 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+30%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.16% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "182,700 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.16% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,043 (현재 19,310)"}]}
{"ts": "2026-09-10T09:00:56.031807+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 240, "proceeds": 4505597, "entry_price": 19310, "pnl": -129498, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:27.800353+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,896 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 23,553"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:57.076900+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13160, "qty": 257, "cost": 3382627, "path": "pullback", "reason": "눌림목 지정가 13,977 도달", "stop": 10340, "target": 21620, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,330 vs 12,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,414 / 12,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,414 / 13,272"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -255 · 기 +77 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+69%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "0 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,977 (현재 13,330)"}]}
{"ts": "2026-09-10T11:42:30.780788+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13930, "qty": 243, "cost": 3385498, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 21620, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,930)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,620"}, {"label": "추세(20일선)", "ok": true, "detail": "12,772"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,929"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 18657743.377999943, "cash": 11964222.295499941,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 5030428.7588749975, "tranche_value": 5030428.7588749975,
"last_add_price": 125200 "last_add_price": 125200
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4920739.488124997, "tranche_value": 4920739.488124997,
"last_add_price": 13420 "last_add_price": 13420
@@ -55,12 +55,12 @@
"entry_at": "2026-08-20T09:02:17.463463+09:00", "entry_at": "2026-08-20T09:02:17.463463+09:00",
"stop": 24277, "stop": 24277,
"target": 49982, "target": 49982,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 2545799.7712668725, "tranche_value": 2545799.7712668725,
"last_add_price": 35800 "last_add_price": 35800
@@ -81,32 +81,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 4784721.199968747, "tranche_value": 4784721.199968747,
"last_add_price": 32750 "last_add_price": 32750
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 263,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:27.814621+09:00",
"stop": 17896,
"target": 21431,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,043 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5097689.960468747,
"last_add_price": 19310
},
"003490": { "003490": {
"code": "003490", "code": "003490",
"name": "대한항공", "name": "대한항공",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4975122.724249996, "tranche_value": 4975122.724249996,
"last_add_price": 30200 "last_add_price": 30200
@@ -134,20 +113,20 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 4, "qty": 8,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:32.837806+09:00", "entry_at": "2026-09-09T09:02:32.837806+09:00",
"stop": 998000, "stop": 998000,
"target": 1073000, "target": 1125500,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 4919936.126749996, "tranche_value": 4919936.126749996,
"last_add_price": 1028000 "last_add_price": 1070000
}, },
"010950": { "010950": {
"code": "010950", "code": "010950",
@@ -165,19 +144,40 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 1, "tranches": 1,
"tranche_value": 4932638.739249997, "tranche_value": 4932638.739249997,
"last_add_price": 167000 "last_add_price": 167000
},
"252990": {
"code": "252990",
"name": "샘씨엔에스",
"sources": [
"auto"
],
"qty": 543,
"entry_price": 13534.364640883978,
"entry_at": "2026-09-10T09:00:57.191927+09:00",
"stop": 10458,
"target": 18148,
"peak": 14130,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,977 도달",
"cur_price": 14040,
"tranches": 2,
"tranche_value": 3681766.0445766635,
"last_add_price": 13930
} }
}, },
"realized_pnl": -22973042.553000033, "realized_pnl": -23114951.04100003,
"closed_trades": 47, "closed_trades": 48,
"wins": 8, "wins": 8,
"peak_equity": 103066363.367, "peak_equity": 103066363.367,
"max_drawdown": 0.2634062827202891, "max_drawdown": 0.2634062827202891,
"last_exit": { "last_exit": {
"030000": "2026-08-13", "030000": "2026-09-10",
"086790": "2026-07-29", "086790": "2026-07-29",
"005930": "2026-06-23", "005930": "2026-06-23",
"403870": "2026-07-07", "403870": "2026-07-07",
@@ -200,5 +200,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.582787+09:00", "created_at": "2026-06-15T14:55:00.582787+09:00",
"updated_at": "2026-09-09T15:28:29.424242+09:00" "updated_at": "2026-09-10T15:28:34.364866+09:00"
} }
@@ -131,3 +131,7 @@
{"ts": "2026-09-09T09:02:32.837812+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 4, "cost": 4112617, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1073000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]} {"ts": "2026-09-09T09:02:32.837812+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 4, "cost": 4112617, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1073000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]}
{"ts": "2026-09-09T14:22:31.868499+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 360500, "qty": 24, "proceeds": 8635129, "entry_price": 411000, "pnl": -1230351, "pnl_pct": -12.29, "hold_from": "2026-08-13T09:04:17.727331+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "360,434 (현재 359,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 486,849"}, {"label": "추세(20일선)", "ok": true, "detail": "297,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +76 · 기 -70"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T14:22:31.868499+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 360500, "qty": 24, "proceeds": 8635129, "entry_price": 411000, "pnl": -1230351, "pnl_pct": -12.29, "hold_from": "2026-08-13T09:04:17.727331+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "360,434 (현재 359,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 486,849"}, {"label": "추세(20일선)", "ok": true, "detail": "297,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +76 · 기 -70"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T14:22:31.869022+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 167000, "qty": 29, "cost": 4843726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 147115, "target": 196827, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "166,800 vs 110,665"}, {"label": "정배열(5>20)", "ok": true, "detail": "122,540 / 110,665"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,540 / 113,810"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -30 · 기 +292 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.70% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "785,720 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.70% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "80"}]} {"ts": "2026-09-09T14:22:31.869022+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 167000, "qty": 29, "cost": 4843726, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 147115, "target": 196827, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "166,800 vs 110,665"}, {"label": "정배열(5>20)", "ok": true, "detail": "122,540 / 110,665"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,540 / 113,810"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+39.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -30 · 기 +292 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.70% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "785,720 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.70% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "80"}]}
{"ts": "2026-09-10T09:00:57.190417+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 263, "proceeds": 4937383, "entry_price": 19310, "pnl": -141908, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:27.814621+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,896 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,431"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:57.191934+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13160, "qty": 279, "cost": 3672191, "path": "pullback", "reason": "눌림목 지정가 13,977 도달", "stop": 10340, "target": 17390, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,330 vs 12,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,414 / 12,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,414 / 13,272"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -255 · 기 +77 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+69%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "0 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,977 (현재 13,330)"}]}
{"ts": "2026-09-10T11:42:30.797448+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13930, "qty": 264, "cost": 3678072, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17390, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,930)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,390"}, {"label": "추세(20일선)", "ok": true, "detail": "12,772"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,929"}]}
{"ts": "2026-09-10T13:40:33.846699+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 4, "cost": 4280642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1073000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,073,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 17302974.645999953, "cash": 15767444.222499954,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 4697478.874937497, "tranche_value": 4697478.874937497,
"last_add_price": 125200 "last_add_price": 125200
}, },
"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": 153508,
"target": 164727,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 4762406.753156248,
"last_add_price": 136000
},
"194370": { "194370": {
"code": "194370", "code": "194370",
"name": "제이에스코퍼레이션", "name": "제이에스코퍼레이션",
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4594021.1274374975, "tranche_value": 4594021.1274374975,
"last_add_price": 13420 "last_add_price": 13420
@@ -76,12 +55,12 @@
"entry_at": "2026-08-20T09:02:17.467056+09:00", "entry_at": "2026-08-20T09:02:17.467056+09:00",
"stop": 24274, "stop": 24274,
"target": 55120, "target": 55120,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 2377721.795719703, "tranche_value": 2377721.795719703,
"last_add_price": 35800 "last_add_price": 35800
@@ -102,52 +81,31 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 4467750.718124997, "tranche_value": 4467750.718124997,
"last_add_price": 32750 "last_add_price": 32750
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 246,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:27.822753+09:00",
"stop": 17896,
"target": 22138,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,043 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 4761393.044374997,
"last_add_price": 19310
},
"012450": { "012450": {
"code": "012450", "code": "012450",
"name": "한화에어로스페이스", "name": "한화에어로스페이스",
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 4, "qty": 8,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:32.847713+09:00", "entry_at": "2026-09-09T09:02:32.847713+09:00",
"stop": 998000, "stop": 998000,
"target": 1088000, "target": 1151000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 4663103.104437497, "tranche_value": 4663103.104437497,
"last_add_price": 1028000 "last_add_price": 1070000
}, },
"252990": { "252990": {
"code": "252990", "code": "252990",
@@ -155,29 +113,71 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 258, "qty": 501,
"entry_price": 13250, "entry_price": 13647.724550898203,
"entry_at": "2026-09-09T14:22:31.922572+09:00", "entry_at": "2026-09-09T14:22:31.922572+09:00",
"stop": 10340, "stop": 10572,
"target": 19070, "target": 19800,
"peak": 13400, "peak": 14130,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,936 도달", "entry_reason": "눌림목 지정가 13,936 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 2,
"tranche_value": 3428684.1695128847, "tranche_value": 3428684.1695128847,
"last_add_price": 13250 "last_add_price": 14070
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 52,
"entry_price": 89700,
"entry_at": "2026-09-10T09:00:57.309498+09:00",
"stop": 78721,
"target": 111658,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 4704444.468062498,
"last_add_price": 89700
},
"078930": {
"code": "078930",
"name": "GS",
"sources": [
"auto"
],
"qty": 39,
"entry_price": 117800,
"entry_at": "2026-09-10T14:02:38.272722+09:00",
"stop": 101849,
"target": 149701,
"peak": 118200,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 117100,
"tranches": 1,
"tranche_value": 4675233.334531248,
"last_add_price": 117800
} }
}, },
"realized_pnl": -28867102.076500036, "realized_pnl": -27667272.257500038,
"closed_trades": 43, "closed_trades": 45,
"wins": 4, "wins": 5,
"peak_equity": 103066363.367, "peak_equity": 103066363.367,
"max_drawdown": 0.31212123491203, "max_drawdown": 0.31212123491203,
"last_exit": { "last_exit": {
"030000": "2026-08-13", "030000": "2026-09-10",
"086790": "2026-07-29", "086790": "2026-07-29",
"005930": "2026-06-23", "005930": "2026-06-23",
"403870": "2026-07-07", "403870": "2026-07-07",
@@ -192,7 +192,7 @@
"055550": "2026-07-21", "055550": "2026-07-21",
"095610": "2026-08-19", "095610": "2026-08-19",
"252990": "2026-09-01", "252990": "2026-09-01",
"010950": "2026-07-29", "010950": "2026-09-10",
"078930": "2026-07-31", "078930": "2026-07-31",
"003680": "2026-08-24", "003680": "2026-08-24",
"090850": "2026-08-05", "090850": "2026-08-05",
@@ -200,5 +200,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.582803+09:00", "created_at": "2026-06-15T14:55:00.582803+09:00",
"updated_at": "2026-09-09T15:28:29.431929+09:00" "updated_at": "2026-09-10T15:28:34.375066+09:00"
} }
@@ -122,3 +122,9 @@
{"ts": "2026-09-09T09:02:32.847717+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 4, "cost": 4112617, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]} {"ts": "2026-09-09T09:02:32.847717+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 4, "cost": 4112617, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]}
{"ts": "2026-09-09T14:22:31.878201+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 360500, "qty": 22, "proceeds": 7915535, "entry_price": 411000, "pnl": -1127822, "pnl_pct": -12.29, "hold_from": "2026-08-13T09:04:17.735740+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "360,434 (현재 359,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 512,131"}, {"label": "추세(20일선)", "ok": true, "detail": "297,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +76 · 기 -70"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T14:22:31.878201+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 360500, "qty": 22, "proceeds": 7915535, "entry_price": 411000, "pnl": -1127822, "pnl_pct": -12.29, "hold_from": "2026-08-13T09:04:17.735740+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "360,434 (현재 359,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 512,131"}, {"label": "추세(20일선)", "ok": true, "detail": "297,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +76 · 기 -70"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T14:22:31.922582+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13250, "qty": 258, "cost": 3419013, "path": "pullback", "reason": "눌림목 지정가 13,936 도달", "stop": 10340, "target": 19070, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,280 vs 12,739"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,404 / 12,739"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,404 / 13,271"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -467 · 기 +118 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+69%"}, {"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,776 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,936 (현재 13,280)"}]} {"ts": "2026-09-09T14:22:31.922582+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13250, "qty": 258, "cost": 3419013, "path": "pullback", "reason": "눌림목 지정가 13,936 도달", "stop": 10340, "target": 19070, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,280 vs 12,739"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,404 / 12,739"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,404 / 13,271"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -467 · 기 +118 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+69%"}, {"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,776 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.97% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,936 (현재 13,280)"}]}
{"ts": "2026-09-10T09:00:57.307355+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 246, "proceeds": 4618237, "entry_price": 19310, "pnl": -132736, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:27.822753+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,896 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,138"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:57.309503+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 89700, "qty": 52, "cost": 4665100, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 78721, "target": 111658, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "89,900 vs 80,260"}, {"label": "정배열(5>20)", "ok": true, "detail": "81,920 / 80,260"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "81,920 / 80,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -430 · 기 +2,812 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.76% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "4,852,980 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.76% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
{"ts": "2026-09-10T10:04:32.620166+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 71, "proceeds": 10806386, "entry_price": 133414, "pnl": 1332566, "pnl_pct": 14.31, "hold_from": "2026-07-30T09:16:11.930358+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "109,965"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T12:10:31.497677+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 14070, "qty": 243, "cost": 3419523, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 19070, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 14,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 19,070"}, {"label": "추세(20일선)", "ok": true, "detail": "12,778"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -247 · 기 +120"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 14,019"}]}
{"ts": "2026-09-10T13:40:33.860281+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 4, "cost": 4280642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1088000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,088,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
{"ts": "2026-09-10T14:02:38.272726+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 117800, "qty": 39, "cost": 4594889, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 101849, "target": 149701, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,700 vs 76,545"}, {"label": "정배열(5>20)", "ok": true, "detail": "88,900 / 76,545"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "88,900 / 75,550"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+67.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +196 · 기 -113 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.95% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "884,443 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.95% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "82"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 38421001.23550001, "cash": 34850743.116500005,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 4929642.288776176, "tranche_value": 4929642.288776176,
"last_add_price": 125200 "last_add_price": 125200
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4296364.655919675, "tranche_value": 4296364.655919675,
"last_add_price": 13420 "last_add_price": 13420
@@ -55,12 +55,12 @@
"entry_at": "2026-08-20T09:02:17.470693+09:00", "entry_at": "2026-08-20T09:02:17.470693+09:00",
"stop": 26840, "stop": 26840,
"target": 49975, "target": 49975,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1744609.622982949, "tranche_value": 1744609.622982949,
"last_add_price": 35800 "last_add_price": 35800
@@ -76,37 +76,16 @@
"entry_at": "2026-08-20T10:02:23.322756+09:00", "entry_at": "2026-08-20T10:02:23.322756+09:00",
"stop": 122409, "stop": 122409,
"target": 208326, "target": 208326,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 157,407 도달", "entry_reason": "눌림목 지정가 157,407 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1989854.351411668, "tranche_value": 1989854.351411668,
"last_add_price": 157600 "last_add_price": 157600
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 272,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:27.829775+09:00",
"stop": 18249,
"target": 21431,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,043 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5257215.19709375,
"last_add_price": 19310
},
"252990": { "252990": {
"code": "252990", "code": "252990",
"name": "샘씨엔에스", "name": "샘씨엔에스",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,982 도달", "entry_reason": "눌림목 지정가 13,982 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 2434547.9721527454, "tranche_value": 2434547.9721527454,
"last_add_price": 13520 "last_add_price": 13520
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,641 도달", "entry_reason": "눌림목 지정가 420,641 도달",
"cur_price": 414000, "cur_price": 409500,
"tranches": 1, "tranches": 1,
"tranche_value": 5117130.6709687505, "tranche_value": 5117130.6709687505,
"last_add_price": 414000 "last_add_price": 414000
@@ -155,30 +134,51 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 4, "qty": 8,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:32.856183+09:00", "entry_at": "2026-09-09T09:02:32.856183+09:00",
"stop": 998000, "stop": 998000,
"target": 1088000, "target": 1151000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5091544.87721875, "tranche_value": 5091544.87721875,
"last_add_price": 1028000 "last_add_price": 1070000
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 49,
"entry_price": 89700,
"entry_at": "2026-09-10T09:00:57.422784+09:00",
"stop": 81466,
"target": 106168,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 4463555.687218576,
"last_add_price": 89700
} }
}, },
"realized_pnl": -19260011.868500043, "realized_pnl": -19406776.540500045,
"closed_trades": 57, "closed_trades": 58,
"wins": 7, "wins": 7,
"peak_equity": 101291892.54300004, "peak_equity": 101291892.54300004,
"max_drawdown": 0.2315722523502305, "max_drawdown": 0.2315722523502305,
"last_exit": { "last_exit": {
"086790": "2026-07-28", "086790": "2026-07-28",
"030000": "2026-08-13", "030000": "2026-09-10",
"005930": "2026-06-23", "005930": "2026-06-23",
"403870": "2026-07-02", "403870": "2026-07-02",
"095610": "2026-08-19", "095610": "2026-08-19",
@@ -201,5 +201,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.582834+09:00", "created_at": "2026-06-15T14:55:00.582834+09:00",
"updated_at": "2026-09-09T15:28:29.438455+09:00" "updated_at": "2026-09-10T15:28:34.382393+09:00"
} }
@@ -156,3 +156,6 @@
{"ts": "2026-09-08T09:18:27.740927+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 414000, "qty": 12, "cost": 4968745, "path": "pullback", "reason": "눌림목 지정가 420,641 도달", "stop": 388711, "target": 464578, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "413,500 vs 383,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "405,200 / 383,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,200 / 369,950"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+37%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.50% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "30,353 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.50% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "62"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,641 (현재 413,500)"}]} {"ts": "2026-09-08T09:18:27.740927+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 414000, "qty": 12, "cost": 4968745, "path": "pullback", "reason": "눌림목 지정가 420,641 도달", "stop": 388711, "target": 464578, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "413,500 vs 383,900"}, {"label": "정배열(5>20)", "ok": true, "detail": "405,200 / 383,900"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,200 / 369,950"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +14 · 기 -27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+37%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.50% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "30,353 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.50% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "62"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,641 (현재 413,500)"}]}
{"ts": "2026-09-08T15:20:33.052948+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 85, "proceeds": 11028452, "entry_price": 119185, "pnl": 896233, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.235827+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "114,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T15:20:33.052948+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 85, "proceeds": 11028452, "entry_price": 119185, "pnl": 896233, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.235827+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "114,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:02:32.856187+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 4, "cost": 4112617, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]} {"ts": "2026-09-09T09:02:32.856187+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 4, "cost": 4112617, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]}
{"ts": "2026-09-10T09:00:57.420699+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 272, "proceeds": 5106343, "entry_price": 19310, "pnl": -146765, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:27.829775+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,249 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,431"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:57.422789+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 89700, "qty": 49, "cost": 4395959, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 81466, "target": 106168, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "89,900 vs 80,260"}, {"label": "정배열(5>20)", "ok": true, "detail": "81,920 / 80,260"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "81,920 / 80,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -430 · 기 +2,812 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.76% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "4,852,980 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.76% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
{"ts": "2026-09-10T13:40:33.868951+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 4, "cost": 4280642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1088000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,088,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 33584724.31224993, "cash": 34276334.872749925,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"194370": { "194370": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4489026.732352336, "tranche_value": 4489026.732352336,
"last_add_price": 13420 "last_add_price": 13420
@@ -34,12 +34,12 @@
"entry_at": "2026-08-20T09:02:17.473909+09:00", "entry_at": "2026-08-20T09:02:17.473909+09:00",
"stop": 26841, "stop": 26841,
"target": 46120, "target": 46120,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1773404.3510667775, "tranche_value": 1773404.3510667775,
"last_add_price": 35800 "last_add_price": 35800
@@ -55,12 +55,12 @@
"entry_at": "2026-08-20T09:02:17.474447+09:00", "entry_at": "2026-08-20T09:02:17.474447+09:00",
"stop": 122357, "stop": 122357,
"target": 193955, "target": 193955,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 147,729 도달", "entry_reason": "눌림목 지정가 147,729 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 2027018.6354019148, "tranche_value": 2027018.6354019148,
"last_add_price": 157600 "last_add_price": 157600
@@ -81,32 +81,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 48900, "cur_price": 50400,
"tranches": 2, "tranches": 2,
"tranche_value": 4928101.458627134, "tranche_value": 4928101.458627134,
"last_add_price": 50000 "last_add_price": 50000
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 271,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:27.835960+09:00",
"stop": 18249,
"target": 20901,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 19,689 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5241632.559781246,
"last_add_price": 19310
},
"041520": { "041520": {
"code": "041520", "code": "041520",
"name": "이엘씨", "name": "이엘씨",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 4133528.1959721213, "tranche_value": 4133528.1959721213,
"last_add_price": 11590 "last_add_price": 11590
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 7,342 도달", "entry_reason": "눌림목 지정가 7,342 도달",
"cur_price": 4810, "cur_price": 4765,
"tranches": 1, "tranches": 1,
"tranche_value": 2547466.077043123, "tranche_value": 2547466.077043123,
"last_add_price": 4795 "last_add_price": 4795
@@ -165,20 +144,41 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 4450280.282468722, "tranche_value": 4450280.282468722,
"last_add_price": 162800 "last_add_price": 162800
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 49,
"entry_price": 89700,
"entry_at": "2026-09-10T09:00:57.526385+09:00",
"stop": 81466,
"target": 102051,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 4422821.372265709,
"last_add_price": 89700
} }
}, },
"realized_pnl": -19622462.818500035, "realized_pnl": -19768687.914500035,
"closed_trades": 55, "closed_trades": 56,
"wins": 7, "wins": 7,
"peak_equity": 100161893.89500001, "peak_equity": 100161893.89500001,
"max_drawdown": 0.2042124124564016, "max_drawdown": 0.2042124124564016,
"last_exit": { "last_exit": {
"086790": "2026-07-28", "086790": "2026-07-28",
"030000": "2026-08-13", "030000": "2026-09-10",
"005930": "2026-06-23", "005930": "2026-06-23",
"403870": "2026-07-02", "403870": "2026-07-02",
"003490": "2026-07-07", "003490": "2026-07-07",
@@ -201,5 +201,5 @@
"068270": "2026-09-04" "068270": "2026-09-04"
}, },
"created_at": "2026-06-15T14:55:00.582849+09:00", "created_at": "2026-06-15T14:55:00.582849+09:00",
"updated_at": "2026-09-09T15:28:29.444970+09:00" "updated_at": "2026-09-10T15:28:34.388106+09:00"
} }
@@ -146,3 +146,5 @@
{"ts": "2026-09-08T09:16:28.420160+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 370500, "qty": 21, "proceeds": 7765328, "entry_price": 410690, "pnl": -860466, "pnl_pct": -9.79, "hold_from": "2026-08-13T09:04:17.747289+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "372,766 (현재 371,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 467,577"}, {"label": "추세(20일선)", "ok": true, "detail": "297,700"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +65 · 기 -32"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T09:16:28.420160+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 370500, "qty": 21, "proceeds": 7765328, "entry_price": 410690, "pnl": -860466, "pnl_pct": -9.79, "hold_from": "2026-08-13T09:04:17.747289+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "372,766 (현재 371,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 467,577"}, {"label": "추세(20일선)", "ok": true, "detail": "297,700"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +65 · 기 -32"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-08T09:16:28.420580+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 157500, "qty": 28, "cost": 4410662, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 143251, "target": 178874, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "157,600 vs 110,205"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,700 / 110,205"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,700 / 113,657"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+30.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -24 · 기 +334 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "604,200 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "78"}]} {"ts": "2026-09-08T09:16:28.420580+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 157500, "qty": 28, "cost": 4410662, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 143251, "target": 178874, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "157,600 vs 110,205"}, {"label": "정배열(5>20)", "ok": true, "detail": "120,700 / 110,205"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,700 / 113,657"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+30.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -24 · 기 +334 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+13%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.54% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "604,200 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.54% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "78"}]}
{"ts": "2026-09-09T12:04:36.598645+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 162800, "qty": 27, "cost": 4396259, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 143251, "target": 178874, "signals": [{"label": "손절선", "ok": true, "detail": "143,251 (현재 162,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 178,874"}, {"label": "추세(20일선)", "ok": true, "detail": "110,445"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -42 · 기 +284"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 162,343"}]} {"ts": "2026-09-09T12:04:36.598645+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 162800, "qty": 27, "cost": 4396259, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 143251, "target": 178874, "signals": [{"label": "손절선", "ok": true, "detail": "143,251 (현재 162,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 178,874"}, {"label": "추세(20일선)", "ok": true, "detail": "110,445"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -42 · 기 +284"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 162,343"}]}
{"ts": "2026-09-10T09:00:57.523904+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 271, "proceeds": 5087570, "entry_price": 19310, "pnl": -146225, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:27.835960+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,249 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,901"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:57.526391+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 89700, "qty": 49, "cost": 4395959, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 81466, "target": 102051, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "89,900 vs 80,260"}, {"label": "정배열(5>20)", "ok": true, "detail": "81,920 / 80,260"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "81,920 / 80,203"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -430 · 기 +2,812 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.76% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "4,852,980 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.76% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "61"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 33466430.70299997, "cash": 33188963.050999973,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"194370": { "194370": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4188989.7646745183, "tranche_value": 4188989.7646745183,
"last_add_price": 13420 "last_add_price": 13420
@@ -34,12 +34,12 @@
"entry_at": "2026-08-20T09:02:17.477466+09:00", "entry_at": "2026-08-20T09:02:17.477466+09:00",
"stop": 26851, "stop": 26851,
"target": 57698, "target": 57698,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1684859.3510976394, "tranche_value": 1684859.3510976394,
"last_add_price": 35800 "last_add_price": 35800
@@ -55,12 +55,12 @@
"entry_at": "2026-08-20T09:02:17.477957+09:00", "entry_at": "2026-08-20T09:02:17.477957+09:00",
"stop": 122357, "stop": 122357,
"target": 236914, "target": 236914,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 147,729 도달", "entry_reason": "눌림목 지정가 147,729 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1925810.8724292808, "tranche_value": 1925810.8724292808,
"last_add_price": 157600 "last_add_price": 157600
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 48900, "cur_price": 50400,
"tranches": 2, "tranches": 2,
"tranche_value": 4686399.784966664, "tranche_value": 4686399.784966664,
"last_add_price": 50000 "last_add_price": 50000
@@ -92,62 +92,20 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 337, "qty": 660,
"entry_price": 11370, "entry_price": 11624.484848484848,
"entry_at": "2026-09-01T09:00:35.729808+09:00", "entry_at": "2026-09-01T09:00:35.729808+09:00",
"stop": 10193, "stop": 10519,
"target": 14900, "target": 14942,
"peak": 12340, "peak": 12340,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,563 도달", "entry_reason": "눌림목 지정가 11,563 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1,
"tranche_value": 3841219.293311723,
"last_add_price": 11370
},
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 257,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:27.841104+09:00",
"stop": 18249,
"target": 22492,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 19,689 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 4973941.500156248,
"last_add_price": 19310
},
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 395750.0,
"entry_at": "2026-09-03T09:02:25.379282+09:00",
"stop": 359379,
"target": 504862,
"peak": 402500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2, "tranches": 2,
"tranche_value": 4231920.01634282, "tranche_value": 3841219.293311723,
"last_add_price": 402000 "last_add_price": 11890
}, },
"003680": { "003680": {
"code": "003680", "code": "003680",
@@ -165,26 +123,68 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 7,342 도달", "entry_reason": "눌림목 지정가 7,342 도달",
"cur_price": 4810, "cur_price": 4765,
"tranches": 1, "tranches": 1,
"tranche_value": 2440070.444136775, "tranche_value": 2440070.444136775,
"last_add_price": 4795 "last_add_price": 4795
},
"078930": {
"code": "078930",
"name": "GS",
"sources": [
"auto"
],
"qty": 32,
"entry_price": 117800,
"entry_at": "2026-09-10T14:02:38.293461+09:00",
"stop": 105837,
"target": 153689,
"peak": 118200,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 117100,
"tranches": 1,
"tranche_value": 3791358.59699398,
"last_add_price": 117800
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 46,
"entry_price": 90400,
"entry_at": "2026-09-10T14:02:38.294281+09:00",
"stop": 82166,
"target": 115103,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 4228860.553627883,
"last_add_price": 90400
} }
}, },
"realized_pnl": -22563974.84700004, "realized_pnl": -23950808.87900004,
"closed_trades": 50, "closed_trades": 53,
"wins": 3, "wins": 3,
"peak_equity": 100161893.89500001, "peak_equity": 100161893.89500001,
"max_drawdown": 0.24469424425713165, "max_drawdown": 0.24469424425713165,
"last_exit": { "last_exit": {
"086790": "2026-07-29", "086790": "2026-07-29",
"030000": "2026-08-06", "030000": "2026-09-10",
"005930": "2026-06-23", "005930": "2026-06-23",
"403870": "2026-07-02", "403870": "2026-07-02",
"003490": "2026-07-07", "003490": "2026-07-07",
"240810": "2026-07-23", "240810": "2026-07-23",
"093370": "2026-07-20", "093370": "2026-07-20",
"214450": "2026-09-01", "214450": "2026-09-10",
"055550": "2026-07-20", "055550": "2026-07-20",
"034730": "2026-07-08", "034730": "2026-07-08",
"319660": "2026-07-23", "319660": "2026-07-23",
@@ -193,7 +193,7 @@
"024060": "2026-07-27", "024060": "2026-07-27",
"003680": "2026-08-20", "003680": "2026-08-20",
"252990": "2026-09-01", "252990": "2026-09-01",
"010950": "2026-08-03", "010950": "2026-09-10",
"090850": "2026-08-06", "090850": "2026-08-06",
"138040": "2026-08-13", "138040": "2026-08-13",
"078930": "2026-09-03", "078930": "2026-09-03",
@@ -201,5 +201,5 @@
"068270": "2026-09-04" "068270": "2026-09-04"
}, },
"created_at": "2026-06-15T14:55:00.582864+09:00", "created_at": "2026-06-15T14:55:00.582864+09:00",
"updated_at": "2026-09-09T15:28:29.449937+09:00" "updated_at": "2026-09-10T15:28:34.392823+09:00"
} }
@@ -138,3 +138,10 @@
{"ts": "2026-09-04T12:34:27.175668+09:00", "side": "SELL", "code": "068270", "name": "셀트리온", "price": 187800, "qty": 49, "proceeds": 9184256, "entry_price": 196049, "pnl": -423585, "pnl_pct": -4.21, "hold_from": "2026-08-06T09:14:10.574454+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "183,032 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 235,100"}, {"label": "추세(20일선)", "ok": false, "detail": "194,450"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -128 · 기 -47"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-04T12:34:27.175668+09:00", "side": "SELL", "code": "068270", "name": "셀트리온", "price": 187800, "qty": 49, "proceeds": 9184256, "entry_price": 196049, "pnl": -423585, "pnl_pct": -4.21, "hold_from": "2026-08-06T09:14:10.574454+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "183,032 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 235,100"}, {"label": "추세(20일선)", "ok": false, "detail": "194,450"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -128 · 기 -47"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-04T12:34:27.175913+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 4795, "qty": 508, "cost": 2436225, "path": "pullback", "reason": "눌림목 지정가 7,342 도달", "stop": 4035, "target": 7075, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "4,785 vs 4,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,915 / 4,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,915 / 4,844"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-1.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -3 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "98,173 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,342 (현재 4,785)"}]} {"ts": "2026-09-04T12:34:27.175913+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 4795, "qty": 508, "cost": 2436225, "path": "pullback", "reason": "눌림목 지정가 7,342 도달", "stop": 4035, "target": 7075, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "4,785 vs 4,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,915 / 4,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,915 / 4,844"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-1.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -3 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "98,173 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,342 (현재 4,785)"}]}
{"ts": "2026-09-07T09:02:26.096900+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 157600, "qty": 12, "cost": 1891484, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 115629, "target": 232714, "signals": [{"label": "손절선", "ok": true, "detail": "115,629 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 232,714"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +212 · 기 -125"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,446"}]} {"ts": "2026-09-07T09:02:26.096900+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 157600, "qty": 12, "cost": 1891484, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 115629, "target": 232714, "signals": [{"label": "손절선", "ok": true, "detail": "115,629 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 232,714"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +212 · 기 -125"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,446"}]}
{"ts": "2026-09-10T09:00:57.627617+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 257, "proceeds": 4824743, "entry_price": 19310, "pnl": -138671, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:27.841104+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,249 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,492"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:57.673961+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 170100, "qty": 25, "cost": 4253138, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 154833, "target": 215902, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "167,600 vs 110,705"}, {"label": "정배열(5>20)", "ok": true, "detail": "122,700 / 110,705"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "122,700 / 113,823"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+43.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +42 · 기 +305 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.63% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "715,420 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.63% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "80"}]}
{"ts": "2026-09-10T09:00:57.677605+09:00", "side": "BUY", "code": "041520", "name": "이엘씨", "price": 11890, "qty": 323, "cost": 3841046, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10193, "target": 14900, "signals": [{"label": "손절선", "ok": true, "detail": "10,193 (현재 11,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 14,900"}, {"label": "추세(20일선)", "ok": true, "detail": "10,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +5 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 11,739"}]}
{"ts": "2026-09-10T09:06:31.410548+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 20, "proceeds": 7116096, "entry_price": 395750, "pnl": -800091, "pnl_pct": -9.92, "hold_from": "2026-09-03T09:02:25.379282+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "359,379 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 504,862"}, {"label": "추세(20일선)", "ok": true, "detail": "297,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T10:04:32.637922+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 25, "proceeds": 3805066, "entry_price": 170100, "pnl": -448072, "pnl_pct": -10.35, "hold_from": "2026-09-10T09:00:57.673945+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "154,833 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 215,902"}, {"label": "추세(20일선)", "ok": true, "detail": "109,965"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 175,189"}]}
{"ts": "2026-09-10T14:02:38.293464+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 117800, "qty": 32, "cost": 3770165, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 105837, "target": 153689, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,700 vs 76,545"}, {"label": "정배열(5>20)", "ok": true, "detail": "88,900 / 76,545"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "88,900 / 75,550"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+67.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +196 · 기 -113 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.95% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "884,443 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.95% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "82"}]}
{"ts": "2026-09-10T14:02:38.294284+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 90400, "qty": 46, "cost": 4159024, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82166, "target": 115103, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,400 vs 80,285"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,020 / 80,285"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,020 / 80,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -577 · 기 +2,843 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.81% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "5,220,387 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.81% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3813943.0504600187, "tranche_value": 3813943.0504600187,
"last_add_price": 350000 "last_add_price": 350000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3759463.8630866953, "tranche_value": 3759463.8630866953,
"last_add_price": 136000 "last_add_price": 136000
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3342042.065213833, "tranche_value": 3342042.065213833,
"last_add_price": 13420 "last_add_price": 13420
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5363811.392406253, "tranche_value": 5363811.392406253,
"last_add_price": 2960 "last_add_price": 2960
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 3177696.924168879, "tranche_value": 3177696.924168879,
"last_add_price": 11590 "last_add_price": 11590
@@ -123,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 1, "tranches": 1,
"tranche_value": 3239694.510071496, "tranche_value": 3239694.510071496,
"last_add_price": 126400 "last_add_price": 126400
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 2, "tranches": 2,
"tranche_value": 3233975.9230847433, "tranche_value": 3233975.9230847433,
"last_add_price": 152000 "last_add_price": 152000
@@ -165,7 +165,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 1, "tranches": 1,
"tranche_value": 4302231.2098323405, "tranche_value": 4302231.2098323405,
"last_add_price": 30300 "last_add_price": 30300
@@ -175,7 +175,7 @@
"closed_trades": 34, "closed_trades": 34,
"wins": 1, "wins": 1,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.1859662521949996, "max_drawdown": 0.1908110702249995,
"last_exit": { "last_exit": {
"030000": "2026-09-04", "030000": "2026-09-04",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -198,5 +198,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-15T14:55:00.582879+09:00", "created_at": "2026-06-15T14:55:00.582879+09:00",
"updated_at": "2026-09-09T15:28:30.055767+09:00" "updated_at": "2026-09-10T15:28:34.989255+09:00"
} }
@@ -1,28 +1,7 @@
{ {
"cash": 41175218.37850005, "cash": 45030185.42850005,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"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": 153508,
"target": 164716,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 3759463.8630866953,
"last_add_price": 136000
},
"194370": { "194370": {
"code": "194370", "code": "194370",
"name": "제이에스코퍼레이션", "name": "제이에스코퍼레이션",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3342042.065213833, "tranche_value": 3342042.065213833,
"last_add_price": 13420 "last_add_price": 13420
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5343166.925093753, "tranche_value": 5343166.925093753,
"last_add_price": 2960 "last_add_price": 2960
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 3169899.6784588406, "tranche_value": 3169899.6784588406,
"last_add_price": 11590 "last_add_price": 11590
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 1, "tranches": 1,
"tranche_value": 3232111.486475773, "tranche_value": 3232111.486475773,
"last_add_price": 126400 "last_add_price": 126400
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 2, "tranches": 2,
"tranche_value": 3225992.8046420617, "tranche_value": 3225992.8046420617,
"last_add_price": 152000 "last_add_price": 152000
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 1, "tranches": 1,
"tranche_value": 4294882.6988680065, "tranche_value": 4294882.6988680065,
"last_add_price": 30300 "last_add_price": 30300
@@ -165,17 +144,38 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 6650, "cur_price": 6510,
"tranches": 1, "tranches": 1,
"tranche_value": 4287737.740777487, "tranche_value": 4287737.740777487,
"last_add_price": 6680 "last_add_price": 6680
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 11,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.896994+09:00",
"stop": 375781,
"target": 479937,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 411,461 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 4801102.649890805,
"last_add_price": 410500
} }
}, },
"realized_pnl": -18211460.53700002, "realized_pnl": -17178616.74200002,
"closed_trades": 37, "closed_trades": 38,
"wins": 2, "wins": 3,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.1859662521949996, "max_drawdown": 0.19056917246499955,
"last_exit": { "last_exit": {
"030000": "2026-09-04", "030000": "2026-09-04",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -190,7 +190,7 @@
"024060": "2026-07-27", "024060": "2026-07-27",
"003680": "2026-08-24", "003680": "2026-08-24",
"138040": "2026-08-19", "138040": "2026-08-19",
"010950": "2026-07-29", "010950": "2026-09-10",
"252990": "2026-09-01", "252990": "2026-09-01",
"090850": "2026-08-05", "090850": "2026-08-05",
"078930": "2026-09-03", "078930": "2026-09-03",
@@ -198,5 +198,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-15T14:55:00.582910+09:00", "created_at": "2026-06-15T14:55:00.582910+09:00",
"updated_at": "2026-09-09T15:28:30.069160+09:00" "updated_at": "2026-09-10T15:28:35.003436+09:00"
} }
@@ -108,3 +108,5 @@
{"ts": "2026-09-08T09:04:29.359538+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 152000, "qty": 21, "cost": 3192479, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 126684, "target": 183132, "signals": [{"label": "손절선", "ok": true, "detail": "126,684 (현재 151,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 183,132"}, {"label": "추세(10일선)", "ok": true, "detail": "119,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -49 · 기 +77"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 150,386"}]} {"ts": "2026-09-08T09:04:29.359538+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 152000, "qty": 21, "cost": 3192479, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 126684, "target": 183132, "signals": [{"label": "손절선", "ok": true, "detail": "126,684 (현재 151,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 183,132"}, {"label": "추세(10일선)", "ok": true, "detail": "119,210"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -49 · 기 +77"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 150,386"}]}
{"ts": "2026-09-09T14:22:32.549669+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 360500, "qty": 16, "proceeds": 5756752, "entry_price": 411000, "pnl": -820234, "pnl_pct": -12.29, "hold_from": "2026-08-13T09:02:16.187852+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "360,434 (현재 359,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 512,131"}, {"label": "추세(10일선)", "ok": true, "detail": "307,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +76 · 기 -70"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T14:22:32.549669+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 360500, "qty": 16, "proceeds": 5756752, "entry_price": 411000, "pnl": -820234, "pnl_pct": -12.29, "hold_from": "2026-08-13T09:02:16.187852+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "360,434 (현재 359,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 512,131"}, {"label": "추세(10일선)", "ok": true, "detail": "307,300"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +76 · 기 -70"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T14:22:32.552578+09:00", "side": "BUY", "code": "048910", "name": "대원미디어", "price": 6680, "qty": 641, "cost": 4282522, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 6036, "target": 7967, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,670 vs 5,134"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,486 / 5,134"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,486 / 4,909"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -8 · 기 +3 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+65%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.30% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,630"}, {"label": "거래량 급증", "ok": true, "detail": "61,920 (환산) vs 평균 38,349"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.30%"}, {"label": "RSI", "ok": true, "detail": "84"}]} {"ts": "2026-09-09T14:22:32.552578+09:00", "side": "BUY", "code": "048910", "name": "대원미디어", "price": 6680, "qty": 641, "cost": 4282522, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 6036, "target": 7967, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,670 vs 5,134"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,486 / 5,134"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,486 / 4,909"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -8 · 기 +3 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+65%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.49% (환산) vs 평균 0.30% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,630"}, {"label": "거래량 급증", "ok": true, "detail": "61,920 (환산) vs 평균 38,349"}, {"label": "회전율 급증", "ok": true, "detail": "0.49% (환산) vs 평균 0.30%"}, {"label": "RSI", "ok": true, "detail": "84"}]}
{"ts": "2026-09-10T10:04:33.243952+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 55, "proceeds": 8371144, "entry_price": 133404, "pnl": 1032844, "pnl_pct": 14.31, "hold_from": "2026-07-30T09:16:11.950700+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "110,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:38.896999+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 11, "cost": 4516177, "path": "pullback", "reason": "눌림목 지정가 411,461 도달", "stop": 375781, "target": 479937, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 411,461 (현재 410,500)"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3393650.506937234, "tranche_value": 3393650.506937234,
"last_add_price": 13420 "last_add_price": 13420
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5376321.98103125, "tranche_value": 5376321.98103125,
"last_add_price": 2960 "last_add_price": 2960
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 3188265.499071182, "tranche_value": 3188265.499071182,
"last_add_price": 11590 "last_add_price": 11590
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4425264.84827894, "tranche_value": 4425264.84827894,
"last_add_price": 30200 "last_add_price": 30200
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 1, "tranches": 1,
"tranche_value": 3216718.402620471, "tranche_value": 3216718.402620471,
"last_add_price": 126400 "last_add_price": 126400
@@ -123,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 2, "tranches": 2,
"tranche_value": 3217490.050630382, "tranche_value": 3217490.050630382,
"last_add_price": 152000 "last_add_price": 152000
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2972315.521438034, "tranche_value": 2972315.521438034,
"last_add_price": 133000 "last_add_price": 133000
@@ -165,7 +165,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 1, "tranches": 1,
"tranche_value": 3448134.918581595, "tranche_value": 3448134.918581595,
"last_add_price": 167000 "last_add_price": 167000
@@ -175,7 +175,7 @@
"closed_trades": 39, "closed_trades": 39,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.17955675902999982, "max_drawdown": 0.19246265902999982,
"last_exit": { "last_exit": {
"030000": "2026-09-04", "030000": "2026-09-04",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -198,5 +198,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-15T14:55:00.582926+09:00", "created_at": "2026-06-15T14:55:00.582926+09:00",
"updated_at": "2026-09-09T15:28:30.076880+09:00" "updated_at": "2026-09-10T15:28:35.011760+09:00"
} }
@@ -1,5 +1,5 @@
{ {
"cash": 37894727.143999994, "cash": 39460926.11399999,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"194370": { "194370": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4271897.688361821, "tranche_value": 4271897.688361821,
"last_add_price": 13420 "last_add_price": 13420
@@ -34,12 +34,12 @@
"entry_at": "2026-08-20T09:02:18.553157+09:00", "entry_at": "2026-08-20T09:02:18.553157+09:00",
"stop": 26852, "stop": 26852,
"target": 57698, "target": 57698,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1725875.4362712654, "tranche_value": 1725875.4362712654,
"last_add_price": 35800 "last_add_price": 35800
@@ -55,57 +55,36 @@
"entry_at": "2026-08-20T09:02:18.554253+09:00", "entry_at": "2026-08-20T09:02:18.554253+09:00",
"stop": 122357, "stop": 122357,
"target": 236914, "target": 236914,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 147,729 도달", "entry_reason": "눌림목 지정가 147,729 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1972692.6896559393, "tranche_value": 1972692.6896559393,
"last_add_price": 157600 "last_add_price": 157600
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 523,
"entry_price": 19018.27915869981,
"entry_at": "2026-08-20T10:06:19.265748+09:00",
"stop": 17940,
"target": 22252,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 19,640 도달",
"cur_price": 18890,
"tranches": 2,
"tranche_value": 4987614.581937499,
"last_add_price": 19200
},
"041520": { "041520": {
"code": "041520", "code": "041520",
"name": "이엘씨", "name": "이엘씨",
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 344, "qty": 673,
"entry_price": 11370, "entry_price": 11624.205052005944,
"entry_at": "2026-09-01T09:00:39.404439+09:00", "entry_at": "2026-09-01T09:00:39.404439+09:00",
"stop": 10193, "stop": 10518,
"target": 14900, "target": 14942,
"peak": 12340, "peak": 12340,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,563 도달", "entry_reason": "눌림목 지정가 11,563 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 2,
"tranche_value": 3922687.5648087934, "tranche_value": 3922687.5648087934,
"last_add_price": 11370 "last_add_price": 11890
}, },
"001790": { "001790": {
"code": "001790", "code": "001790",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5042122.590937499, "tranche_value": 5042122.590937499,
"last_add_price": 2945 "last_add_price": 2945
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 2145338.3431725265, "tranche_value": 2145338.3431725265,
"last_add_price": 7700 "last_add_price": 7700
@@ -165,20 +144,41 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 7,342 도달", "entry_reason": "눌림목 지정가 7,342 도달",
"cur_price": 4810, "cur_price": 4765,
"tranches": 1, "tranches": 1,
"tranche_value": 2474296.0650329688, "tranche_value": 2474296.0650329688,
"last_add_price": 4795 "last_add_price": 4795
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 48,
"entry_price": 90400,
"entry_at": "2026-09-10T14:02:38.914134+09:00",
"stop": 82166,
"target": 115103,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 4391923.653301918,
"last_add_price": 90400
} }
}, },
"realized_pnl": -20724626.69000002, "realized_pnl": -20854232.05250002,
"closed_trades": 47, "closed_trades": 48,
"wins": 3, "wins": 3,
"peak_equity": 100344662.275, "peak_equity": 100344662.275,
"max_drawdown": 0.23080444655370694, "max_drawdown": 0.23080444655370694,
"last_exit": { "last_exit": {
"086790": "2026-07-29", "086790": "2026-07-29",
"030000": "2026-08-13", "030000": "2026-09-10",
"403870": "2026-07-02", "403870": "2026-07-02",
"003490": "2026-07-07", "003490": "2026-07-07",
"240810": "2026-07-24", "240810": "2026-07-24",
@@ -199,5 +199,5 @@
"068270": "2026-09-04" "068270": "2026-09-04"
}, },
"created_at": "2026-06-15T14:55:00.583136+09:00", "created_at": "2026-06-15T14:55:00.583136+09:00",
"updated_at": "2026-09-09T15:28:30.083941+09:00" "updated_at": "2026-09-10T15:28:35.018909+09:00"
} }
@@ -132,3 +132,6 @@
{"ts": "2026-09-04T12:34:28.378630+09:00", "side": "SELL", "code": "068270", "name": "셀트리온", "price": 187800, "qty": 50, "proceeds": 9371690, "entry_price": 194200, "pnl": -339767, "pnl_pct": -3.3, "hold_from": "2026-08-06T09:34:17.058691+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "181,408 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 232,576"}, {"label": "추세(20일선)", "ok": false, "detail": "194,450"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -128 · 기 -47"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-04T12:34:28.378630+09:00", "side": "SELL", "code": "068270", "name": "셀트리온", "price": 187800, "qty": 50, "proceeds": 9371690, "entry_price": 194200, "pnl": -339767, "pnl_pct": -3.3, "hold_from": "2026-08-06T09:34:17.058691+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "181,408 (현재 187,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 232,576"}, {"label": "추세(20일선)", "ok": false, "detail": "194,450"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -128 · 기 -47"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-04T12:34:28.379092+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 4795, "qty": 515, "cost": 2469795, "path": "pullback", "reason": "눌림목 지정가 7,342 도달", "stop": 4035, "target": 7075, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "4,785 vs 4,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,915 / 4,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,915 / 4,844"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-1.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -3 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "98,173 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,342 (현재 4,785)"}]} {"ts": "2026-09-04T12:34:28.379092+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 4795, "qty": 515, "cost": 2469795, "path": "pullback", "reason": "눌림목 지정가 7,342 도달", "stop": 4035, "target": 7075, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "4,785 vs 4,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,915 / 4,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,915 / 4,844"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-1.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -3 · 기 +15 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "98,173 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,342 (현재 4,785)"}]}
{"ts": "2026-09-07T09:02:27.267153+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 157600, "qty": 12, "cost": 1891484, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 115629, "target": 232714, "signals": [{"label": "손절선", "ok": true, "detail": "115,629 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 232,714"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +212 · 기 -125"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,446"}]} {"ts": "2026-09-07T09:02:27.267153+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 157600, "qty": 12, "cost": 1891484, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 115629, "target": 232714, "signals": [{"label": "손절선", "ok": true, "detail": "115,629 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 232,714"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +212 · 기 -125"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,446"}]}
{"ts": "2026-09-10T09:00:59.313161+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 523, "proceeds": 9818447, "entry_price": 19018, "pnl": -129605, "pnl_pct": -1.1, "hold_from": "2026-08-20T10:06:19.265748+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,940 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,252"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T09:00:59.316482+09:00", "side": "BUY", "code": "041520", "name": "이엘씨", "price": 11890, "qty": 329, "cost": 3912397, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10193, "target": 14900, "signals": [{"label": "손절선", "ok": true, "detail": "10,193 (현재 11,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 14,900"}, {"label": "추세(20일선)", "ok": true, "detail": "10,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +5 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 11,739"}]}
{"ts": "2026-09-10T14:02:38.914138+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 90400, "qty": 48, "cost": 4339851, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82166, "target": 115103, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,400 vs 80,285"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,020 / 80,285"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,020 / 80,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -577 · 기 +2,843 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.81% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "5,220,387 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.81% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3889733.683715179, "tranche_value": 3889733.683715179,
"last_add_price": 353000 "last_add_price": 353000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 118,115 도달", "entry_reason": "눌림목 지정가 118,115 도달",
"cur_price": 125000, "cur_price": 127600,
"tranches": 2, "tranches": 2,
"tranche_value": 5327150.576000001, "tranche_value": 5327150.576000001,
"last_add_price": 120500 "last_add_price": 120500
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 4940372.790080874, "tranche_value": 4940372.790080874,
"last_add_price": 125200 "last_add_price": 125200
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3791237.2526261737, "tranche_value": 3791237.2526261737,
"last_add_price": 136000 "last_add_price": 136000
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 5133126.668375, "tranche_value": 5133126.668375,
"last_add_price": 32750 "last_add_price": 32750
@@ -123,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,946 도달", "entry_reason": "눌림목 지정가 13,946 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 1870914.8665673207, "tranche_value": 1870914.8665673207,
"last_add_price": 13590 "last_add_price": 13590
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 1, "tranches": 1,
"tranche_value": 4478278.821943787, "tranche_value": 4478278.821943787,
"last_add_price": 30200 "last_add_price": 30200
@@ -160,12 +160,12 @@
"entry_at": "2026-09-07T15:06:37.179898+09:00", "entry_at": "2026-09-07T15:06:37.179898+09:00",
"stop": 120000, "stop": 120000,
"target": 272057, "target": 272057,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 157,907 도달", "entry_reason": "눌림목 지정가 157,907 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1704132.165683182, "tranche_value": 1704132.165683182,
"last_add_price": 163200 "last_add_price": 163200
@@ -199,5 +199,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-15T14:55:00.583184+09:00", "created_at": "2026-06-15T14:55:00.583184+09:00",
"updated_at": "2026-09-09T15:28:30.089815+09:00" "updated_at": "2026-09-10T15:28:35.024534+09:00"
} }
@@ -1,5 +1,5 @@
{ {
"cash": 29555156.08999999, "cash": 31385665.40299999,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 5075960.404438956, "tranche_value": 5075960.404438956,
"last_add_price": 125200 "last_add_price": 125200
}, },
"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": 153508,
"target": 165176,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 3902843.990735232,
"last_add_price": 136000
},
"194370": { "194370": {
"code": "194370", "code": "194370",
"name": "제이에스코퍼레이션", "name": "제이에스코퍼레이션",
@@ -60,32 +39,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3433240.983007488, "tranche_value": 3433240.983007488,
"last_add_price": 13420 "last_add_price": 13420
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:19.025851+09:00",
"stop": 358791,
"target": 509417,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3513980.3038730407,
"last_add_price": 415500
},
"327260": { "327260": {
"code": "327260", "code": "327260",
"name": "RF머트리얼즈", "name": "RF머트리얼즈",
@@ -97,12 +55,12 @@
"entry_at": "2026-08-20T09:02:18.566265+09:00", "entry_at": "2026-08-20T09:02:18.566265+09:00",
"stop": 24287, "stop": 24287,
"target": 55133, "target": 55133,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1369448.2358109318, "tranche_value": 1369448.2358109318,
"last_add_price": 35800 "last_add_price": 35800
@@ -123,66 +81,108 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 5207054.06571875, "tranche_value": 5207054.06571875,
"last_add_price": 32750 "last_add_price": 32750
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 283,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:29.545577+09:00",
"stop": 17896,
"target": 22138,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,043 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5476493.456218749,
"last_add_price": 19310
},
"012450": { "012450": {
"code": "012450", "code": "012450",
"name": "한화에어로스페이스", "name": "한화에어로스페이스",
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 5, "qty": 10,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:33.499991+09:00", "entry_at": "2026-09-09T09:02:33.499991+09:00",
"stop": 998000, "stop": 998000,
"target": 1088000, "target": 1151000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5407499.193124999, "tranche_value": 5407499.193124999,
"last_add_price": 1028000 "last_add_price": 1070000
},
"252990": {
"code": "252990",
"name": "샘씨엔에스",
"sources": [
"auto"
],
"qty": 299,
"entry_price": 13533.411371237458,
"entry_at": "2026-09-10T09:00:59.533567+09:00",
"stop": 10457,
"target": 19685,
"peak": 14130,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,977 도달",
"cur_price": 14040,
"tranches": 2,
"tranche_value": 2028063.468468333,
"last_add_price": 13930
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 39,
"entry_price": 90400,
"entry_at": "2026-09-10T14:02:38.927922+09:00",
"stop": 79421,
"target": 112358,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 3559282.5485596135,
"last_add_price": 90400
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 12,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.928470+09:00",
"stop": 375781,
"target": 479937,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,141 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 5110932.165583902,
"last_add_price": 410500
} }
}, },
"realized_pnl": -15762562.798000025, "realized_pnl": -15723162.111000028,
"closed_trades": 39, "closed_trades": 42,
"wins": 4, "wins": 5,
"peak_equity": 101368884.75700004, "peak_equity": 101368884.75700004,
"max_drawdown": 0.18244887903556523, "max_drawdown": 0.18244887903556523,
"last_exit": { "last_exit": {
"030000": "2026-08-13", "030000": "2026-09-10",
"086790": "2026-07-20", "086790": "2026-07-20",
"403870": "2026-07-07", "403870": "2026-07-07",
"093370": "2026-07-20", "093370": "2026-07-20",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"009150": "2026-07-06", "009150": "2026-07-06",
"034730": "2026-07-07", "034730": "2026-07-07",
"319660": "2026-07-23", "319660": "2026-07-23",
@@ -191,12 +191,12 @@
"095610": "2026-08-19", "095610": "2026-08-19",
"252990": "2026-09-01", "252990": "2026-09-01",
"003680": "2026-08-24", "003680": "2026-08-24",
"010950": "2026-07-29", "010950": "2026-09-10",
"090850": "2026-08-05", "090850": "2026-08-05",
"161890": "2026-07-30", "161890": "2026-07-30",
"078930": "2026-07-31", "078930": "2026-07-31",
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.583198+09:00", "created_at": "2026-06-15T14:55:00.583198+09:00",
"updated_at": "2026-09-09T15:28:30.095128+09:00" "updated_at": "2026-09-10T15:28:35.029815+09:00"
} }
@@ -115,3 +115,11 @@
{"ts": "2026-09-01T09:10:29.545580+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19310, "qty": 283, "cost": 5465550, "path": "pullback", "reason": "눌림목 지정가 20,043 도달", "stop": 17896, "target": 22138, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,310 vs 18,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,648 / 18,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,648 / 19,364"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -11 · 기 +18 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+30%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.16% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "182,700 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.16% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,043 (현재 19,310)"}]} {"ts": "2026-09-01T09:10:29.545580+09:00", "side": "BUY", "code": "030000", "name": "제일기획", "price": 19310, "qty": 283, "cost": 5465550, "path": "pullback", "reason": "눌림목 지정가 20,043 도달", "stop": 17896, "target": 22138, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "19,310 vs 18,870"}, {"label": "정배열(5>20)", "ok": true, "detail": "19,648 / 18,870"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "19,648 / 19,364"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-9.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -11 · 기 +18 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+30%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.16% (환산) vs 평균 0.62% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 21,150"}, {"label": "거래량 급증", "ok": false, "detail": "182,700 (환산) vs 평균 711,709"}, {"label": "회전율 급증", "ok": false, "detail": "0.16% (환산) vs 평균 0.62%"}, {"label": "RSI", "ok": true, "detail": "52"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 20,043 (현재 19,310)"}]}
{"ts": "2026-09-08T15:20:33.695703+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 91, "proceeds": 11806932, "entry_price": 119186, "pnl": 959405, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.253867+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "114,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T15:20:33.695703+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 91, "proceeds": 11806932, "entry_price": 119186, "pnl": 959405, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.253867+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "114,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:02:33.499995+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 5, "cost": 5140771, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]} {"ts": "2026-09-09T09:02:33.499995+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 5, "cost": 5140771, "path": "pullback", "reason": "눌림목 지정가 1,094,989 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,094,989 (현재 1,025,000)"}]}
{"ts": "2026-09-10T09:00:59.532400+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 283, "proceeds": 5312850, "entry_price": 19310, "pnl": -152700, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:29.545577+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,896 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,138"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:00:59.533571+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13160, "qty": 154, "cost": 2026944, "path": "pullback", "reason": "눌림목 지정가 13,977 도달", "stop": 10340, "target": 18800, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,330 vs 12,742"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,414 / 12,742"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,414 / 13,272"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-5.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -255 · 기 +77 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+69%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "0 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,977 (현재 13,330)"}]}
{"ts": "2026-09-10T09:06:32.447685+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:19.025851+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 509,417"}, {"label": "추세(20일선)", "ok": true, "detail": "297,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T10:04:33.269878+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 57, "proceeds": 8675550, "entry_price": 133863, "pnl": 1044205, "pnl_pct": 13.92, "hold_from": "2026-07-30T09:24:07.563027+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "109,965"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T11:42:31.458584+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13930, "qty": 145, "cost": 2020153, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18800, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,930)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,800"}, {"label": "추세(20일선)", "ok": true, "detail": "12,772"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,929"}]}
{"ts": "2026-09-10T13:40:34.515492+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 5, "cost": 5350803, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1088000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,088,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
{"ts": "2026-09-10T14:02:38.927925+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 90400, "qty": 39, "cost": 3526129, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79421, "target": 112358, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,400 vs 80,285"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,020 / 80,285"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,020 / 80,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -577 · 기 +2,843 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.81% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "5,220,387 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.81% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
{"ts": "2026-09-10T14:02:38.928473+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 12, "cost": 4926739, "path": "pullback", "reason": "눌림목 지정가 420,141 도달", "stop": 375781, "target": 479937, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "410,500 vs 383,750"}, {"label": "정배열(5>20)", "ok": true, "detail": "404,600 / 383,750"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,141 (현재 410,500)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 43510704.15100003, "cash": 45068428.00800003,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"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": 153508,
"target": 165176,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 3832048.06532556,
"last_add_price": 136000
},
"194370": { "194370": {
"code": "194370", "code": "194370",
"name": "제이에스코퍼레이션", "name": "제이에스코퍼레이션",
@@ -39,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3393597.375168939, "tranche_value": 3393597.375168939,
"last_add_price": 13420 "last_add_price": 13420
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:19.030446+09:00",
"stop": 358791,
"target": 509417,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3472153.1669509606,
"last_add_price": 415500
},
"327260": { "327260": {
"code": "327260", "code": "327260",
"name": "RF머트리얼즈", "name": "RF머트리얼즈",
@@ -76,12 +34,12 @@
"entry_at": "2026-08-20T09:02:18.571212+09:00", "entry_at": "2026-08-20T09:02:18.571212+09:00",
"stop": 24287, "stop": 24287,
"target": 55133, "target": 55133,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1360762.8418676818, "tranche_value": 1360762.8418676818,
"last_add_price": 35800 "last_add_price": 35800
@@ -97,37 +55,16 @@
"entry_at": "2026-08-20T09:02:18.571907+09:00", "entry_at": "2026-08-20T09:02:18.571907+09:00",
"stop": 112730, "stop": 112730,
"target": 227287, "target": 227287,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 147,729 도달", "entry_reason": "눌림목 지정가 147,729 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1555265.8091770594, "tranche_value": 1555265.8091770594,
"last_add_price": 157600 "last_add_price": 157600
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 274,
"entry_price": 19310,
"entry_at": "2026-09-01T09:10:29.550179+09:00",
"stop": 17896,
"target": 22138,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 19,689 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5299742.515312502,
"last_add_price": 19310
},
"003680": { "003680": {
"code": "003680", "code": "003680",
"name": "한성기업", "name": "한성기업",
@@ -144,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 7,342 도달", "entry_reason": "눌림목 지정가 7,342 도달",
"cur_price": 4810, "cur_price": 4765,
"tranches": 1, "tranches": 1,
"tranche_value": 2667186.0151028302, "tranche_value": 2667186.0151028302,
"last_add_price": 4795 "last_add_price": 4795
@@ -155,33 +92,96 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 5, "qty": 9,
"entry_price": 1028000, "entry_price": 1046666.6666666666,
"entry_at": "2026-09-09T09:02:33.505578+09:00", "entry_at": "2026-09-09T09:02:33.505578+09:00",
"stop": 998000, "stop": 998000,
"target": 1088000, "target": 1144000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5237403.446937501, "tranche_value": 5237403.446937501,
"last_add_price": 1028000 "last_add_price": 1070000
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 38,
"entry_price": 90400,
"entry_at": "2026-09-10T14:02:38.933751+09:00",
"stop": 79421,
"target": 112358,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 3452170.020442301,
"last_add_price": 90400
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 12,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.934217+09:00",
"stop": 375781,
"target": 479937,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 411,461 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 4957124.381763087,
"last_add_price": 410500
},
"440110": {
"code": "440110",
"name": "파두",
"sources": [
"interest"
],
"qty": 68,
"entry_price": 78098.5294117647,
"entry_at": "2026-09-10T14:34:37.502445+09:00",
"stop": 65590,
"target": 103115,
"peak": 80700,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 80000,
"tranches": 2,
"tranche_value": 2693266.5143909547,
"last_add_price": 79900
} }
}, },
"realized_pnl": -16884135.966000028, "realized_pnl": -16839879.09500003,
"closed_trades": 41, "closed_trades": 44,
"wins": 4, "wins": 5,
"peak_equity": 100182695.41500005, "peak_equity": 100182695.41500005,
"max_drawdown": 0.18600200510985643, "max_drawdown": 0.18600200510985643,
"last_exit": { "last_exit": {
"030000": "2026-08-13", "030000": "2026-09-10",
"086790": "2026-07-20", "086790": "2026-07-20",
"403870": "2026-07-07", "403870": "2026-07-07",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-07-08", "034730": "2026-07-08",
"319660": "2026-07-27", "319660": "2026-07-27",
@@ -191,12 +191,12 @@
"095610": "2026-08-19", "095610": "2026-08-19",
"003680": "2026-08-24", "003680": "2026-08-24",
"138040": "2026-09-08", "138040": "2026-09-08",
"010950": "2026-07-29", "010950": "2026-09-10",
"252990": "2026-09-01", "252990": "2026-09-01",
"090850": "2026-08-05", "090850": "2026-08-05",
"078930": "2026-07-31", "078930": "2026-07-31",
"068270": "2026-09-04" "068270": "2026-09-04"
}, },
"created_at": "2026-06-15T14:55:00.583212+09:00", "created_at": "2026-06-15T14:55:00.583212+09:00",
"updated_at": "2026-09-09T15:28:30.099651+09:00" "updated_at": "2026-09-10T15:28:35.034337+09:00"
} }
@@ -119,3 +119,11 @@
{"ts": "2026-09-07T09:02:27.284778+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 157600, "qty": 9, "cost": 1418613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 105872, "target": 222957, "signals": [{"label": "손절선", "ok": true, "detail": "105,872 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 222,957"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +212 · 기 -125"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,446"}]} {"ts": "2026-09-07T09:02:27.284778+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 157600, "qty": 9, "cost": 1418613, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 105872, "target": 222957, "signals": [{"label": "손절선", "ok": true, "detail": "105,872 (현재 157,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 222,957"}, {"label": "추세(20일선)", "ok": true, "detail": "136,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +212 · 기 -125"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 154,446"}]}
{"ts": "2026-09-08T15:20:33.701449+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 87, "proceeds": 11287946, "entry_price": 115983, "pnl": 1195932, "pnl_pct": 12.09, "hold_from": "2026-08-24T13:12:22.284078+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "114,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T15:20:33.701449+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 87, "proceeds": 11287946, "entry_price": 115983, "pnl": 1195932, "pnl_pct": 12.09, "hold_from": "2026-08-24T13:12:22.284078+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "114,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:02:33.505582+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 5, "cost": 5140771, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,025,000)"}]} {"ts": "2026-09-09T09:02:33.505582+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1028000, "qty": 5, "cost": 5140771, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1088000, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "1,025,000 vs 1,024,150"}, {"label": "정배열(5>20)", "ok": true, "detail": "1,138,600 / 1,024,150"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,138,600 / 1,049,650"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+5.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "58,353 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,025,000)"}]}
{"ts": "2026-09-10T09:00:59.648699+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 274, "proceeds": 5143890, "entry_price": 19310, "pnl": -147844, "pnl_pct": -2.59, "hold_from": "2026-09-01T09:10:29.550179+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,896 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 22,138"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,675"}]}
{"ts": "2026-09-10T09:06:32.452794+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:19.030446+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 509,417"}, {"label": "추세(20일선)", "ok": true, "detail": "297,025"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T10:04:33.274498+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 57, "proceeds": 8675550, "entry_price": 133863, "pnl": 1044205, "pnl_pct": 13.92, "hold_from": "2026-07-30T09:24:07.565720+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(20일선)", "ok": true, "detail": "109,965"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T13:40:34.520785+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 4, "cost": 4280642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1088000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,088,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
{"ts": "2026-09-10T14:02:38.933754+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 90400, "qty": 38, "cost": 3435715, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79421, "target": 112358, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,400 vs 80,285"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,020 / 80,285"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,020 / 80,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -577 · 기 +2,843 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.81% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "5,220,387 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.81% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
{"ts": "2026-09-10T14:02:38.934219+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 12, "cost": 4926739, "path": "pullback", "reason": "눌림목 지정가 411,461 도달", "stop": 375781, "target": 479937, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "410,500 vs 383,750"}, {"label": "정배열(5>20)", "ok": true, "detail": "404,600 / 383,750"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 411,461 (현재 410,500)"}]}
{"ts": "2026-09-10T14:34:37.502447+09:00", "side": "BUY", "code": "440110", "name": "파두", "price": 76400, "qty": 35, "cost": 2674401, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 64506, "target": 100188, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "75,800 vs 65,835"}, {"label": "정배열(5>20)", "ok": true, "detail": "71,680 / 65,835"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "71,680 / 71,445"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+19.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +173 · 기 +220 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+52%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.81% (환산) vs 평균 0.90% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 75,500"}, {"label": "거래량 급증", "ok": true, "detail": "904,158 (환산) vs 평균 449,720"}, {"label": "회전율 급증", "ok": true, "detail": "1.81% (환산) vs 평균 0.90%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
{"ts": "2026-09-10T14:50:34.929498+09:00", "side": "BUY", "code": "440110", "name": "파두", "price": 79900, "qty": 33, "cost": 2637096, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 64506, "target": 100188, "signals": [{"label": "손절선", "ok": true, "detail": "64,506 (현재 80,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,188"}, {"label": "추세(20일선)", "ok": true, "detail": "66,050"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +173 · 기 +220"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 79,527"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 32543236.56149999, "cash": 40050674.79649999,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,53 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 4940372.790080874, "tranche_value": 4940372.790080874,
"last_add_price": 125200 "last_add_price": 125200
}, },
"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": 153508,
"target": 165174,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 3791237.2526261737,
"last_add_price": 136000
},
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:19.034496+09:00",
"stop": 358791,
"target": 509417,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3465074.791945059,
"last_add_price": 415500
},
"316140": { "316140": {
"code": "316140", "code": "316140",
"name": "우리금융지주", "name": "우리금융지주",
@@ -81,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 5113659.21834375, "tranche_value": 5113659.21834375,
"last_add_price": 32750 "last_add_price": 32750
@@ -102,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,946 도달", "entry_reason": "눌림목 지정가 13,946 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 1867525.9036903584, "tranche_value": 1867525.9036903584,
"last_add_price": 13590 "last_add_price": 13590
@@ -123,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 1, "tranches": 1,
"tranche_value": 4469498.464141663, "tranche_value": 4469498.464141663,
"last_add_price": 30200 "last_add_price": 30200
@@ -139,12 +97,12 @@
"entry_at": "2026-09-07T15:06:37.194049+09:00", "entry_at": "2026-09-07T15:06:37.194049+09:00",
"stop": 120000, "stop": 120000,
"target": 234043, "target": 234043,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 157,907 도달", "entry_reason": "눌림목 지정가 157,907 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1702342.5778611205, "tranche_value": 1702342.5778611205,
"last_add_price": 163200 "last_add_price": 163200
@@ -165,15 +123,57 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 3071180.117220259, "tranche_value": 3071180.117220259,
"last_add_price": 141500 "last_add_price": 141500
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 11,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.938971+09:00",
"stop": 375781,
"target": 479937,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,141 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 4920492.504829236,
"last_add_price": 410500
},
"327260": {
"code": "327260",
"name": "RF머트리얼즈",
"sources": [
"interest"
],
"qty": 46,
"entry_price": 44350,
"entry_at": "2026-09-10T14:12:34.510311+09:00",
"stop": 35450,
"target": 62150,
"peak": 44500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 43250,
"tranches": 1,
"tranche_value": 2073999.8646011376,
"last_add_price": 44350
} }
}, },
"realized_pnl": -18016518.51400002, "realized_pnl": -17860982.89900002,
"closed_trades": 39, "closed_trades": 41,
"wins": 2, "wins": 3,
"peak_equity": 101140808.32700005, "peak_equity": 101140808.32700005,
"max_drawdown": 0.19631637526867085, "max_drawdown": 0.19631637526867085,
"last_exit": { "last_exit": {
@@ -184,7 +184,7 @@
"403870": "2026-07-07", "403870": "2026-07-07",
"093370": "2026-07-20", "093370": "2026-07-20",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"034730": "2026-07-07", "034730": "2026-07-07",
"003490": "2026-08-18", "003490": "2026-08-18",
"105560": "2026-07-20", "105560": "2026-07-20",
@@ -192,7 +192,7 @@
"024060": "2026-07-27", "024060": "2026-07-27",
"003680": "2026-08-24", "003680": "2026-08-24",
"252990": "2026-09-01", "252990": "2026-09-01",
"010950": "2026-07-29", "010950": "2026-09-10",
"090850": "2026-08-05", "090850": "2026-08-05",
"078930": "2026-07-31", "078930": "2026-07-31",
"068270": "2026-09-04", "068270": "2026-09-04",
@@ -200,5 +200,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.583227+09:00", "created_at": "2026-06-15T14:55:00.583227+09:00",
"updated_at": "2026-09-09T15:28:30.103911+09:00" "updated_at": "2026-09-10T15:28:35.038300+09:00"
} }
@@ -116,3 +116,7 @@
{"ts": "2026-09-08T15:20:33.706325+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 89, "proceeds": 11547438, "entry_price": 119185, "pnl": 938347, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.257865+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "117,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T15:20:33.706325+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 89, "proceeds": 11547438, "entry_price": 119185, "pnl": 938347, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.257865+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "117,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:02:33.510482+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 135800, "qty": 22, "cost": 2988048, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117206, "target": 172989, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,800 vs 115,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "116,420 / 115,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "116,420 / 113,853"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -280 · 기 +899 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.32% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 122,600"}, {"label": "거래량 급증", "ok": true, "detail": "1,470,387 (환산) vs 평균 648,608"}, {"label": "회전율 급증", "ok": true, "detail": "1.32% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "66"}]} {"ts": "2026-09-09T09:02:33.510482+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 135800, "qty": 22, "cost": 2988048, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117206, "target": 172989, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,800 vs 115,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "116,420 / 115,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "116,420 / 113,853"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -280 · 기 +899 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.32% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 122,600"}, {"label": "거래량 급증", "ok": true, "detail": "1,470,387 (환산) vs 평균 648,608"}, {"label": "회전율 급증", "ok": true, "detail": "1.32% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
{"ts": "2026-09-09T09:06:33.382416+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 21, "cost": 2971946, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 172989, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 172,989"}, {"label": "추세(10일선)", "ok": true, "detail": "115,740"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]} {"ts": "2026-09-09T09:06:33.382416+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 21, "cost": 2971946, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 172989, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 172,989"}, {"label": "추세(10일선)", "ok": true, "detail": "115,740"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]}
{"ts": "2026-09-10T09:06:32.457408+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:19.034496+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 509,417"}, {"label": "추세(10일선)", "ok": true, "detail": "307,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T10:04:33.278692+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 55, "proceeds": 8371144, "entry_price": 133862, "pnl": 1007640, "pnl_pct": 13.92, "hold_from": "2026-07-30T09:24:07.568342+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "110,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:38.938974+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 11, "cost": 4516177, "path": "pullback", "reason": "눌림목 지정가 420,141 도달", "stop": 375781, "target": 479937, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,141 (현재 410,500)"}]}
{"ts": "2026-09-10T14:12:34.510314+09:00", "side": "BUY", "code": "327260", "name": "RF머트리얼즈", "price": 44350, "qty": 46, "cost": 2040406, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 35450, "target": 62150, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "44,350 vs 36,470"}, {"label": "정배열(5>10)", "ok": true, "detail": "37,790 / 36,470"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "37,790 / 29,897"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+14.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -27 · 기 +263 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "10.79% (환산) vs 평균 4.02% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 43,650"}, {"label": "거래량 급증", "ok": true, "detail": "1,941,613 (환산) vs 평균 673,097"}, {"label": "회전율 급증", "ok": true, "detail": "10.79% (환산) vs 평균 4.02%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 45425970.174499966, "cash": 33926603.87749997,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"327260": { "327260": {
@@ -13,57 +13,36 @@
"entry_at": "2026-08-20T09:02:18.579921+09:00", "entry_at": "2026-08-20T09:02:18.579921+09:00",
"stop": 26854, "stop": 26854,
"target": 46133, "target": 46133,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1835134.7132164796, "tranche_value": 1835134.7132164796,
"last_add_price": 35800 "last_add_price": 35800
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 274,
"entry_price": 19190,
"entry_at": "2026-08-25T12:16:24.258018+09:00",
"stop": 18112,
"target": 20807,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 19,672 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5261803.221562497,
"last_add_price": 19190
},
"041520": { "041520": {
"code": "041520", "code": "041520",
"name": "이엘씨", "name": "이엘씨",
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 368, "qty": 720,
"entry_price": 11370, "entry_price": 11624.222222222223,
"entry_at": "2026-09-01T09:00:39.955979+09:00", "entry_at": "2026-09-01T09:00:39.955979+09:00",
"stop": 10193, "stop": 10518,
"target": 13135, "target": 13283,
"peak": 12340, "peak": 12340,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,563 도달", "entry_reason": "눌림목 지정가 11,563 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 2,
"tranche_value": 4188194.7669907366, "tranche_value": 4188194.7669907366,
"last_add_price": 11370 "last_add_price": 11890
}, },
"079650": { "079650": {
"code": "079650", "code": "079650",
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 2326946.156796955, "tranche_value": 2326946.156796955,
"last_add_price": 7700 "last_add_price": 7700
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 5380475.415249998, "tranche_value": 5380475.415249998,
"last_add_price": 30000 "last_add_price": 30000
@@ -113,20 +92,20 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 5, "qty": 10,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:33.514810+09:00", "entry_at": "2026-09-09T09:02:33.514810+09:00",
"stop": 998000, "stop": 998000,
"target": 1073000, "target": 1125500,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5404117.900249997, "tranche_value": 5404117.900249997,
"last_add_price": 1028000 "last_add_price": 1070000
}, },
"252990": { "252990": {
"code": "252990", "code": "252990",
@@ -134,20 +113,20 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 184, "qty": 358,
"entry_price": 13070, "entry_price": 13434.525139664804,
"entry_at": "2026-09-09T09:04:30.445123+09:00", "entry_at": "2026-09-09T09:04:30.445123+09:00",
"stop": 10723, "stop": 11128,
"target": 16590, "target": 16895,
"peak": 13550, "peak": 14130,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,153 도달", "entry_reason": "눌림목 지정가 13,153 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 2,
"tranche_value": 2413342.693478599, "tranche_value": 2413342.693478599,
"last_add_price": 13070 "last_add_price": 13820
}, },
"180640": { "180640": {
"code": "180640", "code": "180640",
@@ -165,20 +144,41 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 1, "tranches": 1,
"tranche_value": 4372017.345337843, "tranche_value": 4372017.345337843,
"last_add_price": 142500 "last_add_price": 142500
},
"034020": {
"code": "034020",
"name": "두산에너빌리티",
"sources": [
"interest"
],
"qty": 52,
"entry_price": 90400,
"entry_at": "2026-09-10T14:02:38.943334+09:00",
"stop": 82166,
"target": 102751,
"peak": 90500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 90300,
"tranches": 1,
"tranche_value": 4778356.865055864,
"last_add_price": 90400
} }
}, },
"realized_pnl": -14287167.702500036, "realized_pnl": -14402126.594500037,
"closed_trades": 56, "closed_trades": 57,
"wins": 10, "wins": 10,
"peak_equity": 100344662.275, "peak_equity": 100344662.275,
"max_drawdown": 0.17793081459150337, "max_drawdown": 0.17793081459150337,
"last_exit": { "last_exit": {
"086790": "2026-07-20", "086790": "2026-07-20",
"030000": "2026-08-13", "030000": "2026-09-10",
"403870": "2026-07-02", "403870": "2026-07-02",
"003490": "2026-07-07", "003490": "2026-07-07",
"240810": "2026-07-24", "240810": "2026-07-24",
@@ -200,5 +200,5 @@
"068270": "2026-08-26" "068270": "2026-08-26"
}, },
"created_at": "2026-06-15T14:55:00.583241+09:00", "created_at": "2026-06-15T14:55:00.583241+09:00",
"updated_at": "2026-09-09T15:28:30.107829+09:00" "updated_at": "2026-09-10T15:28:35.042361+09:00"
} }
@@ -150,3 +150,8 @@
{"ts": "2026-09-09T09:04:30.445126+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13070, "qty": 184, "cost": 2405241, "path": "pullback", "reason": "눌림목 지정가 13,153 도달", "stop": 10723, "target": 16590, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,090 vs 12,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,366 / 12,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,366 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -522 · 기 +153 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "105,727 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,153 (현재 13,090)"}]} {"ts": "2026-09-09T09:04:30.445126+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13070, "qty": 184, "cost": 2405241, "path": "pullback", "reason": "눌림목 지정가 13,153 도달", "stop": 10723, "target": 16590, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "13,090 vs 12,730"}, {"label": "정배열(5>20)", "ok": true, "detail": "14,366 / 12,730"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,366 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-6.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -522 · 기 +153 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "105,727 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,153 (현재 13,090)"}]}
{"ts": "2026-09-09T09:10:29.647463+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 150800, "qty": 27, "proceeds": 4063660, "entry_price": 151015, "pnl": -14351, "pnl_pct": -0.14, "hold_from": "2026-08-20T09:02:18.580358+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "122,376 (현재 150,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 193,974"}, {"label": "추세(20일선)", "ok": true, "detail": "135,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +129 · 기 +107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:10:29.647463+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 150800, "qty": 27, "proceeds": 4063660, "entry_price": 151015, "pnl": -14351, "pnl_pct": -0.14, "hold_from": "2026-08-20T09:02:18.580358+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "122,376 (현재 150,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 193,974"}, {"label": "추세(20일선)", "ok": true, "detail": "135,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +129 · 기 +107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:56:28.798956+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 142500, "qty": 30, "cost": 4275641, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 128259, "target": 163861, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "142,300 vs 115,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "126,280 / 115,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,280 / 117,627"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.44% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "297,893 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.44% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]} {"ts": "2026-09-09T09:56:28.798956+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 142500, "qty": 30, "cost": 4275641, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 128259, "target": 163861, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "142,300 vs 115,305"}, {"label": "정배열(5>20)", "ok": true, "detail": "126,280 / 115,305"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,280 / 117,627"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.44% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "297,893 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.44% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]}
{"ts": "2026-09-10T09:00:59.873326+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 274, "proceeds": 5143890, "entry_price": 19190, "pnl": -114959, "pnl_pct": -1.98, "hold_from": "2026-08-25T12:16:24.258018+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "18,112 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 20,807"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,555"}]}
{"ts": "2026-09-10T09:00:59.876453+09:00", "side": "BUY", "code": "041520", "name": "이엘씨", "price": 11890, "qty": 352, "cost": 4185908, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10193, "target": 13135, "signals": [{"label": "손절선", "ok": true, "detail": "10,193 (현재 11,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 13,135"}, {"label": "추세(20일선)", "ok": true, "detail": "10,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +5 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 11,739"}]}
{"ts": "2026-09-10T11:18:29.756936+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13820, "qty": 174, "cost": 2405041, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10723, "target": 16590, "signals": [{"label": "손절선", "ok": true, "detail": "10,723 (현재 13,840)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 16,590"}, {"label": "추세(20일선)", "ok": true, "detail": "12,767"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,839"}]}
{"ts": "2026-09-10T13:40:34.530061+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 5, "cost": 5350803, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1073000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,073,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
{"ts": "2026-09-10T14:02:38.943336+09:00", "side": "BUY", "code": "034020", "name": "두산에너빌리티", "price": 90400, "qty": 52, "cost": 4701505, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 82166, "target": 102751, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "90,400 vs 80,285"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,020 / 80,285"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,020 / 80,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+11.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -577 · 기 +2,843 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+43%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.81% (환산) vs 평균 0.41% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 89,100"}, {"label": "거래량 급증", "ok": true, "detail": "5,220,387 (환산) vs 평균 2,599,170"}, {"label": "회전율 급증", "ok": true, "detail": "0.81% (환산) vs 평균 0.41%"}, {"label": "RSI", "ok": true, "detail": "62"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 46415652.37250001, "cash": 42794530.15950001,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"327260": { "327260": {
@@ -13,37 +13,16 @@
"entry_at": "2026-08-20T09:02:18.583985+09:00", "entry_at": "2026-08-20T09:02:18.583985+09:00",
"stop": 24273, "stop": 24273,
"target": 49979, "target": 49979,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1405152.4684093075, "tranche_value": 1405152.4684093075,
"last_add_price": 35800 "last_add_price": 35800
}, },
"030000": {
"code": "030000",
"name": "제일기획",
"sources": [
"auto"
],
"qty": 279,
"entry_price": 19190,
"entry_at": "2026-08-25T12:16:24.261562+09:00",
"stop": 17760,
"target": 21335,
"peak": 19340,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 20,031 도달",
"cur_price": 18890,
"tranches": 1,
"tranche_value": 5366224.24678125,
"last_add_price": 19190
},
"011780": { "011780": {
"code": "011780", "code": "011780",
"name": "금호석유화학", "name": "금호석유화학",
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 120,174 도달", "entry_reason": "눌림목 지정가 120,174 도달",
"cur_price": 130000, "cur_price": 126600,
"tranches": 2, "tranches": 2,
"tranche_value": 3885171.1748054144, "tranche_value": 3885171.1748054144,
"last_add_price": 124100 "last_add_price": 124100
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,982 도달", "entry_reason": "눌림목 지정가 13,982 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 1936750.8143745721, "tranche_value": 1936750.8143745721,
"last_add_price": 13520 "last_add_price": 13520
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 5710, "cur_price": 5970,
"tranches": 2, "tranches": 2,
"tranche_value": 3900770.372145102, "tranche_value": 3900770.372145102,
"last_add_price": 6010 "last_add_price": 6010
@@ -113,20 +92,20 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 5, "qty": 10,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:33.518904+09:00", "entry_at": "2026-09-09T09:02:33.518904+09:00",
"stop": 998000, "stop": 998000,
"target": 1073000, "target": 1125500,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5401783.964593751, "tranche_value": 5401783.964593751,
"last_add_price": 1028000 "last_add_price": 1070000
}, },
"004370": { "004370": {
"code": "004370", "code": "004370",
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,748 도달", "entry_reason": "눌림목 지정가 420,748 도달",
"cur_price": 414000, "cur_price": 409500,
"tranches": 1, "tranches": 1,
"tranche_value": 5407643.370014776, "tranche_value": 5407643.370014776,
"last_add_price": 418500 "last_add_price": 418500
@@ -165,19 +144,40 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 15,087 도달", "entry_reason": "눌림목 지정가 15,087 도달",
"cur_price": 14920, "cur_price": 14640,
"tranches": 1, "tranches": 1,
"tranche_value": 4184751.0543503296, "tranche_value": 4184751.0543503296,
"last_add_price": 14750 "last_add_price": 14750
},
"041520": {
"code": "041520",
"name": "이엘씨",
"sources": [
"auto"
],
"qty": 295,
"entry_price": 11890,
"entry_at": "2026-09-10T09:01:00.003107+09:00",
"stop": 10416,
"target": 14102,
"peak": 11900,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 12,003 도달",
"cur_price": 11700,
"tranches": 1,
"tranche_value": 3508251.3322146544,
"last_add_price": 11890
} }
}, },
"realized_pnl": -13673011.825000035, "realized_pnl": -13790068.507000037,
"closed_trades": 50, "closed_trades": 51,
"wins": 8, "wins": 8,
"peak_equity": 101368884.75700004, "peak_equity": 101368884.75700004,
"max_drawdown": 0.16324454094733756, "max_drawdown": 0.16324454094733756,
"last_exit": { "last_exit": {
"030000": "2026-08-13", "030000": "2026-09-10",
"086790": "2026-08-19", "086790": "2026-08-19",
"403870": "2026-07-07", "403870": "2026-07-07",
"095610": "2026-09-09", "095610": "2026-09-09",
@@ -200,5 +200,5 @@
"316140": "2026-09-04" "316140": "2026-09-04"
}, },
"created_at": "2026-06-15T14:55:00.583273+09:00", "created_at": "2026-06-15T14:55:00.583273+09:00",
"updated_at": "2026-09-09T15:28:30.111411+09:00" "updated_at": "2026-09-10T15:28:35.046038+09:00"
} }
@@ -140,3 +140,6 @@
{"ts": "2026-09-09T09:04:30.450600+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 418500, "qty": 12, "cost": 5022753, "path": "pullback", "reason": "눌림목 지정가 420,748 도달", "stop": 384996, "target": 468756, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "418,000 vs 384,125"}, {"label": "정배열(5>20)", "ok": true, "detail": "406,100 / 384,125"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "406,100 / 370,025"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +11 · 기 -28 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "10,720 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "64"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,748 (현재 418,000)"}]} {"ts": "2026-09-09T09:04:30.450600+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 418500, "qty": 12, "cost": 5022753, "path": "pullback", "reason": "눌림목 지정가 420,748 도달", "stop": 384996, "target": 468756, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "418,000 vs 384,125"}, {"label": "정배열(5>20)", "ok": true, "detail": "406,100 / 384,125"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "406,100 / 370,025"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+9.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +11 · 기 -28 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+35%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "10,720 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "64"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,748 (현재 418,000)"}]}
{"ts": "2026-09-09T09:10:29.651554+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 150800, "qty": 21, "proceeds": 3160625, "entry_price": 150948, "pnl": -9751, "pnl_pct": -0.1, "hold_from": "2026-08-20T09:02:18.584631+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "112,762 (현재 150,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 208,226"}, {"label": "추세(20일선)", "ok": true, "detail": "135,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +129 · 기 +107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:10:29.651554+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 150800, "qty": 21, "proceeds": 3160625, "entry_price": 150948, "pnl": -9751, "pnl_pct": -0.1, "hold_from": "2026-08-20T09:02:18.584631+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "112,762 (현재 150,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 208,226"}, {"label": "추세(20일선)", "ok": true, "detail": "135,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +129 · 기 +107"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:10:29.652455+09:00", "side": "BUY", "code": "060250", "name": "NHN KCP", "price": 14750, "qty": 283, "cost": 4174876, "path": "pullback", "reason": "눌림목 지정가 15,087 도달", "stop": 13230, "target": 17030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,690 vs 14,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,356 / 14,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,356 / 13,592"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +52 · 기 +69 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.42% (환산) vs 평균 1.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 16,190"}, {"label": "거래량 급증", "ok": false, "detail": "166,893 (환산) vs 평균 608,910"}, {"label": "회전율 급증", "ok": false, "detail": "0.42% (환산) vs 평균 1.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,087 (현재 14,690)"}]} {"ts": "2026-09-09T09:10:29.652455+09:00", "side": "BUY", "code": "060250", "name": "NHN KCP", "price": 14750, "qty": 283, "cost": 4174876, "path": "pullback", "reason": "눌림목 지정가 15,087 도달", "stop": 13230, "target": 17030, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,690 vs 14,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,356 / 14,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,356 / 13,592"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +52 · 기 +69 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.42% (환산) vs 평균 1.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 16,190"}, {"label": "거래량 급증", "ok": false, "detail": "166,893 (환산) vs 평균 608,910"}, {"label": "회전율 급증", "ok": false, "detail": "0.42% (환산) vs 평균 1.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,087 (현재 14,690)"}]}
{"ts": "2026-09-10T09:00:59.999689+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18810, "qty": 279, "proceeds": 5237756, "entry_price": 19190, "pnl": -117057, "pnl_pct": -1.98, "hold_from": "2026-08-25T12:16:24.261562+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,760 (현재 18,810)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,335"}, {"label": "추세(20일선)", "ok": false, "detail": "18,845"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -262 · 기 -49"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 19,555"}]}
{"ts": "2026-09-10T09:01:00.003114+09:00", "side": "BUY", "code": "041520", "name": "이엘씨", "price": 11890, "qty": 295, "cost": 3508076, "path": "pullback", "reason": "눌림목 지정가 12,003 도달", "stop": 10416, "target": 14102, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "11,900 vs 10,158"}, {"label": "정배열(5>20)", "ok": true, "detail": "11,810 / 10,158"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "11,810 / 9,431"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +5 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 0.30% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 13,450"}, {"label": "거래량 급증", "ok": false, "detail": "0 (환산) vs 평균 36,789"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 0.30%"}, {"label": "RSI", "ok": true, "detail": "66"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 12,003 (현재 11,900)"}]}
{"ts": "2026-09-10T13:40:34.534355+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 5, "cost": 5350803, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1073000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,073,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 41361306.058250055, "cash": 47028658.11975005,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"010950": {
"code": "010950",
"name": "S-Oil",
"sources": [
"auto"
],
"qty": 56,
"entry_price": 133900.0,
"entry_at": "2026-07-30T09:24:07.575535+09:00",
"stop": 153508,
"target": 165213,
"peak": 168400,
"trailing_on": true,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400,
"tranches": 2,
"tranche_value": 3813556.4512976124,
"last_add_price": 136000
},
"194370": { "194370": {
"code": "194370", "code": "194370",
"name": "제이에스코퍼레이션", "name": "제이에스코퍼레이션",
@@ -39,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3377559.3310465557, "tranche_value": 3377559.3310465557,
"last_add_price": 13420 "last_add_price": 13420
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409750.0,
"entry_at": "2026-08-13T09:06:18.702712+09:00",
"stop": 359470,
"target": 510310,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3481984.841611142,
"last_add_price": 416500
},
"001790": { "001790": {
"code": "001790", "code": "001790",
"name": "대한제당", "name": "대한제당",
@@ -81,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5376462.657906253, "tranche_value": 5376462.657906253,
"last_add_price": 2945 "last_add_price": 2945
@@ -102,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 3207769.240733453, "tranche_value": 3207769.240733453,
"last_add_price": 11590 "last_add_price": 11590
@@ -123,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 1, "tranches": 1,
"tranche_value": 3270991.576203241, "tranche_value": 3270991.576203241,
"last_add_price": 126400 "last_add_price": 126400
@@ -144,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 5710, "cur_price": 5970,
"tranches": 2, "tranches": 2,
"tranche_value": 3847717.292460384, "tranche_value": 3847717.292460384,
"last_add_price": 6050 "last_add_price": 6050
@@ -155,25 +113,67 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 152, "qty": 295,
"entry_price": 13090, "entry_price": 13497.186440677966,
"entry_at": "2026-09-07T15:06:37.205681+09:00", "entry_at": "2026-09-07T15:06:37.205681+09:00",
"stop": 10340, "stop": 10421,
"target": 18590, "target": 19649,
"peak": 13550, "peak": 14130,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,160 도달", "entry_reason": "눌림목 지정가 13,160 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 2,
"tranche_value": 1999967.3303914513, "tranche_value": 1999967.3303914513,
"last_add_price": 13090 "last_add_price": 13930
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 11,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.951303+09:00",
"stop": 375781,
"target": 479937,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 411,461 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 4919066.491939197,
"last_add_price": 410500
},
"327260": {
"code": "327260",
"name": "RF머트리얼즈",
"sources": [
"interest"
],
"qty": 46,
"entry_price": 44350,
"entry_at": "2026-09-10T14:12:34.522062+09:00",
"stop": 35450,
"target": 62150,
"peak": 44500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 43250,
"tranches": 1,
"tranche_value": 2072539.7610259354,
"last_add_price": 44350
} }
}, },
"realized_pnl": -16430978.734000027, "realized_pnl": -16271262.694000028,
"closed_trades": 35, "closed_trades": 37,
"wins": 2, "wins": 3,
"peak_equity": 100024962.38500004, "peak_equity": 100024962.38500004,
"max_drawdown": 0.17739604290679473, "max_drawdown": 0.17739604290679473,
"last_exit": { "last_exit": {
@@ -181,7 +181,7 @@
"086790": "2026-07-28", "086790": "2026-07-28",
"403870": "2026-07-07", "403870": "2026-07-07",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"003490": "2026-07-09", "003490": "2026-07-09",
"055550": "2026-07-20", "055550": "2026-07-20",
@@ -189,7 +189,7 @@
"024060": "2026-07-27", "024060": "2026-07-27",
"003680": "2026-08-24", "003680": "2026-08-24",
"138040": "2026-08-19", "138040": "2026-08-19",
"010950": "2026-07-29", "010950": "2026-09-10",
"252990": "2026-09-01", "252990": "2026-09-01",
"090850": "2026-08-05", "090850": "2026-08-05",
"078930": "2026-09-03", "078930": "2026-09-03",
@@ -197,5 +197,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-15T14:55:00.583289+09:00", "created_at": "2026-06-15T14:55:00.583289+09:00",
"updated_at": "2026-09-09T15:28:30.114886+09:00" "updated_at": "2026-09-10T15:28:35.049259+09:00"
} }
@@ -103,3 +103,8 @@
{"ts": "2026-09-07T15:06:37.204967+09:00", "side": "SELL", "code": "327260", "name": "RF머트리얼즈", "price": 33650, "qty": 79, "proceeds": 2653166, "entry_price": 34554, "pnl": -77043, "pnl_pct": -2.62, "hold_from": "2026-08-20T09:02:18.588248+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "24,272 (현재 33,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 55,119"}, {"label": "추세(10일선)", "ok": false, "detail": "35,015"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -281 · 기 -15"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-07T15:06:37.204967+09:00", "side": "SELL", "code": "327260", "name": "RF머트리얼즈", "price": 33650, "qty": 79, "proceeds": 2653166, "entry_price": 34554, "pnl": -77043, "pnl_pct": -2.62, "hold_from": "2026-08-20T09:02:18.588248+09:00", "reason": "추세·수급 이탈", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "24,272 (현재 33,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 55,119"}, {"label": "추세(10일선)", "ok": false, "detail": "35,015"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -281 · 기 -15"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-07T15:06:37.205683+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13090, "qty": 152, "cost": 1989978, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 18590, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,100 vs 12,883"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,368 / 12,883"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,368 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +407 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.25% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "754,723 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.25% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,100)"}]} {"ts": "2026-09-07T15:06:37.205683+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13090, "qty": 152, "cost": 1989978, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 18590, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,100 vs 12,883"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,368 / 12,883"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,368 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +407 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.25% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "754,723 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.25% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,100)"}]}
{"ts": "2026-09-08T09:04:29.411925+09:00", "side": "BUY", "code": "088350", "name": "한화생명", "price": 6050, "qty": 635, "cost": 3842326, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5217, "target": 7145, "signals": [{"label": "손절선", "ok": true, "detail": "5,217 (현재 6,040)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,145"}, {"label": "추세(10일선)", "ok": true, "detail": "4,854"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,497 · 기 +2,372"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,020"}]} {"ts": "2026-09-08T09:04:29.411925+09:00", "side": "BUY", "code": "088350", "name": "한화생명", "price": 6050, "qty": 635, "cost": 3842326, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5217, "target": 7145, "signals": [{"label": "손절선", "ok": true, "detail": "5,217 (현재 6,040)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,145"}, {"label": "추세(10일선)", "ok": true, "detail": "4,854"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,497 · 기 +2,372"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,020"}]}
{"ts": "2026-09-10T09:06:32.468690+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409750, "pnl": -864106, "pnl_pct": -13.0, "hold_from": "2026-08-13T09:06:18.702712+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "359,470 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 510,310"}, {"label": "추세(10일선)", "ok": true, "detail": "307,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T10:04:33.289931+09:00", "side": "SELL", "code": "010950", "name": "S-Oil", "price": 152500, "qty": 56, "proceeds": 8523347, "entry_price": 133900, "pnl": 1023822, "pnl_pct": 13.89, "hold_from": "2026-07-30T09:24:07.575535+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "153,508 (현재 152,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "110,750"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +0 · 기 +306"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T11:38:29.517101+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13930, "qty": 143, "cost": 1992289, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 18590, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,910)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 18,590"}, {"label": "추세(10일선)", "ok": true, "detail": "12,964"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,859"}]}
{"ts": "2026-09-10T14:02:38.951305+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 11, "cost": 4516177, "path": "pullback", "reason": "눌림목 지정가 411,461 도달", "stop": 375781, "target": 479937, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 411,461 (현재 410,500)"}]}
{"ts": "2026-09-10T14:12:34.522063+09:00", "side": "BUY", "code": "327260", "name": "RF머트리얼즈", "price": 44350, "qty": 46, "cost": 2040406, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 35450, "target": 62150, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "44,350 vs 36,470"}, {"label": "정배열(5>10)", "ok": true, "detail": "37,790 / 36,470"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "37,790 / 29,897"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+14.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -27 · 기 +263 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "10.79% (환산) vs 평균 4.02% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 43,650"}, {"label": "거래량 급증", "ok": true, "detail": "1,941,613 (환산) vs 평균 673,097"}, {"label": "회전율 급증", "ok": true, "detail": "10.79% (환산) vs 평균 4.02%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 41607316.64100002, "cash": 40353301.96350002,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"194370": { "194370": {
@@ -18,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3428336.7554835076, "tranche_value": 3428336.7554835076,
"last_add_price": 13420 "last_add_price": 13420
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:19.048109+09:00",
"stop": 358791,
"target": 484313,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3537977.413382886,
"last_add_price": 415500
},
"001790": { "001790": {
"code": "001790", "code": "001790",
"name": "대한제당", "name": "대한제당",
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 2830, "cur_price": 2840,
"tranches": 1, "tranches": 1,
"tranche_value": 5467963.193781251, "tranche_value": 5467963.193781251,
"last_add_price": 2945 "last_add_price": 2945
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 11,601 도달", "entry_reason": "눌림목 지정가 11,601 도달",
"cur_price": 11900, "cur_price": 11700,
"tranches": 1, "tranches": 1,
"tranche_value": 3262304.762250248, "tranche_value": 3262304.762250248,
"last_add_price": 11590 "last_add_price": 11590
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4492093.16528453, "tranche_value": 4492093.16528453,
"last_add_price": 30000 "last_add_price": 30000
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1623025.8813087621, "tranche_value": 1623025.8813087621,
"last_add_price": 7390 "last_add_price": 7390
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 5710, "cur_price": 5970,
"tranches": 2, "tranches": 2,
"tranche_value": 3857497.927320607, "tranche_value": 3857497.927320607,
"last_add_price": 6010 "last_add_price": 6010
@@ -155,24 +134,45 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 154, "qty": 299,
"entry_price": 13090, "entry_price": 13497.357859531772,
"entry_at": "2026-09-07T15:06:37.209053+09:00", "entry_at": "2026-09-07T15:06:37.209053+09:00",
"stop": 10340, "stop": 10421,
"target": 17215, "target": 18111,
"peak": 13550, "peak": 14130,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,160 도달", "entry_reason": "눌림목 지정가 13,160 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 2,
"tranche_value": 2022912.4075034007, "tranche_value": 2022912.4075034007,
"last_add_price": 13090 "last_add_price": 13930
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 12,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.955194+09:00",
"stop": 375781,
"target": 462578,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 411,461 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 5011499.306498856,
"last_add_price": 410500
} }
}, },
"realized_pnl": -14379852.424500022, "realized_pnl": -15231956.824500022,
"closed_trades": 37, "closed_trades": 38,
"wins": 4, "wins": 4,
"peak_equity": 100024962.38500004, "peak_equity": 100024962.38500004,
"max_drawdown": 0.16498611269635213, "max_drawdown": 0.16498611269635213,
@@ -181,7 +181,7 @@
"086790": "2026-07-28", "086790": "2026-07-28",
"403870": "2026-07-07", "403870": "2026-07-07",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"003490": "2026-07-09", "003490": "2026-07-09",
"055550": "2026-07-20", "055550": "2026-07-20",
@@ -197,5 +197,5 @@
"327260": "2026-09-07" "327260": "2026-09-07"
}, },
"created_at": "2026-06-15T14:55:00.583304+09:00", "created_at": "2026-06-15T14:55:00.583304+09:00",
"updated_at": "2026-09-09T15:28:30.118121+09:00" "updated_at": "2026-09-10T15:28:35.052436+09:00"
} }
@@ -106,3 +106,6 @@
{"ts": "2026-09-07T15:06:37.209055+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13090, "qty": 154, "cost": 2016162, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 17215, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,100 vs 12,883"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,368 / 12,883"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,368 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +407 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.25% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "754,723 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.25% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,100)"}]} {"ts": "2026-09-07T15:06:37.209055+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13090, "qty": 154, "cost": 2016162, "path": "pullback", "reason": "눌림목 지정가 13,160 도달", "stop": 10340, "target": 17215, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "13,100 vs 12,883"}, {"label": "정배열(5>10)", "ok": true, "detail": "14,368 / 12,883"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "14,368 / 13,268"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-13.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +407 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+72%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.25% (환산) vs 평균 1.47% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 15,870"}, {"label": "거래량 급증", "ok": false, "detail": "754,723 (환산) vs 평균 882,736"}, {"label": "회전율 급증", "ok": false, "detail": "1.25% (환산) vs 평균 1.47%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 13,160 (현재 13,100)"}]}
{"ts": "2026-09-08T09:02:33.456925+09:00", "side": "BUY", "code": "088350", "name": "한화생명", "price": 6010, "qty": 641, "cost": 3852988, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5177, "target": 6784, "signals": [{"label": "손절선", "ok": true, "detail": "5,177 (현재 6,010)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,784"}, {"label": "추세(10일선)", "ok": true, "detail": "4,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,497 · 기 +2,372"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,980"}]} {"ts": "2026-09-08T09:02:33.456925+09:00", "side": "BUY", "code": "088350", "name": "한화생명", "price": 6010, "qty": 641, "cost": 3852988, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5177, "target": 6784, "signals": [{"label": "손절선", "ok": true, "detail": "5,177 (현재 6,010)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 6,784"}, {"label": "추세(10일선)", "ok": true, "detail": "4,850"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -1,497 · 기 +2,372"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,980"}]}
{"ts": "2026-09-08T12:32:32.889400+09:00", "side": "BUY", "code": "079650", "name": "서산", "price": 7390, "qty": 219, "cost": 1618653, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5081, "target": 9603, "signals": [{"label": "손절선", "ok": true, "detail": "5,081 (현재 7,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,603"}, {"label": "추세(10일선)", "ok": true, "detail": "5,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +103 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,329"}]} {"ts": "2026-09-08T12:32:32.889400+09:00", "side": "BUY", "code": "079650", "name": "서산", "price": 7390, "qty": 219, "cost": 1618653, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5081, "target": 9603, "signals": [{"label": "손절선", "ok": true, "detail": "5,081 (현재 7,380)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,603"}, {"label": "추세(10일선)", "ok": true, "detail": "5,120"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +103 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 7,329"}]}
{"ts": "2026-09-10T09:06:32.472130+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:19.048109+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 484,313"}, {"label": "추세(10일선)", "ok": true, "detail": "307,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T11:38:29.520379+09:00", "side": "BUY", "code": "252990", "name": "샘씨엔에스", "price": 13930, "qty": 145, "cost": 2020153, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 10340, "target": 17215, "signals": [{"label": "손절선", "ok": true, "detail": "10,340 (현재 13,910)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 17,215"}, {"label": "추세(10일선)", "ok": true, "detail": "12,964"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -256 · 기 +80"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 13,859"}]}
{"ts": "2026-09-10T14:02:38.955195+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 12, "cost": 4926739, "path": "pullback", "reason": "눌림목 지정가 411,461 도달", "stop": 375781, "target": 462578, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 411,461 (현재 410,500)"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 33763576.379000016, "cash": 34529714.67900002,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"086790": { "086790": {
@@ -18,32 +18,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 5045807.2398149045, "tranche_value": 5045807.2398149045,
"last_add_price": 125200 "last_add_price": 125200
}, },
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 16,
"entry_price": 409000.0,
"entry_at": "2026-08-13T09:08:19.051046+09:00",
"stop": 358791,
"target": 484313,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3537997.7129504834,
"last_add_price": 415500
},
"316140": { "316140": {
"code": "316140", "code": "316140",
"name": "우리금융지주", "name": "우리금융지주",
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,939 도달", "entry_reason": "눌림목 지정가 31,939 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 5220757.257031252, "tranche_value": 5220757.257031252,
"last_add_price": 32750 "last_add_price": 32750
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4580366.904239814, "tranche_value": 4580366.904239814,
"last_add_price": 30000 "last_add_price": 30000
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,946 도달", "entry_reason": "눌림목 지정가 13,946 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 1889084.2845179967, "tranche_value": 1889084.2845179967,
"last_add_price": 13590 "last_add_price": 13590
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1621037.6222288562, "tranche_value": 1621037.6222288562,
"last_add_price": 7390 "last_add_price": 7390
@@ -139,12 +118,12 @@
"entry_at": "2026-09-07T15:06:37.212194+09:00", "entry_at": "2026-09-07T15:06:37.212194+09:00",
"stop": 120000, "stop": 120000,
"target": 215035, "target": 215035,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 157,907 도달", "entry_reason": "눌림목 지정가 157,907 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1728982.2125771425, "tranche_value": 1728982.2125771425,
"last_add_price": 163200 "last_add_price": 163200
@@ -165,14 +144,35 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 3122084.7056819946, "tranche_value": 3122084.7056819946,
"last_add_price": 141500 "last_add_price": 141500
},
"004370": {
"code": "004370",
"name": "농심",
"sources": [
"auto"
],
"qty": 12,
"entry_price": 410500,
"entry_at": "2026-09-10T14:02:38.958516+09:00",
"stop": 375781,
"target": 462578,
"peak": 411500,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,141 도달",
"cur_price": 409500,
"tranches": 1,
"tranche_value": 5026349.779541391,
"last_add_price": 410500
} }
}, },
"realized_pnl": -15650256.834000025, "realized_pnl": -16502361.234000025,
"closed_trades": 44, "closed_trades": 45,
"wins": 5, "wins": 5,
"peak_equity": 101140808.32700005, "peak_equity": 101140808.32700005,
"max_drawdown": 0.1794339105371308, "max_drawdown": 0.1794339105371308,
@@ -185,7 +185,7 @@
"095610": "2026-07-29", "095610": "2026-07-29",
"093370": "2026-07-20", "093370": "2026-07-20",
"240810": "2026-07-24", "240810": "2026-07-24",
"214450": "2026-08-12", "214450": "2026-09-10",
"034730": "2026-07-07", "034730": "2026-07-07",
"003490": "2026-08-18", "003490": "2026-08-18",
"105560": "2026-07-20", "105560": "2026-07-20",
@@ -200,5 +200,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.583318+09:00", "created_at": "2026-06-15T14:55:00.583318+09:00",
"updated_at": "2026-09-09T15:28:30.121194+09:00" "updated_at": "2026-09-10T15:28:35.055596+09:00"
} }
@@ -128,3 +128,5 @@
{"ts": "2026-09-08T15:20:33.726409+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 91, "proceeds": 11806932, "entry_price": 119186, "pnl": 959405, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.267342+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "117,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-08T15:20:33.726409+09:00", "side": "SELL", "code": "138040", "name": "메리츠금융지주", "price": 130000, "qty": 91, "proceeds": 11806932, "entry_price": 119186, "pnl": 959405, "pnl_pct": 9.07, "hold_from": "2026-07-29T09:02:02.267342+09:00", "reason": "트레일링 익절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,576 (현재 130,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(10일선)", "ok": true, "detail": "117,640"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -147 · 기 +423"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:02:33.529467+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 135800, "qty": 22, "cost": 2988048, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117206, "target": 163692, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,800 vs 115,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "116,420 / 115,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "116,420 / 113,853"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -280 · 기 +899 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.32% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 122,600"}, {"label": "거래량 급증", "ok": true, "detail": "1,470,387 (환산) vs 평균 648,608"}, {"label": "회전율 급증", "ok": true, "detail": "1.32% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "66"}]} {"ts": "2026-09-09T09:02:33.529467+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 135800, "qty": 22, "cost": 2988048, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 117206, "target": 163692, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "135,800 vs 115,200"}, {"label": "정배열(5>10)", "ok": true, "detail": "116,420 / 115,200"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "116,420 / 113,853"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -280 · 기 +899 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+22%"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.32% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 122,600"}, {"label": "거래량 급증", "ok": true, "detail": "1,470,387 (환산) vs 평균 648,608"}, {"label": "회전율 급증", "ok": true, "detail": "1.32% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "66"}]}
{"ts": "2026-09-09T09:06:33.400021+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 22, "cost": 3113467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 163692, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 163,692"}, {"label": "추세(10일선)", "ok": true, "detail": "115,740"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]} {"ts": "2026-09-09T09:06:33.400021+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 22, "cost": 3113467, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 163692, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 163,692"}, {"label": "추세(10일선)", "ok": true, "detail": "115,740"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]}
{"ts": "2026-09-10T09:06:32.475316+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 356500, "qty": 16, "proceeds": 5692877, "entry_price": 409000, "pnl": -852104, "pnl_pct": -12.84, "hold_from": "2026-08-13T09:08:19.051046+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "358,791 (현재 358,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 484,313"}, {"label": "추세(10일선)", "ok": true, "detail": "307,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:38.958518+09:00", "side": "BUY", "code": "004370", "name": "농심", "price": 410500, "qty": 12, "cost": 4926739, "path": "pullback", "reason": "눌림목 지정가 420,141 도달", "stop": 375781, "target": 462578, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "410,500 vs 396,800"}, {"label": "정배열(5>10)", "ok": true, "detail": "404,600 / 396,800"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "404,600 / 369,900"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +8 · 기 -29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 440,000"}, {"label": "거래량 급증", "ok": false, "detail": "16,224 (환산) vs 평균 31,191"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.51%"}, {"label": "RSI", "ok": true, "detail": "61"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 420,141 (현재 410,500)"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 40507135.71584999, "cash": 39107537.350849986,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"327260": { "327260": {
@@ -13,12 +13,12 @@
"entry_at": "2026-08-20T09:02:18.598460+09:00", "entry_at": "2026-08-20T09:02:18.598460+09:00",
"stop": 26853, "stop": 26853,
"target": 49987, "target": 49987,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 35,709 도달", "entry_reason": "눌림목 지정가 35,709 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1761589.922015132, "tranche_value": 1761589.922015132,
"last_add_price": 35800 "last_add_price": 35800
@@ -39,32 +39,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 31,946 도달", "entry_reason": "눌림목 지정가 31,946 도달",
"cur_price": 33500, "cur_price": 34200,
"tranches": 2, "tranches": 2,
"tranche_value": 5016181.869037499, "tranche_value": 5016181.869037499,
"last_add_price": 32400 "last_add_price": 32400
}, },
"161890": {
"code": "161890",
"name": "한국콜마",
"sources": [
"auto"
],
"qty": 51,
"entry_price": 151692.1568627451,
"entry_at": "2026-08-25T12:16:24.309994+09:00",
"stop": 136015,
"target": 183047,
"peak": 164700,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100,
"tranches": 2,
"tranche_value": 3964400.3679956635,
"last_add_price": 154700
},
"252990": { "252990": {
"code": "252990", "code": "252990",
"name": "샘씨엔에스", "name": "샘씨엔에스",
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,982 도달", "entry_reason": "눌림목 지정가 13,982 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 2433888.3605985767, "tranche_value": 2433888.3605985767,
"last_add_price": 13520 "last_add_price": 13520
@@ -92,20 +71,20 @@
"sources": [ "sources": [
"interest" "interest"
], ],
"qty": 4, "qty": 8,
"entry_price": 1028000, "entry_price": 1049000.0,
"entry_at": "2026-09-09T09:02:33.532759+09:00", "entry_at": "2026-09-09T09:02:33.532759+09:00",
"stop": 998000, "stop": 998000,
"target": 1088000, "target": 1151000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,094,989 도달", "entry_reason": "눌림목 지정가 1,094,989 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 2,
"tranche_value": 5082934.486412499, "tranche_value": 5082934.486412499,
"last_add_price": 1028000 "last_add_price": 1070000
}, },
"004370": { "004370": {
"code": "004370", "code": "004370",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,748 도달", "entry_reason": "눌림목 지정가 420,748 도달",
"cur_price": 414000, "cur_price": 409500,
"tranches": 1, "tranches": 1,
"tranche_value": 5098005.228240624, "tranche_value": 5098005.228240624,
"last_add_price": 418500 "last_add_price": 418500
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 15,087 도달", "entry_reason": "눌림목 지정가 15,087 도달",
"cur_price": 14920, "cur_price": 14640,
"tranches": 1, "tranches": 1,
"tranche_value": 3938107.990340583, "tranche_value": 3938107.990340583,
"last_add_price": 14750 "last_add_price": 14750
@@ -165,14 +144,35 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 3,136 도달", "entry_reason": "눌림목 지정가 3,136 도달",
"cur_price": 3100, "cur_price": 3065,
"tranches": 1, "tranches": 1,
"tranche_value": 3860262.073953841, "tranche_value": 3860262.073953841,
"last_add_price": 3120 "last_add_price": 3120
},
"078930": {
"code": "078930",
"name": "GS",
"sources": [
"auto"
],
"qty": 34,
"entry_price": 117800,
"entry_at": "2026-09-10T14:02:38.961924+09:00",
"stop": 105837,
"target": 141726,
"peak": 118200,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 117100,
"tranches": 1,
"tranche_value": 4029288.693393851,
"last_add_price": 117800
} }
}, },
"realized_pnl": -18947963.461150035, "realized_pnl": -19798579.491150036,
"closed_trades": 58, "closed_trades": 59,
"wins": 7, "wins": 7,
"peak_equity": 101501376.42350003, "peak_equity": 101501376.42350003,
"max_drawdown": 0.22092032524603686, "max_drawdown": 0.22092032524603686,
@@ -193,12 +193,12 @@
"252990": "2026-08-25", "252990": "2026-08-25",
"010950": "2026-08-20", "010950": "2026-08-20",
"090850": "2026-08-05", "090850": "2026-08-05",
"161890": "2026-07-30", "161890": "2026-09-10",
"078930": "2026-07-31", "078930": "2026-07-31",
"138040": "2026-09-08", "138040": "2026-09-08",
"218150": "2026-08-19", "218150": "2026-08-19",
"316140": "2026-08-21" "316140": "2026-08-21"
}, },
"created_at": "2026-06-15T14:55:00.583333+09:00", "created_at": "2026-06-15T14:55:00.583333+09:00",
"updated_at": "2026-09-09T15:28:30.124195+09:00" "updated_at": "2026-09-10T15:28:35.058661+09:00"
} }
@@ -162,3 +162,6 @@
{"ts": "2026-09-09T09:10:29.700647+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 535, "proceeds": 10070424, "entry_price": 19058, "pnl": -127305, "pnl_pct": -1.04, "hold_from": "2026-08-20T09:08:18.031117+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,980 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,214"}, {"label": "추세(20일선)", "ok": true, "detail": "18,849"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -145 · 기 +26"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:10:29.700647+09:00", "side": "SELL", "code": "030000", "name": "제일기획", "price": 18860, "qty": 535, "proceeds": 10070424, "entry_price": 19058, "pnl": -127305, "pnl_pct": -1.04, "hold_from": "2026-08-20T09:08:18.031117+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "17,980 (현재 18,890)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 21,214"}, {"label": "추세(20일선)", "ok": true, "detail": "18,849"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -145 · 기 +26"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:10:29.701562+09:00", "side": "BUY", "code": "060250", "name": "NHN KCP", "price": 14750, "qty": 266, "cost": 3924089, "path": "pullback", "reason": "눌림목 지정가 15,087 도달", "stop": 13230, "target": 17790, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,690 vs 14,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,356 / 14,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,356 / 13,592"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +52 · 기 +69 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.42% (환산) vs 평균 1.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 16,190"}, {"label": "거래량 급증", "ok": false, "detail": "166,893 (환산) vs 평균 608,910"}, {"label": "회전율 급증", "ok": false, "detail": "0.42% (환산) vs 평균 1.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,087 (현재 14,690)"}]} {"ts": "2026-09-09T09:10:29.701562+09:00", "side": "BUY", "code": "060250", "name": "NHN KCP", "price": 14750, "qty": 266, "cost": 3924089, "path": "pullback", "reason": "눌림목 지정가 15,087 도달", "stop": 13230, "target": 17790, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "14,690 vs 14,358"}, {"label": "정배열(5>20)", "ok": true, "detail": "15,356 / 14,358"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "15,356 / 13,592"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+24.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +52 · 기 +69 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+33%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.42% (환산) vs 평균 1.51% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 16,190"}, {"label": "거래량 급증", "ok": false, "detail": "166,893 (환산) vs 평균 608,910"}, {"label": "회전율 급증", "ok": false, "detail": "0.42% (환산) vs 평균 1.51%"}, {"label": "RSI", "ok": true, "detail": "53"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 15,087 (현재 14,690)"}]}
{"ts": "2026-09-09T09:10:30.121446+09:00", "side": "BUY", "code": "478560", "name": "블랙야크아이앤씨", "price": 3120, "qty": 1237, "cost": 3860019, "path": "pullback", "reason": "눌림목 지정가 3,136 도달", "stop": 2792, "target": 3776, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "3,115 vs 2,884"}, {"label": "정배열(5>20)", "ok": true, "detail": "3,260 / 2,884"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "3,260 / 2,714"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +22 · 기 -22 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 0.96% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 3,495"}, {"label": "거래량 급증", "ok": false, "detail": "1,060 (환산) vs 평균 247,795"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 0.96%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 3,136 (현재 3,115)"}]} {"ts": "2026-09-09T09:10:30.121446+09:00", "side": "BUY", "code": "478560", "name": "블랙야크아이앤씨", "price": 3120, "qty": 1237, "cost": 3860019, "path": "pullback", "reason": "눌림목 지정가 3,136 도달", "stop": 2792, "target": 3776, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "3,115 vs 2,884"}, {"label": "정배열(5>20)", "ok": true, "detail": "3,260 / 2,884"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "3,260 / 2,714"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +22 · 기 -22 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.00% (환산) vs 평균 0.96% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 3,495"}, {"label": "거래량 급증", "ok": false, "detail": "1,060 (환산) vs 평균 247,795"}, {"label": "회전율 급증", "ok": false, "detail": "0.00% (환산) vs 평균 0.96%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 3,136 (현재 3,115)"}]}
{"ts": "2026-09-10T09:12:28.881714+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 135300, "qty": 51, "proceeds": 6886844, "entry_price": 151692, "pnl": -850616, "pnl_pct": -10.81, "hold_from": "2026-08-25T12:16:24.309994+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "136,015 (현재 135,300)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 183,047"}, {"label": "추세(20일선)", "ok": true, "detail": "100,330"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +189 · 기 -195"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T13:40:34.548328+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1070000, "qty": 4, "cost": 4280642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 998000, "target": 1088000, "signals": [{"label": "손절선", "ok": true, "detail": "998,000 (현재 1,069,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 1,088,000"}, {"label": "추세(20일선)", "ok": true, "detail": "1,026,350"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -44 · 기 +13"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 1,068,505"}]}
{"ts": "2026-09-10T14:02:38.961926+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 117800, "qty": 34, "cost": 4005801, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 105837, "target": 141726, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "117,700 vs 76,545"}, {"label": "정배열(5>20)", "ok": true, "detail": "88,900 / 76,545"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "88,900 / 75,550"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+67.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +196 · 기 -113 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.95% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "884,443 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.95% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "82"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 122,665 도달", "entry_reason": "눌림목 지정가 122,665 도달",
"cur_price": 133800, "cur_price": 135400,
"tranches": 2, "tranches": 2,
"tranche_value": 5051285.121721717, "tranche_value": 5051285.121721717,
"last_add_price": 125200 "last_add_price": 125200
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 4362596.463271157, "tranche_value": 4362596.463271157,
"last_add_price": 13420 "last_add_price": 13420
@@ -60,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 13,982 도달", "entry_reason": "눌림목 지정가 13,982 도달",
"cur_price": 13400, "cur_price": 14040,
"tranches": 1, "tranches": 1,
"tranche_value": 2432613.4618839705, "tranche_value": 2432613.4618839705,
"last_add_price": 13520 "last_add_price": 13520
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 21,404 도달", "entry_reason": "눌림목 지정가 21,404 도달",
"cur_price": 22200, "cur_price": 21950,
"tranches": 2, "tranches": 2,
"tranche_value": 3058381.8542864355, "tranche_value": 3058381.8542864355,
"last_add_price": 22300 "last_add_price": 22300
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 3,140 도달", "entry_reason": "눌림목 지정가 3,140 도달",
"cur_price": 3100, "cur_price": 3065,
"tranches": 2, "tranches": 2,
"tranche_value": 4008637.751201471, "tranche_value": 4008637.751201471,
"last_add_price": 3255 "last_add_price": 3255
@@ -118,12 +118,12 @@
"entry_at": "2026-09-07T15:06:37.218303+09:00", "entry_at": "2026-09-07T15:06:37.218303+09:00",
"stop": 129556, "stop": 129556,
"target": 215088, "target": 215088,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 157,907 도달", "entry_reason": "눌림목 지정가 157,907 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 2191022.777893585, "tranche_value": 2191022.777893585,
"last_add_price": 163200 "last_add_price": 163200
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 420,641 도달", "entry_reason": "눌림목 지정가 420,641 도달",
"cur_price": 414000, "cur_price": 409500,
"tranches": 1, "tranches": 1,
"tranche_value": 5091364.078359375, "tranche_value": 5091364.078359375,
"last_add_price": 414000 "last_add_price": 414000
@@ -165,7 +165,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 3914241.3352241684, "tranche_value": 3914241.3352241684,
"last_add_price": 141500 "last_add_price": 141500
@@ -200,5 +200,5 @@
"138040": "2026-09-08" "138040": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.583347+09:00", "created_at": "2026-06-15T14:55:00.583347+09:00",
"updated_at": "2026-09-09T15:28:30.126974+09:00" "updated_at": "2026-09-10T15:28:35.061490+09:00"
} }
@@ -1,5 +1,5 @@
{ {
"cash": 28870486.39049998, "cash": 29024497.860499978,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": { "214450": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3627364.7637924887, "tranche_value": 3627364.7637924887,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3547525.853504033, "tranche_value": 3547525.853504033,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:09.540195+09:00", "entry_at": "2026-07-31T12:36:09.540195+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1688085.214726109, "tranche_value": 1688085.214726109,
"last_add_price": 147600 "last_add_price": 147600
@@ -102,32 +102,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2862100.411366492, "tranche_value": 2862100.411366492,
"last_add_price": 135100 "last_add_price": 135100
}, },
"257720": {
"code": "257720",
"name": "실리콘투",
"sources": [
"auto"
],
"qty": 104,
"entry_price": 50308.17307692308,
"entry_at": "2026-08-24T14:20:24.299052+09:00",
"stop": 43093,
"target": 71953,
"peak": 55400,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 44700,
"tranches": 2,
"tranche_value": 2646566.7841326115,
"last_add_price": 51200
},
"003490": { "003490": {
"code": "003490", "code": "003490",
"name": "대한항공", "name": "대한항공",
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4185836.328126983, "tranche_value": 4185836.328126983,
"last_add_price": 30200 "last_add_price": 30200
@@ -165,14 +144,35 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 1, "tranches": 1,
"tranche_value": 2940234.9193805554, "tranche_value": 2940234.9193805554,
"last_add_price": 143200 "last_add_price": 143200
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:40.792954+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4790209.106906248,
"last_add_price": 617000
} }
}, },
"realized_pnl": -23934485.417000055, "realized_pnl": -24693660.904500056,
"closed_trades": 122, "closed_trades": 123,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24549505573500008, "max_drawdown": 0.24549505573500008,
@@ -206,8 +206,9 @@
"010950": "2026-07-29", "010950": "2026-07-29",
"161890": "2026-07-31", "161890": "2026-07-31",
"078930": "2026-09-03", "078930": "2026-09-03",
"252990": "2026-08-21" "252990": "2026-08-21",
"257720": "2026-09-10"
}, },
"created_at": "2026-06-15T14:40:00.621011+09:00", "created_at": "2026-06-15T14:40:00.621011+09:00",
"updated_at": "2026-09-09T15:28:33.623617+09:00" "updated_at": "2026-09-10T15:28:37.688252+09:00"
} }
@@ -279,3 +279,5 @@
{"ts": "2026-09-09T09:04:32.908905+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]} {"ts": "2026-09-09T09:04:32.908905+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]}
{"ts": "2026-09-09T09:08:33.732516+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:32.908889+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:08:33.732516+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:32.908889+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:38:35.482893+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]} {"ts": "2026-09-09T09:38:35.482893+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]}
{"ts": "2026-09-10T09:20:34.637090+09:00", "side": "SELL", "code": "257720", "name": "실리콘투", "price": 43100, "qty": 104, "proceeds": 4473659, "entry_price": 50308, "pnl": -759175, "pnl_pct": -14.33, "hold_from": "2026-08-24T14:20:24.299052+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,093 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 71,953"}, {"label": "추세(60일선)", "ok": true, "detail": "36,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +798 · 기 -1,419"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:40.792971+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3627364.7637924887, "tranche_value": 3627364.7637924887,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3470885.263866936, "tranche_value": 3470885.263866936,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.144403+09:00", "entry_at": "2026-07-31T12:36:11.144403+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1668794.556510239, "tranche_value": 1668794.556510239,
"last_add_price": 147600 "last_add_price": 147600
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3062184.227151159, "tranche_value": 3062184.227151159,
"last_add_price": 13420 "last_add_price": 13420
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3007474.6079847123, "tranche_value": 3007474.6079847123,
"last_add_price": 101700 "last_add_price": 101700
@@ -118,12 +118,12 @@
"entry_at": "2026-08-20T09:02:20.302047+09:00", "entry_at": "2026-08-20T09:02:20.302047+09:00",
"stop": 24267, "stop": 24267,
"target": 65396, "target": 65396,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1249060.2562777183, "tranche_value": 1249060.2562777183,
"last_add_price": 35800 "last_add_price": 35800
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2833660.1203225767, "tranche_value": 2833660.1203225767,
"last_add_price": 141500 "last_add_price": 141500
@@ -160,12 +160,12 @@
"entry_at": "2026-09-09T09:12:36.782636+09:00", "entry_at": "2026-09-09T09:12:36.782636+09:00",
"stop": 998000, "stop": 998000,
"target": 1214000, "target": 1214000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4826843.2429375, "tranche_value": 4826843.2429375,
"last_add_price": 1052000 "last_add_price": 1052000
@@ -212,5 +212,5 @@
"068270": "2026-09-09" "068270": "2026-09-09"
}, },
"created_at": "2026-06-15T14:55:00.583395+09:00", "created_at": "2026-06-15T14:55:00.583395+09:00",
"updated_at": "2026-09-09T15:28:33.639172+09:00" "updated_at": "2026-09-10T15:28:37.703758+09:00"
} }
@@ -1,28 +1,7 @@
{ {
"cash": 34486769.91999997, "cash": 32542001.449999973,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.215189+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"161890": { "161890": {
"code": "161890", "code": "161890",
"name": "한국콜마", "name": "한국콜마",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2892213.1259382935, "tranche_value": 2892213.1259382935,
"last_add_price": 135100 "last_add_price": 135100
@@ -55,12 +34,12 @@
"entry_at": "2026-08-24T09:02:26.350420+09:00", "entry_at": "2026-08-24T09:02:26.350420+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1444957.780421195, "tranche_value": 1444957.780421195,
"last_add_price": 147800 "last_add_price": 147800
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3261176.5302310046, "tranche_value": 3261176.5302310046,
"last_add_price": 145300 "last_add_price": 145300
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4176661.959968715, "tranche_value": 4176661.959968715,
"last_add_price": 30200 "last_add_price": 30200
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 1, "tranches": 1,
"tranche_value": 2932587.5188024, "tranche_value": 2932587.5188024,
"last_add_price": 143200 "last_add_price": 143200
@@ -139,12 +118,12 @@
"entry_at": "2026-09-09T09:56:32.327266+09:00", "entry_at": "2026-09-09T09:56:32.327266+09:00",
"stop": 121143, "stop": 121143,
"target": 173770, "target": 173770,
"peak": 134900, "peak": 135600,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133800, "cur_price": 135400,
"tranches": 1, "tranches": 1,
"tranche_value": 3961540.240576688, "tranche_value": 3961540.240576688,
"last_add_price": 134300 "last_add_price": 134300
@@ -155,24 +134,45 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 36, "qty": 72,
"entry_price": 125300, "entry_price": 126550.0,
"entry_at": "2026-09-09T10:10:32.976822+09:00", "entry_at": "2026-09-09T10:10:32.976822+09:00",
"stop": 114759, "stop": 116423,
"target": 156923, "target": 156930,
"peak": 126700, "peak": 128300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 125000, "cur_price": 127600,
"tranches": 1, "tranches": 2,
"tranche_value": 4611339.344683614, "tranche_value": 4611339.344683614,
"last_add_price": 125300 "last_add_price": 127800
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:41.995883+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4808081.206249999,
"last_add_price": 617000
} }
}, },
"realized_pnl": -24059963.02250005, "realized_pnl": -24089644.27250005,
"closed_trades": 131, "closed_trades": 132,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.23979118357000023, "max_drawdown": 0.23979118357000023,
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-09-09", "034730": "2026-09-09",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -211,5 +211,5 @@
"257720": "2026-09-09" "257720": "2026-09-09"
}, },
"created_at": "2026-06-15T14:40:00.621059+09:00", "created_at": "2026-06-15T14:40:00.621059+09:00",
"updated_at": "2026-09-09T15:28:33.647687+09:00" "updated_at": "2026-09-10T15:28:37.712884+09:00"
} }
@@ -298,3 +298,6 @@
{"ts": "2026-09-09T09:38:36.612942+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]} {"ts": "2026-09-09T09:38:36.612942+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]}
{"ts": "2026-09-09T09:56:32.327279+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 29, "cost": 3895284, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121143, "target": 173770, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "134,200 vs 118,635"}, {"label": "정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -307 · 기 +432 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,585,593 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "64"}]} {"ts": "2026-09-09T09:56:32.327279+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 29, "cost": 3895284, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121143, "target": 173770, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "134,200 vs 118,635"}, {"label": "정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -307 · 기 +432 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,585,593 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
{"ts": "2026-09-09T10:10:32.976835+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 125300, "qty": 36, "cost": 4511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 114759, "target": 156923, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "125,000 vs 110,102"}, {"label": "정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -148 · 기 +263 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"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": "448,620 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.27% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "69"}]} {"ts": "2026-09-09T10:10:32.976835+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 125300, "qty": 36, "cost": 4511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 114759, "target": 156923, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "125,000 vs 110,102"}, {"label": "정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -148 · 기 +263 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"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": "448,620 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.27% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
{"ts": "2026-09-10T09:18:36.182876+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.215189+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T13:34:36.462558+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127800, "qty": 36, "cost": 4601490, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 114759, "target": 156923, "signals": [{"label": "손절선", "ok": true, "detail": "114,759 (현재 127,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,923"}, {"label": "추세(60일선)", "ok": true, "detail": "110,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -60 · 기 +142"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 127,832"}]}
{"ts": "2026-09-10T14:02:41.995887+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 34113329.90099995, "cash": 36770051.55099995,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.216956+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"078930": { "078930": {
"code": "078930", "code": "078930",
"name": "GS", "name": "GS",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3042388.163482306, "tranche_value": 3042388.163482306,
"last_add_price": 101700 "last_add_price": 101700
@@ -55,12 +34,12 @@
"entry_at": "2026-08-20T09:02:20.356139+09:00", "entry_at": "2026-08-20T09:02:20.356139+09:00",
"stop": 24285, "stop": 24285,
"target": 65413, "target": 65413,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1267059.834384944, "tranche_value": 1267059.834384944,
"last_add_price": 35800 "last_add_price": 35800
@@ -76,12 +55,12 @@
"entry_at": "2026-08-24T09:02:26.359805+09:00", "entry_at": "2026-08-24T09:02:26.359805+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1433848.3158772076, "tranche_value": 1433848.3158772076,
"last_add_price": 147800 "last_add_price": 147800
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4047548.093650061, "tranche_value": 4047548.093650061,
"last_add_price": 30200 "last_add_price": 30200
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2777215.6377785285, "tranche_value": 2777215.6377785285,
"last_add_price": 141500 "last_add_price": 141500
@@ -139,12 +118,12 @@
"entry_at": "2026-09-09T09:12:36.800477+09:00", "entry_at": "2026-09-09T09:12:36.800477+09:00",
"stop": 998000, "stop": 998000,
"target": 1214000, "target": 1214000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4742672.546312497, "tranche_value": 4742672.546312497,
"last_add_price": 1052000 "last_add_price": 1052000
@@ -165,17 +144,38 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 118900, "cur_price": 118100,
"tranches": 1, "tranches": 1,
"tranche_value": 3757574.4583486076, "tranche_value": 3757574.4583486076,
"last_add_price": 119600 "last_add_price": 119600
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.003101+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4706853.087562497,
"last_add_price": 617000
} }
}, },
"realized_pnl": -26299082.851500068, "realized_pnl": -26328764.101500068,
"closed_trades": 126, "closed_trades": 127,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24516869955500037, "max_drawdown": 0.25200500599000053,
"last_exit": { "last_exit": {
"017670": "2026-06-19", "017670": "2026-06-19",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-09-09", "034730": "2026-09-09",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -216,5 +216,5 @@
"257720": "2026-09-08" "257720": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.583512+09:00", "created_at": "2026-06-15T14:55:00.583512+09:00",
"updated_at": "2026-09-09T15:28:33.655147+09:00" "updated_at": "2026-09-10T15:28:37.720340+09:00"
} }
@@ -293,3 +293,5 @@
{"ts": "2026-09-09T09:12:36.800482+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1052000, "qty": 4, "cost": 4208631, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1214000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,051,000 vs 1,050,083"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "158,673 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,051,000)"}]} {"ts": "2026-09-09T09:12:36.800482+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1052000, "qty": 4, "cost": 4208631, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1214000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,051,000 vs 1,050,083"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "158,673 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,051,000)"}]}
{"ts": "2026-09-09T09:12:37.128019+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.421343+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]} {"ts": "2026-09-09T09:12:37.128019+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.421343+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]}
{"ts": "2026-09-09T09:38:36.665547+09:00", "side": "BUY", "code": "003550", "name": "LG", "price": 119600, "qty": 31, "cost": 3708156, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 107512, "target": 155863, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,500 vs 107,805"}, {"label": "정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -392 · 기 +128 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.29% (환산) vs 평균 0.19% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 111,900"}, {"label": "거래량 급증", "ok": true, "detail": "441,880 (환산) vs 평균 280,124"}, {"label": "회전율 급증", "ok": true, "detail": "0.29% (환산) vs 평균 0.19%"}, {"label": "RSI", "ok": true, "detail": "69"}]} {"ts": "2026-09-09T09:38:36.665547+09:00", "side": "BUY", "code": "003550", "name": "LG", "price": 119600, "qty": 31, "cost": 3708156, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 107512, "target": 155863, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,500 vs 107,805"}, {"label": "정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -392 · 기 +128 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.29% (환산) vs 평균 0.19% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 111,900"}, {"label": "거래량 급증", "ok": true, "detail": "441,880 (환산) vs 평균 280,124"}, {"label": "회전율 급증", "ok": true, "detail": "0.29% (환산) vs 평균 0.19%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
{"ts": "2026-09-10T09:18:36.198144+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.216956+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.003105+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 28858592.43849995, "cash": 29012603.90849995,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": { "214450": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3624744.3180141365, "tranche_value": 3624744.3180141365,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3546894.320639113, "tranche_value": 3546894.320639113,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.162967+09:00", "entry_at": "2026-07-31T12:36:11.162967+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1687768.019262798, "tranche_value": 1687768.019262798,
"last_add_price": 147600 "last_add_price": 147600
@@ -102,32 +102,11 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2861643.9610576206, "tranche_value": 2861643.9610576206,
"last_add_price": 135100 "last_add_price": 135100
}, },
"257720": {
"code": "257720",
"name": "실리콘투",
"sources": [
"auto"
],
"qty": 104,
"entry_price": 50308.17307692308,
"entry_at": "2026-08-24T14:20:24.329648+09:00",
"stop": 43093,
"target": 71953,
"peak": 55400,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 44700,
"tranches": 2,
"tranche_value": 2646155.083218149,
"last_add_price": 51200
},
"003490": { "003490": {
"code": "003490", "code": "003490",
"name": "대한항공", "name": "대한항공",
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4185204.743405741, "tranche_value": 4185204.743405741,
"last_add_price": 30200 "last_add_price": 30200
@@ -165,14 +144,35 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 1, "tranches": 1,
"tranche_value": 2939786.4219278474, "tranche_value": 2939786.4219278474,
"last_add_price": 143200 "last_add_price": 143200
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.008871+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4789465.734906247,
"last_add_price": 617000
} }
}, },
"realized_pnl": -23946379.369000047, "realized_pnl": -24705554.85650005,
"closed_trades": 123, "closed_trades": 124,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24563713769000053, "max_drawdown": 0.24563713769000053,
@@ -207,8 +207,9 @@
"010950": "2026-07-29", "010950": "2026-07-29",
"161890": "2026-07-31", "161890": "2026-07-31",
"078930": "2026-09-03", "078930": "2026-09-03",
"252990": "2026-08-21" "252990": "2026-08-21",
"257720": "2026-09-10"
}, },
"created_at": "2026-06-15T14:40:00.621103+09:00", "created_at": "2026-06-15T14:40:00.621103+09:00",
"updated_at": "2026-09-09T15:28:33.660315+09:00" "updated_at": "2026-09-10T15:28:37.725803+09:00"
} }
@@ -281,3 +281,5 @@
{"ts": "2026-09-09T09:04:34.583887+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]} {"ts": "2026-09-09T09:04:34.583887+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]}
{"ts": "2026-09-09T09:08:34.365218+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.583884+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:08:34.365218+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.583884+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:38:36.677338+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]} {"ts": "2026-09-09T09:38:36.677338+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]}
{"ts": "2026-09-10T09:20:35.770265+09:00", "side": "SELL", "code": "257720", "name": "실리콘투", "price": 43100, "qty": 104, "proceeds": 4473659, "entry_price": 50308, "pnl": -759175, "pnl_pct": -14.33, "hold_from": "2026-08-24T14:20:24.329648+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,093 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 71,953"}, {"label": "추세(60일선)", "ok": true, "detail": "36,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +798 · 기 -1,419"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.008874+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3624744.3180141365, "tranche_value": 3624744.3180141365,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3468191.0592600796, "tranche_value": 3468191.0592600796,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.167956+09:00", "entry_at": "2026-07-31T12:36:11.167956+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1667469.2912320814, "tranche_value": 1667469.2912320814,
"last_add_price": 147600 "last_add_price": 147600
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3059768.9052410396, "tranche_value": 3059768.9052410396,
"last_add_price": 13420 "last_add_price": 13420
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3005090.6555779856, "tranche_value": 3005090.6555779856,
"last_add_price": 101700 "last_add_price": 101700
@@ -118,12 +118,12 @@
"entry_at": "2026-08-20T09:02:20.368732+09:00", "entry_at": "2026-08-20T09:02:20.368732+09:00",
"stop": 24267, "stop": 24267,
"target": 65396, "target": 65396,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1248111.8252958565, "tranche_value": 1248111.8252958565,
"last_add_price": 35800 "last_add_price": 35800
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2831543.8117604866, "tranche_value": 2831543.8117604866,
"last_add_price": 141500 "last_add_price": 141500
@@ -160,12 +160,12 @@
"entry_at": "2026-09-09T09:12:37.150932+09:00", "entry_at": "2026-09-09T09:12:37.150932+09:00",
"stop": 998000, "stop": 998000,
"target": 1214000, "target": 1214000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4823227.379406248, "tranche_value": 4823227.379406248,
"last_add_price": 1052000 "last_add_price": 1052000
@@ -213,5 +213,5 @@
"068270": "2026-09-09" "068270": "2026-09-09"
}, },
"created_at": "2026-06-15T14:55:00.583628+09:00", "created_at": "2026-06-15T14:55:00.583628+09:00",
"updated_at": "2026-09-09T15:28:33.665496+09:00" "updated_at": "2026-09-10T15:28:37.730911+09:00"
} }
@@ -1,28 +1,7 @@
{ {
"cash": 34486769.91999997, "cash": 32542001.449999973,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.222302+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"161890": { "161890": {
"code": "161890", "code": "161890",
"name": "한국콜마", "name": "한국콜마",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2892213.1259382935, "tranche_value": 2892213.1259382935,
"last_add_price": 135100 "last_add_price": 135100
@@ -55,12 +34,12 @@
"entry_at": "2026-08-24T09:02:26.376579+09:00", "entry_at": "2026-08-24T09:02:26.376579+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1444957.780421195, "tranche_value": 1444957.780421195,
"last_add_price": 147800 "last_add_price": 147800
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3261176.5302310046, "tranche_value": 3261176.5302310046,
"last_add_price": 145300 "last_add_price": 145300
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4176661.959968715, "tranche_value": 4176661.959968715,
"last_add_price": 30200 "last_add_price": 30200
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 142700, "cur_price": 136900,
"tranches": 1, "tranches": 1,
"tranche_value": 2932587.5188024, "tranche_value": 2932587.5188024,
"last_add_price": 143200 "last_add_price": 143200
@@ -139,12 +118,12 @@
"entry_at": "2026-09-09T09:56:32.357237+09:00", "entry_at": "2026-09-09T09:56:32.357237+09:00",
"stop": 121143, "stop": 121143,
"target": 173770, "target": 173770,
"peak": 134900, "peak": 135600,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133800, "cur_price": 135400,
"tranches": 1, "tranches": 1,
"tranche_value": 3961540.240576688, "tranche_value": 3961540.240576688,
"last_add_price": 134300 "last_add_price": 134300
@@ -155,24 +134,45 @@
"sources": [ "sources": [
"auto" "auto"
], ],
"qty": 36, "qty": 72,
"entry_price": 125300, "entry_price": 126550.0,
"entry_at": "2026-09-09T10:10:33.005796+09:00", "entry_at": "2026-09-09T10:10:33.005796+09:00",
"stop": 114759, "stop": 116423,
"target": 156923, "target": 156930,
"peak": 126700, "peak": 128300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 125000, "cur_price": 127600,
"tranches": 1, "tranches": 2,
"tranche_value": 4611339.344683614, "tranche_value": 4611339.344683614,
"last_add_price": 125300 "last_add_price": 127800
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.018744+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4808081.206249999,
"last_add_price": 617000
} }
}, },
"realized_pnl": -24059963.02250005, "realized_pnl": -24089644.27250005,
"closed_trades": 131, "closed_trades": 132,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.23979118357000023, "max_drawdown": 0.23979118357000023,
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-09-09", "034730": "2026-09-09",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -211,5 +211,5 @@
"257720": "2026-09-09" "257720": "2026-09-09"
}, },
"created_at": "2026-06-15T14:40:00.621148+09:00", "created_at": "2026-06-15T14:40:00.621148+09:00",
"updated_at": "2026-09-09T15:28:33.669690+09:00" "updated_at": "2026-09-10T15:28:37.735318+09:00"
} }
@@ -298,3 +298,6 @@
{"ts": "2026-09-09T09:38:36.689103+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]} {"ts": "2026-09-09T09:38:36.689103+09:00", "side": "BUY", "code": "180640", "name": "한진칼", "price": 143200, "qty": 20, "cost": 2864430, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 124212, "target": 200163, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "142,900 vs 117,637"}, {"label": "정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "126,400 / 117,637"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+3.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -95 · 기 +135 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.36% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 140,200"}, {"label": "거래량 급증", "ok": true, "detail": "241,453 (환산) vs 평균 146,881"}, {"label": "회전율 급증", "ok": true, "detail": "0.36% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "70"}]}
{"ts": "2026-09-09T09:56:32.357241+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 29, "cost": 3895284, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121143, "target": 173770, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "134,200 vs 118,635"}, {"label": "정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -307 · 기 +432 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,585,593 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "64"}]} {"ts": "2026-09-09T09:56:32.357241+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 134300, "qty": 29, "cost": 3895284, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 121143, "target": 173770, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "134,200 vs 118,635"}, {"label": "정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "123,440 / 118,635"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -307 · 기 +432 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": true, "detail": "1,585,593 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "64"}]}
{"ts": "2026-09-09T10:10:33.005799+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 125300, "qty": 36, "cost": 4511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 114759, "target": 156923, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "125,000 vs 110,102"}, {"label": "정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -148 · 기 +263 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"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": "448,620 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.27% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "69"}]} {"ts": "2026-09-09T10:10:33.005799+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 125300, "qty": 36, "cost": 4511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 114759, "target": 156923, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "125,000 vs 110,102"}, {"label": "정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+13.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -148 · 기 +263 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+23%"}, {"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": "448,620 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.27% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
{"ts": "2026-09-10T09:18:36.219614+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.222302+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T13:34:36.493445+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127800, "qty": 36, "cost": 4601490, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 114759, "target": 156923, "signals": [{"label": "손절선", "ok": true, "detail": "114,759 (현재 127,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 156,923"}, {"label": "추세(60일선)", "ok": true, "detail": "110,150"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -60 · 기 +142"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 127,832"}]}
{"ts": "2026-09-10T14:02:42.018747+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 34113329.90099995, "cash": 36770051.55099995,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.224085+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"078930": { "078930": {
"code": "078930", "code": "078930",
"name": "GS", "name": "GS",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3042388.163482306, "tranche_value": 3042388.163482306,
"last_add_price": 101700 "last_add_price": 101700
@@ -55,12 +34,12 @@
"entry_at": "2026-08-20T09:02:20.377162+09:00", "entry_at": "2026-08-20T09:02:20.377162+09:00",
"stop": 24285, "stop": 24285,
"target": 65413, "target": 65413,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1267059.834384944, "tranche_value": 1267059.834384944,
"last_add_price": 35800 "last_add_price": 35800
@@ -76,12 +55,12 @@
"entry_at": "2026-08-24T09:02:26.381162+09:00", "entry_at": "2026-08-24T09:02:26.381162+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1433848.3158772076, "tranche_value": 1433848.3158772076,
"last_add_price": 147800 "last_add_price": 147800
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4047548.093650061, "tranche_value": 4047548.093650061,
"last_add_price": 30200 "last_add_price": 30200
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2777215.6377785285, "tranche_value": 2777215.6377785285,
"last_add_price": 141500 "last_add_price": 141500
@@ -139,12 +118,12 @@
"entry_at": "2026-09-09T09:12:37.164608+09:00", "entry_at": "2026-09-09T09:12:37.164608+09:00",
"stop": 998000, "stop": 998000,
"target": 1214000, "target": 1214000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4742672.546312497, "tranche_value": 4742672.546312497,
"last_add_price": 1052000 "last_add_price": 1052000
@@ -165,17 +144,38 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 118900, "cur_price": 118100,
"tranches": 1, "tranches": 1,
"tranche_value": 3757574.4583486076, "tranche_value": 3757574.4583486076,
"last_add_price": 119600 "last_add_price": 119600
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.023332+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4706853.087562497,
"last_add_price": 617000
} }
}, },
"realized_pnl": -26299082.851500068, "realized_pnl": -26328764.101500068,
"closed_trades": 126, "closed_trades": 127,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24516869955500037, "max_drawdown": 0.25200500599000053,
"last_exit": { "last_exit": {
"017670": "2026-06-19", "017670": "2026-06-19",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-09-09", "034730": "2026-09-09",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -216,5 +216,5 @@
"257720": "2026-09-08" "257720": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.583751+09:00", "created_at": "2026-06-15T14:55:00.583751+09:00",
"updated_at": "2026-09-09T15:28:33.674151+09:00" "updated_at": "2026-09-10T15:28:37.739670+09:00"
} }
@@ -293,3 +293,5 @@
{"ts": "2026-09-09T09:12:37.164611+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1052000, "qty": 4, "cost": 4208631, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1214000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,051,000 vs 1,050,083"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "158,673 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,051,000)"}]} {"ts": "2026-09-09T09:12:37.164611+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1052000, "qty": 4, "cost": 4208631, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1214000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,051,000 vs 1,050,083"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,143,800 / 1,050,083"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "158,673 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,051,000)"}]}
{"ts": "2026-09-09T09:12:37.165332+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.453947+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]} {"ts": "2026-09-09T09:12:37.165332+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.453947+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]}
{"ts": "2026-09-09T09:38:36.692913+09:00", "side": "BUY", "code": "003550", "name": "LG", "price": 119600, "qty": 31, "cost": 3708156, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 107512, "target": 155863, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,500 vs 107,805"}, {"label": "정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -392 · 기 +128 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.29% (환산) vs 평균 0.19% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 111,900"}, {"label": "거래량 급증", "ok": true, "detail": "441,880 (환산) vs 평균 280,124"}, {"label": "회전율 급증", "ok": true, "detail": "0.29% (환산) vs 평균 0.19%"}, {"label": "RSI", "ok": true, "detail": "69"}]} {"ts": "2026-09-09T09:38:36.692913+09:00", "side": "BUY", "code": "003550", "name": "LG", "price": 119600, "qty": 31, "cost": 3708156, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 107512, "target": 155863, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,500 vs 107,805"}, {"label": "정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "110,620 / 107,805"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+6.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -392 · 기 +128 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.29% (환산) vs 평균 0.19% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 111,900"}, {"label": "거래량 급증", "ok": true, "detail": "441,880 (환산) vs 평균 280,124"}, {"label": "회전율 급증", "ok": true, "detail": "0.29% (환산) vs 평균 0.19%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
{"ts": "2026-09-10T09:18:36.224992+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.224085+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.023335+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 36723330.155999966, "cash": 39380051.805999964,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.225869+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"095610": { "095610": {
"code": "095610", "code": "095610",
"name": "테스", "name": "테스",
@@ -34,12 +13,12 @@
"entry_at": "2026-08-24T09:02:26.385356+09:00", "entry_at": "2026-08-24T09:02:26.385356+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1437632.3116457197, "tranche_value": 1437632.3116457197,
"last_add_price": 147800 "last_add_price": 147800
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2810640.732439216, "tranche_value": 2810640.732439216,
"last_add_price": 155900 "last_add_price": 155900
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3229829.7909181127, "tranche_value": 3229829.7909181127,
"last_add_price": 145300 "last_add_price": 145300
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4114454.4034401365, "tranche_value": 4114454.4034401365,
"last_add_price": 30200 "last_add_price": 30200
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1611451.4576744305, "tranche_value": 1611451.4576744305,
"last_add_price": 7850 "last_add_price": 7850
@@ -139,12 +118,12 @@
"entry_at": "2026-09-09T09:26:36.622713+09:00", "entry_at": "2026-09-09T09:26:36.622713+09:00",
"stop": 44042, "stop": 44042,
"target": 65675, "target": 65675,
"peak": 49550, "peak": 50600,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 48900, "cur_price": 50400,
"tranches": 1, "tranches": 1,
"tranche_value": 3527023.225691173, "tranche_value": 3527023.225691173,
"last_add_price": 49450 "last_add_price": 49450
@@ -160,22 +139,43 @@
"entry_at": "2026-09-09T09:38:37.089699+09:00", "entry_at": "2026-09-09T09:38:37.089699+09:00",
"stop": 104221, "stop": 104221,
"target": 170138, "target": 170138,
"peak": 122400, "peak": 124200,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 1, "tranches": 1,
"tranche_value": 2831922.2510831044, "tranche_value": 2831922.2510831044,
"last_add_price": 120700 "last_add_price": 120700
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.027778+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4774405.603499997,
"last_add_price": 617000
} }
}, },
"realized_pnl": -24036774.742500048, "realized_pnl": -24066455.992500048,
"closed_trades": 131, "closed_trades": 132,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.23979118357000023, "max_drawdown": 0.24163170344000043,
"last_exit": { "last_exit": {
"017670": "2026-06-19", "017670": "2026-06-19",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-09-09", "034730": "2026-09-09",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -211,5 +211,5 @@
"004370": "2026-09-07" "004370": "2026-09-07"
}, },
"created_at": "2026-06-15T14:40:00.621367+09:00", "created_at": "2026-06-15T14:40:00.621367+09:00",
"updated_at": "2026-09-09T15:28:33.677890+09:00" "updated_at": "2026-09-10T15:28:37.743136+09:00"
} }
@@ -299,3 +299,5 @@
{"ts": "2026-09-09T09:08:34.383022+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 36, "proceeds": 4699618, "entry_price": 130500, "pnl": 913, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.601861+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:08:34.383022+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 36, "proceeds": 4699618, "entry_price": 130500, "pnl": 913, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.601861+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:26:36.622718+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]} {"ts": "2026-09-09T09:26:36.622718+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]}
{"ts": "2026-09-09T09:38:37.089718+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 120700, "qty": 23, "cost": 2776516, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 104221, "target": 170138, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "120,500 vs 75,597"}, {"label": "정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+68.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +131 · 기 -9 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,893 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "83"}]} {"ts": "2026-09-09T09:38:37.089718+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 120700, "qty": 23, "cost": 2776516, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 104221, "target": 170138, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "120,500 vs 75,597"}, {"label": "정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+68.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +131 · 기 -9 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,893 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "83"}]}
{"ts": "2026-09-10T09:18:36.229805+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.225869+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.027780+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 37216965.082999974, "cash": 39873686.73299997,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.227631+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"078930": { "078930": {
"code": "078930", "code": "078930",
"name": "GS", "name": "GS",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3042388.163482306, "tranche_value": 3042388.163482306,
"last_add_price": 101700 "last_add_price": 101700
@@ -55,12 +34,12 @@
"entry_at": "2026-08-20T09:02:20.385184+09:00", "entry_at": "2026-08-20T09:02:20.385184+09:00",
"stop": 24285, "stop": 24285,
"target": 65413, "target": 65413,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1267059.834384944, "tranche_value": 1267059.834384944,
"last_add_price": 35800 "last_add_price": 35800
@@ -76,12 +55,12 @@
"entry_at": "2026-08-24T09:02:26.389383+09:00", "entry_at": "2026-08-24T09:02:26.389383+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1433848.3158772076, "tranche_value": 1433848.3158772076,
"last_add_price": 147800 "last_add_price": 147800
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2783954.65319541, "tranche_value": 2783954.65319541,
"last_add_price": 155900 "last_add_price": 155900
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 6650, "cur_price": 6510,
"tranches": 1, "tranches": 1,
"tranche_value": 3881914.001622301, "tranche_value": 3881914.001622301,
"last_add_price": 6670 "last_add_price": 6670
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2778015.707926319, "tranche_value": 2778015.707926319,
"last_add_price": 141500 "last_add_price": 141500
@@ -160,22 +139,43 @@
"entry_at": "2026-09-09T09:14:37.107169+09:00", "entry_at": "2026-09-09T09:14:37.107169+09:00",
"stop": 998000, "stop": 998000,
"target": 1226000, "target": 1226000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4745116.755187498, "tranche_value": 4745116.755187498,
"last_add_price": 1055000 "last_add_price": 1055000
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.031953+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4715256.536437498,
"last_add_price": 617000
} }
}, },
"realized_pnl": -25740109.311500065, "realized_pnl": -25769790.561500065,
"closed_trades": 119, "closed_trades": 120,
"wins": 3, "wins": 3,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24516869955500037, "max_drawdown": 0.2518595541700003,
"last_exit": { "last_exit": {
"017670": "2026-06-19", "017670": "2026-06-19",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-08-26", "034730": "2026-08-26",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -215,5 +215,5 @@
"257720": "2026-09-08" "257720": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.584337+09:00", "created_at": "2026-06-15T14:55:00.584337+09:00",
"updated_at": "2026-09-09T15:28:33.681534+09:00" "updated_at": "2026-09-10T15:28:37.746895+09:00"
} }
@@ -278,3 +278,5 @@
{"ts": "2026-09-09T09:06:37.354058+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 19, "cost": 2688903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 191583, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,583"}, {"label": "추세(60일선)", "ok": true, "detail": "113,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]} {"ts": "2026-09-09T09:06:37.354058+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 19, "cost": 2688903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 191583, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,583"}, {"label": "추세(60일선)", "ok": true, "detail": "113,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]}
{"ts": "2026-09-09T09:12:37.174767+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.852953+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]} {"ts": "2026-09-09T09:12:37.174767+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.852953+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]}
{"ts": "2026-09-09T09:14:37.107173+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1055000, "qty": 4, "cost": 4220633, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1226000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,052,000 vs 1,050,100"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "173,740 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,052,000)"}]} {"ts": "2026-09-09T09:14:37.107173+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1055000, "qty": 4, "cost": 4220633, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1226000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,052,000 vs 1,050,100"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "173,740 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,052,000)"}]}
{"ts": "2026-09-10T09:18:36.234132+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.227631+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.031955+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 36723330.155999966, "cash": 39380051.805999964,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.229400+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"095610": { "095610": {
"code": "095610", "code": "095610",
"name": "테스", "name": "테스",
@@ -34,12 +13,12 @@
"entry_at": "2026-08-24T09:02:26.392950+09:00", "entry_at": "2026-08-24T09:02:26.392950+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1437632.3116457197, "tranche_value": 1437632.3116457197,
"last_add_price": 147800 "last_add_price": 147800
@@ -60,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2810640.732439216, "tranche_value": 2810640.732439216,
"last_add_price": 155900 "last_add_price": 155900
@@ -81,7 +60,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3229829.7909181127, "tranche_value": 3229829.7909181127,
"last_add_price": 145300 "last_add_price": 145300
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4114454.4034401365, "tranche_value": 4114454.4034401365,
"last_add_price": 30200 "last_add_price": 30200
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1611451.4576744305, "tranche_value": 1611451.4576744305,
"last_add_price": 7850 "last_add_price": 7850
@@ -139,12 +118,12 @@
"entry_at": "2026-09-09T09:26:36.632446+09:00", "entry_at": "2026-09-09T09:26:36.632446+09:00",
"stop": 44042, "stop": 44042,
"target": 65675, "target": 65675,
"peak": 49550, "peak": 50600,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 48900, "cur_price": 50400,
"tranches": 1, "tranches": 1,
"tranche_value": 3527023.225691173, "tranche_value": 3527023.225691173,
"last_add_price": 49450 "last_add_price": 49450
@@ -160,22 +139,43 @@
"entry_at": "2026-09-09T09:38:37.113349+09:00", "entry_at": "2026-09-09T09:38:37.113349+09:00",
"stop": 104221, "stop": 104221,
"target": 170138, "target": 170138,
"peak": 122400, "peak": 124200,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 1, "tranches": 1,
"tranche_value": 2831922.2510831044, "tranche_value": 2831922.2510831044,
"last_add_price": 120700 "last_add_price": 120700
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.035786+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4774405.603499997,
"last_add_price": 617000
} }
}, },
"realized_pnl": -24036774.742500048, "realized_pnl": -24066455.992500048,
"closed_trades": 131, "closed_trades": 132,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.23979118357000023, "max_drawdown": 0.24163170344000043,
"last_exit": { "last_exit": {
"017670": "2026-06-19", "017670": "2026-06-19",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-09-09", "034730": "2026-09-09",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -211,5 +211,5 @@
"004370": "2026-09-07" "004370": "2026-09-07"
}, },
"created_at": "2026-06-15T14:40:00.621411+09:00", "created_at": "2026-06-15T14:40:00.621411+09:00",
"updated_at": "2026-09-09T15:28:33.684886+09:00" "updated_at": "2026-09-10T15:28:37.750132+09:00"
} }
@@ -299,3 +299,5 @@
{"ts": "2026-09-09T09:08:34.390150+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 36, "proceeds": 4699618, "entry_price": 130500, "pnl": 913, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.609076+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:08:34.390150+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 36, "proceeds": 4699618, "entry_price": 130500, "pnl": 913, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.609076+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:26:36.632449+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]} {"ts": "2026-09-09T09:26:36.632449+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]}
{"ts": "2026-09-09T09:38:37.113353+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 120700, "qty": 23, "cost": 2776516, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 104221, "target": 170138, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "120,500 vs 75,597"}, {"label": "정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+68.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +131 · 기 -9 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,893 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "83"}]} {"ts": "2026-09-09T09:38:37.113353+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 120700, "qty": 23, "cost": 2776516, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 104221, "target": 170138, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "120,500 vs 75,597"}, {"label": "정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "89,460 / 75,597"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+68.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +131 · 기 -9 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,893 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "83"}]}
{"ts": "2026-09-10T09:18:36.238129+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.229400+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.035788+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,28 +1,7 @@
{ {
"cash": 37216965.082999974, "cash": 39873686.73299997,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": {
"code": "214450",
"name": "파마리서치",
"sources": [
"auto"
],
"qty": 20,
"entry_price": 350250.0,
"entry_at": "2026-07-21T12:06:01.231187+09:00",
"stop": 308113,
"target": 476661,
"peak": 465250,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000,
"tranches": 2,
"tranche_value": 3624744.3180141365,
"last_add_price": 356000
},
"078930": { "078930": {
"code": "078930", "code": "078930",
"name": "GS", "name": "GS",
@@ -39,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3042388.163482306, "tranche_value": 3042388.163482306,
"last_add_price": 101700 "last_add_price": 101700
@@ -55,12 +34,12 @@
"entry_at": "2026-08-20T09:02:20.392120+09:00", "entry_at": "2026-08-20T09:02:20.392120+09:00",
"stop": 24285, "stop": 24285,
"target": 65413, "target": 65413,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1267059.834384944, "tranche_value": 1267059.834384944,
"last_add_price": 35800 "last_add_price": 35800
@@ -76,12 +55,12 @@
"entry_at": "2026-08-24T09:02:26.396294+09:00", "entry_at": "2026-08-24T09:02:26.396294+09:00",
"stop": 102936, "stop": 102936,
"target": 260707, "target": 260707,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 146,379 도달", "entry_reason": "눌림목 지정가 146,379 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1433848.3158772076, "tranche_value": 1433848.3158772076,
"last_add_price": 147800 "last_add_price": 147800
@@ -102,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 140100, "cur_price": 139000,
"tranches": 2, "tranches": 2,
"tranche_value": 2783954.65319541, "tranche_value": 2783954.65319541,
"last_add_price": 155900 "last_add_price": 155900
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 6650, "cur_price": 6510,
"tranches": 1, "tranches": 1,
"tranche_value": 3881914.001622301, "tranche_value": 3881914.001622301,
"last_add_price": 6670 "last_add_price": 6670
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2778015.707926319, "tranche_value": 2778015.707926319,
"last_add_price": 141500 "last_add_price": 141500
@@ -160,22 +139,43 @@
"entry_at": "2026-09-09T09:14:37.115591+09:00", "entry_at": "2026-09-09T09:14:37.115591+09:00",
"stop": 998000, "stop": 998000,
"target": 1226000, "target": 1226000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4745116.755187498, "tranche_value": 4745116.755187498,
"last_add_price": 1055000 "last_add_price": 1055000
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.039414+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4715256.536437498,
"last_add_price": 617000
} }
}, },
"realized_pnl": -25740109.311500065, "realized_pnl": -25769790.561500065,
"closed_trades": 119, "closed_trades": 120,
"wins": 3, "wins": 3,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24516869955500037, "max_drawdown": 0.2518595541700003,
"last_exit": { "last_exit": {
"017670": "2026-06-19", "017670": "2026-06-19",
"086790": "2026-07-29", "086790": "2026-07-29",
@@ -187,7 +187,7 @@
"005935": "2026-07-01", "005935": "2026-07-01",
"240810": "2026-07-24", "240810": "2026-07-24",
"009150": "2026-07-27", "009150": "2026-07-27",
"214450": "2026-07-06", "214450": "2026-09-10",
"093370": "2026-07-20", "093370": "2026-07-20",
"034730": "2026-08-26", "034730": "2026-08-26",
"032830": "2026-07-31", "032830": "2026-07-31",
@@ -215,5 +215,5 @@
"257720": "2026-09-08" "257720": "2026-09-08"
}, },
"created_at": "2026-06-15T14:55:00.584451+09:00", "created_at": "2026-06-15T14:55:00.584451+09:00",
"updated_at": "2026-09-09T15:28:33.688309+09:00" "updated_at": "2026-09-10T15:28:37.753474+09:00"
} }
@@ -278,3 +278,5 @@
{"ts": "2026-09-09T09:06:37.362268+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 19, "cost": 2688903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 191583, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,583"}, {"label": "추세(60일선)", "ok": true, "detail": "113,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]} {"ts": "2026-09-09T09:06:37.362268+09:00", "side": "BUY", "code": "000720", "name": "현대건설", "price": 141500, "qty": 19, "cost": 2688903, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 117206, "target": 191583, "signals": [{"label": "손절선", "ok": true, "detail": "117,206 (현재 141,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 191,583"}, {"label": "추세(60일선)", "ok": true, "detail": "113,943"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -280 · 기 +899"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,627"}]}
{"ts": "2026-09-09T09:12:37.182544+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.868968+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]} {"ts": "2026-09-09T09:12:37.182544+09:00", "side": "SELL", "code": "003680", "name": "한성기업", "price": 4750, "qty": 280, "proceeds": 1327406, "entry_price": 5460, "pnl": -201623, "pnl_pct": -13.0, "hold_from": "2026-08-20T09:10:24.868968+09:00", "reason": "시간손절 — 20일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "4,070 (현재 4,770)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,629"}, {"label": "추세(60일선)", "ok": false, "detail": "4,844"}, {"label": "수급(외/기)", "ok": false, "detail": "외 -13 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 5,831"}]}
{"ts": "2026-09-09T09:14:37.115593+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1055000, "qty": 4, "cost": 4220633, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1226000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,052,000 vs 1,050,100"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "173,740 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,052,000)"}]} {"ts": "2026-09-09T09:14:37.115593+09:00", "side": "BUY", "code": "012450", "name": "한화에어로스페이스", "price": 1055000, "qty": 4, "cost": 4220633, "path": "pullback", "reason": "눌림목 지정가 1,053,984 도달", "stop": 998000, "target": 1226000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "1,052,000 vs 1,050,100"}, {"label": "정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "1,144,000 / 1,050,100"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+7.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -67 · 기 +27 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.34% (환산) vs 평균 0.44% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 1,255,000"}, {"label": "거래량 급증", "ok": false, "detail": "173,740 (환산) vs 평균 227,218"}, {"label": "회전율 급증", "ok": false, "detail": "0.34% (환산) vs 평균 0.44%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 1,053,984 (현재 1,052,000)"}]}
{"ts": "2026-09-10T09:18:36.241913+09:00", "side": "SELL", "code": "214450", "name": "파마리서치", "price": 349500, "qty": 20, "proceeds": 6976370, "entry_price": 350250, "pnl": -29681, "pnl_pct": -0.21, "hold_from": "2026-07-21T12:06:01.231187+09:00", "reason": "시간손절 — 50일 보유·진전 없음(자본 회전)", "partial": false, "signals": [{"label": "손절선", "ok": true, "detail": "308,113 (현재 350,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 476,661"}, {"label": "추세(60일선)", "ok": true, "detail": "305,583"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +106 · 기 -147"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.039416+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -1,5 +1,5 @@
{ {
"cash": 29995540.436999958, "cash": 30149551.906999953,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": { "214450": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3624744.3180141365, "tranche_value": 3624744.3180141365,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3546894.320639113, "tranche_value": 3546894.320639113,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.191677+09:00", "entry_at": "2026-07-31T12:36:11.191677+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1687768.019262798, "tranche_value": 1687768.019262798,
"last_add_price": 147600 "last_add_price": 147600
@@ -86,27 +86,6 @@
"tranche_value": 3966630.036179657, "tranche_value": 3966630.036179657,
"last_add_price": 112800 "last_add_price": 112800
}, },
"257720": {
"code": "257720",
"name": "실리콘투",
"sources": [
"auto"
],
"qty": 104,
"entry_price": 50308.17307692308,
"entry_at": "2026-08-24T14:20:24.358532+09:00",
"stop": 43093,
"target": 71953,
"peak": 55400,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 44700,
"tranches": 2,
"tranche_value": 2633211.6885021683,
"last_add_price": 51200
},
"003490": { "003490": {
"code": "003490", "code": "003490",
"name": "대한항공", "name": "대한항공",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4104392.319035925, "tranche_value": 4104392.319035925,
"last_add_price": 30200 "last_add_price": 30200
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1613925.865525043, "tranche_value": 1613925.865525043,
"last_add_price": 7850 "last_add_price": 7850
@@ -160,19 +139,40 @@
"entry_at": "2026-09-09T09:26:36.640619+09:00", "entry_at": "2026-09-09T09:26:36.640619+09:00",
"stop": 44042, "stop": 44042,
"target": 65675, "target": 65675,
"peak": 49550, "peak": 50600,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 48900, "cur_price": 50400,
"tranches": 1, "tranches": 1,
"tranche_value": 3521468.04972381, "tranche_value": 3521468.04972381,
"last_add_price": 49450 "last_add_price": 49450
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.042790+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4752977.484812497,
"last_add_price": 617000
} }
}, },
"realized_pnl": -24700805.034000054, "realized_pnl": -25459980.521500055,
"closed_trades": 124, "closed_trades": 125,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24563713769000053, "max_drawdown": 0.24563713769000053,
@@ -208,8 +208,9 @@
"161890": "2026-07-31", "161890": "2026-07-31",
"078930": "2026-09-03", "078930": "2026-09-03",
"252990": "2026-08-21", "252990": "2026-08-21",
"004370": "2026-09-07" "004370": "2026-09-07",
"257720": "2026-09-10"
}, },
"created_at": "2026-06-15T14:40:00.621453+09:00", "created_at": "2026-06-15T14:40:00.621453+09:00",
"updated_at": "2026-09-09T15:28:33.691320+09:00" "updated_at": "2026-09-10T15:28:37.756338+09:00"
} }
@@ -284,3 +284,5 @@
{"ts": "2026-09-09T09:04:34.615403+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]} {"ts": "2026-09-09T09:04:34.615403+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]}
{"ts": "2026-09-09T09:08:34.396519+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.615401+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:08:34.396519+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.615401+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:26:36.640621+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]} {"ts": "2026-09-09T09:26:36.640621+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]}
{"ts": "2026-09-10T09:20:35.801487+09:00", "side": "SELL", "code": "257720", "name": "실리콘투", "price": 43100, "qty": 104, "proceeds": 4473659, "entry_price": 50308, "pnl": -759175, "pnl_pct": -14.33, "hold_from": "2026-08-24T14:20:24.358532+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,093 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 71,953"}, {"label": "추세(60일선)", "ok": true, "detail": "36,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +798 · 기 -1,419"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.042792+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3624744.3180141365, "tranche_value": 3624744.3180141365,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3468191.0592600796, "tranche_value": 3468191.0592600796,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.194352+09:00", "entry_at": "2026-07-31T12:36:11.194352+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1667469.2912320814, "tranche_value": 1667469.2912320814,
"last_add_price": 147600 "last_add_price": 147600
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3059768.9052410396, "tranche_value": 3059768.9052410396,
"last_add_price": 13420 "last_add_price": 13420
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3005090.6555779856, "tranche_value": 3005090.6555779856,
"last_add_price": 101700 "last_add_price": 101700
@@ -118,12 +118,12 @@
"entry_at": "2026-08-20T09:02:20.398238+09:00", "entry_at": "2026-08-20T09:02:20.398238+09:00",
"stop": 24267, "stop": 24267,
"target": 65396, "target": 65396,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1248111.8252958565, "tranche_value": 1248111.8252958565,
"last_add_price": 35800 "last_add_price": 35800
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2831543.8117604866, "tranche_value": 2831543.8117604866,
"last_add_price": 141500 "last_add_price": 141500
@@ -160,12 +160,12 @@
"entry_at": "2026-09-09T09:12:37.189228+09:00", "entry_at": "2026-09-09T09:12:37.189228+09:00",
"stop": 998000, "stop": 998000,
"target": 1214000, "target": 1214000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4823227.379406248, "tranche_value": 4823227.379406248,
"last_add_price": 1052000 "last_add_price": 1052000
@@ -213,5 +213,5 @@
"068270": "2026-09-09" "068270": "2026-09-09"
}, },
"created_at": "2026-06-15T14:55:00.584565+09:00", "created_at": "2026-06-15T14:55:00.584565+09:00",
"updated_at": "2026-09-09T15:28:33.694358+09:00" "updated_at": "2026-09-10T15:28:37.759331+09:00"
} }
@@ -1,5 +1,5 @@
{ {
"cash": 29995540.436999958, "cash": 30149551.906999953,
"initial": 100000000, "initial": 100000000,
"positions": { "positions": {
"214450": { "214450": {
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3624744.3180141365, "tranche_value": 3624744.3180141365,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3546894.320639113, "tranche_value": 3546894.320639113,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.196890+09:00", "entry_at": "2026-07-31T12:36:11.196890+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1687768.019262798, "tranche_value": 1687768.019262798,
"last_add_price": 147600 "last_add_price": 147600
@@ -86,27 +86,6 @@
"tranche_value": 3966630.036179657, "tranche_value": 3966630.036179657,
"last_add_price": 112800 "last_add_price": 112800
}, },
"257720": {
"code": "257720",
"name": "실리콘투",
"sources": [
"auto"
],
"qty": 104,
"entry_price": 50308.17307692308,
"entry_at": "2026-08-24T14:20:24.364356+09:00",
"stop": 43093,
"target": 71953,
"peak": 55400,
"trailing_on": false,
"scaled_out": false,
"entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 44700,
"tranches": 2,
"tranche_value": 2633211.6885021683,
"last_add_price": 51200
},
"003490": { "003490": {
"code": "003490", "code": "003490",
"name": "대한항공", "name": "대한항공",
@@ -123,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 29850, "cur_price": 29500,
"tranches": 2, "tranches": 2,
"tranche_value": 4104392.319035925, "tranche_value": 4104392.319035925,
"last_add_price": 30200 "last_add_price": 30200
@@ -144,7 +123,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 7820, "cur_price": 7950,
"tranches": 2, "tranches": 2,
"tranche_value": 1613925.865525043, "tranche_value": 1613925.865525043,
"last_add_price": 7850 "last_add_price": 7850
@@ -160,19 +139,40 @@
"entry_at": "2026-09-09T09:26:36.647906+09:00", "entry_at": "2026-09-09T09:26:36.647906+09:00",
"stop": 44042, "stop": 44042,
"target": 65675, "target": 65675,
"peak": 49550, "peak": 50600,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 48900, "cur_price": 50400,
"tranches": 1, "tranches": 1,
"tranche_value": 3521468.04972381, "tranche_value": 3521468.04972381,
"last_add_price": 49450 "last_add_price": 49450
},
"034730": {
"code": "034730",
"name": "SK",
"sources": [
"auto"
],
"qty": 7,
"entry_price": 617000,
"entry_at": "2026-09-10T14:02:42.049119+09:00",
"stop": 604000,
"target": 656000,
"peak": 620000,
"trailing_on": false,
"scaled_out": false,
"entry_path": "pullback",
"entry_reason": "눌림목 지정가 701,729 도달",
"cur_price": 617000,
"tranches": 1,
"tranche_value": 4752977.484812497,
"last_add_price": 617000
} }
}, },
"realized_pnl": -24700805.034000054, "realized_pnl": -25459980.521500055,
"closed_trades": 124, "closed_trades": 125,
"wins": 4, "wins": 4,
"peak_equity": 100000000, "peak_equity": 100000000,
"max_drawdown": 0.24563713769000053, "max_drawdown": 0.24563713769000053,
@@ -208,8 +208,9 @@
"161890": "2026-07-31", "161890": "2026-07-31",
"078930": "2026-09-03", "078930": "2026-09-03",
"252990": "2026-08-21", "252990": "2026-08-21",
"004370": "2026-09-07" "004370": "2026-09-07",
"257720": "2026-09-10"
}, },
"created_at": "2026-06-15T14:40:00.621497+09:00", "created_at": "2026-06-15T14:40:00.621497+09:00",
"updated_at": "2026-09-09T15:28:33.697063+09:00" "updated_at": "2026-09-10T15:28:37.761991+09:00"
} }
@@ -284,3 +284,5 @@
{"ts": "2026-09-09T09:04:34.621528+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]} {"ts": "2026-09-09T09:04:34.621528+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 130500, "qty": 37, "cost": 4829224, "path": "pullback", "reason": "눌림목 지정가 156,385 도달", "stop": 130499, "target": 130503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,400 vs 112,732"}, {"label": "정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "163,720 / 112,732"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+36.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +93 · 기 -183 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+50%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": false, "detail": "456,487 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": false, "detail": "1.58% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 156,385 (현재 130,400)"}]}
{"ts": "2026-09-09T09:08:34.402254+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.621526+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]} {"ts": "2026-09-09T09:08:34.402254+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 130800, "qty": 37, "proceeds": 4830163, "entry_price": 130500, "pnl": 939, "pnl_pct": 0.23, "hold_from": "2026-09-09T09:04:34.621526+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "130,499 (현재 130,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,732"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +93 · 기 -183"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-09T09:26:36.647908+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]} {"ts": "2026-09-09T09:26:36.647908+09:00", "side": "BUY", "code": "001450", "name": "현대해상", "price": 49450, "qty": 71, "cost": 3511477, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 44042, "target": 65675, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "49,400 vs 37,612"}, {"label": "정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "42,480 / 37,612"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+22.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -80 · 기 +221 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+15%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.98% (환산) vs 평균 0.64% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 45,300"}, {"label": "거래량 급증", "ok": true, "detail": "830,607 (환산) vs 평균 542,016"}, {"label": "회전율 급증", "ok": true, "detail": "0.98% (환산) vs 평균 0.64%"}, {"label": "RSI", "ok": true, "detail": "77"}]}
{"ts": "2026-09-10T09:20:35.807258+09:00", "side": "SELL", "code": "257720", "name": "실리콘투", "price": 43100, "qty": 104, "proceeds": 4473659, "entry_price": 50308, "pnl": -759175, "pnl_pct": -14.33, "hold_from": "2026-08-24T14:20:24.364356+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "43,093 (현재 43,050)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 71,953"}, {"label": "추세(60일선)", "ok": true, "detail": "36,158"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +798 · 기 -1,419"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
{"ts": "2026-09-10T14:02:42.049121+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 617000, "qty": 7, "cost": 4319648, "path": "pullback", "reason": "눌림목 지정가 701,729 도달", "stop": 604000, "target": 656000, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "616,000 vs 528,467"}, {"label": "정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "741,200 / 528,467"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-16.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +49 · 기 +20 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+38%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.23% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "164,855 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.23% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "47"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 701,729 (현재 616,000)"}]}
@@ -18,7 +18,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 366000, "cur_price": 347500,
"tranches": 2, "tranches": 2,
"tranche_value": 3624744.3180141365, "tranche_value": 3624744.3180141365,
"last_add_price": 356000 "last_add_price": 356000
@@ -39,7 +39,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 166400, "cur_price": 154200,
"tranches": 2, "tranches": 2,
"tranche_value": 3468191.0592600796, "tranche_value": 3468191.0592600796,
"last_add_price": 136000 "last_add_price": 136000
@@ -55,12 +55,12 @@
"entry_at": "2026-07-31T12:36:11.199406+09:00", "entry_at": "2026-07-31T12:36:11.199406+09:00",
"stop": 100700, "stop": 100700,
"target": 251570, "target": 251570,
"peak": 163800, "peak": 166300,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 144,129 도달", "entry_reason": "눌림목 지정가 144,129 도달",
"cur_price": 154300, "cur_price": 156600,
"tranches": 2, "tranches": 2,
"tranche_value": 1667469.2912320814, "tranche_value": 1667469.2912320814,
"last_add_price": 147600 "last_add_price": 147600
@@ -81,7 +81,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 12680, "cur_price": 12550,
"tranches": 2, "tranches": 2,
"tranche_value": 3059768.9052410396, "tranche_value": 3059768.9052410396,
"last_add_price": 13420 "last_add_price": 13420
@@ -102,7 +102,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 121900, "cur_price": 117100,
"tranches": 2, "tranches": 2,
"tranche_value": 3005090.6555779856, "tranche_value": 3005090.6555779856,
"last_add_price": 101700 "last_add_price": 101700
@@ -118,12 +118,12 @@
"entry_at": "2026-08-20T09:02:20.403886+09:00", "entry_at": "2026-08-20T09:02:20.403886+09:00",
"stop": 24267, "stop": 24267,
"target": 65396, "target": 65396,
"peak": 43400, "peak": 44500,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 33,138 도달", "entry_reason": "눌림목 지정가 33,138 도달",
"cur_price": 42250, "cur_price": 43250,
"tranches": 2, "tranches": 2,
"tranche_value": 1248111.8252958565, "tranche_value": 1248111.8252958565,
"last_add_price": 35800 "last_add_price": 35800
@@ -144,7 +144,7 @@
"scaled_out": false, "scaled_out": false,
"entry_path": "breakout", "entry_path": "breakout",
"entry_reason": "거래량·회전율 동반 전고점 돌파", "entry_reason": "거래량·회전율 동반 전고점 돌파",
"cur_price": 133600, "cur_price": 132000,
"tranches": 2, "tranches": 2,
"tranche_value": 2831543.8117604866, "tranche_value": 2831543.8117604866,
"last_add_price": 141500 "last_add_price": 141500
@@ -160,12 +160,12 @@
"entry_at": "2026-09-09T09:12:37.195379+09:00", "entry_at": "2026-09-09T09:12:37.195379+09:00",
"stop": 998000, "stop": 998000,
"target": 1214000, "target": 1214000,
"peak": 1060000, "peak": 1072000,
"trailing_on": false, "trailing_on": false,
"scaled_out": false, "scaled_out": false,
"entry_path": "pullback", "entry_path": "pullback",
"entry_reason": "눌림목 지정가 1,053,984 도달", "entry_reason": "눌림목 지정가 1,053,984 도달",
"cur_price": 1048000, "cur_price": 1067000,
"tranches": 1, "tranches": 1,
"tranche_value": 4823227.379406248, "tranche_value": 4823227.379406248,
"last_add_price": 1052000 "last_add_price": 1052000
@@ -213,5 +213,5 @@
"068270": "2026-09-09" "068270": "2026-09-09"
}, },
"created_at": "2026-06-15T14:55:00.584680+09:00", "created_at": "2026-06-15T14:55:00.584680+09:00",
"updated_at": "2026-09-09T15:28:33.699889+09:00" "updated_at": "2026-09-10T15:28:37.764785+09:00"
} }

Some files were not shown because too many files have changed in this diff Show More