auto: 일일 백업 2026-08-01 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -2001,6 +2001,23 @@ def _set_stock_tag(code: str | None, name: str | None, text: str, leader: bool)
|
||||
tmp.replace(STOCK_TAGS)
|
||||
|
||||
|
||||
# ---- 트레일링 계단 프리셋 (읽기 전용 · 고정 4종) ----
|
||||
# 계단 = [{'pct': 고점대비 하락률, 'cum': 그때까지 팔려 있어야 할 누적 비중}]
|
||||
# 누적으로 적는 이유는 관리자님이 그렇게 생각하기 때문이다("30% 빠지면 전량") —
|
||||
# 주문 수량인 추가분(20/30/50)으로의 환산은 orders/trailing.normalize_steps 가 한다.
|
||||
# 순서 = 기본값이 맨 앞(단일) + 트레일 폭이 좁은 것부터. 화면에서 고른 뒤 그 자리에서
|
||||
# 고칠 수 있으므로 저장 기능은 두지 않는다(2026-07-31 관리자님 지시로 제거).
|
||||
TRAIL_PRESETS = [
|
||||
{'name': '단일', 'steps': [{'pct': 10, 'cum': 100}]},
|
||||
{'name': '보수', 'steps': [{'pct': 5, 'cum': 30}, {'pct': 10, 'cum': 70},
|
||||
{'pct': 15, 'cum': 100}]},
|
||||
{'name': '표준', 'steps': [{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}]},
|
||||
{'name': '느슨', 'steps': [{'pct': 15, 'cum': 25}, {'pct': 25, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}]},
|
||||
]
|
||||
|
||||
|
||||
def _stock_notes_lock():
|
||||
"""STOCK_NOTES 파일 직렬화 — _stock_tags_lock 과 동일 패턴, 별도 lock 파일."""
|
||||
import fcntl as _fcntl
|
||||
@@ -3633,21 +3650,35 @@ def _trailing_info_for(ord_no: str):
|
||||
if now - _trailing_lookup_cache['ts'] > _TRAILING_LOOKUP_TTL:
|
||||
try:
|
||||
from orders import trailing as _trl
|
||||
by_ord = {r['ord_no']: r for r in _trl.list_active()}
|
||||
# 예약 1건이 계단(레그) N개 = 미체결 주문 N건이라, 레그마다 (예약, 레그) 로 색인한다.
|
||||
by_ord = {}
|
||||
for r in _trl.list_active():
|
||||
for s in r.get('steps') or []:
|
||||
by_ord[s['ord_no']] = (r, s)
|
||||
except Exception:
|
||||
by_ord = {}
|
||||
_trailing_lookup_cache['by_ord'] = by_ord
|
||||
_trailing_lookup_cache['ts'] = now
|
||||
r = _trailing_lookup_cache['by_ord'].get(ord_no)
|
||||
if not r:
|
||||
hit = _trailing_lookup_cache['by_ord'].get(ord_no)
|
||||
if not hit:
|
||||
return None
|
||||
r, s = hit
|
||||
steps = r.get('steps') or []
|
||||
return {
|
||||
'id': r['id'], 'trail_pct': r.get('trail_pct'), 'peak': r.get('peak', 0),
|
||||
'id': r['id'], 'peak': r.get('peak', 0),
|
||||
'min_sell_price': r.get('min_sell_price'),
|
||||
'modify_count': r.get('modify_count', 0),
|
||||
# 이 주문이 몇 단계인지 + 예약 전체가 몇 단인지 — 미체결 목록엔 레그가 따로 뜨므로
|
||||
# "3단 중 2단계" 를 보여줘야 다른 행과의 관계가 읽힌다.
|
||||
'step_n': s['n'], 'step_total': len(steps),
|
||||
'trail_pct': s.get('pct'), 'cum': s.get('cum'),
|
||||
'step_qty': s.get('qty', 0),
|
||||
'modify_count': s.get('modify_count', 0),
|
||||
# 등록 시점 값 — 손절선·고점이 그 뒤로 얼마 올라왔는지 보여주는 데 쓴다.
|
||||
'entry_cond_uv': r.get('entry_cond_uv', 0),
|
||||
'entry_cond_uv': s.get('entry_cond_uv', 0),
|
||||
'entry_peak': r.get('entry_peak', 0),
|
||||
# 형제 계단 — 이 예약의 전체 그림을 한 행에서 보여준다.
|
||||
'siblings': [{'n': x['n'], 'pct': x.get('pct'), 'cond_uv': x.get('cond_uv', 0),
|
||||
'qty': x.get('qty', 0), 'cum': x.get('cum')} for x in steps],
|
||||
}
|
||||
|
||||
|
||||
@@ -3737,7 +3768,19 @@ def _pending_detail_html(r: dict) -> str:
|
||||
# (실측 entry_peak 4,860 vs peak 4,950). 등록 후 얼마나 올랐는지는
|
||||
# 아래 '고점 상승' 행이 실제 값으로 보여준다.
|
||||
mini.append(f'<dt>고점</dt><dd><b>{trl.get("peak", 0):,}원</b></dd>')
|
||||
mini.append(f'<dt>트레일 폭</dt><dd>−{trl.get("trail_pct")}%</dd>')
|
||||
cum_v = trl.get('cum') or 0
|
||||
cum_part = '전량' if cum_v >= 100 else f'누적 {cum_v:g}%'
|
||||
mini.append(f'<dt>계단</dt><dd><b>{trl.get("step_n")}단계</b> / '
|
||||
f'{trl.get("step_total")}단 · −{trl.get("trail_pct"):g}% '
|
||||
f'<span class="muted">({cum_part})</span></dd>')
|
||||
if (trl.get('step_total') or 0) > 1:
|
||||
# 형제 계단 — 미체결 목록엔 레그가 각각 뜨므로, 이 예약 전체가 어떤 모양인지
|
||||
# 한 행에서 보이게 한다. 지금 행에 해당하는 계단은 굵게.
|
||||
sib = ' · '.join(
|
||||
(f'<b>{x["n"]}:{x["cond_uv"]:,}</b>' if x['n'] == trl.get('step_n')
|
||||
else f'{x["n"]}:{x["cond_uv"]:,}')
|
||||
for x in (trl.get('siblings') or []))
|
||||
mini.append(f'<dt>전체 계단</dt><dd>{sib}</dd>')
|
||||
if trl.get('min_sell_price'):
|
||||
mini.append(f'<dt>최저 매도가</dt><dd>{trl["min_sell_price"]:,}원</dd>')
|
||||
if cur_price > 0 and stop_p:
|
||||
@@ -5130,10 +5173,11 @@ def _render_owner_panel(owner: str, d: dict, balances: dict, owner_label_text: s
|
||||
_CSS = '''
|
||||
* { box-sizing: border-box; -webkit-tap-highlight-color: transparent; }
|
||||
html, body { margin: 0; padding: 0; overscroll-behavior-y: none; touch-action: manipulation; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Apple SD Gothic Neo", sans-serif; background: #0b0d12; color: #e6e6e6; -webkit-font-smoothing: antialiased; padding-bottom: calc(env(safe-area-inset-bottom) + 28px); -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
|
||||
body { font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Apple SD Gothic Neo", sans-serif; background: #0b0d12; color: #e6e6e6; -webkit-font-smoothing: antialiased; padding-bottom: calc(env(safe-area-inset-bottom) + 44px); -webkit-text-size-adjust: 100%; text-size-adjust: 100%; }
|
||||
|
||||
/* 하단 고정 시장 지수 — 코스피/코스닥. viewport 최하단에 박힘. iOS 홈 인디케이터 영역만 safe-area 패딩으로 양보. */
|
||||
/* 증권사 스타일 무한 가로 스크롤. 같은 항목 세트를 2번 렌더 후 -50% 이동 → seamless loop. */
|
||||
/* 하단 고정 시장 지수. viewport 최하단에 박힘. iOS 홈 인디케이터 영역만 safe-area 패딩으로 양보. */
|
||||
/* 지수 2개 = 한 묶음. 바를 탭할 때마다 다음 묶음으로 순환(마지막 → 처음).
|
||||
자동 스크롤·자동 회전 없음 — 흘러가는 마퀴는 2026-07-31 관리자님 지시로 제거됐다. 되살리지 말 것. */
|
||||
.market-ticker {
|
||||
position: fixed; left: 0; right: 0; bottom: 0; z-index: 30;
|
||||
background: rgba(11,13,18,0.96);
|
||||
@@ -5142,43 +5186,45 @@ body { font-family: -apple-system, BlinkMacSystemFont, "Helvetica Neue", "Apple
|
||||
padding: 5px 0;
|
||||
padding-bottom: calc(5px + env(safe-area-inset-bottom));
|
||||
font-size: 10.5px;
|
||||
/* line-height 1.2 고정: 라벨줄이 한글(닛케이225·금·은·동)이라 normal이면 ~1.45em로 늘어나 바 높이가 어긋난다. */
|
||||
line-height: 1.2;
|
||||
font-variant-numeric: tabular-nums;
|
||||
color: #e6e6e6;
|
||||
overflow: hidden;
|
||||
white-space: nowrap;
|
||||
/* 세로 3줄: 지수명 / 가격+등락 / 묶음 점. 점을 옆이 아니라 아래 줄 가운데로 둔 배치(2026-07-31 관리자님 지시). */
|
||||
display: flex; flex-direction: column; align-items: center; justify-content: center; gap: 3px;
|
||||
/* iOS Safari는 비대화형 div에 cursor:pointer가 없으면 click을 합성하지 않는다 — 탭 전환의 전제조건. 지우지 말 것. */
|
||||
cursor: pointer;
|
||||
user-select: none; -webkit-user-select: none;
|
||||
}
|
||||
.ticker-track {
|
||||
display: inline-flex;
|
||||
width: max-content;
|
||||
/* intro(5s linear): viewport 오른쪽 끝(100vw)에서 자연 위치(0)까지 일정 속도로 슬라이드 인 — 첫 로딩 시 KOSPI 잘림 방지.
|
||||
ease-out은 시작 순간이 peak 속도라 "엄청 빠름" 인상을 줘서 linear로 고정.
|
||||
scroll(20s linear infinite, 5s 지연): intro 끝난 직후 무한 가로 스크롤로 인계. translateX(0)에서 매끄럽게 연결. */
|
||||
animation: ticker-intro 5s linear, ticker-scroll 20s linear 5s infinite;
|
||||
will-change: transform;
|
||||
/* 세로 flex라 flex-grow를 주면 높이가 늘어난다 → 0 0 auto + width로 가로만 채운다.
|
||||
max-width: PC·아이패드에서 두 칸이 화면 절반씩 벌어져 텅 비어 보이는 걸 막는 상한. */
|
||||
.ticker-page { flex: 0 0 auto; width: 100%; max-width: 520px; display: flex; align-items: center; min-height: 26px; }
|
||||
/* 탭 전환 때만 페이드. 20초 주기 자동 갱신(animate=false)은 값만 조용히 교체. */
|
||||
.ticker-page.fade { animation: ticker-fade 140ms ease-out; }
|
||||
@keyframes ticker-fade {
|
||||
from { opacity: 0.35; }
|
||||
to { opacity: 1; }
|
||||
}
|
||||
.ticker-set { display: inline-flex; align-items: center; gap: 20px; flex-shrink: 0; }
|
||||
.ticker-sep { display: inline-flex; align-items: center; padding: 0 22px; color: #4a5060; font-size: 14px; font-weight: 700; user-select: none; }
|
||||
@keyframes ticker-intro {
|
||||
from { transform: translateX(100vw); }
|
||||
to { transform: translateX(0); }
|
||||
}
|
||||
@keyframes ticker-scroll {
|
||||
from { transform: translateX(0); }
|
||||
to { transform: translateX(-50%); }
|
||||
}
|
||||
/* PC 마우스 호버 시만 일시정지. 모바일 :active는 페이지 터치 후 잔류해서 ticker가 멈춰버리는 이슈로 제외. */
|
||||
@media (hover: hover) {
|
||||
.market-ticker:hover .ticker-track { animation-play-state: paused; }
|
||||
}
|
||||
.market-ticker .idx { display: inline-flex; align-items: baseline; gap: 4px; font-size: 10.5px; }
|
||||
.market-ticker .idx-label { color: #8b8f9a; font-weight: 500; font-size: 10.5px; }
|
||||
.market-ticker .idx-price { color: #f0f0f0; font-weight: 500; font-size: 10.5px; }
|
||||
.market-ticker .idx-delta { font-weight: 400; font-size: 10.5px; }
|
||||
.market-ticker .idx { flex: 1 1 0; min-width: 0; display: flex; flex-direction: column; align-items: center; gap: 1px; }
|
||||
/* max-width+overflow: 칸보다 긴 내용은 오른쪽만 잘린다. .idx에 걸면 가운데정렬 탓에 양끝이 깎여 앞글자까지 사라진다. */
|
||||
.market-ticker .idx-label { max-width: 100%; overflow: hidden; text-overflow: ellipsis; color: #8b8f9a; font-weight: 500; font-size: 9.5px; }
|
||||
.market-ticker .idx-val { max-width: 100%; min-width: 0; overflow: hidden; display: flex; align-items: baseline; gap: 4px; }
|
||||
/* 좁은 화면에서 칸을 넘칠 때: 가격은 절대 안 줄이고(flex:0 0 auto) 등락만 말줄임.
|
||||
둘 다 기본 shrink로 두면 flex가 양쪽을 눌러 앞글자까지 깎이고 두 칸 폭도 어긋난다(320px 실측). */
|
||||
.market-ticker .idx-price { flex: 0 0 auto; color: #f0f0f0; font-weight: 500; font-size: 10.5px; }
|
||||
.market-ticker .idx-delta { min-width: 0; overflow: hidden; text-overflow: ellipsis; font-weight: 400; font-size: 10.5px; }
|
||||
.market-ticker .idx-delta.up { color: #ff4d5e; }
|
||||
.market-ticker .idx-delta.down { color: #4d9bff; }
|
||||
.market-ticker .idx-delta.flat { color: #8b8f9a; }
|
||||
.market-ticker .idx-empty { color: #5a5f6c; font-size: 10px; padding: 0 14px; }
|
||||
/* 묶음 점 — 3번째 줄 가운데(부모 align-items:center가 가로 정렬). 지수 칸과 가로 폭을 나눠쓰지 않으므로
|
||||
묶음 수가 줄어도 칸 폭은 영향 없다(옆에 두던 시절 필요했던 min-width 고정폭은 그래서 제거됨). */
|
||||
.ticker-dots { flex: 0 0 auto; display: flex; align-items: center; gap: 3px; }
|
||||
.ticker-dots i { width: 4px; height: 4px; border-radius: 50%; background: #333844; }
|
||||
.ticker-dots i.on { background: #c9ccd3; }
|
||||
/* min-height/line-height를 표시 상태 content 높이(26 + gap 3 + 점 4 = 33)와 맞춰 로딩↔표시 전환 때 바가 안 튀게. */
|
||||
.market-ticker .idx-empty { flex: 0 0 auto; width: 100%; text-align: center; min-height: 33px; line-height: 33px; color: #5a5f6c; font-size: 10px; }
|
||||
|
||||
/* ── pull-to-refresh ── */
|
||||
/* .page가 손가락 따라 translateY로 내려감 → topbar+컨텐츠 다 함께 내려가고 그 위로 빈공간 노출.
|
||||
@@ -5469,6 +5515,39 @@ dl.pending-detail dl.trail-mini dd b { color: #d9a84a; font-weight: 600; }
|
||||
.trail-pv-kv dd { margin: 0; text-align: right; color: #a8adb8; font-variant-numeric: tabular-nums; }
|
||||
.trail-pv-kv dd b { color: #cfd3dc; font-weight: 600; }
|
||||
.trail-pv-note { font-size: 10px; color: #6f7480; line-height: 1.45; border-top: 1px solid #1a1e28; padding-top: 6px; }
|
||||
/* 계단 편집기 — .order-inputs 실폭이 모바일 ~200px 라 열 하나하나가 아깝다.
|
||||
행마다 "하락/누적" 글자를 반복하는 대신 헤더 한 줄로 빼고, 화살표도 지웠다.
|
||||
그 결과 입력칸이 38px → 78px 로 넓어진다(고정폭 58 → 44, 라벨·단위 21px 회수).
|
||||
스피너를 없애는 것도 폭 확보의 일부 — 데스크톱에서 화살표가 숫자를 가리던 문제도 같이 해결. */
|
||||
.trail-steps { display: flex; flex-direction: column; gap: 3px; margin-top: 5px; min-width: 0; }
|
||||
.trail-step { display: grid; align-items: center; gap: 4px; min-width: 0;
|
||||
grid-template-columns: 12px minmax(0,1fr) minmax(0,1fr) 16px; font-size: 10px; color: #7c8290; }
|
||||
.trail-step-head { color: #5a5f6c; font-size: 9px; letter-spacing: .02em; }
|
||||
.trail-step-head span { text-align: center; }
|
||||
.trail-step .tsn { color: #6f7480; font-variant-numeric: tabular-nums; text-align: center; }
|
||||
.trail-step .tsw { display: flex; align-items: center; gap: 2px; min-width: 0; }
|
||||
.trail-step input { width: 100%; min-width: 0; padding: 4px 5px; font-size: 12px;
|
||||
background: #0f131c; border: 1px solid #262b38; border-radius: 5px; color: #cfd3dc;
|
||||
font-variant-numeric: tabular-nums; text-align: right; }
|
||||
.trail-step input::-webkit-outer-spin-button,
|
||||
.trail-step input::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; }
|
||||
.trail-step .tsu { color: #6f7480; flex: 0 0 auto; font-size: 9px; }
|
||||
.trail-step .tsx { background: none; border: 0; color: #5a5f6c; cursor: pointer; font-size: 12px;
|
||||
padding: 0; line-height: 1; }
|
||||
.trail-step .tsx:hover { color: #e05555; }
|
||||
.trail-add-btn { width: 100%; margin-top: 5px; padding: 5px 6px; font-size: 10px; cursor: pointer;
|
||||
background: #171b26; border: 1px dashed #2c3140; border-radius: 6px; color: #8b8f9a; }
|
||||
.trail-add-btn:hover { background: #1d2230; color: #cfd3dc; border-color: #3a4152; }
|
||||
/* 미리보기 계단 목록 — 한 줄에 넷을 욱여넣으면(계단·가격·주수·누적) 200px 를 넘겨 접힌다.
|
||||
1행 "N단계 −P% … 가격", 2행 "주수 · 누적" 으로 나눠 가격을 우측 정렬로 세운다. */
|
||||
.trail-pv-steps { display: flex; flex-direction: column; gap: 5px; font-size: 10px;
|
||||
border-top: 1px solid #1a1e28; padding-top: 6px; min-width: 0; }
|
||||
.trail-pv-step { display: grid; grid-template-columns: minmax(0,1fr) auto; gap: 1px 6px;
|
||||
align-items: baseline; font-variant-numeric: tabular-nums; }
|
||||
.trail-pv-step .sp { color: #7c8290; }
|
||||
.trail-pv-step .sv { color: #cfd3dc; font-weight: 600; text-align: right; }
|
||||
.trail-pv-step .sq { grid-column: 1 / -1; color: #6f7480; font-size: 9px; }
|
||||
.trail-pv-step.tied .sv { color: #d9a84a; }
|
||||
.trail-pv-badge { display: inline-block; font-size: 9px; padding: 1px 5px; border-radius: 999px;
|
||||
background: #2a2313; color: #d9a84a; margin-left: 4px; vertical-align: middle; }
|
||||
|
||||
@@ -5930,9 +6009,9 @@ nav.tabs a.tab-label:hover { color: #c9ccd3; }
|
||||
.tab-content { display: none; }
|
||||
/* 짧은 탭(자산정보 등)도 viewport를 채워 모바일 Safari 주소창 토글이 일관되게 동작하도록.
|
||||
ticker(fixed bottom) 위치가 다른 탭과 시각적으로 동일해진다. */
|
||||
section.tab-content { min-height: calc(100dvh - 110px); }
|
||||
section.tab-content { min-height: calc(100dvh - 126px); }
|
||||
@supports not (height: 100dvh) {
|
||||
section.tab-content { min-height: calc(100vh - 110px); }
|
||||
section.tab-content { min-height: calc(100vh - 126px); }
|
||||
}
|
||||
|
||||
/* ── 계좌현황 패널 ── */
|
||||
@@ -8080,16 +8159,14 @@ def _render_order_modal() -> str:
|
||||
'<label data-order-trail-row style="display:none;">'
|
||||
# 단위(%·원)를 라벨에 박는다 — 입력칸 옆에 붙이면 가로로 벌어져 스크롤이 생기고,
|
||||
# number input 안쪽 absolute 접미사는 데스크톱 스피너와 겹친다.
|
||||
# 트레일 폭은 드롭다운(2026-07-30 관리자님 요청). 옵션 텍스트에 % 가 들어가므로
|
||||
# 라벨의 (%) 표기는 뺀다. select 는 label(flex column) 안에서 full-width 로 늘어나
|
||||
# 폭 문제가 없다 — 값이 '10%' 처럼 짧아 더욱 안전.
|
||||
'<span style="margin-top:8px;">트레일 폭 <span class="muted small" style="font-weight:400;">고점 대비 이만큼 떨어지면 매도</span></span>'
|
||||
# 1~30% 1%단위. 상한 30 은 orders/trailing.MAX_TRAIL_PCT 와 맞춰야 한다
|
||||
# (그쪽 주석에 세 곳 동시 수정 규칙 있음).
|
||||
'<select data-order-trail-input>'
|
||||
+ ''.join(f'<option value="{v}"{" selected" if v == 10 else ""}>{v}%</option>'
|
||||
for v in range(1, 31))
|
||||
+ '</select>'
|
||||
# 계단식(2026-07-31): 하락률이 깊어질수록 더 많이 파는 분할 매도. 프리셋으로 고르고
|
||||
# 그 자리에서 계단을 고칠 수 있다. 계단 1개짜리 프리셋이 종전의 단일 트레일링이다.
|
||||
'<span style="margin-top:8px;">매도 계단 '
|
||||
'<span class="muted small" style="font-weight:400;">고점 대비 얼마 빠지면 얼마나 팔지</span></span>'
|
||||
# 프리셋은 고정 4종 읽기 전용 — 고른 뒤 아래 표에서 그 자리에 고쳐 쓴다.
|
||||
'<select data-trail-preset></select>'
|
||||
'<div class="trail-steps" data-trail-steps></div>'
|
||||
'<button type="button" class="trail-add-btn" data-trail-add>+ 계단 추가</button>'
|
||||
'<span style="margin-top:8px;">최저 매도가 <b style="color:#d9a84a;">(원)</b> <span class="muted small" style="font-weight:400;">비우면 제한 없음 · 손절선 하한</span></span>'
|
||||
'<input type="number" inputmode="numeric" min="0" step="1" placeholder="예: 4500" data-order-trail-min>'
|
||||
'<div data-order-trail-preview style="margin-top:6px; min-width:0;"></div>'
|
||||
@@ -8418,6 +8495,9 @@ def render_html() -> str:
|
||||
first_tid = descs[0][0]
|
||||
market_active = _market_active_now()
|
||||
now = datetime.now(KST).strftime('%Y-%m-%d %H:%M:%S')
|
||||
# 계단 프리셋은 셸에 실어 보낸다 — 거래 모달을 열 때마다 fetch 하면 느리고,
|
||||
# 고정 4종이라 셸에 넣어도 부담이 없다.
|
||||
trail_presets_json = json.dumps(TRAIL_PRESETS, ensure_ascii=False)
|
||||
|
||||
nav_html = '\n'.join(
|
||||
f'<a class="tab-label" href="#{tid}">{html.escape(label)}</a>'
|
||||
@@ -8491,70 +8571,63 @@ def render_html() -> str:
|
||||
'}'
|
||||
'window.__behive_set_market=setMarket;'
|
||||
'var tickerItems=[];'
|
||||
# 현재 보고 있는 묶음 index. 자동 갱신(20초 주기)에도 유지돼 보던 묶음이 안 튄다.
|
||||
'var tickerPage=0;'
|
||||
'var TICKER_PER_PAGE=2;'
|
||||
'var arrowMap={up:"▲",down:"▼",flat:"-"};'
|
||||
'function tickerItemHtml(item){'
|
||||
'function tickerPages(){return Math.ceil(tickerItems.length/TICKER_PER_PAGE);}'
|
||||
# 2줄 칸: 윗줄 지수명 / 아랫줄 가격+등락. 1줄로는 닛케이225 같은 조합이 칸 폭을 넘는다.
|
||||
'function tickerCellHtml(item){'
|
||||
'var d=item.direction||"flat";'
|
||||
# label은 data-key로 박아 in-place 업데이트 매칭 키로 사용.
|
||||
'var key=String(item.label).replace(/"/g,""");'
|
||||
'return \'<span class="idx \'+(item.kind||"")+\'" data-key="\'+key+\'">\'+'
|
||||
'return \'<div class="idx \'+(item.kind||"")+\'">\'+'
|
||||
'\'<span class="idx-label">\'+item.label+\'</span>\'+'
|
||||
'\'<span class="idx-price">\'+item.price+\'</span>\'+'
|
||||
'\'<span class="idx-delta \'+d+\'">\'+arrowMap[d]+\' \'+item.change+\' (\'+item.pct+\'%)</span></span>\';'
|
||||
'\'<span class="idx-val"><span class="idx-price">\'+item.price+\'</span>\'+'
|
||||
'\'<span class="idx-delta \'+d+\'">\'+arrowMap[d]+\' \'+item.change+\' (\'+item.pct+\'%)</span></span></div>\';'
|
||||
'}'
|
||||
# 같은 세트를 2번 렌더 → CSS translateX(-50%)로 seamless 무한 스크롤.
|
||||
'function renderTicker(){'
|
||||
'function tickerDotsHtml(){'
|
||||
'var n=tickerPages();if(n<2)return "";'
|
||||
'var s="";'
|
||||
'for(var i=0;i<n;i++){s+=(i===tickerPage?\'<i class="on"></i>\':"<i></i>");}'
|
||||
'return \'<span class="ticker-dots">\'+s+\'</span>\';'
|
||||
'}'
|
||||
# animate=true(탭)일 때만 페이드. 자동 갱신은 값만 조용히 교체.
|
||||
# 점(.ticker-dots)은 .ticker-page 바깥 형제로 둔다 — 안에 넣으면 탭할 때 같이 깜빡인다.
|
||||
'function renderTicker(animate){'
|
||||
'var el=document.getElementById("market-ticker");if(!el)return;'
|
||||
'if(!tickerItems.length){el.innerHTML="<span class=\\"idx-empty\\">데이터 없음</span>";return;}'
|
||||
'var setHtml=tickerItems.map(tickerItemHtml).join("")+\'<span class="ticker-sep">·</span>\';'
|
||||
'el.innerHTML=\'<div class="ticker-track">\'+'
|
||||
'\'<div class="ticker-set">\'+setHtml+\'</div>\'+'
|
||||
'\'<div class="ticker-set" aria-hidden="true">\'+setHtml+\'</div>\'+'
|
||||
'\'</div>\';'
|
||||
# intro 속도 = scroll 속도가 되도록 동적 계산.
|
||||
# scroll은 20s에 트랙 절반(=한 세트 너비) 이동 → px/s = setW/20.
|
||||
# intro 거리는 viewport 너비(100vw) → duration = viewport / (setW/20) = viewport*20/setW.
|
||||
# 2~12s 캡: 너무 짧으면 pop-in, 너무 길면 사용자가 첫 등장 기다림.
|
||||
'var trk=el.querySelector(".ticker-track");'
|
||||
'if(trk){'
|
||||
'var setW=trk.scrollWidth/2,vw=window.innerWidth||document.documentElement.clientWidth||0;'
|
||||
'if(setW>0&&vw>0){'
|
||||
'var d=vw*20/setW;'
|
||||
'if(d<2)d=2;else if(d>12)d=12;'
|
||||
'trk.style.animation="ticker-intro "+d+"s linear, ticker-scroll 20s linear "+d+"s infinite";'
|
||||
'}'
|
||||
'}'
|
||||
'}'
|
||||
# 항목 키 셋이 동일하면 가격·등락만 in-place 갱신 → CSS 애니메이션 진행 상태 보존.
|
||||
# 자동 갱신 중에도 스크롤이 0초부터 리셋되지 않는다.
|
||||
'function updateTickerInPlace(arr){'
|
||||
'var el=document.getElementById("market-ticker");if(!el)return false;'
|
||||
'var nodes=el.querySelectorAll(".idx[data-key]");if(!nodes.length)return false;'
|
||||
'var byKey={};'
|
||||
'for(var i=0;i<nodes.length;i++){'
|
||||
'var k=nodes[i].getAttribute("data-key");'
|
||||
'(byKey[k]=byKey[k]||[]).push(nodes[i]);'
|
||||
'}'
|
||||
'if(Object.keys(byKey).length!==arr.length)return false;'
|
||||
'for(var j=0;j<arr.length;j++){if(!byKey[arr[j].label])return false;}'
|
||||
'arr.forEach(function(item){'
|
||||
'var d=item.direction||"flat";'
|
||||
'var deltaText=arrowMap[d]+" "+item.change+" ("+item.pct+"%)";'
|
||||
'byKey[item.label].forEach(function(n){'
|
||||
'var price=n.querySelector(".idx-price");'
|
||||
'var delta=n.querySelector(".idx-delta");'
|
||||
'if(price)price.textContent=item.price;'
|
||||
'if(delta){delta.className="idx-delta "+d;delta.textContent=deltaText;}'
|
||||
'});'
|
||||
'});'
|
||||
'return true;'
|
||||
'if(!tickerItems.length){el.innerHTML=\'<span class="idx-empty">데이터 없음</span>\';return;}'
|
||||
'var n=tickerPages();'
|
||||
# 지수 조회 실패로 개수가 줄면 clamp. 0으로 되돌리면 보던 묶음에서 튕겨나간다.
|
||||
'if(tickerPage>n-1)tickerPage=n-1;'
|
||||
'if(tickerPage<0)tickerPage=0;'
|
||||
'var start=tickerPage*TICKER_PER_PAGE;'
|
||||
'var page=tickerItems.slice(start,start+TICKER_PER_PAGE);'
|
||||
'var cells=page.map(tickerCellHtml).join("");'
|
||||
# 홀수 개(조회 하나 실패)면 마지막 묶음이 한 칸뿐 → 빈 칸을 채워 왼쪽 절반에 고정.
|
||||
'if(page.length<TICKER_PER_PAGE)cells+=\'<div class="idx" aria-hidden="true"></div>\';'
|
||||
'el.innerHTML=\'<div class="ticker-page\'+(animate?" fade":"")+\'">\'+cells+\'</div>\'+tickerDotsHtml();'
|
||||
'}'
|
||||
# 빈 배열이면 기존 표시 유지 (owner-only 응답에서 ticker_items 비어도 stale 보존).
|
||||
'function setTicker(arr){'
|
||||
'if(!arr||!arr.length){if(!tickerItems.length)renderTicker();return;}'
|
||||
'if(updateTickerInPlace(arr)){tickerItems=arr;return;}'
|
||||
'if(!arr||!arr.length){if(!tickerItems.length)renderTicker(false);return;}'
|
||||
'tickerItems=arr;'
|
||||
'renderTicker();'
|
||||
'renderTicker(false);'
|
||||
'}'
|
||||
# 바 아무 곳이나 탭 → 다음 묶음. 마지막이면 처음으로.
|
||||
# touchend가 아니라 click을 쓴다: 스크롤 드래그(터치 시작점이 바여도 touchend는 바에 꽂힘)·
|
||||
# 멀티터치 중복발화·touchcancel 처리를 브라우저에 맡길 수 있다. 직접 처리하면 셋 다 오탐.
|
||||
# 대신 nodbltap_script가 300ms 내 두번째 탭의 click을 삼키므로 거기서 이 바만 예외 처리했다.
|
||||
'(function(){'
|
||||
'var el=document.getElementById("market-ticker");if(!el)return;'
|
||||
'function nextPage(){'
|
||||
'var n=tickerPages();if(n<2)return;'
|
||||
'tickerPage=(tickerPage+1)%n;'
|
||||
'renderTicker(true);'
|
||||
'}'
|
||||
'el.addEventListener("click",nextPage);'
|
||||
'el.addEventListener("keydown",function(e){'
|
||||
'if(e.key==="Enter"||e.key===" "){e.preventDefault();nextPage();}'
|
||||
'});'
|
||||
'})();'
|
||||
'function apply(p){'
|
||||
# 서버 코드가 갱신됐는데(=build 불일치, __build 없는 옛 페이지 포함) 옛 인라인 JS/CSS로 도는 경우
|
||||
# build 당 1회만 강제 리로드(sessionStorage 가드 — 리로드로도 안 맞으면 루프 없이 포기).
|
||||
@@ -9760,12 +9833,17 @@ def render_html() -> str:
|
||||
# 더블탭 zoom 차단 — iOS Safari가 `touch-action: manipulation`을 무시할 때 폴백.
|
||||
# 300ms 안에 두 번째 touchend가 들어오면 preventDefault → 시스템 zoom 동작·동시 발생하는 ghost click 둘 다 억제.
|
||||
# 첫 탭의 click은 정상 dispatch되므로 details 토글·새로고침 버튼 등 단일 탭 UX 영향 없음.
|
||||
# 예외: 하단 지수 바(#market-ticker)는 탭할 때마다 묶음을 넘기는 UI라 빠른 연타가 정상 사용이다.
|
||||
# 여기서 걸러내면 두 번째 탭부터 click이 안 와서 한 칸씩 건너뛴다. 그 바만 억제 대상에서 뺀다
|
||||
# (더블탭 zoom은 html,body의 touch-action: manipulation이 1차로 막고, 이 바는 36px 최하단 띠라 위험이 작다).
|
||||
nodbltap_script = (
|
||||
'<script>(function(){'
|
||||
'var lastT=0;'
|
||||
'document.addEventListener("touchend",function(e){'
|
||||
'var now=Date.now();'
|
||||
'if(now-lastT<=300)e.preventDefault();'
|
||||
'var t=e.target;'
|
||||
'var onTicker=!!(t&&t.closest&&t.closest("#market-ticker"));'
|
||||
'if(now-lastT<=300&&!onTicker)e.preventDefault();'
|
||||
'lastT=now;'
|
||||
'},{passive:false});'
|
||||
'})();</script>'
|
||||
@@ -11448,62 +11526,155 @@ function refreshStopUI(){
|
||||
if(priceRow) priceRow.style.display = isTrail ? 'none' : '';
|
||||
var priceLabel = $('[data-order-price-label]');
|
||||
if(priceLabel) priceLabel.textContent = isStop ? '매도 단가' : '단가';
|
||||
if(isTrail) renderTrailPreview();
|
||||
if(isTrail){
|
||||
// 처음 트레일링을 고른 순간에만 프리셋을 채운다 — 이미 편집 중이면 덮어쓰지 않는다.
|
||||
var psel = $('[data-trail-preset]');
|
||||
if(psel && !psel.options.length){ renderTrailPresetSelect(); applyTrailPreset(); }
|
||||
else renderTrailPreview();
|
||||
}
|
||||
else refreshSubmitGate(); // 트레일링에서 빠져나오면 트레일 게이트를 풀어야 한다
|
||||
}
|
||||
// 트레일링 입력값 읽기 (트레일 폭·최저 매도가). 미리보기·propose 공용.
|
||||
// ---- 계단식 트레일링 (2026-07-31) ----
|
||||
// 계단 = {pct: 고점 대비 하락률, cum: 그때까지 팔려 있어야 할 누적 비중}.
|
||||
// 초기 고점은 항상 등록 시점 현재가 — 과거 고점 기준 옵션은 2026-07-30 제거됨.
|
||||
function trailInputs(){
|
||||
return {
|
||||
pct: parseFloat(($('[data-order-trail-input]')||{}).value || '0'),
|
||||
minPrice: parseInt(($('[data-order-trail-min]')||{}).value || '0', 10) || 0
|
||||
};
|
||||
function trailPresets(){ return window.__trailPresets || []; }
|
||||
function trailSteps(){
|
||||
// :not(.trail-step-head) — 헤더도 같은 .trail-step 이라 빼지 않으면 입력칸 없는 행을 읽는다.
|
||||
var out = [],
|
||||
rows = document.querySelectorAll('[data-trail-steps] .trail-step:not(.trail-step-head)');
|
||||
for(var i=0;i<rows.length;i++){
|
||||
out.push({
|
||||
pct: parseFloat(rows[i].querySelector('[data-ts-pct]').value || '0'),
|
||||
cum: parseFloat(rows[i].querySelector('[data-ts-cum]').value || '0')
|
||||
});
|
||||
}
|
||||
return out;
|
||||
}
|
||||
function trailMinPrice(){
|
||||
return parseInt(($('[data-order-trail-min]')||{}).value || '0', 10) || 0;
|
||||
}
|
||||
// 계단별 주수 — 서버 orders/trailing.allocate_step_qty(최대잔여법)와 같은 식이어야 한다.
|
||||
function allocStepQty(total, weights){
|
||||
if(!(total > 0)) return weights.map(function(){ return 0; });
|
||||
var exact = weights.map(function(w){ return total * w / 100; });
|
||||
var base = exact.map(function(x){ return Math.floor(x); });
|
||||
var sumE = 0, sumB = 0;
|
||||
exact.forEach(function(x){ sumE += x; });
|
||||
base.forEach(function(x){ sumB += x; });
|
||||
var remain = Math.round(sumE) - sumB;
|
||||
var order = exact.map(function(x,i){ return {i:i, f:x - base[i]}; })
|
||||
.sort(function(a,b){ return b.f - a.f; });
|
||||
for(var k=0; k<remain && k<order.length; k++) base[order[k].i] += 1;
|
||||
return base;
|
||||
}
|
||||
// 누적 비중 → 계단별 추가 비중 (서버 normalize_steps 와 같은 환산).
|
||||
function trailWeights(steps){
|
||||
var w = [], prev = 0;
|
||||
steps.forEach(function(s){ w.push(s.cum - prev); prev = s.cum; });
|
||||
return w;
|
||||
}
|
||||
// 손절선 계산 — 서버 `orders/trailing.compute_levels` 와 **같은 식**이어야 한다.
|
||||
// 실제 발주값은 서버 계산분이 승자이므로, 한쪽만 바꾸면 표시와 발주가 어긋난다.
|
||||
// Math.round(_*1e6)/1e6 은 서버의 round(_, 6) 과 짝 — 5500×(1−30/100) 이 3849.9999999999995
|
||||
// 로 나오는 부동소수점 잡음 때문에 1틱 낮게 잡히던 것을 막는다.
|
||||
function trailCondPrice(peak, pct, minPrice){
|
||||
var cond = floorTick(Math.floor(peak * (1 - pct/100)));
|
||||
var cond = floorTick(Math.floor(Math.round(peak * (1 - pct/100) * 1e6) / 1e6));
|
||||
var floorUv = minPrice > 0 ? floorTick(minPrice) : 0;
|
||||
return { cond: Math.max(cond, floorUv), floorApplied: floorUv > cond };
|
||||
}
|
||||
// 라벨은 헤더 한 줄로만 — 행마다 "하락/누적" 을 반복하면 좁은 폭에서 입력칸이 절반으로 줄어든다.
|
||||
// 계단이 0개면 헤더도 그리지 않는다(빈 표 머리만 떠 있으면 뭐가 빠진 것처럼 보인다).
|
||||
function renderTrailStepRows(steps){
|
||||
var box = $('[data-trail-steps]'); if(!box) return;
|
||||
if(!steps.length){ box.innerHTML = ''; return; }
|
||||
var head = '<div class="trail-step trail-step-head" aria-hidden="true">' +
|
||||
'<span></span><span>하락</span><span>누적</span><span></span></div>';
|
||||
box.innerHTML = head + steps.map(function(s, i){
|
||||
return '<div class="trail-step">' +
|
||||
'<span class="tsn">' + (i+1) + '</span>' +
|
||||
'<span class="tsw"><input type="number" inputmode="decimal" min="0.5" max="30" ' +
|
||||
'step="0.5" value="' + s.pct + '" data-ts-pct aria-label="' + (i+1) + '단계 하락률(%)">' +
|
||||
'<span class="tsu">%</span></span>' +
|
||||
'<span class="tsw"><input type="number" inputmode="numeric" min="1" max="100" ' +
|
||||
'step="5" value="' + s.cum + '" data-ts-cum aria-label="' + (i+1) + '단계 누적 비중(%)">' +
|
||||
'<span class="tsu">%</span></span>' +
|
||||
'<button type="button" class="tsx" data-ts-del="' + i + '" aria-label="계단 삭제">✕</button>' +
|
||||
'</div>';
|
||||
}).join('');
|
||||
}
|
||||
// 첫 항목(단일)이 기본값 — TRAIL_PRESETS 순서가 곧 표시 순서다.
|
||||
// 옵션은 이름만 — 계단 수치는 바로 아래 편집 표에 그대로 보이므로 중복이다.
|
||||
function renderTrailPresetSelect(){
|
||||
var sel = $('[data-trail-preset]'); if(!sel) return;
|
||||
sel.innerHTML = '';
|
||||
trailPresets().forEach(function(p, i){
|
||||
var opt = document.createElement('option');
|
||||
opt.value = String(i);
|
||||
opt.textContent = p.name;
|
||||
sel.appendChild(opt);
|
||||
});
|
||||
sel.value = '0';
|
||||
}
|
||||
function applyTrailPreset(){
|
||||
var sel = $('[data-trail-preset]'); if(!sel) return;
|
||||
var p = trailPresets()[parseInt(sel.value, 10)];
|
||||
if(p) renderTrailStepRows(p.steps);
|
||||
renderTrailPreview();
|
||||
}
|
||||
function renderTrailPreview(){
|
||||
// 게이트 갱신은 조기 반환보다 먼저 — 폭이 비었거나 시세 로딩 중일 때도 버튼이 잠겨야 한다.
|
||||
// 게이트 갱신은 조기 반환보다 먼저 — 계단이 비었거나 시세 로딩 중일 때도 버튼이 잠겨야 한다.
|
||||
// trailBlockReason 이 DOM 을 직접 읽으므로 호출 순서에 의존하지 않는다.
|
||||
refreshSubmitGate();
|
||||
var el = $('[data-order-trail-preview]'); if(!el) return;
|
||||
var t = trailInputs();
|
||||
var steps = trailSteps();
|
||||
var minPrice = trailMinPrice();
|
||||
var cur = (state.lastCheck && state.lastCheck.cur_price) || (state.lastBook && state.lastBook.price) || 0;
|
||||
if(!(t.pct > 0) || !(cur > 0)){ el.textContent = ''; return; }
|
||||
if(!steps.length || !(cur > 0)){ el.textContent = ''; return; }
|
||||
var qty = parseInt(($('[data-order-qty]')||{}).value || '0', 10) || 0;
|
||||
var reason = trailBlockReason();
|
||||
var peak = cur; // 초기 고점 = 등록 시점 현재가 (서버 handler 와 동일)
|
||||
var r = trailCondPrice(peak, t.pct, t.minPrice);
|
||||
var bad = (r.cond >= cur);
|
||||
var qtys = allocStepQty(qty, trailWeights(steps));
|
||||
|
||||
// 결론(손절선)을 카드 상단에 크게, 근거는 라벨/값 표로, 안내는 하단 작게.
|
||||
var hero, note;
|
||||
if(bad){
|
||||
// 서버도 TRAIL_IMMEDIATE 로 거부한다 — PIN 발급 왕복 전에 여기서 먼저 알려준다.
|
||||
if(reason){
|
||||
// 서버도 같은 조건으로 거부한다 — PIN 발급 왕복 전에 여기서 먼저 알려준다.
|
||||
hero = '<div class="cap">등록할 수 없습니다</div>' +
|
||||
'<div class="val">손절선 ' + fmt(r.cond) + '원 ≥ 현재가 ' + fmt(cur) + '원</div>' +
|
||||
'<div class="sub">조건을 이미 넘어 등록 즉시 발동됩니다</div>';
|
||||
note = r.floorApplied
|
||||
? '최저 매도가를 현재가보다 낮게 내려주세요.'
|
||||
: '트레일 폭을 넓혀주세요.';
|
||||
'<div class="val">' + reason + '</div>';
|
||||
note = '위 입력을 고쳐주세요.';
|
||||
} else {
|
||||
var pctFromCur = cur > 0 ? ((cur - r.cond) / cur * 100) : 0;
|
||||
hero = '<div class="cap">지금 등록하면 손절선</div>' +
|
||||
'<div class="val">' + fmt(r.cond) + '원' +
|
||||
(r.floorApplied ? '<span class="trail-pv-badge">최저가 적용</span>' : '') + '</div>' +
|
||||
'<div class="sub">현재가보다 ' + pctFromCur.toFixed(1) + '% 아래 · 여기 닿으면 매도</div>';
|
||||
note = '고점이 오르면 손절선도 <b>따라 올라갑니다</b>. 내려가지는 않습니다.';
|
||||
var r0 = trailCondPrice(peak, steps[0].pct, minPrice);
|
||||
var pctFromCur = ((cur - r0.cond) / cur * 100);
|
||||
hero = '<div class="cap">지금 등록하면 1단계 손절선</div>' +
|
||||
'<div class="val">' + fmt(r0.cond) + '원' +
|
||||
(r0.floorApplied ? '<span class="trail-pv-badge">최저가 적용</span>' : '') + '</div>' +
|
||||
'<div class="sub">현재가보다 ' + pctFromCur.toFixed(1) + '% 아래 · 여기 닿으면 ' +
|
||||
(qtys[0] > 0 ? fmt(qtys[0]) + '주' : '') + ' 매도</div>';
|
||||
note = '고점이 오르면 계단이 <b>통째로 따라 올라갑니다</b>. 내려가지는 않습니다.';
|
||||
}
|
||||
|
||||
var kv = [];
|
||||
kv.push('<dt>시작 고점</dt><dd><b>' + fmt(peak) + '원</b><br>등록 시점 현재가</dd>');
|
||||
kv.push('<dt>트레일 폭</dt><dd>−' + t.pct + '%</dd>');
|
||||
if(t.minPrice > 0) kv.push('<dt>최저 매도가</dt><dd>' + fmt(t.minPrice) + '원</dd>');
|
||||
var rows = steps.map(function(s, i){
|
||||
var r = trailCondPrice(peak, s.pct, minPrice);
|
||||
var cum = (s.cum >= 100 ? '전량' : '누적 ' + s.cum + '%');
|
||||
var q = qtys[i] > 0 ? fmt(qtys[i]) + '주' : '0주';
|
||||
return '<div class="trail-pv-step' + (r.floorApplied ? ' tied' : '') + '">' +
|
||||
'<span class="sp">' + (i+1) + '단계 −' + s.pct + '%</span>' +
|
||||
'<span class="sv">' + fmt(r.cond) + '원</span>' +
|
||||
'<span class="sq">' + q + ' · ' + cum + '</span></div>';
|
||||
}).join('');
|
||||
var allotted = 0;
|
||||
qtys.forEach(function(q){ allotted += q; });
|
||||
if(qty > 0 && allotted < qty){
|
||||
// 이 행은 1행짜리 — 계단 행처럼 2행으로 쪼개면 "나머지" 아래 숫자가 떠 어색하다.
|
||||
rows += '<div class="trail-pv-step"><span class="sp">나머지 ' + fmt(qty - allotted) +
|
||||
'주</span><span class="sv">스톱 없음</span></div>';
|
||||
}
|
||||
|
||||
el.innerHTML = '<div class="trail-pv' + (bad ? ' bad' : '') + '">' +
|
||||
var kv = ['<dt>시작 고점</dt><dd><b>' + fmt(peak) + '원</b><br>등록 시점 현재가</dd>'];
|
||||
if(minPrice > 0) kv.push('<dt>최저 매도가</dt><dd>' + fmt(minPrice) + '원</dd>');
|
||||
|
||||
el.innerHTML = '<div class="trail-pv' + (reason ? ' bad' : '') + '">' +
|
||||
'<div class="trail-pv-hero">' + hero + '</div>' +
|
||||
'<div class="trail-pv-steps">' + rows + '</div>' +
|
||||
'<dl class="trail-pv-kv">' + kv.join('') + '</dl>' +
|
||||
'<div class="trail-pv-note">' + note + '</div>' +
|
||||
'</div>';
|
||||
@@ -11923,6 +12094,12 @@ function loadOpenOrders(){
|
||||
}
|
||||
// 고점에 기준 라벨을 붙이지 않는다 — 서버 렌더와 같은 이유(peak 는 갱신된 현재 고점).
|
||||
tb.push('고점 ' + fmt(r.trailing.peak) + '원 대비 −' + r.trailing.trail_pct + '%');
|
||||
// 계단 위치 — 미체결 목록엔 레그가 각각 뜨므로 "3단 중 2단계" 를 밝혀야 관계가 읽힌다.
|
||||
if((r.trailing.step_total || 0) > 1){
|
||||
var cum = r.trailing.cum || 0;
|
||||
tb.push(r.trailing.step_n + '단계/' + r.trailing.step_total + '단 (' +
|
||||
(cum >= 100 ? '전량' : '누적 ' + cum + '%') + ')');
|
||||
}
|
||||
if(r.trailing.min_sell_price) tb.push('최저 ' + fmt(r.trailing.min_sell_price) + '원');
|
||||
if(r.cur_price && r.stop_price){
|
||||
// 손절선 기준 여유폭 — 분모는 손절선(라벨과 계산 기준을 일치시킴).
|
||||
@@ -12036,15 +12213,36 @@ function updateMarketPhaseDisplay(){
|
||||
function trailBlockReason(){
|
||||
var otSel = $('[data-order-type]');
|
||||
if(!otSel || otSel.value !== 'TRAILING_STOP') return '';
|
||||
var t = trailInputs();
|
||||
if(!(t.pct >= 0.5 && t.pct <= 30)) return '트레일 폭은 0.5~30% 범위로 입력하세요';
|
||||
// 계단 검증은 서버 orders/trailing.normalize_steps 와 같은 규칙 — 순서·범위가 어긋나면
|
||||
// 서버가 TRAIL_STEPS 로 거부하므로, PIN 왕복 전에 여기서 같은 문구로 막는다.
|
||||
var steps = trailSteps();
|
||||
if(!steps.length) return '계단을 하나 이상 추가하세요';
|
||||
if(steps.length > 5) return '계단은 최대 5개입니다';
|
||||
var prevP = 0, prevC = 0;
|
||||
for(var i=0;i<steps.length;i++){
|
||||
var s = steps[i], n = i + 1;
|
||||
if(!(s.pct >= 0.5 && s.pct <= 30)) return n + '단계 하락률은 0.5~30% 범위로 입력하세요';
|
||||
if(s.pct <= prevP) return n + '단계 하락률이 앞 계단(' + prevP + '%)보다 깊어야 합니다';
|
||||
if(!(s.cum > 0 && s.cum <= 100)) return n + '단계 누적 비중은 1~100% 범위로 입력하세요';
|
||||
if(s.cum <= prevC) return n + '단계 누적 비중이 앞 계단(' + prevC + '%)보다 커야 합니다';
|
||||
prevP = s.pct; prevC = s.cum;
|
||||
}
|
||||
var cur = (state.lastCheck && state.lastCheck.cur_price) || (state.lastBook && state.lastBook.price) || 0;
|
||||
if(!(cur > 0)) return '현재가를 받는 중입니다';
|
||||
var r = trailCondPrice(cur, t.pct, t.minPrice); // 초기 고점 = 현재가
|
||||
// 가장 얕은 계단이 제일 먼저 발동한다 — 이게 현재가 이상이면 등록 즉시 터진다.
|
||||
var minPrice = trailMinPrice();
|
||||
var r = trailCondPrice(cur, steps[0].pct, minPrice); // 초기 고점 = 현재가
|
||||
if(r.cond >= cur){
|
||||
return r.floorApplied
|
||||
? ('최저 매도가 ' + fmt(t.minPrice) + '원이 현재가 ' + fmt(cur) + '원보다 높아 즉시 발동됩니다')
|
||||
: ('손절선 ' + fmt(r.cond) + '원이 현재가 ' + fmt(cur) + '원 이상이라 즉시 발동됩니다');
|
||||
? ('최저 매도가 ' + fmt(minPrice) + '원이 현재가 ' + fmt(cur) + '원보다 높아 즉시 발동됩니다')
|
||||
: ('1단계 손절선 ' + fmt(r.cond) + '원이 현재가 ' + fmt(cur) + '원 이상이라 즉시 발동됩니다');
|
||||
}
|
||||
var qty = parseInt(($('[data-order-qty]')||{}).value || '0', 10) || 0;
|
||||
if(qty > 0){
|
||||
var qs = allocStepQty(qty, trailWeights(steps));
|
||||
var any = false;
|
||||
qs.forEach(function(q){ if(q > 0) any = true; });
|
||||
if(!any) return fmt(qty) + '주로는 계단을 나눌 수 없습니다 (수량을 늘리거나 계단을 줄이세요)';
|
||||
}
|
||||
return '';
|
||||
}
|
||||
@@ -12298,15 +12496,15 @@ function doPropose(){
|
||||
var qty = parseInt($('[data-order-qty]').value || '0', 10);
|
||||
var price = parseInt($('[data-order-price-input]').value || '0', 10);
|
||||
var stopPrice = parseInt(($('[data-order-stop-input]')||{}).value || '0', 10);
|
||||
var trail = trailInputs();
|
||||
var trailPct = trail.pct;
|
||||
var trailStepList = trailSteps();
|
||||
var trailMin = trailMinPrice();
|
||||
if(!account){ setMsg('계좌를 선택하세요', 'error'); return; }
|
||||
if(qty <= 0){ setMsg('수량을 입력하세요', 'error'); return; }
|
||||
if(orderType === 'LIMIT' && price <= 0){ setMsg('지정가는 단가가 필요합니다', 'error'); return; }
|
||||
if(orderType === 'TRAILING_STOP'){
|
||||
if(state.side !== 'SELL'){ setMsg('트레일링 스톱은 매도만 가능합니다', 'error'); return; }
|
||||
// 트레일 폭·즉시발동 검사는 입력 시점에 trailBlockReason 이 하고, 걸리면 매도 버튼이
|
||||
// 비활성이라 여기 도달하지 않는다. 서버(TRAIL_IMMEDIATE)가 최후 방어선.
|
||||
// 계단 검증·즉시발동 검사는 입력 시점에 trailBlockReason 이 하고, 걸리면 매도 버튼이
|
||||
// 비활성이라 여기 도달하지 않는다. 서버(TRAIL_STEPS/TRAIL_IMMEDIATE)가 최후 방어선.
|
||||
}
|
||||
if(orderType === 'STOP_LIMIT'){
|
||||
if(state.side !== 'SELL'){ setMsg('스톱지정가는 매도만 가능합니다', 'error'); return; }
|
||||
@@ -12331,8 +12529,8 @@ function doPropose(){
|
||||
}
|
||||
// 검증 통과 — 매수/매도 방향 최종 확인 팝업 (오타 방지). 확인 시에만 실제 매매로 진행.
|
||||
state.pendingOrder = {account: account, orderType: orderType, qty: qty, price: price,
|
||||
stopPrice: stopPrice, trailPct: trailPct,
|
||||
trailMinPrice: trail.minPrice};
|
||||
stopPrice: stopPrice, trailSteps: trailStepList,
|
||||
trailMinPrice: trailMin};
|
||||
openOrderConfirm();
|
||||
}
|
||||
// 방향 확인 후 실제 매매 진행 — 전량매도 sell-choice 분기 포함.
|
||||
@@ -12352,7 +12550,7 @@ function doProposeConfirmed(){
|
||||
return;
|
||||
}
|
||||
}
|
||||
proposeSingle(account, orderType, qty, price, po.stopPrice, po.trailPct, po.trailMinPrice);
|
||||
proposeSingle(account, orderType, qty, price, po.stopPrice, po.trailSteps, po.trailMinPrice);
|
||||
}
|
||||
// ── 매수/매도 방향 확인 모달 ──
|
||||
// 매수·매도 버튼을 둘 다 띄우고 관리자님이 직접 맞는 방향을 누르게 함(위치 랜덤).
|
||||
@@ -12370,8 +12568,11 @@ function openOrderConfirm(){
|
||||
var curNow = (state.lastCheck && state.lastCheck.cur_price) || (state.lastBook && state.lastBook.price) || 0;
|
||||
// 트레일링은 단가를 서버가 계산 — 확인 팝업엔 예상 손절선을 보여준다.
|
||||
var trailPeak = isTrail ? curNow : 0; // 초기 고점 = 등록 시점 현재가
|
||||
var trailRes = isTrail ? trailCondPrice(trailPeak, po.trailPct, po.trailMinPrice) : {cond: 0, floorApplied: false};
|
||||
var trailCond = trailRes.cond;
|
||||
var trailStepsPo = (po.trailSteps || []);
|
||||
var trailRes = (isTrail && trailStepsPo.length)
|
||||
? trailCondPrice(trailPeak, trailStepsPo[0].pct, po.trailMinPrice)
|
||||
: {cond: 0, floorApplied: false};
|
||||
var trailCond = trailRes.cond; // 1단계(가장 먼저 발동할 계단) 손절선
|
||||
var priceStr = (po.orderType === 'MARKET') ? '시장가' : (fmt(po.price) + '원');
|
||||
var sum = $oc('[data-order-confirm-summary]');
|
||||
if(sum){
|
||||
@@ -12388,12 +12589,19 @@ function openOrderConfirm(){
|
||||
var stopLine = isStop ? ('· 조건단가: <b>' + fmt(po.stopPrice) + '원 도달 시</b> <span class="muted small">(예약)</span><br>') : '';
|
||||
var priceLine;
|
||||
if(isTrail){
|
||||
var poQtys = allocStepQty(po.qty, trailWeights(trailStepsPo));
|
||||
var stepLines = trailStepsPo.map(function(s, i){
|
||||
var r = trailCondPrice(trailPeak, s.pct, po.trailMinPrice);
|
||||
return ' ' + (i+1) + '단계 −' + s.pct + '% <b>' + fmt(r.cond) + '원</b> → ' +
|
||||
fmt(poQtys[i]) + '주 ' +
|
||||
'<span class="muted small">(' + (s.cum >= 100 ? '전량' : '누적 ' + s.cum + '%') + ')</span><br>';
|
||||
}).join('');
|
||||
priceLine = '· 시작 고점: <b>' + fmt(trailPeak) + '원</b> <span class="muted small">(등록 시점 현재가)</span><br>' +
|
||||
'· 트레일 폭: <b>고점 대비 −' + po.trailPct + '%</b><br>' +
|
||||
(po.trailMinPrice > 0 ? ('· 최저 매도가: <b>' + fmt(po.trailMinPrice) + '원</b> <span class="muted small">(' +
|
||||
(trailRes.floorApplied ? '최저가 적용' : '트레일 적용') + ')</span><br>') : '') +
|
||||
'· 지금 손절선: <b>' + fmt(trailCond) + '원</b> <span class="muted small">(현재가 ' + fmt(curNow) + '원)</span><br>' +
|
||||
'· <span class="muted small">고점이 오르면 손절선도 따라 올라갑니다</span><br>';
|
||||
'· 매도 계단 <b>' + trailStepsPo.length + '단</b> <span class="muted small">(현재가 ' + fmt(curNow) + '원)</span><br>' +
|
||||
stepLines +
|
||||
'· <span class="muted small">고점이 오르면 계단이 통째로 따라 올라갑니다</span><br>';
|
||||
} else {
|
||||
priceLine = '· ' + (isStop ? '매도 단가' : '단가') + ': <b>' + priceStr + '</b><br>';
|
||||
}
|
||||
@@ -12430,7 +12638,7 @@ function siblingAccount(label){
|
||||
var sib = ACCOUNTS.find(function(a){ return a.owner === me.owner && a.label !== label; });
|
||||
return sib ? sib.label : null;
|
||||
}
|
||||
function proposeSingle(account, orderType, qty, price, stopPrice, trailPct, trailMinPrice){
|
||||
function proposeSingle(account, orderType, qty, price, stopPrice, trailStepList, trailMinPrice){
|
||||
var body = new URLSearchParams();
|
||||
body.set('account', account);
|
||||
body.set('side', state.side);
|
||||
@@ -12440,9 +12648,12 @@ function proposeSingle(account, orderType, qty, price, stopPrice, trailPct, trai
|
||||
body.set('order_type', orderType);
|
||||
if(orderType === 'LIMIT' || orderType === 'STOP_LIMIT') body.set('price', String(price));
|
||||
if(orderType === 'STOP_LIMIT') body.set('stop_price', String(stopPrice || 0));
|
||||
// 트레일링은 폭(%)·고점 기준·최저 매도가만 보낸다 — 조건단가·지정가는 서버가 계산.
|
||||
// 트레일링은 계단 정의(하락률·누적 비중)와 최저 매도가만 보낸다 —
|
||||
// 계단별 조건단가·지정가·주수는 서버가 현재가·보유수량 기준으로 계산한다.
|
||||
if(orderType === 'TRAILING_STOP'){
|
||||
body.set('trail_pct', String(trailPct || 0));
|
||||
// 승인 팝업에서 확정된 계단을 그대로 보낸다 — 팝업이 떠 있는 사이 편집기를 건드려도
|
||||
// 관리자님이 확인한 내용과 발주가 어긋나지 않는다.
|
||||
body.set('trail_steps', JSON.stringify(trailStepList || []));
|
||||
if(trailMinPrice > 0) body.set('min_sell_price', String(trailMinPrice));
|
||||
}
|
||||
proposeAndOpenPin('/api/order/propose', body);
|
||||
@@ -12674,14 +12885,43 @@ if(otSel) otSel.addEventListener('change', function(){
|
||||
var priceInpEl = $('[data-order-price-input]');
|
||||
if(priceInpEl) priceInpEl.addEventListener('input', function(){ updateCheck(); highlightSelectedTick(); recalcQtyFromBudget(); });
|
||||
var qtyInpEl = $('[data-order-qty]');
|
||||
if(qtyInpEl) qtyInpEl.addEventListener('input', function(){ recalcBudgetFromQty(); renderOrderInfo(); });
|
||||
if(qtyInpEl) qtyInpEl.addEventListener('input', function(){
|
||||
recalcBudgetFromQty(); renderOrderInfo();
|
||||
// 계단별 주수는 수량에서 나온다 — 수량이 바뀌면 미리보기도 다시 그린다.
|
||||
var ot = $('[data-order-type]');
|
||||
if(ot && ot.value === 'TRAILING_STOP') renderTrailPreview();
|
||||
});
|
||||
var budgetInpEl = $('[data-order-budget]');
|
||||
if(budgetInpEl) budgetInpEl.addEventListener('input', recalcQtyFromBudget);
|
||||
// 트레일 폭은 select — change 로 잡는다(input 도 발생하지만 select 의 정식 이벤트는 change).
|
||||
var trailInpEl = $('[data-order-trail-input]');
|
||||
if(trailInpEl) trailInpEl.addEventListener('change', renderTrailPreview);
|
||||
// 프리셋은 select — change 로 잡는다(select 의 정식 이벤트).
|
||||
var trailPresetEl = $('[data-trail-preset]');
|
||||
if(trailPresetEl) trailPresetEl.addEventListener('change', applyTrailPreset);
|
||||
var trailMinEl = $('[data-order-trail-min]');
|
||||
if(trailMinEl) trailMinEl.addEventListener('input', renderTrailPreview);
|
||||
// 계단 입력·삭제는 행이 동적으로 다시 그려지므로 컨테이너에 위임한다.
|
||||
var trailStepsEl = $('[data-trail-steps]');
|
||||
if(trailStepsEl){
|
||||
trailStepsEl.addEventListener('input', function(e){
|
||||
if(e.target.matches('[data-ts-pct],[data-ts-cum]')) renderTrailPreview();
|
||||
});
|
||||
trailStepsEl.addEventListener('click', function(e){
|
||||
var b = e.target.closest('[data-ts-del]'); if(!b) return;
|
||||
var steps = trailSteps();
|
||||
steps.splice(parseInt(b.getAttribute('data-ts-del'), 10), 1);
|
||||
renderTrailStepRows(steps);
|
||||
renderTrailPreview();
|
||||
});
|
||||
}
|
||||
var trailAddEl = $('[data-trail-add]');
|
||||
if(trailAddEl) trailAddEl.addEventListener('click', function(){
|
||||
var steps = trailSteps();
|
||||
if(steps.length >= 5){ showToast('계단은 최대 5개입니다', 'error'); return; }
|
||||
// 새 계단은 마지막보다 5%p 깊게·누적 100% 로 — 대개 "마지막에 전량" 을 덧붙이는 흐름이다.
|
||||
var last = steps.length ? steps[steps.length-1] : null;
|
||||
steps.push({pct: Math.min(30, last ? last.pct + 5 : 10), cum: 100});
|
||||
renderTrailStepRows(steps);
|
||||
renderTrailPreview();
|
||||
});
|
||||
document.addEventListener('visibilitychange', function(){
|
||||
if(document.hidden) stopPolling();
|
||||
else if(state.isOpen) startPolling();
|
||||
@@ -13020,7 +13260,7 @@ window.openPinModal = openPinModal;
|
||||
<meta name="apple-mobile-web-app-title" content="자산현황">
|
||||
<meta name="robots" content="noindex, nofollow">
|
||||
<title>자산현황</title>
|
||||
<script>window.__build="{BUILD}";</script>
|
||||
<script>window.__build="{BUILD}";window.__trailPresets={trail_presets_json};</script>
|
||||
<style>{_CSS}{dynamic_css}</style>
|
||||
{head_script}
|
||||
</head>
|
||||
@@ -13053,7 +13293,7 @@ window.openPinModal = openPinModal;
|
||||
</div>
|
||||
{content_html}
|
||||
</div>
|
||||
<div class="market-ticker" id="market-ticker"><span class="idx-empty">지수 불러오는 중…</span></div>
|
||||
<div class="market-ticker" id="market-ticker" role="button" tabindex="0" aria-label="시장 지수 — 탭하면 다음 지수"><span class="idx-empty">지수 불러오는 중…</span></div>
|
||||
{idx_info_modal_html}
|
||||
{interest_modal_html}
|
||||
{interest_edit_modal_html}
|
||||
@@ -14296,11 +14536,11 @@ class Handler(BaseHTTPRequestHandler):
|
||||
stop_price = int(stop_raw) if stop_raw else None
|
||||
except ValueError:
|
||||
stop_price = None
|
||||
trail_raw = (params.get('trail_pct') or [''])[0].strip()
|
||||
steps_raw = (params.get('trail_steps') or [''])[0].strip()
|
||||
try:
|
||||
trail_pct = float(trail_raw) if trail_raw else None
|
||||
trail_steps = json.loads(steps_raw) if steps_raw else None
|
||||
except ValueError:
|
||||
trail_pct = None
|
||||
trail_steps = None
|
||||
min_sell_raw = (params.get('min_sell_price') or [''])[0].strip()
|
||||
try:
|
||||
min_sell_price = int(min_sell_raw) if min_sell_raw else None
|
||||
@@ -14324,12 +14564,14 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self._send_json(400, {'ok': False, 'error': '스톱지정가는 단가와 조건단가가 모두 필요'})
|
||||
return
|
||||
if order_type == 'TRAILING_STOP':
|
||||
# 조건단가·지정가는 handler 가 현재가 기준으로 계산 — 여기선 트레일 폭만 받는다.
|
||||
# 계단별 조건단가·지정가·주수는 handler 가 현재가·보유수량 기준으로 계산 —
|
||||
# 여기선 계단 정의(하락률·누적 비중)만 받는다. 형식 검증은 handler 가
|
||||
# orders/trailing.normalize_steps 로 하므로 여기선 최소한만 본다.
|
||||
if side != 'SELL':
|
||||
self._send_json(400, {'ok': False, 'error': '트레일링 스톱은 매도만 지원'})
|
||||
return
|
||||
if trail_pct is None or trail_pct <= 0:
|
||||
self._send_json(400, {'ok': False, 'error': '트레일 폭(%)을 입력하세요'})
|
||||
if not isinstance(trail_steps, list) or not trail_steps:
|
||||
self._send_json(400, {'ok': False, 'error': '매도 계단을 입력하세요'})
|
||||
return
|
||||
if min_sell_price is not None and min_sell_price <= 0:
|
||||
self._send_json(400, {'ok': False, 'error': '최저 매도가는 0보다 커야 합니다'})
|
||||
@@ -14350,7 +14592,7 @@ class Handler(BaseHTTPRequestHandler):
|
||||
qty=qty, order_type=order_type,
|
||||
price=(price if order_type in ('LIMIT', 'STOP_LIMIT') else None),
|
||||
stop_price=(stop_price if order_type == 'STOP_LIMIT' else None),
|
||||
trail_pct=(trail_pct if order_type == 'TRAILING_STOP' else None),
|
||||
trail_steps=(trail_steps if order_type == 'TRAILING_STOP' else None),
|
||||
min_sell_price=(min_sell_price if order_type == 'TRAILING_STOP' else None),
|
||||
)
|
||||
if res.get('ok'):
|
||||
|
||||
@@ -50,6 +50,11 @@ def _pct(p: float, digits: int = 2) -> str:
|
||||
return f'{sign}{p:.{digits}f}%'
|
||||
|
||||
|
||||
def _num(p) -> str:
|
||||
"""계단 비율 표기 — 10.0 은 '10', 10.5 는 '10.5' 로. 불필요한 .0 을 지운다."""
|
||||
return f'{float(p or 0):g}'
|
||||
|
||||
|
||||
def format_card(request: dict, market_data: dict, card_id: str,
|
||||
estimate: Optional[dict] = None,
|
||||
budget_conversion: Optional[dict] = None,
|
||||
@@ -94,25 +99,34 @@ def format_card(request: dict, market_data: dict, card_id: str,
|
||||
lines.append(f'{marker} 조건: {_md_bold(_money(stop_p) + " 도달 시")}{cur_part}')
|
||||
lines.append(f'{marker} 매도가격: {_md_bold(_money(request["price"]))} (지정가)')
|
||||
elif request['order_type'] == 'TRAILING_STOP':
|
||||
# 승인 대상은 "트레일 폭" — 조건단가는 고점이 오르면 이 폭을 유지하며 따라 올라간다.
|
||||
stop_p = request.get('stop_price') or 0
|
||||
# 승인 대상은 "계단 정의" — 각 계단의 조건단가는 고점이 오르면 제 하락률을 유지하며
|
||||
# 함께 따라 올라간다. 계단이 1개면 종전의 단일 트레일링과 같다.
|
||||
cur = market_data.get('current_price')
|
||||
cur_part = f' (현재가 {_money(cur)})' if cur else ''
|
||||
# 초기 고점은 항상 등록 시점 현재가 — 과거 고점 기준 옵션은 2026-07-30 제거됨.
|
||||
peak_v = request.get('trail_peak') or 0
|
||||
trail_pct_part = f'고점 대비 −{request.get("trail_pct")}%'
|
||||
lines.append(f'{marker} 시작 고점: {_md_bold(_money(peak_v))} (등록 시점)')
|
||||
lines.append(f'{marker} 트레일 폭: {_md_bold(trail_pct_part)}')
|
||||
steps = request.get('trail_steps') or []
|
||||
lines.append(f'{marker} 시작 고점: {_md_bold(_money(peak_v))} (등록 시점){cur_part}')
|
||||
min_sell = request.get('min_sell_price')
|
||||
if min_sell:
|
||||
# 최저 매도가가 손절선을 결정했는지(=트레일보다 높았는지) 명시 — 둘 중 어느 게
|
||||
# 지배했는지 안 보이면 관리자님이 값을 잘못 읽는다.
|
||||
raw_trail = int(peak_v * (1 - float(request['trail_pct']) / 100)) if peak_v else 0
|
||||
who = '최저가 적용' if stop_p >= raw_trail else '트레일 적용'
|
||||
tied = sum(1 for s in steps if s.get('floor_applied'))
|
||||
who = f'{tied}개 계단 적용' if tied else '미적용 (트레일이 더 높음)'
|
||||
lines.append(f'{marker} 최저 매도가: {_md_bold(_money(min_sell))} ({who})')
|
||||
lines.append(f'{marker} 현재 손절선: {_md_bold(_money(stop_p) + " 도달 시")}{cur_part}')
|
||||
lines.append(f'{marker} 매도가격: {_md_bold(_money(request["price"]))} (지정가)')
|
||||
lines.append(f'{marker} 고점이 오르면 손절선도 따라 올라갑니다 (내려가지 않음)')
|
||||
lines.append('')
|
||||
lines.append(f'{marker} 매도 계단 {len(steps)}단')
|
||||
for s in steps:
|
||||
cum = s.get('cum', 0)
|
||||
cum_part = '전량' if cum >= 100 else f'누적 {_num(cum)}%'
|
||||
lines.append(f' {s["n"]}단계 −{_num(s["pct"])}% '
|
||||
f'{_md_bold(_money(s["cond_uv"]) + " 도달")} → '
|
||||
f'{s["qty"]:,}주 ({cum_part})')
|
||||
rest = request['qty'] - sum(s['qty'] for s in steps)
|
||||
if rest > 0:
|
||||
lines.append(f' ↳ 나머지 {rest:,}주는 스톱 없음 (계속 보유)')
|
||||
lines.append('')
|
||||
lines.append(f'{marker} 고점이 오르면 계단이 통째로 따라 올라갑니다 (내려가지 않음)')
|
||||
elif request['order_type'] == 'MARKET':
|
||||
lines.append(f'{marker} 가격: {_md_bold("시장가")}')
|
||||
else:
|
||||
@@ -245,6 +259,40 @@ def format_submitted(card_id: str, side: str, symbol_name: str, qty: int,
|
||||
return f'📨 [#{card_id}] {side_word} 접수: {symbol_name} {qty:,}주 @ {price_str}\n주문번호: {ord_no}'
|
||||
|
||||
|
||||
def format_trailing_submitted(info: dict) -> str:
|
||||
"""트레일링 계단 접수 결과 — 몇 단이 걸렸고 감시가 붙었는지를 한 화면에 담는다.
|
||||
|
||||
계단 일부만 접수될 수 있어(레그 독립 제출) 성공·실패를 나란히 적는다.
|
||||
실패분을 요약해 버리면 방어선이 몇 개인지 모르는 채로 남게 된다.
|
||||
"""
|
||||
placed = info.get('placed') or []
|
||||
failed = info.get('failed') or []
|
||||
acct = _account_display(info.get('account', ''))
|
||||
head = '🧪 [모의] 트레일링' if info.get('dry_run') else '✅ 트레일링'
|
||||
lines = [f'{head} {len(placed)}단 등록: {info["symbol_name"]}',
|
||||
f'[{acct}] 총 {info["total_qty"]:,}주 · 시작 고점 {_money(info["peak"])}']
|
||||
if info.get('min_sell_price'):
|
||||
lines.append(f'최저 매도가 {_money(info["min_sell_price"])}')
|
||||
for s in placed:
|
||||
cum = s.get('cum', 0)
|
||||
cum_part = '전량' if cum >= 100 else f'누적 {_num(cum)}%'
|
||||
no = f' · 주문 {s["ord_no"]}' if s.get('ord_no') else ''
|
||||
lines.append(f'{s["n"]}단계 −{_num(s["pct"])}% {_money(s["cond_uv"])} 도달 → '
|
||||
f'{s["qty"]:,}주 ({cum_part}){no}')
|
||||
rest = info['total_qty'] - sum(s['qty'] for s in placed)
|
||||
if rest > 0:
|
||||
lines.append(f'↳ 나머지 {rest:,}주는 스톱 없음 (계속 보유)')
|
||||
for s in failed:
|
||||
lines.append(f'⚠️ {s["n"]}단계 −{_num(s["pct"])}% {s["qty"]:,}주 접수 실패 '
|
||||
f'({s.get("reason")}) {s.get("error", "")}'.rstrip())
|
||||
if info.get('register_error'):
|
||||
lines.append('⚠️ 주문은 접수됐지만 트레일링 등록 실패 — 손절선이 따라 올라가지 않습니다. '
|
||||
f'({info["register_error"]})')
|
||||
elif info.get('res_id'):
|
||||
lines.append(f'감시 시작 ({info["res_id"]}) — 고점이 오르면 계단이 함께 올라갑니다')
|
||||
return '\n'.join(lines)
|
||||
|
||||
|
||||
def format_expired(card_id: str, side: str) -> str:
|
||||
side_word = '매수' if side == 'BUY' else '매도'
|
||||
return f'⏱️ [#{card_id}] 승인 만료. {side_word}가 취소되었습니다.'
|
||||
@@ -323,7 +371,9 @@ def format_card_locked(active: Optional[dict] = None) -> str:
|
||||
elif order_type == 'AGGRESSIVE_LIMIT':
|
||||
price_str = f'공격적 지정가 {_money(price)}' if price else '공격적 지정가'
|
||||
elif order_type == 'TRAILING_STOP':
|
||||
price_str = f'트레일링 −{active.get("trail_pct")}% (손절 {_money(active.get("stop_price"))})'
|
||||
steps = active.get('trail_steps') or []
|
||||
pcts = '/'.join(f'−{_num(s["pct"])}%' for s in steps)
|
||||
price_str = f'트레일링 {len(steps)}단 {pcts} (1단계 손절 {_money(active.get("stop_price"))})'
|
||||
else:
|
||||
price_str = _money(price) if price is not None else '지정가'
|
||||
|
||||
|
||||
@@ -165,7 +165,7 @@ def propose_trade(
|
||||
routing_force: Optional[str] = None,
|
||||
budget: Optional[int] = None,
|
||||
stop_price: Optional[int] = None,
|
||||
trail_pct: Optional[float] = None,
|
||||
trail_steps: Optional[list] = None,
|
||||
min_sell_price: Optional[int] = None,
|
||||
) -> dict:
|
||||
sidecar.guard_or_raise()
|
||||
@@ -185,27 +185,37 @@ def propose_trade(
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('STOP_INPUT',
|
||||
'스톱지정가는 지정가와 조건단가(트리거)가 모두 필요')}
|
||||
norm_steps = None
|
||||
if order_type == 'TRAILING_STOP':
|
||||
# 트레일링은 트레일 폭(%)만 입력받고 조건단가·지정가는 현재가 기준 자동 계산 (md 수집 후).
|
||||
# 트레일링은 계단 정의(하락률·누적 비중)만 입력받고, 계단별 조건단가·지정가·주수는
|
||||
# 현재가와 보유수량 기준으로 자동 계산한다 (md 수집 후).
|
||||
if side != 'SELL':
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('STOP_SELL_ONLY', '트레일링 스톱은 매도 전용')}
|
||||
if trail_pct is None or not (trailing.MIN_TRAIL_PCT <= trail_pct <= trailing.MAX_TRAIL_PCT):
|
||||
try:
|
||||
norm_steps = trailing.normalize_steps(trail_steps or [])
|
||||
except (ValueError, KeyError, TypeError) as e:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
'TRAIL_PCT_RANGE',
|
||||
f'트레일 폭은 {trailing.MIN_TRAIL_PCT}~{trailing.MAX_TRAIL_PCT}% 범위')}
|
||||
'message': card.format_rejected('TRAIL_STEPS', f'계단 정의 오류: {e}')}
|
||||
if budget is not None:
|
||||
# 계단별 주수는 보유수량을 나눠 만든다 — 예산 환산이 끼면 기준이 두 개가 된다.
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('TRAIL_BUDGET',
|
||||
'트레일링은 수량으로만 지정 (예산 환산 불가)')}
|
||||
if min_sell_price is not None and min_sell_price <= 0:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('TRAIL_MIN_PRICE',
|
||||
'최저 매도가는 0보다 커야 함 (제한 없으면 비우세요)')}
|
||||
dup = trailing.find_by_symbol(account, symbol)
|
||||
if dup:
|
||||
dup_steps = dup.get('steps') or []
|
||||
top_uv = max((s['cond_uv'] for s in dup_steps), default=0)
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
'TRAIL_DUPLICATE',
|
||||
f'{symbol_name or symbol} 트레일링 예약이 이미 있음 '
|
||||
f'({dup["id"]} · 손절 {dup["cond_uv"]:,}원) — 먼저 취소하세요')}
|
||||
f'({dup["id"]} · {len(dup_steps)}단 · 1단계 손절 {top_uv:,}원) '
|
||||
f'— 먼저 취소하세요')}
|
||||
if budget is not None and qty is not None:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected('AMBIGUOUS_INPUT',
|
||||
@@ -218,7 +228,8 @@ def propose_trade(
|
||||
# collect_market_data 의 잔고/보유 조회는 qty 와 무관.
|
||||
md = datasource.collect_market_data(account, symbol, side, qty or 0)
|
||||
|
||||
trail_levels = None
|
||||
trail_final = None
|
||||
trail_peak = None
|
||||
if order_type == 'TRAILING_STOP':
|
||||
# 현재가를 못 받으면 손절선을 정할 수 없어 진행 불가 (호가 fallback 금지 — 기준이 흔들림).
|
||||
cur = md.get('current_price') or 0
|
||||
@@ -229,24 +240,33 @@ def propose_trade(
|
||||
# 초기 고점은 등록 시점 현재가로 고정. 과거 고점(52주·매수후)을 쓰면 손절선이 현재가
|
||||
# 위로 올라가 등록 즉시 발동한다 — 손실 종목은 아예 등록 불가, 이익 종목은 현재가와
|
||||
# 결과가 같아 옵션 자체를 제거했다(2026-07-30 실측 근거로 관리자님 결정).
|
||||
peak = cur
|
||||
trail_peak = cur
|
||||
try:
|
||||
trail_levels = trailing.compute_levels(peak, trail_pct, min_sell_price)
|
||||
leveled = trailing.compute_step_levels(trail_peak, norm_steps, min_sell_price)
|
||||
except ValueError as e:
|
||||
return {'ok': False, 'message': card.format_rejected('TRAIL_LEVEL', str(e))}
|
||||
# 손절선이 현재가 이상이면 등록하는 순간 발동한다. 고점=현재가로 고정된 뒤로는
|
||||
# 최저 매도가가 현재가보다 높은 경우만 남는다(트레일 폭은 항상 현재가 아래로 내려감).
|
||||
if trail_levels['cond_uv'] >= cur:
|
||||
if trail_levels['floor_applied']:
|
||||
# 계단별 주수 배분. 수량이 적어 0주가 된 계단은 발주할 수 없으니 떨어낸다 —
|
||||
# 단계 번호(n)는 그대로 두어 "몇 단계가 빠졌는지" 가 카드에서 보이게 한다.
|
||||
qtys = trailing.allocate_step_qty(qty, [s['weight'] for s in norm_steps])
|
||||
trail_final = [dict(s, qty=q) for s, q in zip(leveled, qtys) if q > 0]
|
||||
if not trail_final:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
'TRAIL_QTY', f'{qty:,}주로는 계단을 나눌 수 없음 — 수량을 늘리거나 계단을 줄이세요')}
|
||||
# 가장 얕은 계단이 제일 먼저 발동한다. 이게 현재가 이상이면 등록하는 순간 터진다.
|
||||
# 고점=현재가로 고정된 뒤로는 최저 매도가가 현재가보다 높은 경우만 남는다
|
||||
# (트레일 폭은 항상 현재가 아래로 내려감).
|
||||
top = trail_final[0]
|
||||
if top['cond_uv'] >= cur:
|
||||
if top['floor_applied']:
|
||||
msg = (f'최저 매도가 {min_sell_price:,}원이 현재가 {cur:,}원보다 높아 '
|
||||
f'등록 즉시 발동됩니다 — 현재가보다 낮게 설정하세요')
|
||||
else:
|
||||
msg = (f'손절선 {trail_levels["cond_uv"]:,}원이 현재가 {cur:,}원 이상이라 '
|
||||
msg = (f'1단계 손절선 {top["cond_uv"]:,}원이 현재가 {cur:,}원 이상이라 '
|
||||
f'등록 즉시 발동됩니다')
|
||||
return {'ok': False, 'message': card.format_rejected('TRAIL_IMMEDIATE', msg)}
|
||||
price = trail_levels['ord_uv']
|
||||
stop_price = trail_levels['cond_uv']
|
||||
trail_levels['peak'] = peak
|
||||
price = top['ord_uv']
|
||||
stop_price = top['cond_uv']
|
||||
|
||||
budget_conversion = None
|
||||
if budget is not None:
|
||||
@@ -277,9 +297,9 @@ def propose_trade(
|
||||
request['price'] = price
|
||||
request['stop_price'] = stop_price
|
||||
if order_type == 'TRAILING_STOP':
|
||||
request['trail_pct'] = trail_pct
|
||||
request['trail_steps'] = trail_final
|
||||
request['min_sell_price'] = min_sell_price
|
||||
request['trail_peak'] = trail_levels['peak']
|
||||
request['trail_peak'] = trail_peak
|
||||
|
||||
r = guards.validate_request(request, md)
|
||||
if not r.ok:
|
||||
@@ -326,11 +346,11 @@ def propose_trade(
|
||||
if order_type == 'STOP_LIMIT':
|
||||
payload['stop_price'] = stop_price
|
||||
elif order_type == 'TRAILING_STOP':
|
||||
# 승인 시점에 확정되는 것: 계좌·종목·수량·트레일 폭·최저 매도가.
|
||||
# 이후 감시 루프는 조건단가만 올린다.
|
||||
# 승인 시점에 확정되는 것: 계좌·종목·계단별 수량·하락률·최저 매도가.
|
||||
# 이후 감시 루프는 계단별 조건단가만 올린다 (수량·계단 구성은 불변).
|
||||
payload['stop_price'] = stop_price
|
||||
payload['trail_pct'] = trail_pct
|
||||
payload['trail_peak'] = trail_levels['peak']
|
||||
payload['trail_steps'] = trail_final
|
||||
payload['trail_peak'] = trail_peak
|
||||
payload['min_sell_price'] = min_sell_price
|
||||
|
||||
try:
|
||||
@@ -516,14 +536,10 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
|
||||
if p.get('multi'):
|
||||
return _submit_multi_legs(card_obj, dry_run)
|
||||
if p['order_type'] == 'TRAILING_STOP':
|
||||
return _submit_trailing_steps(card_obj, dry_run)
|
||||
|
||||
# 트레일링은 키움에 스톱지정가(trde_tp=28)로 나간다 — 트레일링은 우리 쪽 개념.
|
||||
if p['order_type'] == 'AGGRESSIVE_LIMIT':
|
||||
submit_order_type = 'LIMIT'
|
||||
elif p['order_type'] == 'TRAILING_STOP':
|
||||
submit_order_type = 'STOP_LIMIT'
|
||||
else:
|
||||
submit_order_type = p['order_type']
|
||||
submit_order_type = 'LIMIT' if p['order_type'] == 'AGGRESSIVE_LIMIT' else p['order_type']
|
||||
res = kiwoom_order.submit(
|
||||
account_label=p['account'],
|
||||
side=p['side'],
|
||||
@@ -545,30 +561,7 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
msg = card.format_submitted(card_obj.card_id, p['side'],
|
||||
p.get('symbol_name', p['symbol']),
|
||||
p['qty'], p.get('price'), ord_no)
|
||||
if p['order_type'] == 'TRAILING_STOP':
|
||||
# 트레일링은 조건 도달까지 며칠 미체결로 남는 게 정상 — fill_watcher 를 걸면
|
||||
# 30분 미체결 알림이 오탐으로 간다. 생존·체결 감시는 trailing_monitor 가 담당.
|
||||
if ord_no:
|
||||
try:
|
||||
res_trl = trailing.register(
|
||||
ord_no=ord_no, account=p['account'], symbol=p['symbol'],
|
||||
symbol_name=p.get('symbol_name', p['symbol']), qty=p['qty'],
|
||||
trail_pct=p['trail_pct'], peak=p['trail_peak'],
|
||||
cond_uv=p['stop_price'], ord_uv=p['price'],
|
||||
routing_suffix=p['routing_suffix'], card_id=card_obj.card_id,
|
||||
min_sell_price=p.get('min_sell_price'),
|
||||
)
|
||||
msg += (f'\n트레일링 감시 시작 ({res_trl["id"]}) — '
|
||||
f'고점 {p["trail_peak"]:,}원 기준 {p["trail_pct"]}% 아래 '
|
||||
f'{p["stop_price"]:,}원')
|
||||
except Exception as e:
|
||||
# 주문은 이미 접수됨 — 등록 실패를 숨기면 트레일링이 안 도는 걸 모른다.
|
||||
ledger.append('trailing_register_failed',
|
||||
{'card_id': card_obj.card_id, 'ord_no': ord_no,
|
||||
'error': repr(e), **p})
|
||||
msg += ('\n⚠️ 주문은 접수됐지만 트레일링 등록 실패 — '
|
||||
'손절선이 따라 올라가지 않습니다. 확인 필요.')
|
||||
elif ord_no:
|
||||
if ord_no:
|
||||
# 키움에서 ord_no 받으면 백그라운드 체결 추적 시작 (kt00007 폴링).
|
||||
# 부분체결·완전체결·사후거절·30분 미체결 시 텔레그램 자동 알림.
|
||||
fill_watcher.watch(
|
||||
@@ -583,6 +576,84 @@ def submit_with_pin(pin_input: str, dry_run: bool = True) -> dict:
|
||||
'detail': res}
|
||||
|
||||
|
||||
def _submit_trailing_steps(card_obj, dry_run: bool) -> dict:
|
||||
"""트레일링 계단 카드 — 계단마다 스톱주문을 내고 예약 1건으로 묶어 등록한다.
|
||||
|
||||
키움엔 스톱지정가(trde_tp=28)로 나간다 — 트레일링은 우리 쪽 개념이다.
|
||||
얕은 계단(먼저 발동할 것)부터 접수해, 중간에 막히더라도 가장 가까운 방어선이 먼저 걸리게 한다.
|
||||
|
||||
한 레그가 실패해도 나머지는 계속 시도하고, 접수된 레그만 예약에 등록한다. 이미 나간 주문을
|
||||
되돌리지 않는 이유는 취소 자체도 실패할 수 있어 상태가 더 불분명해지기 때문이다 —
|
||||
대신 몇 단이 걸리고 몇 단이 실패했는지를 메시지에 그대로 드러낸다.
|
||||
|
||||
fill_watcher 는 걸지 않는다. 스톱 예약은 조건 도달까지 미체결로 남는 게 정상이라
|
||||
30분 미체결 알림이 오탐이 된다 — 생존·체결 감시는 trailing_monitor 가 담당한다.
|
||||
"""
|
||||
p = card_obj.payload
|
||||
steps = p.get('trail_steps') or []
|
||||
name = p.get('symbol_name', p['symbol'])
|
||||
placed, failed, details = [], [], []
|
||||
|
||||
for s in steps:
|
||||
res = kiwoom_order.submit(
|
||||
account_label=p['account'],
|
||||
side='SELL',
|
||||
symbol=p['symbol'],
|
||||
qty=s['qty'],
|
||||
price=s['ord_uv'],
|
||||
order_type='STOP_LIMIT',
|
||||
routing_suffix=p['routing_suffix'],
|
||||
dry_run=dry_run,
|
||||
card_id=card_obj.card_id,
|
||||
stop_price=s['cond_uv'],
|
||||
)
|
||||
details.append(res)
|
||||
if res['ok']:
|
||||
# dry_run 은 주문번호가 없다 — 예약 등록 없이 접수될 내용만 확인한다.
|
||||
placed.append(dict(s, ord_no=res.get('ord_no', '')))
|
||||
else:
|
||||
failed.append(dict(s, reason=res.get('reason', 'UNKNOWN'),
|
||||
error=str(res.get('error', ''))))
|
||||
|
||||
if not placed:
|
||||
return {'ok': False,
|
||||
'message': card.format_rejected(
|
||||
(failed[0]['reason'] if failed else 'UNKNOWN'),
|
||||
f'{name} 계단 {len(steps)}단 전부 접수 실패 — '
|
||||
+ (failed[0]['error'] if failed else '')),
|
||||
'detail': details}
|
||||
|
||||
info = {'card_id': card_obj.card_id, 'symbol_name': name, 'account': p['account'],
|
||||
'total_qty': p['qty'], 'peak': p['trail_peak'],
|
||||
'min_sell_price': p.get('min_sell_price'),
|
||||
'placed': placed, 'failed': failed, 'dry_run': dry_run,
|
||||
'res_id': None, 'register_error': None}
|
||||
|
||||
if not dry_run:
|
||||
registerable = [s for s in placed if s['ord_no']]
|
||||
if not registerable:
|
||||
# 접수는 됐는데 주문번호를 못 받았다 — 감시가 붙을 수 없으니 반드시 알린다.
|
||||
ledger.append('trailing_register_failed',
|
||||
{'card_id': card_obj.card_id, 'error': 'no ord_no', **p})
|
||||
info['register_error'] = '주문번호를 못 받아 감시를 걸지 못했습니다'
|
||||
else:
|
||||
try:
|
||||
res_trl = trailing.register_steps(
|
||||
account=p['account'], symbol=p['symbol'], symbol_name=name,
|
||||
total_qty=p['qty'], peak=p['trail_peak'], steps=registerable,
|
||||
routing_suffix=p['routing_suffix'], card_id=card_obj.card_id,
|
||||
min_sell_price=p.get('min_sell_price'),
|
||||
)
|
||||
info['res_id'] = res_trl['id']
|
||||
except Exception as e:
|
||||
# 주문은 이미 접수됨 — 등록 실패를 숨기면 트레일링이 안 도는 걸 모른다.
|
||||
ledger.append('trailing_register_failed',
|
||||
{'card_id': card_obj.card_id, 'error': repr(e), **p})
|
||||
info['register_error'] = str(e)
|
||||
|
||||
return {'ok': True, 'message': card.format_trailing_submitted(info), 'detail': details}
|
||||
|
||||
|
||||
def _submit_multi_legs(card_obj, dry_run: bool) -> dict:
|
||||
"""multi 카드(propose_trade_multi)의 레그별 키움 제출 — 레그 독립 실행·독립 보고.
|
||||
|
||||
|
||||
@@ -0,0 +1,363 @@
|
||||
"""계단식 트레일링 단위테스트 (2026-07-31).
|
||||
|
||||
세 층을 본다:
|
||||
1. 순수 함수 — 누적→추가 환산, 수량 배분, 계단별 손절선, 상향 판단
|
||||
2. 감시 루프 — 레그 체결/소멸 판정과 알림 (키움 호출은 전부 stub, 상태파일은 임시경로로 격리)
|
||||
3. JS 대조 — 렌더된 페이지의 미리보기 계산이 서버 계산과 같은 값을 내는지 (node 있을 때만)
|
||||
|
||||
3번이 특히 중요하다. 미리보기와 발주값이 어긋나면 관리자님이 본 것과 다른 주문이 나간다.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import json
|
||||
import random
|
||||
import shutil
|
||||
import subprocess
|
||||
import sys
|
||||
import tempfile
|
||||
import unittest
|
||||
from pathlib import Path
|
||||
|
||||
from orders import trailing as t
|
||||
|
||||
|
||||
class NormalizeStepsTests(unittest.TestCase):
|
||||
"""입력한 누적 비중 → 내부 추가 비중."""
|
||||
|
||||
def test_cumulative_to_incremental(self):
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
self.assertEqual([s['weight'] for s in st], [20.0, 30.0, 50.0])
|
||||
self.assertEqual([s['n'] for s in st], [1, 2, 3])
|
||||
self.assertEqual([s['pct'] for s in st], [10.0, 20.0, 30.0])
|
||||
|
||||
def test_single_step(self):
|
||||
st = t.normalize_steps([{'pct': 8, 'cum': 100}])
|
||||
self.assertEqual([(s['pct'], s['weight']) for s in st], [(8.0, 100.0)])
|
||||
|
||||
def test_partial_liquidation_allowed(self):
|
||||
"""마지막 누적이 100 미만이어도 통과 — 일부만 계단 청산하고 나머지는 계속 보유."""
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 30}, {'pct': 20, 'cum': 60}])
|
||||
self.assertEqual([s['weight'] for s in st], [30.0, 30.0])
|
||||
|
||||
def test_rejects(self):
|
||||
cases = [
|
||||
('빈 입력', [], '비어'),
|
||||
('계단 초과', [{'pct': i, 'cum': i * 10} for i in range(1, 7)], '최대'),
|
||||
('하락률 역순', [{'pct': 20, 'cum': 30}, {'pct': 10, 'cum': 60}], '깊지 않음'),
|
||||
('하락률 동일', [{'pct': 10, 'cum': 30}, {'pct': 10, 'cum': 60}], '깊지 않음'),
|
||||
('누적 역순', [{'pct': 10, 'cum': 60}, {'pct': 20, 'cum': 30}], '크지 않음'),
|
||||
('누적 100 초과', [{'pct': 10, 'cum': 50}, {'pct': 20, 'cum': 120}], '100'),
|
||||
('하락률 상한 초과', [{'pct': 40, 'cum': 100}], '범위'),
|
||||
('하락률 하한 미만', [{'pct': 0.1, 'cum': 100}], '범위'),
|
||||
]
|
||||
for label, raw, needle in cases:
|
||||
with self.subTest(label):
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
t.normalize_steps(raw)
|
||||
self.assertIn(needle, str(cm.exception))
|
||||
|
||||
|
||||
class AllocateStepQtyTests(unittest.TestCase):
|
||||
"""계단별 주수 배분 — 최대잔여법."""
|
||||
|
||||
def test_exact(self):
|
||||
self.assertEqual(t.allocate_step_qty(100, [20, 30, 50]), [20, 30, 50])
|
||||
self.assertEqual(t.allocate_step_qty(1943, [20, 30, 50]), [389, 583, 971])
|
||||
|
||||
def test_remainder_goes_to_largest_fraction(self):
|
||||
self.assertEqual(t.allocate_step_qty(7, [20, 30, 50]), [1, 2, 4])
|
||||
|
||||
def test_small_qty_keeps_shallow_step_alive(self):
|
||||
"""2주를 3계단에 나누면 [0,1,1] — '마지막에 몰아주기'였다면 [0,0,2]로 1계단만 남는다."""
|
||||
self.assertEqual(t.allocate_step_qty(2, [20, 30, 50]), [0, 1, 1])
|
||||
self.assertEqual(t.allocate_step_qty(1, [20, 30, 50]), [0, 0, 1])
|
||||
self.assertEqual(t.allocate_step_qty(0, [20, 30, 50]), [0, 0, 0])
|
||||
|
||||
def test_sum_preserved_exhaustive(self):
|
||||
"""전량(합 100%) 조합은 배분 합이 정확히 보유수량이어야 한다."""
|
||||
for total in range(1, 400):
|
||||
for w in ([20, 30, 50], [30, 30, 40], [10, 20, 30, 40], [50, 50], [100]):
|
||||
got = t.allocate_step_qty(total, w)
|
||||
self.assertEqual(sum(got), total, f'total={total} w={w} → {got}')
|
||||
self.assertTrue(all(x >= 0 for x in got))
|
||||
|
||||
def test_partial_never_exceeds_holding(self):
|
||||
for total in range(1, 400):
|
||||
self.assertLessEqual(sum(t.allocate_step_qty(total, [30, 30])), total)
|
||||
|
||||
|
||||
class ComputeLevelsTests(unittest.TestCase):
|
||||
def test_step_prices(self):
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
lv = t.compute_step_levels(5000, st)
|
||||
self.assertEqual([x['cond_uv'] for x in lv], [4500, 4000, 3500])
|
||||
self.assertEqual([x['ord_uv'] for x in lv], [4490, 3990, 3490]) # 각 2틱 아래
|
||||
|
||||
def test_float_noise_removed(self):
|
||||
"""5500×(1−30/100) 이 3849.9999999999995 라 int() 가 3849 로 깎고
|
||||
호가내림이 3845 까지 끌어내리던 버그(2026-07-31 수정). 의도는 3850."""
|
||||
self.assertEqual(t.compute_levels(5500, 30)['cond_uv'], 3850)
|
||||
self.assertEqual(t.compute_levels(5500, 10)['cond_uv'], 4950)
|
||||
self.assertEqual(t.compute_levels(4870, 10)['cond_uv'], 4380)
|
||||
|
||||
def test_no_tick_loss_when_exact(self):
|
||||
"""정수로 딱 떨어지는 (고점,폭)은 호가단위 내림 결과와 정확히 같아야 한다."""
|
||||
for peak in range(1000, 300000, 977):
|
||||
for pct in (5, 10, 15, 20, 25, 30):
|
||||
exact = peak * (100 - pct) / 100.0
|
||||
if abs(exact - round(exact)) > 1e-9:
|
||||
continue
|
||||
want = t.floor_to_tick(int(round(exact)))
|
||||
self.assertEqual(t.compute_levels(peak, pct)['cond_uv'], want,
|
||||
f'peak={peak} pct={pct}')
|
||||
|
||||
def test_floor_ties_all_steps_then_they_spread(self):
|
||||
"""최저 매도가는 모든 계단에 같은 하한 → 처음엔 뭉치고, 고점이 오르면 다시 벌어진다.
|
||||
(그래서 주문을 병합하면 안 된다 — 정정만으로는 다시 못 쪼갠다.)"""
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
tied = t.compute_step_levels(5000, st, min_sell_price=4600)
|
||||
self.assertEqual([x['cond_uv'] for x in tied], [4600, 4600, 4600])
|
||||
self.assertTrue(all(x['floor_applied'] for x in tied))
|
||||
spread = t.compute_step_levels(6000, st, min_sell_price=4600)
|
||||
self.assertEqual([x['cond_uv'] for x in spread], [5400, 4800, 4600])
|
||||
|
||||
|
||||
class NextStepLevelsTests(unittest.TestCase):
|
||||
def setUp(self):
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
self.res = {'peak': 5000, 'min_sell_price': None,
|
||||
'steps': [dict(s, cond_uv=c, ord_uv=o) for s, c, o in
|
||||
zip(st, [4500, 4000, 3500], [4490, 3990, 3490])]}
|
||||
|
||||
def test_no_new_high(self):
|
||||
for price in (0, 4900, 5000):
|
||||
self.assertIsNone(t.next_step_levels(self.res, price))
|
||||
|
||||
def test_all_steps_raise(self):
|
||||
up = t.next_step_levels(self.res, 6000)
|
||||
self.assertEqual(up['peak'], 6000)
|
||||
self.assertEqual([(s['n'], s['cond_uv']) for s in up['steps']],
|
||||
[(1, 5400), (2, 4800), (3, 4200)])
|
||||
|
||||
def test_peak_updates_even_when_no_step_moves(self):
|
||||
"""호가단위 내림 탓에 올릴 조건단가가 없어도 고점은 갱신돼야 한다(정정 콜은 0)."""
|
||||
res = {'peak': 5000, 'min_sell_price': None,
|
||||
'steps': [{'n': 1, 'pct': 10.0, 'cum': 100.0, 'weight': 100.0,
|
||||
'cond_uv': 4500, 'ord_uv': 4490}]}
|
||||
up = t.next_step_levels(res, 5001)
|
||||
self.assertEqual(up['peak'], 5001)
|
||||
self.assertEqual(up['steps'], [])
|
||||
|
||||
def test_floor_dominant_then_overtaken(self):
|
||||
res = {'peak': 5000, 'min_sell_price': 4600,
|
||||
'steps': [{'n': 1, 'pct': 10.0, 'cum': 100.0, 'weight': 100.0,
|
||||
'cond_uv': 4600, 'ord_uv': 4590}]}
|
||||
self.assertEqual(t.next_step_levels(res, 5050)['steps'], []) # 아직 floor 지배
|
||||
self.assertEqual([(s['n'], s['cond_uv'])
|
||||
for s in t.next_step_levels(res, 5200)['steps']], [(1, 4680)])
|
||||
|
||||
def test_stop_never_moves_down(self):
|
||||
"""무작위 시세에도 손절선은 단조 증가여야 한다 (상향 전용 불변식)."""
|
||||
cur = {'peak': 5000, 'min_sell_price': None,
|
||||
'steps': [{'n': 1, 'pct': 10.0, 'cum': 100.0, 'weight': 100.0,
|
||||
'cond_uv': 4500, 'ord_uv': 4490}]}
|
||||
rnd = random.Random(7)
|
||||
prev = 4500
|
||||
for _ in range(3000):
|
||||
nx = t.next_step_levels(cur, rnd.randint(3000, 9000))
|
||||
if nx is None:
|
||||
continue
|
||||
cur['peak'] = nx['peak']
|
||||
for s in nx['steps']:
|
||||
self.assertGreaterEqual(s['cond_uv'], prev)
|
||||
prev = s['cond_uv']
|
||||
cur['steps'][0]['cond_uv'] = s['cond_uv']
|
||||
|
||||
|
||||
class MonitorFlowTests(unittest.TestCase):
|
||||
"""감시 루프 — 레그 단위 생존 판정·정정·알림. 키움 호출은 stub."""
|
||||
|
||||
def setUp(self):
|
||||
self.tmp = Path(tempfile.mkdtemp()) / 'trailing_stops.json'
|
||||
self._orig = (t.STATE_FILE, t._LOCK_FILE)
|
||||
t.STATE_FILE = self.tmp
|
||||
t._LOCK_FILE = self.tmp.with_suffix('.json.lock')
|
||||
|
||||
import trailing_monitor as tm
|
||||
self.tm = tm
|
||||
self.sent = []
|
||||
self.state = {'open': {}, 'quote': 0, 'execs': [], 'modify': []}
|
||||
self._orig_fns = (tm.kc.get_open_orders, tm.kc.get_watchlist_quotes,
|
||||
tm.kc.get_order_executions, tm.kiwoom_order.modify_order,
|
||||
tm.send_telegram)
|
||||
tm.kc.get_open_orders = lambda acct, side=None: list(self.state['open'].get(acct, []))
|
||||
tm.kc.get_watchlist_quotes = lambda codes, exchange='AL': {
|
||||
c: {'price': self.state['quote']} for c in codes}
|
||||
tm.kc.get_order_executions = lambda acct: list(self.state['execs'])
|
||||
tm.kiwoom_order.modify_order = self._fake_modify
|
||||
tm.send_telegram = lambda msg, parse_mode=None: self.sent.append(msg)
|
||||
|
||||
st = t.normalize_steps([{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50},
|
||||
{'pct': 30, 'cum': 100}])
|
||||
lv = t.compute_step_levels(5500, st, None)
|
||||
qtys = t.allocate_step_qty(1943, [s['weight'] for s in st])
|
||||
legs = [dict(s, qty=q, ord_no=f'A{s["n"]:04d}') for s, q in zip(lv, qtys)]
|
||||
self.res = t.register_steps(account='일반', symbol='381620',
|
||||
symbol_name='제닉스로보틱스', total_qty=1943,
|
||||
peak=5500, steps=legs)
|
||||
self.state['open']['일반'] = [{'ord_no': s['ord_no'], 'unfilled_qty': s['qty'],
|
||||
'routing_suffix': ''} for s in legs]
|
||||
|
||||
def tearDown(self):
|
||||
(self.tm.kc.get_open_orders, self.tm.kc.get_watchlist_quotes,
|
||||
self.tm.kc.get_order_executions, self.tm.kiwoom_order.modify_order,
|
||||
self.tm.send_telegram) = self._orig_fns
|
||||
t.STATE_FILE, t._LOCK_FILE = self._orig
|
||||
shutil.rmtree(self.tmp.parent, ignore_errors=True)
|
||||
|
||||
def _fake_modify(self, account_label, orig_ord_no, symbol, modify_qty, modify_price,
|
||||
routing_suffix='', dry_run=False, card_id=None, modify_cond_price=None):
|
||||
self.state['modify'].append({'orig': orig_ord_no, 'cond': modify_cond_price})
|
||||
new_no = f'N{len(self.state["modify"]):04d}'
|
||||
for row in self.state['open'].get(account_label, []):
|
||||
if row['ord_no'] == orig_ord_no:
|
||||
row['ord_no'] = new_no # 정정하면 키움이 새 주문번호를 발급한다
|
||||
return {'ok': True, 'new_ord_no': new_no}
|
||||
|
||||
def test_registered_shape(self):
|
||||
r = t.get(self.res['id'])
|
||||
self.assertEqual([s['cond_uv'] for s in r['steps']], [4950, 4400, 3850])
|
||||
self.assertEqual(sum(s['qty'] for s in r['steps']), 1943)
|
||||
|
||||
def test_price_drop_does_nothing(self):
|
||||
self.state['quote'] = 5200
|
||||
self.tm.check(force=True)
|
||||
self.assertEqual(self.state['modify'], [])
|
||||
self.assertEqual(t.get(self.res['id'])['peak'], 5500)
|
||||
self.assertEqual(self.sent, [])
|
||||
|
||||
def test_new_high_raises_every_leg_and_rotates_ord_no(self):
|
||||
self.state['quote'] = 6000
|
||||
self.tm.check(force=True)
|
||||
self.assertEqual([c['cond'] for c in self.state['modify']], [5400, 4800, 4200])
|
||||
r = t.get(self.res['id'])
|
||||
self.assertEqual(r['peak'], 6000)
|
||||
# ord_no 를 갱신하지 않으면 다음 정정이 전부 실패한다 — 최대 함정
|
||||
self.assertEqual([s['ord_no'] for s in r['steps']], ['N0001', 'N0002', 'N0003'])
|
||||
self.assertEqual([s['modify_count'] for s in r['steps']], [1, 1, 1])
|
||||
self.assertEqual(self.sent, []) # 상향은 조용히
|
||||
|
||||
def test_one_leg_fills_others_keep_watching(self):
|
||||
self.state['quote'] = 5500
|
||||
gone = self.state['open']['일반'].pop(0)
|
||||
self.state['execs'] = [{'ord_no': gone['ord_no'], 'cntr_qty': 389, 'cntr_uv': 4948}]
|
||||
self.tm.check(force=True)
|
||||
r = t.get(self.res['id'])
|
||||
self.assertEqual([s['n'] for s in r['steps']], [2, 3])
|
||||
self.assertEqual(len(self.sent), 1)
|
||||
self.assertIn('체결 389주', self.sent[0])
|
||||
self.assertIn('남은 계단 2개', self.sent[0])
|
||||
|
||||
def test_expiry_not_misread_as_fill(self):
|
||||
"""1단계가 체결된 날 나머지가 장 마감으로 소멸 — 종목 매도기록이 있어도 소멸로 갈려야 한다.
|
||||
(종목 단위 ka10170 으로 판정하면 여기서 '체결'로 오판한다.)"""
|
||||
self.state['quote'] = 5500
|
||||
self.state['execs'] = [{'ord_no': 'A0001', 'cntr_qty': 389, 'cntr_uv': 4948}]
|
||||
self.state['open']['일반'] = []
|
||||
self.tm.check(force=True)
|
||||
self.assertIsNone(t.get(self.res['id']))
|
||||
self.assertEqual(len(self.sent), 1) # 레그마다가 아니라 예약 단위 1건
|
||||
self.assertIn('미체결 소멸', self.sent[0])
|
||||
self.assertIn('다시 등록', self.sent[0])
|
||||
|
||||
def test_open_order_query_failure_preserves_reservation(self):
|
||||
"""조회 실패를 '사라짐'으로 단정하면 살아있는 예약을 지운다."""
|
||||
def boom(acct, side=None):
|
||||
raise RuntimeError('조회 실패')
|
||||
self.tm.kc.get_open_orders = boom
|
||||
self.tm.check(force=True)
|
||||
self.assertEqual(len(t.get(self.res['id'])['steps']), 3)
|
||||
self.assertEqual(self.sent, [])
|
||||
|
||||
|
||||
def _node_available() -> bool:
|
||||
return shutil.which('node') is not None
|
||||
|
||||
|
||||
@unittest.skipUnless(_node_available(), 'node 없음 — JS 대조 생략')
|
||||
class JsParityTests(unittest.TestCase):
|
||||
"""렌더된 페이지의 미리보기 계산 == 서버 발주 계산.
|
||||
|
||||
손으로 옮긴 사본이 아니라 실제 페이지에서 함수 소스를 뽑아 돌린다.
|
||||
어긋나면 관리자님이 화면에서 본 것과 다른 주문이 나간다.
|
||||
"""
|
||||
|
||||
@classmethod
|
||||
def setUpClass(cls):
|
||||
import behive_web
|
||||
cls.html = behive_web.render_html()
|
||||
|
||||
def _grab(self, name: str) -> str:
|
||||
i = self.html.index(f'function {name}(')
|
||||
depth, j, started = 0, i, False
|
||||
while j < len(self.html):
|
||||
if self.html[j] == '{':
|
||||
depth += 1
|
||||
started = True
|
||||
elif self.html[j] == '}':
|
||||
depth -= 1
|
||||
if started and depth == 0:
|
||||
return self.html[i:j + 1]
|
||||
j += 1
|
||||
raise AssertionError(f'{name} 추출 실패 — 함수명이 바뀌었나?')
|
||||
|
||||
def test_parity(self):
|
||||
src = '\n'.join(self._grab(f) for f in
|
||||
('tickSize', 'floorTick', 'trailCondPrice',
|
||||
'allocStepQty', 'trailWeights'))
|
||||
cond_cases = [{'peak': p, 'pct': c, 'floor': f}
|
||||
for p in (1000, 1943, 4805, 4870, 5500, 12345, 55500, 262500, 1718000)
|
||||
for c in (0.5, 1, 3, 5, 7.5, 10, 15, 20, 25, 30)
|
||||
for f in (0, 4500, 5000, 250000)]
|
||||
qty_cases = [{'total': q, 'w': w}
|
||||
for q in (1, 2, 3, 7, 19, 100, 218, 1395, 1943)
|
||||
for w in ([20, 30, 50], [30, 30, 40], [10, 20, 30, 40],
|
||||
[50, 50], [100], [30, 30])]
|
||||
cum_cases = [[20, 50, 100], [30, 70, 100], [25, 50, 100], [100]]
|
||||
|
||||
js = src + f'''
|
||||
const out = {{
|
||||
cond: {json.dumps(cond_cases)}.map(c => {{
|
||||
const r = trailCondPrice(c.peak, c.pct, c.floor); return [r.cond, r.floorApplied]; }}),
|
||||
qty: {json.dumps(qty_cases)}.map(c => allocStepQty(c.total, c.w)),
|
||||
cum: {json.dumps(cum_cases)}.map(cs => trailWeights(cs.map(x => ({{cum: x}})))),
|
||||
}};
|
||||
console.log(JSON.stringify(out));
|
||||
'''
|
||||
proc = subprocess.run([shutil.which('node'), '-e', js],
|
||||
capture_output=True, text=True)
|
||||
self.assertEqual(proc.returncode, 0, proc.stderr)
|
||||
got = json.loads(proc.stdout)
|
||||
|
||||
for c, (jcond, jfloor) in zip(cond_cases, got['cond']):
|
||||
lv = t.compute_levels(c['peak'], c['pct'], c['floor'] or None)
|
||||
self.assertEqual((lv['cond_uv'], bool(lv['floor_applied'])),
|
||||
(jcond, bool(jfloor)),
|
||||
f"손절선 peak={c['peak']} pct={c['pct']} floor={c['floor']}")
|
||||
for c, jq in zip(qty_cases, got['qty']):
|
||||
self.assertEqual(t.allocate_step_qty(c['total'], c['w']), jq,
|
||||
f"수량배분 total={c['total']} w={c['w']}")
|
||||
for cums, jw in zip(cum_cases, got['cum']):
|
||||
raw = [{'pct': (i + 1) * 3, 'cum': v} for i, v in enumerate(cums)]
|
||||
self.assertEqual([s['weight'] for s in t.normalize_steps(raw)], jw,
|
||||
f'비중환산 {cums}')
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.path.insert(0, str(Path(__file__).resolve().parents[2]))
|
||||
unittest.main(verbosity=2)
|
||||
@@ -1,13 +1,24 @@
|
||||
"""트레일링 스톱 예약 상태 관리.
|
||||
"""트레일링 스톱 예약 상태 관리 (계단식 분할 매도).
|
||||
|
||||
키움에 REST 트레일링 주문 TR 이 없어서, 스톱지정가(trde_tp=28) 주문을 실제로 걸어두고
|
||||
고점이 갱신될 때마다 조건단가를 kt10002 정정으로 올려 트레일링을 구현한다.
|
||||
|
||||
주문이 키움 서버에 있으므로 감시 루프가 죽어도 마지막 손절선은 살아있다.
|
||||
**예약 1건 = 계단(레그) N개 = 키움 스톱주문 N건.** 고점 대비 하락률이 깊어질수록 더 많이
|
||||
파는 계단식 청산이다 (예: −10% 20% / −20% 50% / −30% 전량). 계단별로 수량과 조건단가가
|
||||
다른 스톱주문을 동시에 걸어두고, 고점이 오르면 살아있는 레그를 전부 상향 정정한다.
|
||||
|
||||
주문이 키움 서버에 있으므로 감시 루프가 죽어도 계단별 손절선은 살아있다.
|
||||
감시 루프가 하는 일은 "이미 승인된 주문의 조건단가 상향"뿐 — 신규 발주·수량 변경 없음.
|
||||
|
||||
⚠️ 계단 비중은 관리자님이 **누적**으로 입력하고(20/50/100 = 전량), 내부에는 계단별
|
||||
**추가분**(20/30/50)으로 환산해 저장한다. 주문 수량이 곧 추가분이기 때문이다.
|
||||
|
||||
⚠️ 한 계단이 체결된 뒤 반등해 신고점을 찍어도 **남은 계단만 새 고점 기준으로 따라 올린다**.
|
||||
남은 수량을 계단 비율대로 재배치하려면 기존 주문 취소 + 신규 발주가 필요한데, 그러면
|
||||
감시 루프에 자동 발주 경로가 생긴다(매매 자동 트리거 금지). 2026-07-31 관리자님 결정.
|
||||
|
||||
⚠️ kt10002 정정 응답의 ord_no 는 신규 주문번호다. 정정할 때마다 ord_no 를 갱신하지 않으면
|
||||
두 번째 정정부터 orig_ord_no 가 틀려서 전부 실패한다. commit_modify 가 이걸 담당.
|
||||
두 번째 정정부터 orig_ord_no 가 틀려서 전부 실패한다. commit_step_modify 가 이걸 담당.
|
||||
|
||||
상태는 파일(state/trailing_stops.json)에 저장 — 웹·감시 루프가 각각 다른 프로세스라
|
||||
같은 예약 목록을 봐야 한다. 동시성은 fcntl flock 으로 직렬화 (pin.py 와 같은 패턴).
|
||||
@@ -42,6 +53,10 @@ MAX_TRAIL_PCT = 30.0
|
||||
# 반대로 너무 벌리면 급락 시 헐값 매도가 되니 2틱.
|
||||
ORD_UV_GAP_TICKS = 2
|
||||
|
||||
# 계단 개수 상한. 고점이 오를 때마다 살아있는 레그를 전부 정정하므로 정정 콜이 계단 수에
|
||||
# 비례한다 (예약 3건 × 5계단 = 분당 15콜). 키움 rate limit 여유를 보고 5로 둔다.
|
||||
MAX_STEPS = 5
|
||||
|
||||
|
||||
def _now_iso() -> str:
|
||||
return datetime.now(KST).isoformat(timespec='seconds')
|
||||
@@ -67,7 +82,10 @@ def compute_levels(peak: int, trail_pct: float, min_sell_price: Optional[int] =
|
||||
raise ValueError(f'peak must be > 0 (got {peak})')
|
||||
if not (MIN_TRAIL_PCT <= trail_pct <= MAX_TRAIL_PCT):
|
||||
raise ValueError(f'trail_pct out of range: {trail_pct}')
|
||||
cond_uv = floor_to_tick(int(peak * (1 - trail_pct / 100)))
|
||||
# round(_, 6) 은 부동소수점 잡음만 걷어낸다 — 5500×(1−30/100) 이 3849.9999999999995 로
|
||||
# 나오는 탓에 int() 가 3849 로 깎고 호가단위 내림이 3845 까지 끌어내리던 버그가 있었다
|
||||
# (의도는 3850). 잡음을 없앤 뒤 내림하므로 "정확히 그 폭 아래" 성격은 그대로다.
|
||||
cond_uv = floor_to_tick(int(round(peak * (1 - trail_pct / 100), 6)))
|
||||
floor_applied = False
|
||||
if min_sell_price:
|
||||
if min_sell_price <= 0:
|
||||
@@ -82,21 +100,96 @@ def compute_levels(peak: int, trail_pct: float, min_sell_price: Optional[int] =
|
||||
return {'cond_uv': cond_uv, 'ord_uv': ord_uv, 'floor_applied': floor_applied}
|
||||
|
||||
|
||||
def next_levels(res: dict, cur_price: int) -> Optional[dict]:
|
||||
"""현재가를 보고 올릴 값이 있으면 반환, 없으면 None (순수 함수 — 단위테스트 대상).
|
||||
def normalize_steps(raw: list) -> list:
|
||||
"""입력한 계단 정의(누적 비중)를 내부 표현(추가 비중)으로 환산·검증한다.
|
||||
|
||||
상향 전용: 고점이 갱신되고 그 결과 조건단가가 실제로 올라갈 때만 정정 대상.
|
||||
고점이 올라도 호가단위 내림 때문에 조건단가가 그대로면 정정하지 않는다(불필요한 API 콜 차단).
|
||||
최저 매도가가 아직 지배 중이면 트레일 손절선이 올라도 조건단가가 안 변해 None 이 된다.
|
||||
입력 [{'pct': 10, 'cum': 20}, {'pct': 20, 'cum': 50}, {'pct': 30, 'cum': 100}]
|
||||
출력 [{'n': 1, 'pct': 10.0, 'cum': 20.0, 'weight': 20.0}, ... weight 30, 50]
|
||||
|
||||
cum(누적 비중)은 "이 하락률에 닿았을 때 최초 보유의 몇 %가 팔려 있어야 하는가"다.
|
||||
주문 수량은 계단마다의 추가분이므로 weight = cum − 직전 cum 으로 환산한다.
|
||||
|
||||
마지막 cum 이 100 미만이어도 허용한다(일부만 계단 청산하고 나머지는 계속 보유).
|
||||
남는 수량은 스톱이 걸리지 않으므로 호출측이 화면에 표시해 준다.
|
||||
"""
|
||||
if cur_price <= 0:
|
||||
if not raw:
|
||||
raise ValueError('계단이 비어 있음')
|
||||
if len(raw) > MAX_STEPS:
|
||||
raise ValueError(f'계단은 최대 {MAX_STEPS}개 (입력 {len(raw)}개)')
|
||||
steps = []
|
||||
prev_pct = 0.0
|
||||
prev_cum = 0.0
|
||||
for i, s in enumerate(raw, start=1):
|
||||
pct = float(s['pct'])
|
||||
cum = float(s['cum'])
|
||||
if not (MIN_TRAIL_PCT <= pct <= MAX_TRAIL_PCT):
|
||||
raise ValueError(f'{i}단계 하락률 {pct}% 는 {MIN_TRAIL_PCT}~{MAX_TRAIL_PCT}% 범위를 벗어남')
|
||||
if pct <= prev_pct:
|
||||
raise ValueError(f'{i}단계 하락률 {pct}% 가 앞 계단({prev_pct}%)보다 깊지 않음')
|
||||
if cum <= prev_cum:
|
||||
raise ValueError(f'{i}단계 누적 비중 {cum}% 가 앞 계단({prev_cum}%)보다 크지 않음')
|
||||
if cum > 100:
|
||||
raise ValueError(f'{i}단계 누적 비중 {cum}% 가 100% 를 넘음')
|
||||
steps.append({'n': i, 'pct': pct, 'cum': cum, 'weight': cum - prev_cum})
|
||||
prev_pct, prev_cum = pct, cum
|
||||
return steps
|
||||
|
||||
|
||||
def allocate_step_qty(total_qty: int, weights: list) -> list:
|
||||
"""계단별 추가 비중(%) → 정수 주수. 최대잔여법(Hare quota).
|
||||
|
||||
내림으로 나눈 뒤 남는 주를 소수부가 큰 계단부터 1주씩 배분한다.
|
||||
"내림 후 마지막 계단에 몰아주기" 보다 얕은 계단이 0주로 죽는 일이 적다
|
||||
(2주 · 20/30/50 → 최대잔여 [0,1,1] 2계단 생존 / 몰아주기 [0,0,2] 1계단).
|
||||
|
||||
수량이 적어 0주가 되는 계단은 그대로 0 을 반환한다 — 발주할 수 없으므로
|
||||
호출측이 걸러내고 "몇 계단으로 줄었는지" 를 사용자에게 알린다.
|
||||
"""
|
||||
if total_qty <= 0 or not weights:
|
||||
return [0] * len(weights)
|
||||
exact = [total_qty * w / 100.0 for w in weights]
|
||||
base = [int(x) for x in exact]
|
||||
remain = int(round(sum(exact))) - sum(base)
|
||||
order = sorted(range(len(weights)), key=lambda i: exact[i] - base[i], reverse=True)
|
||||
for i in order[:max(0, remain)]:
|
||||
base[i] += 1
|
||||
return base
|
||||
|
||||
|
||||
def compute_step_levels(peak: int, steps: list, min_sell_price: Optional[int] = None) -> list:
|
||||
"""고점 + 계단 정의 → 계단별 조건단가·지정가.
|
||||
|
||||
최저 매도가는 모든 계단에 같은 하한으로 걸린다. 그래서 초기에는 여러 계단이 같은
|
||||
가격으로 뭉칠 수 있다(전부 최저 매도가). 그래도 주문을 병합하지 않는 이유는, 고점이
|
||||
올라 트레일 손절선이 최저 매도가를 추월하면 각 계단이 제 하락률대로 다시 벌어지기
|
||||
때문이다 — 병합해 버리면 정정만으로는 다시 쪼갤 수 없다(신규 발주가 필요해진다).
|
||||
"""
|
||||
out = []
|
||||
for s in steps:
|
||||
lv = compute_levels(peak, s['pct'], min_sell_price)
|
||||
out.append({**s, 'cond_uv': lv['cond_uv'], 'ord_uv': lv['ord_uv'],
|
||||
'floor_applied': lv['floor_applied']})
|
||||
return out
|
||||
|
||||
|
||||
def next_step_levels(res: dict, cur_price: int) -> Optional[dict]:
|
||||
"""현재가가 고점을 넘었으면 새 고점과 상향 대상 레그를 반환 (순수 함수 — 단위테스트 대상).
|
||||
|
||||
반환 {'peak': 새 고점, 'steps': [{'n', 'cond_uv', 'ord_uv'}, ...]}.
|
||||
고점이 안 올랐으면 None.
|
||||
|
||||
steps 가 빈 리스트일 수 있다 — 고점은 올랐지만 호가단위 내림이나 최저 매도가 지배로
|
||||
조건단가가 하나도 안 올라간 경우다. 이때 호출측은 정정 API 없이 고점만 갱신한다
|
||||
(불필요한 콜 0, 화면의 고점 표시는 정확하게 유지).
|
||||
"""
|
||||
if cur_price <= 0 or cur_price <= res['peak']:
|
||||
return None
|
||||
if cur_price <= res['peak']:
|
||||
return None
|
||||
lv = compute_levels(cur_price, res['trail_pct'], res.get('min_sell_price'))
|
||||
if lv['cond_uv'] <= res['cond_uv']:
|
||||
return None
|
||||
return {'peak': cur_price, 'cond_uv': lv['cond_uv'], 'ord_uv': lv['ord_uv']}
|
||||
ups = []
|
||||
for s in res.get('steps') or []:
|
||||
lv = compute_levels(cur_price, s['pct'], res.get('min_sell_price'))
|
||||
if lv['cond_uv'] > s['cond_uv']:
|
||||
ups.append({'n': s['n'], 'cond_uv': lv['cond_uv'], 'ord_uv': lv['ord_uv']})
|
||||
return {'peak': cur_price, 'steps': ups}
|
||||
|
||||
|
||||
class _FileLock:
|
||||
@@ -158,36 +251,43 @@ def find_by_symbol(account: str, symbol: str) -> Optional[dict]:
|
||||
return None
|
||||
|
||||
|
||||
def register(ord_no: str, account: str, symbol: str, symbol_name: str, qty: int,
|
||||
trail_pct: float, peak: int, cond_uv: int, ord_uv: int,
|
||||
routing_suffix: str = '', card_id: Optional[str] = None,
|
||||
min_sell_price: Optional[int] = None) -> dict:
|
||||
"""키움에 스톱주문이 접수된 직후 호출 — ord_no 를 받아 예약으로 등록.
|
||||
def register_steps(account: str, symbol: str, symbol_name: str, total_qty: int,
|
||||
peak: int, steps: list, routing_suffix: str = '',
|
||||
card_id: Optional[str] = None,
|
||||
min_sell_price: Optional[int] = None) -> dict:
|
||||
"""키움에 계단별 스톱주문이 접수된 직후 호출 — 레그 목록을 예약 1건으로 등록.
|
||||
|
||||
steps 각 항목은 접수 결과까지 채워져 있어야 한다:
|
||||
{'n', 'pct', 'cum', 'weight', 'qty', 'ord_no', 'cond_uv', 'ord_uv'}
|
||||
|
||||
접수에 실패한 레그는 호출측이 빼고 넘긴다 — 여기 등록된 것은 전부 키움에 살아있는
|
||||
주문이어야 감시 루프의 생존 판정이 성립한다.
|
||||
|
||||
초기 고점(peak)은 등록 시점 현재가다. 과거 고점(52주·매수후) 기준 옵션은 손절선이
|
||||
현재가 위로 올라가 즉시 발동하는 구조라 2026-07-30 제거됐다.
|
||||
"""
|
||||
if not ord_no:
|
||||
raise ValueError('ord_no required — 접수 확인된 주문만 등록')
|
||||
if not steps:
|
||||
raise ValueError('등록할 계단이 없음 — 접수 성공한 레그가 하나도 없다')
|
||||
for s in steps:
|
||||
if not s.get('ord_no'):
|
||||
raise ValueError(f'{s.get("n")}단계 ord_no 없음 — 접수 확인된 주문만 등록')
|
||||
res = {
|
||||
'id': 'TRL-' + ''.join(secrets.choice('ABCDEFGHJKLMNPQRSTUVWXYZ23456789') for _ in range(4)),
|
||||
'ord_no': ord_no,
|
||||
'account': account,
|
||||
'symbol': symbol,
|
||||
'symbol_name': symbol_name,
|
||||
'qty': qty,
|
||||
'trail_pct': trail_pct,
|
||||
'qty': total_qty,
|
||||
'min_sell_price': min_sell_price,
|
||||
'peak': peak,
|
||||
'cond_uv': cond_uv,
|
||||
'ord_uv': ord_uv,
|
||||
'steps': [{'n': s['n'], 'pct': s['pct'], 'cum': s['cum'], 'weight': s['weight'],
|
||||
'qty': s['qty'], 'ord_no': s['ord_no'],
|
||||
'cond_uv': s['cond_uv'], 'ord_uv': s['ord_uv'],
|
||||
'entry_cond_uv': s['cond_uv'], 'modify_count': 0} for s in steps],
|
||||
'routing_suffix': routing_suffix,
|
||||
'card_id': card_id,
|
||||
'created_at': _now_iso(),
|
||||
'updated_at': _now_iso(),
|
||||
'modify_count': 0,
|
||||
'entry_peak': peak,
|
||||
'entry_cond_uv': cond_uv,
|
||||
}
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
@@ -196,25 +296,75 @@ def register(ord_no: str, account: str, symbol: str, symbol_name: str, qty: int,
|
||||
return res
|
||||
|
||||
|
||||
def commit_modify(res_id: str, new_ord_no: str, peak: int, cond_uv: int, ord_uv: int) -> Optional[dict]:
|
||||
"""정정 성공 후 상태 갱신. new_ord_no 는 kt10002 응답의 신규 주문번호.
|
||||
def commit_peak(res_id: str, peak: int) -> Optional[dict]:
|
||||
"""고점만 갱신 (정정할 레그가 없었던 경우). 화면의 고점 표시를 정확하게 유지한다."""
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for r in reservations:
|
||||
if r['id'] == res_id:
|
||||
r['peak'] = peak
|
||||
r['updated_at'] = _now_iso()
|
||||
_write(reservations)
|
||||
return r
|
||||
return None
|
||||
|
||||
⚠️ ord_no 갱신이 이 함수의 핵심 — 안 하면 다음 정정이 실패한다.
|
||||
|
||||
def commit_step_modify(res_id: str, step_n: int, new_ord_no: str, peak: int,
|
||||
cond_uv: int, ord_uv: int) -> Optional[dict]:
|
||||
"""레그 정정 성공 후 상태 갱신. new_ord_no 는 kt10002 응답의 신규 주문번호.
|
||||
|
||||
⚠️ ord_no 갱신이 이 함수의 핵심 — 안 하면 그 레그의 다음 정정이 전부 실패한다.
|
||||
고점은 예약 단위라 레그마다 같은 값으로 덮어써도 무해하다.
|
||||
"""
|
||||
if not new_ord_no:
|
||||
raise ValueError('new_ord_no required')
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for r in reservations:
|
||||
if r['id'] == res_id:
|
||||
r['ord_no'] = new_ord_no
|
||||
if r['id'] != res_id:
|
||||
continue
|
||||
for s in r.get('steps') or []:
|
||||
if s['n'] != step_n:
|
||||
continue
|
||||
s['ord_no'] = new_ord_no
|
||||
s['cond_uv'] = cond_uv
|
||||
s['ord_uv'] = ord_uv
|
||||
s['modify_count'] = s.get('modify_count', 0) + 1
|
||||
r['peak'] = peak
|
||||
r['cond_uv'] = cond_uv
|
||||
r['ord_uv'] = ord_uv
|
||||
r['modify_count'] = r.get('modify_count', 0) + 1
|
||||
r['updated_at'] = _now_iso()
|
||||
_write(reservations)
|
||||
return r
|
||||
return None
|
||||
return None
|
||||
|
||||
|
||||
def remove_step(res_id: str, step_n: int, reason: str = '') -> Optional[dict]:
|
||||
"""레그 하나를 예약에서 제거 (체결·취소·소멸). 마지막 레그면 예약 자체를 지운다.
|
||||
|
||||
반환 {'step': 제거된 레그, 'reservation': 예약 스냅샷, 'remaining': 남은 레그 수,
|
||||
'reservation_removed': bool} — 알림 메시지 조립용.
|
||||
"""
|
||||
with _FileLock(_LOCK_FILE):
|
||||
reservations = _read()
|
||||
for i, r in enumerate(reservations):
|
||||
if r['id'] != res_id:
|
||||
continue
|
||||
steps = r.get('steps') or []
|
||||
hit = next((s for s in steps if s['n'] == step_n), None)
|
||||
if hit is None:
|
||||
return None
|
||||
steps.remove(hit)
|
||||
hit['removed_reason'] = reason
|
||||
snapshot = json.loads(json.dumps(r))
|
||||
if not steps:
|
||||
reservations.pop(i)
|
||||
_write(reservations)
|
||||
return {'step': hit, 'reservation': snapshot, 'remaining': 0,
|
||||
'reservation_removed': True}
|
||||
r['updated_at'] = _now_iso()
|
||||
_write(reservations)
|
||||
return {'step': hit, 'reservation': snapshot, 'remaining': len(steps),
|
||||
'reservation_removed': False}
|
||||
return None
|
||||
|
||||
|
||||
|
||||
@@ -1,15 +1,24 @@
|
||||
#!/usr/bin/env python3
|
||||
"""트레일링 스톱 감시 — 고점이 갱신되면 키움 스톱주문의 조건단가를 상향 정정한다.
|
||||
|
||||
**예약 1건 = 계단(레그) N개.** 고점 대비 하락률이 깊어질수록 더 많이 파는 계단식 청산이라
|
||||
계단마다 스톱주문이 따로 걸려 있다. 고점이 오르면 살아있는 레그를 전부 상향 정정한다.
|
||||
|
||||
LLM을 깨우지 않는다. 하는 일은 딱 두 가지:
|
||||
1. 예약이 아직 미체결로 살아있는지 확인 (ka10075) — 사라졌으면 체결·취소로 보고 정리+알림
|
||||
2. 현재가가 저장된 고점을 넘었으면 kt10002 정정으로 조건단가·지정가를 함께 올림
|
||||
1. 레그가 아직 미체결로 살아있는지 확인 (ka10075) — 사라졌으면 정리+알림
|
||||
2. 현재가가 저장된 고점을 넘었으면 kt10002 정정으로 계단별 조건단가·지정가를 함께 올림
|
||||
|
||||
신규 발주·수량 변경·방향 변경은 하지 않는다. 사람이 PIN으로 승인한 주문의
|
||||
조건단가를 올리는 것뿐이고, 상향 전용이라 손절선이 내려가는 일은 없다.
|
||||
한 계단이 체결돼도 남은 계단을 재배치하지 않는다 — 재배치엔 취소+신규 발주가 필요해
|
||||
감시 루프에 자동 발주 경로가 생긴다(2026-07-31 관리자님 결정).
|
||||
|
||||
⚠️ 정정하면 주문번호가 새로 발급된다 (kt10002 응답 ord_no). trailing.commit_modify 가
|
||||
상태파일의 ord_no 를 갱신하지 않으면 다음 정정부터 전부 실패한다.
|
||||
⚠️ 레그가 사라진 사유는 **주문번호 단위**인 kt00007 로 판정한다. 종목 단위 집계인
|
||||
당일매매일지(ka10170)를 쓰면 한 계단이 체결된 날 나머지 계단이 장 마감으로 소멸했을 때
|
||||
그 소멸분까지 '체결' 로 오판한다 — 같은 종목 매도 기록이 이미 남아 있기 때문이다.
|
||||
|
||||
⚠️ 정정하면 주문번호가 새로 발급된다 (kt10002 응답 ord_no). trailing.commit_step_modify 가
|
||||
상태파일의 레그별 ord_no 를 갱신하지 않으면 그 레그의 다음 정정부터 전부 실패한다.
|
||||
|
||||
⚠️ 고점은 '현재가' 로만 갱신한다. ka10095 가 당일 고가(high)도 주지만, 등록 시점 이전에
|
||||
찍힌 고가까지 반영되면 등록 직후 손절선이 현재가 위로 올라가 즉시 발동할 수 있다.
|
||||
@@ -78,66 +87,95 @@ def session_now() -> tuple[bool, str]:
|
||||
return sess != 'CLOSED', sess
|
||||
|
||||
|
||||
def _fill_check(account: str, symbol: str) -> tuple:
|
||||
"""예약이 사라진 사유 판정용 — 당일매매일지(ka10170)에서 그 종목 매도 기록을 찾는다.
|
||||
def _pct_s(v) -> str:
|
||||
"""10.0 → '10' — 계단 하락률 표기."""
|
||||
return f'{float(v or 0):g}'
|
||||
|
||||
|
||||
def _leg_fill_check(account: str, ord_no: str, cache: dict) -> tuple:
|
||||
"""레그가 사라진 사유 판정 — kt00007 에서 **그 주문번호의** 체결수량을 본다.
|
||||
|
||||
⚠️ 미체결 조회에서 사라진 것만으로는 체결·취소·소멸을 구분할 수 없다(셋 다 목록에서 빠짐).
|
||||
당일매매일지에 매도 기록이 없으면 **체결 안 된 것이 확정**이다.
|
||||
있으면 트레일링 발동분인지 관리자님 수동 매도인지는 구분할 수 없어 '체결로 보임'까지만 말한다.
|
||||
종목 단위인 당일매매일지(ka10170)로 판정하면 계단 하나가 체결된 날 나머지 계단이
|
||||
장 마감으로 소멸했을 때 그 소멸분까지 '체결' 로 오판한다 — 같은 종목의 매도 기록이
|
||||
이미 남아 있기 때문이다. 주문번호 단위인 kt00007 은 레그마다 정확히 갈린다.
|
||||
|
||||
반환: (매도기록 dict 또는 None, 조회 성공 여부).
|
||||
조회 실패와 '기록 없음'을 반드시 구분해야 한다 — 실패를 '체결 안 됨'으로 단정하면
|
||||
반환: (체결행 dict 또는 None, 조회 성공 여부).
|
||||
조회 실패와 '체결 안 됨' 을 반드시 구분해야 한다 — 실패를 '체결 안 됨' 으로 단정하면
|
||||
실제로 팔렸는데 안 팔렸다고 알리게 된다.
|
||||
"""
|
||||
try:
|
||||
rows = kc.get_trade_journal(account)
|
||||
except Exception as e:
|
||||
_log(f'당일매매일지 조회 실패 ({account}/{symbol}): {e!r}')
|
||||
if account not in cache:
|
||||
try:
|
||||
cache[account] = kc.get_order_executions(account)
|
||||
except Exception as e:
|
||||
_log(f'주문체결내역 조회 실패 ({account}): {e!r}')
|
||||
cache[account] = None
|
||||
rows = cache[account]
|
||||
if rows is None:
|
||||
return None, False
|
||||
for row in rows:
|
||||
if row.get('code') == symbol and (row.get('sell_qty') or 0) > 0:
|
||||
if (row.get('ord_no') or '').strip() == ord_no and (row.get('cntr_qty') or 0) > 0:
|
||||
return row, True
|
||||
return None, True
|
||||
|
||||
|
||||
def _notify_gone(res: dict, sold, journal_ok: bool) -> None:
|
||||
"""예약이 미체결 목록에서 사라짐 — 사유를 구분해 알린다.
|
||||
def _notify_gone_batch(events: list) -> None:
|
||||
"""한 사이클에 사라진 레그들을 예약 단위로 묶어 한 번만 알린다.
|
||||
|
||||
장 마감이면 계단이 통째로 소멸하는데 레그마다 보내면 3~5통이 몰아친다.
|
||||
체결 / 미체결 소멸(장 마감 취소 등)은 관리자님이 취해야 할 행동이 완전히 다르므로
|
||||
계단별로 구분해 한 메시지 안에 나열한다.
|
||||
|
||||
체결 / 미체결 소멸(장 마감 취소 등)은 관리자님이 취해야 할 행동이 완전히 다르다.
|
||||
2026-07-30 실측: 스톱주문은 장 마감 후 체결 없이 소멸한다(15:30~18:21 사이).
|
||||
자동 재등록은 하지 않는다(관리자님 지시) — 다시 걸려면 자산웹에서 수동 등록.
|
||||
"""
|
||||
floor_part = ''
|
||||
if res.get('min_sell_price'):
|
||||
floor_part = f' · 최저 매도가 {res["min_sell_price"]:,}원'
|
||||
head_lines = [
|
||||
f'계좌: {res["account"]} · {res["qty"]:,}주',
|
||||
f'마지막 손절선: {res["cond_uv"]:,}원 '
|
||||
f'(고점 {res["peak"]:,}원 대비 −{res["trail_pct"]}%){floor_part}',
|
||||
f'손절선 상향 {res.get("modify_count", 0)}회',
|
||||
]
|
||||
if sold:
|
||||
title = f'✅ 트레일링 스톱 체결 — {res["symbol_name"]} ({res["symbol"]})'
|
||||
tail = [f'당일 매도 {sold["sell_qty"]:,}주 @ 평균 {sold.get("sell_avg", 0):,}원',
|
||||
f'실현손익 {sold.get("pl_amt", 0):,}원 (수수료·세금 차감)',
|
||||
'※ 같은 종목을 직접 매도하신 경우 그 기록일 수도 있습니다.']
|
||||
elif journal_ok:
|
||||
title = f'⚠️ 트레일링 스톱 소멸 — {res["symbol_name"]} ({res["symbol"]})'
|
||||
tail = ['체결되지 않았습니다 — 당일 매도 기록 없음, 보유수량 그대로입니다.',
|
||||
'장 마감으로 스톱주문이 취소된 것으로 보입니다.',
|
||||
'계속 쓰시려면 자산웹에서 다시 등록해주세요 (자동 재등록 안 함).']
|
||||
else:
|
||||
title = f'🎯 트레일링 스톱 종료 — {res["symbol_name"]} ({res["symbol"]})'
|
||||
tail = ['미체결 목록에서 사라졌습니다.',
|
||||
'당일매매일지 조회가 안 돼 체결 여부를 판정하지 못했습니다 — 확인해주세요.']
|
||||
send_telegram('\n'.join([title] + head_lines + tail), parse_mode=None)
|
||||
by_res: dict = {}
|
||||
for ev in events:
|
||||
by_res.setdefault(ev['res']['id'], []).append(ev)
|
||||
|
||||
for evs in by_res.values():
|
||||
res = evs[0]['res']
|
||||
remaining = min(e['remaining'] for e in evs)
|
||||
any_filled = any(e['filled'] for e in evs)
|
||||
unknown = any(not e['ok'] for e in evs)
|
||||
if any_filled:
|
||||
icon = '✅'
|
||||
word = '체결'
|
||||
elif unknown:
|
||||
icon = '🎯'
|
||||
word = '종료'
|
||||
else:
|
||||
icon = '⚠️'
|
||||
word = '소멸'
|
||||
lines = [f'{icon} 트레일링 {word} — {res["symbol_name"]} ({res["symbol"]})',
|
||||
f'계좌: {res["account"]} · 고점 {res["peak"]:,}원']
|
||||
if res.get('min_sell_price'):
|
||||
lines.append(f'최저 매도가 {res["min_sell_price"]:,}원')
|
||||
for ev in sorted(evs, key=lambda e: e['step']['n']):
|
||||
s = ev['step']
|
||||
head = (f'{s["n"]}단계 −{_pct_s(s["pct"])}% {s["cond_uv"]:,}원 · {s["qty"]:,}주')
|
||||
if ev['filled']:
|
||||
f = ev['filled']
|
||||
lines.append(f' ✅ {head} → 체결 {f.get("cntr_qty", 0):,}주 '
|
||||
f'@ {f.get("cntr_uv", 0):,}원')
|
||||
elif ev['ok']:
|
||||
lines.append(f' ⚠️ {head} → 미체결 소멸 (보유수량 그대로)')
|
||||
else:
|
||||
lines.append(f' 🎯 {head} → 체결 여부 판정 불가 (체결내역 조회 실패)')
|
||||
if remaining > 0:
|
||||
lines.append(f'남은 계단 {remaining}개 — 감시 계속합니다.')
|
||||
else:
|
||||
lines.append('남은 계단 없음 — 계속 쓰시려면 자산웹에서 다시 등록해주세요 '
|
||||
'(자동 재등록 안 함).')
|
||||
send_telegram('\n'.join(lines), parse_mode=None)
|
||||
|
||||
|
||||
def _notify_modify_failed(res: dict, reason: str) -> None:
|
||||
def _notify_modify_failed(res: dict, step: dict, reason: str) -> None:
|
||||
send_telegram(
|
||||
f'⚠️ 트레일링 손절선 상향 실패 — {res["symbol_name"]} ({res["symbol"]})\n'
|
||||
f'계좌: {res["account"]} · 주문번호 {res["ord_no"]}\n'
|
||||
f'현재 손절선 {res["cond_uv"]:,}원은 그대로 유지됩니다.\n'
|
||||
f'계좌: {res["account"]} · {step["n"]}단계 −{_pct_s(step["pct"])}% '
|
||||
f'· 주문번호 {step["ord_no"]}\n'
|
||||
f'현재 손절선 {step["cond_uv"]:,}원은 그대로 유지됩니다.\n'
|
||||
f'사유: {reason}',
|
||||
parse_mode=None)
|
||||
|
||||
@@ -171,30 +209,42 @@ def check(force: bool = False, dry_run: bool = False) -> int:
|
||||
_log(f'미체결 조회 실패 [{acct}]: {e!r}')
|
||||
open_by_acct[acct] = None
|
||||
|
||||
# 레그가 사라질 때만 kt00007 을 계좌당 1콜 추가로 부른다 (평시엔 호출 안 함).
|
||||
exec_cache: dict = {}
|
||||
gone_events = []
|
||||
|
||||
alive = []
|
||||
for r in reservations:
|
||||
rows = open_by_acct.get(r['account'])
|
||||
if rows is None:
|
||||
continue # 조회 실패 계좌 — 이번 사이클 판단 보류
|
||||
row = next((x for x in rows if x['ord_no'] == r['ord_no']), None)
|
||||
if row is None:
|
||||
gone = trailing.remove(r['id'], 'not_in_open_orders')
|
||||
# 사유 판정 — 예약이 사라질 때만 ka10170 1콜 추가(평시엔 호출 안 함).
|
||||
sold, journal_ok = _fill_check(r['account'], r['symbol'])
|
||||
if sold:
|
||||
why = f'체결 (당일 매도 {sold["sell_qty"]:,}주 @ {sold.get("sell_avg", 0):,})'
|
||||
elif journal_ok:
|
||||
why = '미체결 소멸 (당일 매도 기록 없음 — 장 마감 취소 추정)'
|
||||
live_steps = []
|
||||
for s in list(r.get('steps') or []):
|
||||
row = next((x for x in rows if x['ord_no'] == s['ord_no']), None)
|
||||
if row is not None:
|
||||
live_steps.append((s, row))
|
||||
continue
|
||||
filled, exec_ok = _leg_fill_check(r['account'], s['ord_no'], exec_cache)
|
||||
gone = trailing.remove_step(r['id'], s['n'], 'not_in_open_orders')
|
||||
if filled:
|
||||
why = f'체결 {filled.get("cntr_qty", 0):,}주 @ {filled.get("cntr_uv", 0):,}'
|
||||
elif exec_ok:
|
||||
why = '미체결 소멸 (체결수량 0 — 장 마감 취소 추정)'
|
||||
else:
|
||||
why = '사유 판정 불가 (당일매매일지 조회 실패)'
|
||||
_log(f'예약 종료 {r["id"]} {r["symbol_name"]} — {why}')
|
||||
if gone and not dry_run:
|
||||
try:
|
||||
_notify_gone(gone, sold, journal_ok)
|
||||
except Exception as e:
|
||||
_log(f'알림 실패: {e!r}')
|
||||
continue
|
||||
alive.append((r, row))
|
||||
why = '사유 판정 불가 (주문체결내역 조회 실패)'
|
||||
_log(f'레그 종료 {r["id"]}/{s["n"]}단계 {r["symbol_name"]} — {why}')
|
||||
if gone:
|
||||
gone_events.append({'res': gone['reservation'], 'step': gone['step'],
|
||||
'filled': filled, 'ok': exec_ok,
|
||||
'remaining': gone['remaining']})
|
||||
if live_steps:
|
||||
alive.append((r, live_steps))
|
||||
|
||||
if gone_events and not dry_run:
|
||||
try:
|
||||
_notify_gone_batch(gone_events)
|
||||
except Exception as e:
|
||||
_log(f'알림 실패: {e!r}')
|
||||
|
||||
if not alive:
|
||||
return 0
|
||||
@@ -206,68 +256,82 @@ def check(force: bool = False, dry_run: bool = False) -> int:
|
||||
return 1
|
||||
|
||||
raised = 0
|
||||
for r, row in alive:
|
||||
for r, live_steps in alive:
|
||||
cur = (quotes.get(r['symbol']) or {}).get('price') or 0
|
||||
levels = trailing.next_levels(r, cur)
|
||||
if not levels:
|
||||
# 살아있는 레그만 담은 스냅샷으로 판단 — 이미 빠진 계단은 따라 올릴 대상이 아니다.
|
||||
snap = {'peak': r['peak'], 'min_sell_price': r.get('min_sell_price'),
|
||||
'steps': [s for s, _ in live_steps]}
|
||||
nx = trailing.next_step_levels(snap, cur)
|
||||
if not nx:
|
||||
continue
|
||||
# 미체결 잔량으로 정정 — 부분체결됐으면 잔량만 남는다 (저장된 qty 는 최초 주문수량).
|
||||
qty = row.get('unfilled_qty') or r['qty']
|
||||
try:
|
||||
res = kiwoom_order.modify_order(
|
||||
account_label=r['account'],
|
||||
orig_ord_no=r['ord_no'],
|
||||
symbol=r['symbol'],
|
||||
modify_qty=qty,
|
||||
modify_price=levels['ord_uv'],
|
||||
routing_suffix=row.get('routing_suffix', ''),
|
||||
dry_run=dry_run,
|
||||
card_id=r.get('card_id'),
|
||||
modify_cond_price=levels['cond_uv'],
|
||||
)
|
||||
except Exception as e:
|
||||
# sidecar 비활성(매매 차단) 포함. 손절선은 기존 값이 그대로 살아있다.
|
||||
_log(f'정정 예외 {r["id"]} {r["symbol_name"]}: {e!r}')
|
||||
if not nx['steps']:
|
||||
# 고점은 올랐지만 호가단위·최저 매도가 때문에 올릴 조건단가가 없다 → 정정 API 콜 0.
|
||||
if not dry_run:
|
||||
trailing.commit_peak(r['id'], nx['peak'])
|
||||
continue
|
||||
|
||||
if dry_run:
|
||||
_log(f'[dry-run] {r["id"]} {r["symbol_name"]} '
|
||||
f'고점 {r["peak"]:,}→{levels["peak"]:,} · '
|
||||
f'손절 {r["cond_uv"]:,}→{levels["cond_uv"]:,} / 지정 {levels["ord_uv"]:,} · '
|
||||
f'body={res.get("body")}')
|
||||
continue
|
||||
for up in nx['steps']:
|
||||
s, row = next(x for x in live_steps if x[0]['n'] == up['n'])
|
||||
# 미체결 잔량으로 정정 — 부분체결됐으면 잔량만 남는다 (저장된 qty 는 최초 주문수량).
|
||||
qty = row.get('unfilled_qty') or s['qty']
|
||||
try:
|
||||
res = kiwoom_order.modify_order(
|
||||
account_label=r['account'],
|
||||
orig_ord_no=s['ord_no'],
|
||||
symbol=r['symbol'],
|
||||
modify_qty=qty,
|
||||
modify_price=up['ord_uv'],
|
||||
routing_suffix=row.get('routing_suffix', ''),
|
||||
dry_run=dry_run,
|
||||
card_id=r.get('card_id'),
|
||||
modify_cond_price=up['cond_uv'],
|
||||
)
|
||||
except Exception as e:
|
||||
# sidecar 비활성(매매 차단) 포함. 손절선은 기존 값이 그대로 살아있다.
|
||||
_log(f'정정 예외 {r["id"]}/{s["n"]}단계 {r["symbol_name"]}: {e!r}')
|
||||
continue
|
||||
|
||||
if res.get('ok'):
|
||||
new_ord_no = res.get('new_ord_no') or ''
|
||||
updated = trailing.commit_modify(r['id'], new_ord_no, levels['peak'],
|
||||
levels['cond_uv'], levels['ord_uv'])
|
||||
raised += 1
|
||||
_log(f'손절선 상향 {r["id"]} {r["symbol_name"]} '
|
||||
f'{r["cond_uv"]:,}→{levels["cond_uv"]:,}원 (고점 {levels["peak"]:,}) '
|
||||
f'ord_no {r["ord_no"]}→{new_ord_no}')
|
||||
if not updated:
|
||||
# 상태 갱신 실패 = 다음 정정이 옛 ord_no 로 나가 실패한다. 반드시 알린다.
|
||||
_log(f'⚠️ 상태 갱신 실패 {r["id"]} — ord_no 불일치 위험')
|
||||
try:
|
||||
_notify_modify_failed(r, f'정정은 성공했지만 상태 갱신 실패 (새 주문번호 {new_ord_no})')
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
reason = res.get('reason', 'UNKNOWN')
|
||||
detail = (res.get('response') or {}).get('return_msg') or res.get('error') or ''
|
||||
_log(f'정정 실패 {r["id"]} {r["symbol_name"]}: {reason} {detail} (세션 {sess})')
|
||||
# NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 반복된다 — 쿨다운으로 스팸 차단.
|
||||
# 로그에는 매번 남으니 진단은 로그로 한다.
|
||||
if trailing.should_notify_failure(r['id'], time.time(), FAIL_NOTICE_COOLDOWN_SEC):
|
||||
try:
|
||||
_notify_modify_failed(r, f'{reason} {detail}'.strip() + f' · 세션 {sess}')
|
||||
except Exception as e:
|
||||
_log(f'알림 실패: {e!r}')
|
||||
if dry_run:
|
||||
_log(f'[dry-run] {r["id"]}/{s["n"]}단계 {r["symbol_name"]} '
|
||||
f'고점 {r["peak"]:,}→{nx["peak"]:,} · '
|
||||
f'손절 {s["cond_uv"]:,}→{up["cond_uv"]:,} / 지정 {up["ord_uv"]:,} · '
|
||||
f'body={res.get("body")}')
|
||||
continue
|
||||
|
||||
if res.get('ok'):
|
||||
new_ord_no = res.get('new_ord_no') or ''
|
||||
updated = trailing.commit_step_modify(r['id'], s['n'], new_ord_no,
|
||||
nx['peak'], up['cond_uv'], up['ord_uv'])
|
||||
raised += 1
|
||||
_log(f'손절선 상향 {r["id"]}/{s["n"]}단계 {r["symbol_name"]} '
|
||||
f'{s["cond_uv"]:,}→{up["cond_uv"]:,}원 (고점 {nx["peak"]:,}) '
|
||||
f'ord_no {s["ord_no"]}→{new_ord_no}')
|
||||
if not updated:
|
||||
# 상태 갱신 실패 = 다음 정정이 옛 ord_no 로 나가 실패한다. 반드시 알린다.
|
||||
_log(f'⚠️ 상태 갱신 실패 {r["id"]}/{s["n"]}단계 — ord_no 불일치 위험')
|
||||
try:
|
||||
_notify_modify_failed(r, s, f'정정은 성공했지만 상태 갱신 실패 '
|
||||
f'(새 주문번호 {new_ord_no})')
|
||||
except Exception:
|
||||
pass
|
||||
else:
|
||||
_log(f' 알림 생략 (쿨다운 {FAIL_NOTICE_COOLDOWN_SEC}초 내 이미 발송)')
|
||||
reason = res.get('reason', 'UNKNOWN')
|
||||
detail = (res.get('response') or {}).get('return_msg') or res.get('error') or ''
|
||||
_log(f'정정 실패 {r["id"]}/{s["n"]}단계 {r["symbol_name"]}: '
|
||||
f'{reason} {detail} (세션 {sess})')
|
||||
# NXT 시간대에 KRX/SOR 원주문 정정이 거부되면 매 사이클 반복된다 — 쿨다운으로
|
||||
# 스팸 차단. 쿨다운은 예약 단위다(같은 원인으로 전 계단이 함께 실패하므로
|
||||
# 계단마다 알리면 한 사이클에 3~5통이 된다). 로그에는 매번 남는다.
|
||||
if trailing.should_notify_failure(r['id'], time.time(), FAIL_NOTICE_COOLDOWN_SEC):
|
||||
try:
|
||||
_notify_modify_failed(r, s, f'{reason} {detail}'.strip() + f' · 세션 {sess}')
|
||||
except Exception as e:
|
||||
_log(f'알림 실패: {e!r}')
|
||||
else:
|
||||
_log(f' 알림 생략 (쿨다운 {FAIL_NOTICE_COOLDOWN_SEC}초 내 이미 발송)')
|
||||
|
||||
if raised:
|
||||
_log(f'완료 — {raised}건 상향 / 예약 {len(alive)}건')
|
||||
_log(f'완료 — {raised}개 계단 상향 / 예약 {len(alive)}건')
|
||||
return 0
|
||||
|
||||
|
||||
@@ -277,16 +341,21 @@ def cmd_list() -> int:
|
||||
print('트레일링 예약 없음')
|
||||
return 0
|
||||
for r in reservations:
|
||||
steps = r.get('steps') or []
|
||||
floor_part = f' · 최저 {r["min_sell_price"]:,}' if r.get('min_sell_price') else ''
|
||||
entry_peak = r.get('entry_peak') or 0
|
||||
peak_part = f'고점 {r["peak"]:,}'
|
||||
if entry_peak and r['peak'] > entry_peak:
|
||||
peak_part += f' (등록 시 {entry_peak:,})'
|
||||
print(f'{r["id"]} · {r["symbol_name"]}({r["symbol"]}) · {r["account"]} · {r["qty"]:,}주')
|
||||
print(f' 트레일 −{r["trail_pct"]}%{floor_part} · {peak_part} · '
|
||||
f'손절 {r["cond_uv"]:,} / 지정 {r["ord_uv"]:,}')
|
||||
print(f' ord_no {r["ord_no"]} · 상향 {r.get("modify_count", 0)}회 · '
|
||||
f'등록 {r["created_at"]} · 갱신 {r["updated_at"]}')
|
||||
print(f'{r["id"]} · {r["symbol_name"]}({r["symbol"]}) · {r["account"]} · '
|
||||
f'{r["qty"]:,}주 · {len(steps)}단')
|
||||
print(f' {peak_part}{floor_part} · 등록 {r["created_at"]} · 갱신 {r["updated_at"]}')
|
||||
for s in steps:
|
||||
cum = s.get('cum', 0)
|
||||
cum_part = '전량' if cum >= 100 else f'누적 {_pct_s(cum)}%'
|
||||
print(f' {s["n"]}단계 −{_pct_s(s["pct"])}% · 손절 {s["cond_uv"]:,} / '
|
||||
f'지정 {s["ord_uv"]:,} · {s["qty"]:,}주 ({cum_part}) · '
|
||||
f'ord_no {s["ord_no"]} · 상향 {s.get("modify_count", 0)}회')
|
||||
return 0
|
||||
|
||||
|
||||
|
||||
@@ -96,3 +96,5 @@
|
||||
{"date": "2026-07-29", "market": "KOSPI", "market_label": "코스피", "rise": 91, "upper": 1, "fall": 805, "lower": 1, "steady": 21, "adr": 11.41, "personal": -19701, "foreign": -12502, "institutional": 31769, "captured_at": "2026-07-29T21:00:04.833116+09:00"}
|
||||
{"date": "2026-07-30", "market": "KOSDAQ", "market_label": "코스닥", "rise": 733, "upper": 5, "fall": 938, "lower": 0, "steady": 57, "adr": 78.68, "personal": -1108, "foreign": 2483, "institutional": -1435, "captured_at": "2026-07-30T21:00:02.501493+09:00"}
|
||||
{"date": "2026-07-30", "market": "KOSPI", "market_label": "코스피", "rise": 609, "upper": 4, "fall": 277, "lower": 0, "steady": 30, "adr": 221.3, "personal": -14309, "foreign": 13280, "institutional": 805, "captured_at": "2026-07-30T21:00:02.501493+09:00"}
|
||||
{"date": "2026-07-31", "market": "KOSDAQ", "market_label": "코스닥", "rise": 1557, "upper": 14, "fall": 141, "lower": 0, "steady": 30, "adr": 1114.18, "personal": -4715, "foreign": 1697, "institutional": 2985, "captured_at": "2026-07-31T21:00:02.143730+09:00"}
|
||||
{"date": "2026-07-31", "market": "KOSPI", "market_label": "코스피", "rise": 775, "upper": 12, "fall": 127, "lower": 0, "steady": 15, "adr": 619.69, "personal": -82840, "foreign": 72410, "institutional": 11503, "captured_at": "2026-07-31T21:00:02.143730+09:00"}
|
||||
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 9942727.734499987,
|
||||
"cash": 15638954.576999987,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"010950": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5572914.42378125,
|
||||
"last_add_price": 130800
|
||||
@@ -60,32 +60,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5640114.3750312505,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 120,
|
||||
"entry_price": 89875.0,
|
||||
"entry_at": "2026-07-23T09:46:06.299578+09:00",
|
||||
"stop": 78839,
|
||||
"target": 122984,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5411911.7463125,
|
||||
"last_add_price": 91400
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,643 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5547990.7530625,
|
||||
"last_add_price": 18950
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 589,
|
||||
"entry_price": 6130,
|
||||
"qty": 1140,
|
||||
"entry_price": 6333.0,
|
||||
"entry_at": "2026-07-30T09:04:05.277095+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3612125.2394573665,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
@@ -144,17 +123,17 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5035879.961218749,
|
||||
"last_add_price": 127700
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21837800.879500017,
|
||||
"closed_trades": 20,
|
||||
"realized_pnl": -23318600.42950002,
|
||||
"closed_trades": 21,
|
||||
"wins": 0,
|
||||
"peak_equity": 100102462.48,
|
||||
"max_drawdown": 0.22555800282646568,
|
||||
"max_drawdown": 0.2476485322022221,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-15",
|
||||
"086790": "2026-07-29",
|
||||
@@ -167,8 +146,9 @@
|
||||
"055550": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-29"
|
||||
"252990": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.943184+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.297781+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.174717+09:00"
|
||||
}
|
||||
@@ -63,3 +63,5 @@
|
||||
{"ts": "2026-07-30T09:04:05.277102+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 589, "cost": 3611112, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:09.704313+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 40, "cost": 4964745, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113673, "target": 155380, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "124,000 vs 117,010"}, {"label": "정배열(5>10)", "ok": true, "detail": "118,260 / 117,010"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,260 / 110,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+54.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "518,220 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.31% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T10:10:06.142998+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 39, "cost": 4981047, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113673, "target": 155380, "signals": [{"label": "손절선", "ok": true, "detail": "113,673 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 155,380"}, {"label": "추세(10일선)", "ok": true, "detail": "117,370"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,835"}]}
|
||||
{"ts": "2026-07-31T09:06:05.825941+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 551, "cost": 3609591, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:06.330737+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 120, "proceeds": 9305818, "entry_price": 89875, "pnl": -1480800, "pnl_pct": -13.55, "hold_from": "2026-07-23T09:46:06.299578+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,839 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,984"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 45394687.33300002,
|
||||
"cash": 49968605.94800002,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3936003.3225085386,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 85,
|
||||
"entry_price": 89534.11764705883,
|
||||
"entry_at": "2026-07-23T09:50:01.505016+09:00",
|
||||
"stop": 78555,
|
||||
"target": 106003,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3844545.2388675264,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5296043.025056097,
|
||||
"last_add_price": 126400
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,653 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5514104.658843751,
|
||||
"last_add_price": 19090
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 329,
|
||||
"entry_price": 6130,
|
||||
"qty": 637,
|
||||
"entry_price": 6333.076923076923,
|
||||
"entry_at": "2026-07-30T09:04:06.859145+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2020237.3208749255,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3949543.523644232,
|
||||
"last_add_price": 131800
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -12184860.553500012,
|
||||
"closed_trades": 22,
|
||||
"realized_pnl": -13204780.888500012,
|
||||
"closed_trades": 23,
|
||||
"wins": 1,
|
||||
"peak_equity": 100172467.23000002,
|
||||
"max_drawdown": 0.13191928143946544,
|
||||
"max_drawdown": 0.14748235408916366,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-29",
|
||||
"086790": "2026-07-28",
|
||||
@@ -168,8 +147,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944232+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.357487+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.234615+09:00"
|
||||
}
|
||||
@@ -62,3 +62,5 @@
|
||||
{"ts": "2026-07-30T09:24:06.912152+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:06.863454+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 867, "cost": 5462919, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T09:50:06.667546+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 41, "cost": 5183177, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 138976, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,976"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:06.408818+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 308, "cost": 2017703, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:06.408934+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 85, "proceeds": 6591621, "entry_price": 89534, "pnl": -1019920, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.505016+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,555 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,003"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 33514429.521500062,
|
||||
"cash": 38185549.56900006,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3962363.617644489,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 86,
|
||||
"entry_price": 89518.6046511628,
|
||||
"entry_at": "2026-07-23T09:50:01.507036+09:00",
|
||||
"stop": 78539,
|
||||
"target": 105988,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3892203.318086031,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5549046.703468754,
|
||||
"last_add_price": 120500
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5150762.675171776,
|
||||
"last_add_price": 125200
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,019 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5467064.310906254,
|
||||
"last_add_price": 19090
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 326,
|
||||
"entry_price": 6130,
|
||||
"qty": 631,
|
||||
"entry_price": 6333.011093502377,
|
||||
"entry_at": "2026-07-30T09:04:06.863063+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2002983.4606684945,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3940896.531574532,
|
||||
"last_add_price": 131800
|
||||
@@ -171,11 +150,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -13097543.475500017,
|
||||
"closed_trades": 27,
|
||||
"realized_pnl": -14128128.55550002,
|
||||
"closed_trades": 28,
|
||||
"wins": 2,
|
||||
"peak_equity": 101529111.72700004,
|
||||
"max_drawdown": 0.14680816124520618,
|
||||
"max_drawdown": 0.1639948569900874,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-29",
|
||||
"086790": "2026-07-29",
|
||||
@@ -190,8 +169,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944251+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.359449+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.236534+09:00"
|
||||
}
|
||||
@@ -80,3 +80,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.313716+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 41, "cost": 5133970, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 136750, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,750"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:06.914861+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:06.866302+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 865, "cost": 5450317, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:06.410935+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 305, "cost": 1998050, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:06.411045+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 86, "proceeds": 6669170, "entry_price": 89519, "pnl": -1030585, "pnl_pct": -13.2, "hold_from": "2026-07-23T09:50:01.507036+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,539 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,988"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 28681733.183500044,
|
||||
"cash": 33545438.188500047,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4980582.661409654,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 107,
|
||||
"entry_price": 89537.3831775701,
|
||||
"entry_at": "2026-07-23T09:50:01.509012+09:00",
|
||||
"stop": 81303,
|
||||
"target": 106006,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4849662.714601921,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5535494.525500003,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 2,135 도달",
|
||||
"cur_price": 1846,
|
||||
"cur_price": 1911,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2595536.5029300014,
|
||||
"last_add_price": 1951
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5213821.568625003,
|
||||
"last_add_price": 120500
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 411,
|
||||
"entry_price": 6130,
|
||||
"qty": 795,
|
||||
"entry_price": 6332.867924528302,
|
||||
"entry_at": "2026-07-30T09:04:06.866644+09:00",
|
||||
"stop": 5127,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5362,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2521548.49371356,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,17 +123,17 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4970364.152582046,
|
||||
"last_add_price": 131800
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18271210.95150003,
|
||||
"closed_trades": 39,
|
||||
"realized_pnl": -20473865.741500027,
|
||||
"closed_trades": 40,
|
||||
"wins": 3,
|
||||
"peak_equity": 101695667.93550003,
|
||||
"max_drawdown": 0.20390639220887885,
|
||||
"max_drawdown": 0.23379971074166161,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"035420": "2026-06-23",
|
||||
@@ -173,8 +152,9 @@
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944270+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.945088+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.717156+09:00"
|
||||
}
|
||||
@@ -110,3 +110,5 @@
|
||||
{"ts": "2026-07-30T09:04:06.866646+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 411, "cost": 2519808, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 5127, "target": 8135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:24:06.917510+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 37, "cost": 4877331, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 154020, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T11:58:07.822065+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 110, "proceeds": 10067330, "entry_price": 101115, "pnl": -1056938, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.813457+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,144"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:04:07.266662+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 107, "proceeds": 7379282, "entry_price": 89537, "pnl": -2202655, "pnl_pct": -22.83, "hold_from": "2026-07-23T09:50:01.509012+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,303 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,006"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:06.413012+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 384, "cost": 2515577, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 19178388.71,
|
||||
"cash": 24308308.2,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5156172.079657566,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 112,
|
||||
"entry_price": 89525.89285714286,
|
||||
"entry_at": "2026-07-23T09:50:01.510934+09:00",
|
||||
"stop": 81291,
|
||||
"target": 105995,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5078672.507755172,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,012 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5806232.125812501,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5368293.320125001,
|
||||
"last_add_price": 120500
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5180051.180047499,
|
||||
"last_add_price": 125200
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 423,
|
||||
"entry_price": 6130,
|
||||
"qty": 819,
|
||||
"entry_price": 6333.076923076923,
|
||||
"entry_at": "2026-07-30T09:04:07.457322+09:00",
|
||||
"stop": 5127,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5363,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2599049.62031184,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5127095.802498201,
|
||||
"last_add_price": 131800
|
||||
@@ -171,11 +150,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -15557333.116500024,
|
||||
"closed_trades": 31,
|
||||
"realized_pnl": -17861628.591500025,
|
||||
"closed_trades": 32,
|
||||
"wins": 2,
|
||||
"peak_equity": 101690998.13850003,
|
||||
"max_drawdown": 0.17426239686294243,
|
||||
"max_drawdown": 0.2049465569225206,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-07-16",
|
||||
@@ -190,8 +169,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-11T09:00:01.944290+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.956556+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.724720+09:00"
|
||||
}
|
||||
@@ -90,3 +90,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.909415+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 41, "cost": 5133970, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111347, "target": 141206, "signals": [{"label": "손절선", "ok": true, "detail": "111,347 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,206"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.511684+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 38, "cost": 5009151, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.458683+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 855, "cost": 5387308, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:04:07.865082+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 112, "proceeds": 7724109, "entry_price": 89526, "pnl": -2304295, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.510934+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,291 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,995"}, {"label": "추세(10일선)", "ok": false, "detail": "80,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:06.999372+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 396, "cost": 2594189, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 22078706.885999955,
|
||||
"cash": 22210919.810999956,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5184250.1290937485,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5024795.592812498,
|
||||
"last_add_price": 18950
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4675255.455593748,
|
||||
"last_add_price": 120500
|
||||
@@ -81,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4550435.925312498,
|
||||
"last_add_price": 125200
|
||||
@@ -92,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 545,
|
||||
"entry_price": 6130,
|
||||
"qty": 1055,
|
||||
"entry_price": 6333.03317535545,
|
||||
"entry_at": "2026-07-30T09:04:07.466771+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3342107.250162302,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4604300.898906248,
|
||||
"last_add_price": 130900
|
||||
@@ -148,34 +148,13 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 4614360.447343747,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 50,
|
||||
"entry_price": 87900,
|
||||
"entry_at": "2026-07-30T12:04:07.816765+09:00",
|
||||
"stop": 76706,
|
||||
"target": 121481,
|
||||
"peak": 89200,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4476061.633499997,
|
||||
"last_add_price": 87900
|
||||
}
|
||||
},
|
||||
"realized_pnl": -28607537.16000002,
|
||||
"closed_trades": 32,
|
||||
"realized_pnl": -29529982.41000002,
|
||||
"closed_trades": 33,
|
||||
"wins": 1,
|
||||
"peak_equity": 103066363.367,
|
||||
"max_drawdown": 0.3103753294088034,
|
||||
"max_drawdown": 0.32842114973504477,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"086790": "2026-07-29",
|
||||
@@ -193,11 +172,11 @@
|
||||
"095610": "2026-07-28",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"003680": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582771+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.963749+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.731203+09:00"
|
||||
}
|
||||
@@ -93,3 +93,5 @@
|
||||
{"ts": "2026-07-30T09:18:10.149807+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 731, "cost": 4613302, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7843, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.423544+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 102, "proceeds": 9335161, "entry_price": 101112, "pnl": -979786, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.817053+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 128,147"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.816772+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 50, "cost": 4395659, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 76706, "target": 121481, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.006134+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 510, "cost": 3341001, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:08.203881+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 50, "proceeds": 3473214, "entry_price": 87900, "pnl": -922445, "pnl_pct": -20.82, "hold_from": "2026-07-30T12:04:07.816765+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "76,706 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 121,481"}, {"label": "추세(20일선)", "ok": false, "detail": "74,135"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,095"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 19291226.259999953,
|
||||
"cash": 19486471.809999954,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5435113.820843748,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5357608.233093748,
|
||||
"last_add_price": 18950
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5057738.410843747,
|
||||
"last_add_price": 120500
|
||||
@@ -81,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5030428.7588749975,
|
||||
"last_add_price": 125200
|
||||
@@ -92,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 603,
|
||||
"entry_price": 6130,
|
||||
"qty": 1167,
|
||||
"entry_price": 6332.982005141388,
|
||||
"entry_at": "2026-07-30T09:04:07.473311+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3698158.582805608,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5098537.405531247,
|
||||
"last_add_price": 130900
|
||||
@@ -148,34 +148,13 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 5110875.1474062465,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 56,
|
||||
"entry_price": 87900,
|
||||
"entry_at": "2026-07-30T12:04:07.823150+09:00",
|
||||
"stop": 76706,
|
||||
"target": 104690,
|
||||
"peak": 89200,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4964432.788749997,
|
||||
"last_add_price": 87900
|
||||
}
|
||||
},
|
||||
"realized_pnl": -20929028.123000026,
|
||||
"closed_trades": 36,
|
||||
"realized_pnl": -21962166.803000025,
|
||||
"closed_trades": 37,
|
||||
"wins": 5,
|
||||
"peak_equity": 103066363.367,
|
||||
"max_drawdown": 0.23564969514366776,
|
||||
"max_drawdown": 0.25604475305907143,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"086790": "2026-07-29",
|
||||
@@ -193,11 +172,11 @@
|
||||
"055550": "2026-07-20",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"003680": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582787+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.969242+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.735916+09:00"
|
||||
}
|
||||
@@ -100,3 +100,5 @@
|
||||
{"ts": "2026-07-30T09:18:10.159701+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 809, "cost": 5105556, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.429556+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 108, "proceeds": 9884288, "entry_price": 101114, "pnl": -1037650, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.818826+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,635"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.823153+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 56, "cost": 4923138, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 76706, "target": 104690, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.012482+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 564, "cost": 3694754, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:08.210477+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 56, "proceeds": 3890000, "entry_price": 87900, "pnl": -1033139, "pnl_pct": -20.82, "hold_from": "2026-07-30T12:04:07.823150+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "76,706 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,690"}, {"label": "추세(20일선)", "ok": false, "detail": "74,135"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,095"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 17228543.256499957,
|
||||
"cash": 17388318.038999956,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5274205.950343749,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5136044.188124998,
|
||||
"last_add_price": 18950
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4798325.220406247,
|
||||
"last_add_price": 120500
|
||||
@@ -81,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4697478.874937497,
|
||||
"last_add_price": 125200
|
||||
@@ -92,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 563,
|
||||
"entry_price": 6130,
|
||||
"qty": 1090,
|
||||
"entry_price": 6333.064220183486,
|
||||
"entry_at": "2026-07-30T09:04:07.479053+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8804,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3453556.2895330573,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4762406.753156248,
|
||||
"last_add_price": 130900
|
||||
@@ -148,34 +148,13 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 4773756.949406248,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 52,
|
||||
"entry_price": 87900,
|
||||
"entry_at": "2026-07-30T12:04:07.828076+09:00",
|
||||
"stop": 76706,
|
||||
"target": 110287,
|
||||
"peak": 89200,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4633215.554781247,
|
||||
"last_add_price": 87900
|
||||
}
|
||||
},
|
||||
"realized_pnl": -26214124.41600003,
|
||||
"closed_trades": 33,
|
||||
"realized_pnl": -27173467.47600003,
|
||||
"closed_trades": 34,
|
||||
"wins": 2,
|
||||
"peak_equity": 103066363.367,
|
||||
"max_drawdown": 0.286701685643846,
|
||||
"max_drawdown": 0.3059755316650401,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"086790": "2026-07-29",
|
||||
@@ -193,11 +172,11 @@
|
||||
"095610": "2026-07-28",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"003680": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582803+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.974282+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.740802+09:00"
|
||||
}
|
||||
@@ -94,3 +94,5 @@
|
||||
{"ts": "2026-07-30T09:18:10.166025+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 756, "cost": 4771076, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7332, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.434750+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 104, "proceeds": 9518203, "entry_price": 101112, "pnl": -999074, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.820564+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,138"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.828079+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 52, "cost": 4571486, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 76706, "target": 110287, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.018008+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 527, "cost": 3452368, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:08.215128+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 52, "proceeds": 3612143, "entry_price": 87900, "pnl": -959343, "pnl_pct": -20.82, "hold_from": "2026-07-30T12:04:07.828076+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "76,706 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 110,287"}, {"label": "추세(20일선)", "ok": false, "detail": "74,135"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 91,095"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 23032163.43200002,
|
||||
"cash": 24200670.842000015,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4947379.149752503,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5342833.247656252,
|
||||
"last_add_price": 18950
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5120146.001656252,
|
||||
"last_add_price": 120500
|
||||
@@ -81,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4929642.288776176,
|
||||
"last_add_price": 125200
|
||||
@@ -92,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 404,
|
||||
"entry_price": 6130,
|
||||
"qty": 782,
|
||||
"entry_price": 6333.017902813299,
|
||||
"entry_at": "2026-07-30T09:04:07.484676+09:00",
|
||||
"stop": 5127,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5363,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2477780.379475499,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4848771.68070699,
|
||||
"last_add_price": 130900
|
||||
@@ -148,34 +148,13 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 5134489.040718751,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 47,
|
||||
"entry_price": 87900,
|
||||
"entry_at": "2026-07-30T12:04:07.833673+09:00",
|
||||
"stop": 79505,
|
||||
"target": 104690,
|
||||
"peak": 89200,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4187644.1160591436,
|
||||
"last_add_price": 87900
|
||||
}
|
||||
},
|
||||
"realized_pnl": -20407493.78900003,
|
||||
"closed_trades": 45,
|
||||
"realized_pnl": -20894634.689000033,
|
||||
"closed_trades": 46,
|
||||
"wins": 4,
|
||||
"peak_equity": 101291892.54300004,
|
||||
"max_drawdown": 0.2164632189263529,
|
||||
"max_drawdown": 0.2315722523502305,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-28",
|
||||
"030000": "2026-07-24",
|
||||
@@ -193,12 +172,12 @@
|
||||
"105560": "2026-07-20",
|
||||
"024060": "2026-07-27",
|
||||
"252990": "2026-07-28",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"003680": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582834+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.979847+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.745765+09:00"
|
||||
}
|
||||
@@ -124,3 +124,5 @@
|
||||
{"ts": "2026-07-30T09:18:10.171049+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 813, "cost": 5130800, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5927, "target": 7077, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T11:58:08.439672+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 108, "proceeds": 9884288, "entry_price": 101114, "pnl": -1037650, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.822292+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,142"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T12:04:07.833676+09:00", "side": "BUY", "code": "078930", "name": "GS", "price": 87900, "qty": 47, "cost": 4131920, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 79505, "target": 104690, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "87,900 vs 75,055"}, {"label": "정배열(5>20)", "ok": true, "detail": "82,940 / 75,055"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "82,940 / 75,053"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+61.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -49 · 기 +280 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+17%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.79% (환산) vs 평균 0.42% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 87,600"}, {"label": "거래량 급증", "ok": true, "detail": "728,608 (환산) vs 평균 392,182"}, {"label": "회전율 급증", "ok": true, "detail": "0.79% (환산) vs 평균 0.42%"}, {"label": "RSI", "ok": true, "detail": "67"}]}
|
||||
{"ts": "2026-07-31T09:06:07.022640+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 378, "cost": 2476271, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.022939+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 47, "proceeds": 3644779, "entry_price": 87900, "pnl": -487141, "pnl_pct": -11.6, "hold_from": "2026-07-30T12:04:07.833673+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,505 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 104,690"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 90,898"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 36817750.839999944,
|
||||
"cash": 41908364.43499994,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5132330.379099764,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 112,
|
||||
"entry_price": 89873.21428571429,
|
||||
"entry_at": "2026-07-23T09:46:06.366617+09:00",
|
||||
"stop": 81596,
|
||||
"target": 102289,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5067979.388839712,
|
||||
"last_add_price": 91400
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5079550.709806033,
|
||||
"last_add_price": 131400
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,653 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5395527.728156246,
|
||||
"last_add_price": 19090
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 429,
|
||||
"entry_price": 6130,
|
||||
"qty": 831,
|
||||
"entry_price": 6333.1768953068595,
|
||||
"entry_at": "2026-07-30T09:04:07.489609+09:00",
|
||||
"stop": 5127,
|
||||
"target": 7634,
|
||||
"peak": 6330,
|
||||
"stop": 5363,
|
||||
"target": 7789,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2634409.858223602,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5443355.1048749965,
|
||||
"last_add_price": 127700
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6310
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14156826.44950002,
|
||||
"closed_trades": 39,
|
||||
"realized_pnl": -16500027.759500023,
|
||||
"closed_trades": 40,
|
||||
"wins": 5,
|
||||
"peak_equity": 100161893.89500001,
|
||||
"max_drawdown": 0.15501926382579276,
|
||||
"max_drawdown": 0.18418431144422467,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-28",
|
||||
"030000": "2026-07-29",
|
||||
@@ -174,8 +153,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582849+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.984326+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.750722+09:00"
|
||||
}
|
||||
@@ -101,3 +101,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.939702+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 43, "cost": 5337100, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116280, "target": 135830, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,000 vs 113,755"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,260 / 113,755"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,260 / 110,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+54.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "518,220 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.31% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.176757+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 862, "cost": 5440036, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5927, "target": 6885, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T10:10:07.436089+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 42, "cost": 5364205, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116280, "target": 135830, "signals": [{"label": "손절선", "ok": true, "detail": "116,280 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 135,830"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,835"}]}
|
||||
{"ts": "2026-07-31T09:04:07.898708+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 112, "proceeds": 7724109, "entry_price": 89873, "pnl": -2343201, "pnl_pct": -23.11, "hold_from": "2026-07-23T09:46:06.366617+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,596 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 102,289"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.027654+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 402, "cost": 2633495, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 7634, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,634"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 27224364.607999973,
|
||||
"cash": 32209442.72799997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4992940.599795671,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 108,
|
||||
"entry_price": 89872.22222222222,
|
||||
"entry_at": "2026-07-23T09:46:06.368358+09:00",
|
||||
"stop": 81595,
|
||||
"target": 114704,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4910846.127133424,
|
||||
"last_add_price": 91400
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,673 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5527839.1075312495,
|
||||
"last_add_price": 18950
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 402,
|
||||
"entry_price": 6130,
|
||||
"qty": 778,
|
||||
"entry_price": 6332.982005141388,
|
||||
"entry_at": "2026-07-30T09:04:07.493859+09:00",
|
||||
"stop": 5127,
|
||||
"target": 9138,
|
||||
"peak": 6330,
|
||||
"stop": 5363,
|
||||
"target": 9244,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2465159.461256131,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4808410.164930106,
|
||||
"last_add_price": 130900
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5091414.859187499,
|
||||
"last_add_price": 127700
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6310
|
||||
}
|
||||
},
|
||||
"realized_pnl": -19889233.621500026,
|
||||
"closed_trades": 36,
|
||||
"realized_pnl": -22148642.011500027,
|
||||
"closed_trades": 37,
|
||||
"wins": 1,
|
||||
"peak_equity": 100161893.89500001,
|
||||
"max_drawdown": 0.21116662699262181,
|
||||
"max_drawdown": 0.24013794300070365,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-07-24",
|
||||
@@ -174,8 +153,9 @@
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"138040": "2026-07-29"
|
||||
"138040": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582864+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.988430+09:00"
|
||||
"updated_at": "2026-07-31T15:28:07.754911+09:00"
|
||||
}
|
||||
@@ -98,3 +98,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.943676+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124100, "qty": 41, "cost": 5088863, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116280, "target": 147560, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "124,000 vs 113,755"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,260 / 113,755"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,260 / 110,085"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+54.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +9 · 기 +389 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "518,220 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.31% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.181133+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 806, "cost": 5086623, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5927, "target": 7460, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,300 vs 5,354"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,726 / 5,354"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T10:10:07.440123+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 39, "cost": 4981047, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116280, "target": 147560, "signals": [{"label": "손절선", "ok": true, "detail": "116,280 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,560"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,835"}]}
|
||||
{"ts": "2026-07-31T09:04:07.903300+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 108, "proceeds": 7448248, "entry_price": 89872, "pnl": -2259408, "pnl_pct": -23.11, "hold_from": "2026-07-23T09:46:06.368358+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,595 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,704"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.031863+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 376, "cost": 2463169, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 9138, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,138"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 36790407.86550004,
|
||||
"cash": 41223394.78050004,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3813943.0504600187,
|
||||
"last_add_price": 350000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 82,
|
||||
"entry_price": 89863.41463414633,
|
||||
"entry_at": "2026-07-23T09:46:06.370394+09:00",
|
||||
"stop": 78827,
|
||||
"target": 122973,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3727885.349520808,
|
||||
"last_add_price": 91400
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,643 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5685594.862062503,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5142605.848996199,
|
||||
"last_add_price": 126400
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 314,
|
||||
"entry_price": 6130,
|
||||
"qty": 608,
|
||||
"entry_price": 6333.0921052631575,
|
||||
"entry_at": "2026-07-30T09:04:07.497844+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1927621.6063135946,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3759463.8630866953,
|
||||
"last_add_price": 130900
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6310
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16335442.066500016,
|
||||
"closed_trades": 24,
|
||||
"realized_pnl": -17346371.616500016,
|
||||
"closed_trades": 25,
|
||||
"wins": 0,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.17023552134499967,
|
||||
"max_drawdown": 0.1859662521949996,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-15",
|
||||
"086790": "2026-07-29",
|
||||
@@ -171,8 +150,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582879+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.992160+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.349885+09:00"
|
||||
}
|
||||
@@ -72,3 +72,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.947137+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 28, "cost": 3665750, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 175169, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,900 vs 108,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,360 / 108,560"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.185462+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 830, "cost": 5238086, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7843, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,300 vs 5,583"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,726 / 5,583"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T09:50:07.301109+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 154552, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 154,552"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.629713+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 294, "cost": 1925989, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.631046+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 82, "proceeds": 6358976, "entry_price": 89863, "pnl": -1010930, "pnl_pct": -13.54, "hold_from": "2026-07-23T09:46:06.370394+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,827 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,973"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 36790407.86550004,
|
||||
"cash": 41223394.78050004,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3813943.0504600187,
|
||||
"last_add_price": 350000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 82,
|
||||
"entry_price": 89863.41463414633,
|
||||
"entry_at": "2026-07-23T09:46:06.372102+09:00",
|
||||
"stop": 78827,
|
||||
"target": 111936,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3727885.349520808,
|
||||
"last_add_price": 91400
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,643 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5685594.862062503,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5142605.848996199,
|
||||
"last_add_price": 126400
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 314,
|
||||
"entry_price": 6130,
|
||||
"qty": 608,
|
||||
"entry_price": 6333.0921052631575,
|
||||
"entry_at": "2026-07-30T09:04:07.501481+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8804,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1927621.6063135946,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3759463.8630866953,
|
||||
"last_add_price": 130900
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6310
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16335442.066500016,
|
||||
"closed_trades": 24,
|
||||
"realized_pnl": -17346371.616500016,
|
||||
"closed_trades": 25,
|
||||
"wins": 0,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.17023552134499967,
|
||||
"max_drawdown": 0.1859662521949996,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-15",
|
||||
"086790": "2026-07-29",
|
||||
@@ -171,8 +150,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582910+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.995516+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.360048+09:00"
|
||||
}
|
||||
@@ -72,3 +72,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.950702+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 28, "cost": 3665750, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 160413, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,900 vs 108,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,360 / 108,560"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.189166+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 830, "cost": 5238086, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7332, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,300 vs 5,583"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,726 / 5,583"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T09:50:07.304413+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 144168, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,168"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.639526+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 294, "cost": 1925989, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.640655+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 82, "proceeds": 6358976, "entry_price": 89863, "pnl": -1010930, "pnl_pct": -13.54, "hold_from": "2026-07-23T09:46:06.372102+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,827 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,936"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 43819383.0315,
|
||||
"cash": 48303714.5015,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3841906.161963773,
|
||||
"last_add_price": 350000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89881.92771084337,
|
||||
"entry_at": "2026-07-23T09:46:06.373868+09:00",
|
||||
"stop": 78845,
|
||||
"target": 106437,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3755996.4301575036,
|
||||
"last_add_price": 91400
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5164071.483514108,
|
||||
"last_add_price": 126400
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,653 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5339950.00228125,
|
||||
"last_add_price": 19090
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 319,
|
||||
"entry_price": 6130,
|
||||
"qty": 617,
|
||||
"entry_price": 6332.852512155591,
|
||||
"entry_at": "2026-07-30T09:04:07.505690+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1956462.6546955872,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3812991.5556229833,
|
||||
"last_add_price": 130900
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6310
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14984638.498500016,
|
||||
"closed_trades": 25,
|
||||
"realized_pnl": -16009433.273500016,
|
||||
"closed_trades": 26,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.15764136968500003,
|
||||
"max_drawdown": 0.1727808549849999,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-29",
|
||||
"086790": "2026-07-29",
|
||||
@@ -171,8 +150,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.582926+09:00",
|
||||
"updated_at": "2026-07-30T15:28:06.998572+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.366262+09:00"
|
||||
}
|
||||
@@ -71,3 +71,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.953986+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 130900, "qty": 29, "cost": 3796669, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116144, "target": 153035, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "130,900 vs 108,560"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,360 / 108,560"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,360 / 113,212"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+49.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+21%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "571,193 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "68"}]}
|
||||
{"ts": "2026-07-30T09:18:10.192454+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6310, "qty": 842, "cost": 5313817, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5799, "target": 7077, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,300 vs 5,583"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,726 / 5,583"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,726 / 5,621"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.41% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "87,813 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.41% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "72"}]}
|
||||
{"ts": "2026-07-30T09:50:07.307619+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 138976, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,976"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.648347+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 298, "cost": 1952193, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.648789+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89882, "pnl": -1024795, "pnl_pct": -13.55, "hold_from": "2026-07-23T09:46:06.373868+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,845 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,437"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 27999012.694499996,
|
||||
"cash": 33076164.446999997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5085796.90859035,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 110,
|
||||
"entry_price": 89525.45454545454,
|
||||
"entry_at": "2026-07-23T09:50:01.528642+09:00",
|
||||
"stop": 81291,
|
||||
"target": 114229,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4982054.533958632,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,673 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5636180.5746875,
|
||||
"last_add_price": 18950
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 410,
|
||||
"entry_price": 6130,
|
||||
"qty": 793,
|
||||
"entry_price": 6332.849936948298,
|
||||
"entry_at": "2026-07-30T09:04:07.509224+09:00",
|
||||
"stop": 5127,
|
||||
"target": 9138,
|
||||
"peak": 6330,
|
||||
"stop": 5362,
|
||||
"target": 9244,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2514428.437642747,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5174714.39653125,
|
||||
"last_add_price": 127700
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4916855.663590054,
|
||||
"last_add_price": 131800
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -18311185.043000016,
|
||||
"closed_trades": 33,
|
||||
"realized_pnl": -20574284.163000017,
|
||||
"closed_trades": 34,
|
||||
"wins": 1,
|
||||
"peak_equity": 100344662.275,
|
||||
"max_drawdown": 0.19705571908059924,
|
||||
"max_drawdown": 0.22639747160382784,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-07-24",
|
||||
@@ -172,8 +151,9 @@
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"138040": "2026-07-29"
|
||||
"138040": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583136+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.001653+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.371609+09:00"
|
||||
}
|
||||
@@ -92,3 +92,5 @@
|
||||
{"ts": "2026-07-30T09:24:07.557100+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 37, "cost": 4877331, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 165130, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.504703+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 820, "cost": 5166775, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 7450, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,280 vs 5,353"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,722 / 5,353"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T10:10:07.453421+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 40, "cost": 5108766, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116537, "target": 147989, "signals": [{"label": "손절선", "ok": true, "detail": "116,537 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 147,989"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 127,135"}]}
|
||||
{"ts": "2026-07-31T09:04:08.433229+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 110, "proceeds": 7586178, "entry_price": 89525, "pnl": -2263099, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.528642+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,291 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,229"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.654376+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 383, "cost": 2509026, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 9138, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 9,138"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 25760629.65850001,
|
||||
"cash": 20137545.243500005,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3889733.683715179,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89533.73493975903,
|
||||
"entry_at": "2026-07-23T09:50:01.530389+09:00",
|
||||
"stop": 78554,
|
||||
"target": 122472,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3742230.636714602,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,012 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5696942.092812501,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5327150.576000001,
|
||||
"last_add_price": 120500
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4940372.790080874,
|
||||
"last_add_price": 125200
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 313,
|
||||
"entry_price": 6130,
|
||||
"qty": 606,
|
||||
"entry_price": 6333.069306930693,
|
||||
"entry_at": "2026-07-30T09:04:07.512664+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1924945.6187384445,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3791237.2526261737,
|
||||
"last_add_price": 131800
|
||||
@@ -169,13 +148,34 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 5246390.706071919,
|
||||
"last_add_price": 6300
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 395,
|
||||
"entry_price": 25667.46835443038,
|
||||
"entry_at": "2026-07-31T09:10:13.075428+09:00",
|
||||
"stop": 23650,
|
||||
"target": 31720,
|
||||
"peak": 26100,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 25,331 도달",
|
||||
"cur_price": 25850,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5089986.002562501,
|
||||
"last_add_price": 26100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16596935.273000015,
|
||||
"closed_trades": 27,
|
||||
"realized_pnl": -17592825.713000014,
|
||||
"closed_trades": 28,
|
||||
"wins": 0,
|
||||
"peak_equity": 101140808.32700005,
|
||||
"max_drawdown": 0.17882199227165796,
|
||||
"max_drawdown": 0.1947881632733674,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-15",
|
||||
"086790": "2026-07-29",
|
||||
@@ -193,8 +193,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583184+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.004503+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.375989+09:00"
|
||||
}
|
||||
@@ -82,3 +82,7 @@
|
||||
{"ts": "2026-07-30T09:16:11.959636+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 39, "cost": 4883532, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 152200, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,200"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.560097+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 28, "cost": 3690954, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 176240, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.507665+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 832, "cost": 5242386, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7833, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:07.659623+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 293, "cost": 1919438, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.659937+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.530389+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 122,472"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:10:13.075437+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25250, "qty": 201, "cost": 5076011, "path": "pullback", "reason": "눌림목 지정가 25,331 도달", "stop": 23650, "target": 30050, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,200 vs 25,175"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,380 / 25,175"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,380 / 25,155"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -414 · 기 +642 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,295,520 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,331 (현재 25,200)"}]}
|
||||
{"ts": "2026-07-31T10:36:07.682246+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 26100, "qty": 194, "cost": 5064160, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 23650, "target": 30050, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 26,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 30,050"}, {"label": "추세(10일선)", "ok": true, "detail": "25,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -410 · 기 +640"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,884"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 32386107.138999995,
|
||||
"cash": 36844234.679,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3891157.6622701483,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89533.73493975903,
|
||||
"entry_at": "2026-07-23T09:50:01.532131+09:00",
|
||||
"stop": 78554,
|
||||
"target": 111492,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3778918.748885343,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5719122.209000001,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5467080.19828125,
|
||||
"last_add_price": 120500
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5075960.404438956,
|
||||
"last_add_price": 125200
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 323,
|
||||
"entry_price": 6130,
|
||||
"qty": 625,
|
||||
"entry_price": 6332.944,
|
||||
"entry_at": "2026-07-30T09:04:07.515982+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8804,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1981493.926440071,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,17 +123,17 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3902843.990735232,
|
||||
"last_add_price": 131800
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14780929.105000021,
|
||||
"closed_trades": 30,
|
||||
"realized_pnl": -15776819.54500002,
|
||||
"closed_trades": 31,
|
||||
"wins": 2,
|
||||
"peak_equity": 101368884.75700004,
|
||||
"max_drawdown": 0.1603872594334459,
|
||||
"max_drawdown": 0.1781330644140594,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"086790": "2026-07-20",
|
||||
@@ -172,8 +151,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583198+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.007268+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.381313+09:00"
|
||||
}
|
||||
@@ -88,3 +88,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.962505+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 40, "cost": 5008751, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 141900, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,900"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.563029+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T11:58:08.466564+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 114, "proceeds": 10433415, "entry_price": 101116, "pnl": -1095514, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.835859+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,147"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.664664+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 302, "cost": 1978397, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.665122+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.532131+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 37489369.347500026,
|
||||
"cash": 41973700.81750003,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3848025.874946516,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89533.73493975903,
|
||||
"entry_at": "2026-07-23T09:50:01.533917+09:00",
|
||||
"stop": 78554,
|
||||
"target": 111492,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3774325.11581779,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,673 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5721714.462968752,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5187375.1457318,
|
||||
"last_add_price": 126400
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 319,
|
||||
"entry_price": 6130,
|
||||
"qty": 617,
|
||||
"entry_price": 6332.852512155591,
|
||||
"entry_at": "2026-07-30T09:04:07.518900+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8804,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1957851.3491824612,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3832048.06532556,
|
||||
"last_add_price": 131800
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14866665.129500018,
|
||||
"closed_trades": 30,
|
||||
"realized_pnl": -15862555.569500018,
|
||||
"closed_trades": 31,
|
||||
"wins": 2,
|
||||
"peak_equity": 100182695.41500005,
|
||||
"max_drawdown": 0.15883827043764528,
|
||||
"max_drawdown": 0.17470945980237,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"086790": "2026-07-20",
|
||||
@@ -172,8 +151,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583212+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.009784+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.385488+09:00"
|
||||
}
|
||||
@@ -86,3 +86,5 @@
|
||||
{"ts": "2026-07-30T09:24:07.565722+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.513015+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 841, "cost": 5299095, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7322, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,280 vs 5,353"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,722 / 5,353"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T09:50:07.318850+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 41, "cost": 5183177, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 144168, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,168"}, {"label": "추세(20일선)", "ok": true, "detail": "113,865"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.669241+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 298, "cost": 1952193, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.669454+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.533917+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 25760629.65850001,
|
||||
"cash": 20137545.243500005,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3889733.683715179,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89533.73493975903,
|
||||
"entry_at": "2026-07-23T09:50:01.535674+09:00",
|
||||
"stop": 78554,
|
||||
"target": 111492,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3742230.636714602,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,012 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5696942.092812501,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5327150.576000001,
|
||||
"last_add_price": 120500
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4940372.790080874,
|
||||
"last_add_price": 125200
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 313,
|
||||
"entry_price": 6130,
|
||||
"qty": 606,
|
||||
"entry_price": 6333.069306930693,
|
||||
"entry_at": "2026-07-30T09:04:07.522091+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8804,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1924945.6187384445,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3791237.2526261737,
|
||||
"last_add_price": 131800
|
||||
@@ -169,13 +148,34 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 5246390.706071919,
|
||||
"last_add_price": 6300
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 395,
|
||||
"entry_price": 25667.46835443038,
|
||||
"entry_at": "2026-07-31T09:10:13.091944+09:00",
|
||||
"stop": 23650,
|
||||
"target": 29702,
|
||||
"peak": 26100,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 25,331 도달",
|
||||
"cur_price": 25850,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5089986.002562501,
|
||||
"last_add_price": 26100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -16596935.273000015,
|
||||
"closed_trades": 27,
|
||||
"realized_pnl": -17592825.713000014,
|
||||
"closed_trades": 28,
|
||||
"wins": 0,
|
||||
"peak_equity": 101140808.32700005,
|
||||
"max_drawdown": 0.17882199227165796,
|
||||
"max_drawdown": 0.1947881632733674,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-15",
|
||||
"086790": "2026-07-29",
|
||||
@@ -193,8 +193,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583227+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.012342+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.389108+09:00"
|
||||
}
|
||||
@@ -82,3 +82,7 @@
|
||||
{"ts": "2026-07-30T09:16:11.967598+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 39, "cost": 4883532, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 141900, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,900"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.568344+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 28, "cost": 3690954, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.515659+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 832, "cost": 5242386, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7322, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:07.673294+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 293, "cost": 1919438, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.673492+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.535674+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:10:13.091947+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25250, "qty": 201, "cost": 5076011, "path": "pullback", "reason": "눌림목 지정가 25,331 도달", "stop": 23650, "target": 28450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,200 vs 25,175"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,380 / 25,175"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,380 / 25,155"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -414 · 기 +642 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,295,520 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,331 (현재 25,200)"}]}
|
||||
{"ts": "2026-07-31T10:36:07.698613+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 26100, "qty": 194, "cost": 5064160, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 23650, "target": 28450, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 26,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 28,450"}, {"label": "추세(10일선)", "ok": true, "detail": "25,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -410 · 기 +640"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,884"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 37496014.29399997,
|
||||
"cash": 42659048.57399997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5225929.659467572,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 114,
|
||||
"entry_price": 89526.31578947368,
|
||||
"entry_at": "2026-07-23T09:50:01.537436+09:00",
|
||||
"stop": 81292,
|
||||
"target": 101878,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5138975.321289769,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,653 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5535182.720656248,
|
||||
"last_add_price": 19090
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 440,
|
||||
"entry_price": 6130,
|
||||
"qty": 852,
|
||||
"entry_price": 6333.098591549296,
|
||||
"entry_at": "2026-07-30T09:04:07.525083+09:00",
|
||||
"stop": 5127,
|
||||
"target": 7634,
|
||||
"peak": 6330,
|
||||
"stop": 5363,
|
||||
"target": 7789,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2702321.452399152,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5554493.212437497,
|
||||
"last_add_price": 127700
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5277490.897081996,
|
||||
"last_add_price": 131800
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -12144022.844500024,
|
||||
"closed_trades": 36,
|
||||
"realized_pnl": -14489514.674500024,
|
||||
"closed_trades": 37,
|
||||
"wins": 5,
|
||||
"peak_equity": 100344662.275,
|
||||
"max_drawdown": 0.13657655195890225,
|
||||
"max_drawdown": 0.16636733158011952,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-20",
|
||||
"030000": "2026-07-29",
|
||||
@@ -172,8 +151,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583241+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.014868+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.392670+09:00"
|
||||
}
|
||||
@@ -95,3 +95,5 @@
|
||||
{"ts": "2026-07-30T09:24:07.570832+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 40, "cost": 5272791, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 148465, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.518278+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 880, "cost": 5544832, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 6875, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,280 vs 5,353"}, {"label": "정배열(5>20)", "ok": true, "detail": "5,722 / 5,353"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T10:10:07.466772+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 127700, "qty": 43, "cost": 5491924, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 116537, "target": 136194, "signals": [{"label": "손절선", "ok": true, "detail": "116,537 (현재 127,600)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,194"}, {"label": "추세(20일선)", "ok": true, "detail": "113,935"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +35 · 기 +392"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 127,135"}]}
|
||||
{"ts": "2026-07-31T09:04:08.455844+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 114, "proceeds": 7862039, "entry_price": 89526, "pnl": -2345492, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.537436+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,292 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,878"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.677038+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 412, "cost": 2699005, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 7634, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 7,634"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 33226459.752500013,
|
||||
"cash": 37787276.40250001,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3939968.9939820534,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 85,
|
||||
"entry_price": 89534.11764705883,
|
||||
"entry_at": "2026-07-23T09:50:01.539141+09:00",
|
||||
"stop": 78555,
|
||||
"target": 106003,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3836617.5002028025,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5821568.917468751,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5570614.761375001,
|
||||
"last_add_price": 120500
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5217780.328505317,
|
||||
"last_add_price": 125200
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 332,
|
||||
"entry_price": 6130,
|
||||
"qty": 642,
|
||||
"entry_price": 6332.803738317757,
|
||||
"entry_at": "2026-07-30T09:04:07.528031+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2036737.90524699,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,17 +123,17 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4011548.961969723,
|
||||
"last_add_price": 131800
|
||||
}
|
||||
},
|
||||
"realized_pnl": -12402875.871000022,
|
||||
"closed_trades": 33,
|
||||
"realized_pnl": -13422796.206000023,
|
||||
"closed_trades": 34,
|
||||
"wins": 5,
|
||||
"peak_equity": 101368884.75700004,
|
||||
"max_drawdown": 0.13703657722781418,
|
||||
"max_drawdown": 0.15532723273265314,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-24",
|
||||
"086790": "2026-07-20",
|
||||
@@ -172,8 +151,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583273+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.017283+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.395927+09:00"
|
||||
}
|
||||
@@ -93,3 +93,5 @@
|
||||
{"ts": "2026-07-30T09:16:11.972281+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 41, "cost": 5133970, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 136750, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,750"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.573214+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 30, "cost": 3954593, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "132,000 vs 108,925"}, {"label": "정배열(5>20)", "ok": true, "detail": "115,580 / 108,925"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T11:58:08.476701+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 116, "proceeds": 10616457, "entry_price": 101116, "pnl": -1114802, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.842571+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 114,641"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.680660+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 310, "cost": 2030805, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.681033+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 85, "proceeds": 6591621, "entry_price": 89534, "pnl": -1019920, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.539141+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,555 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,003"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 37416197.41350004,
|
||||
"cash": 41907079.86600004,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3869967.7922643563,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89533.73493975903,
|
||||
"entry_at": "2026-07-23T09:50:01.540887+09:00",
|
||||
"stop": 78554,
|
||||
"target": 111492,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3737129.4618013836,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,643 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5724944.494593753,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5162533.383709267,
|
||||
"last_add_price": 126400
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 317,
|
||||
"entry_price": 6130,
|
||||
"qty": 614,
|
||||
"entry_price": 6333.159609120521,
|
||||
"entry_at": "2026-07-30T09:04:07.530698+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8804,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8921,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1948420.7709670917,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3813556.4512976124,
|
||||
"last_add_price": 131800
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -15391014.730000013,
|
||||
"closed_trades": 23,
|
||||
"realized_pnl": -16386905.170000013,
|
||||
"closed_trades": 24,
|
||||
"wins": 0,
|
||||
"peak_equity": 100024962.38500004,
|
||||
"max_drawdown": 0.16156951810984665,
|
||||
"max_drawdown": 0.17739604290679473,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-15",
|
||||
"086790": "2026-07-28",
|
||||
@@ -170,8 +149,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583289+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.019610+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.399065+09:00"
|
||||
}
|
||||
@@ -69,3 +69,5 @@
|
||||
{"ts": "2026-07-30T09:24:07.575537+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 28, "cost": 3690954, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 161427, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.522976+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 837, "cost": 5273891, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7322, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T09:50:07.328694+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 144168, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 144,168"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.684130+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 297, "cost": 1945642, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8804, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,804"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.684470+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.540887+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 111,492"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 44185194.14600003,
|
||||
"cash": 48649872.66850003,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3898349.7986140535,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 83,
|
||||
"entry_price": 89533.73493975903,
|
||||
"entry_at": "2026-07-23T09:50:01.542608+09:00",
|
||||
"stop": 78554,
|
||||
"target": 106003,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3762093.1541708363,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5181824.996564139,
|
||||
"last_add_price": 126400
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,653 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5394916.926375002,
|
||||
"last_add_price": 19090
|
||||
@@ -92,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 322,
|
||||
"entry_price": 6130,
|
||||
"qty": 623,
|
||||
"entry_price": 6332.921348314607,
|
||||
"entry_at": "2026-07-30T09:04:07.533744+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1976520.6885600227,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3863996.750727336,
|
||||
"last_add_price": 131800
|
||||
@@ -150,11 +129,11 @@
|
||||
"last_add_price": 6300
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14100509.648000013,
|
||||
"closed_trades": 24,
|
||||
"realized_pnl": -15096400.088000013,
|
||||
"closed_trades": 25,
|
||||
"wins": 1,
|
||||
"peak_equity": 100024962.38500004,
|
||||
"max_drawdown": 0.14963632959330708,
|
||||
"max_drawdown": 0.16498611269635213,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-29",
|
||||
"086790": "2026-07-28",
|
||||
@@ -170,8 +149,9 @@
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"252990": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583304+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.021844+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.402183+09:00"
|
||||
}
|
||||
@@ -68,3 +68,5 @@
|
||||
{"ts": "2026-07-30T09:24:07.577835+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.525243+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 848, "cost": 5343201, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-30T09:50:07.330983+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 126400, "qty": 40, "cost": 5056758, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 113016, "target": 138976, "signals": [{"label": "손절선", "ok": true, "detail": "113,016 (현재 126,200)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,976"}, {"label": "추세(10일선)", "ok": true, "detail": "117,230"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +9 · 기 +389"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 126,082"}]}
|
||||
{"ts": "2026-07-31T09:06:07.687576+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 301, "cost": 1971846, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.687761+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 83, "proceeds": 6436524, "entry_price": 89534, "pnl": -995890, "pnl_pct": -13.22, "hold_from": "2026-07-23T09:50:01.542608+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,554 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 106,003"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 32656100.83900003,
|
||||
"cash": 26839724.289000034,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3913399.394880189,
|
||||
"last_add_price": 353000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 84,
|
||||
"entry_price": 89517.85714285714,
|
||||
"entry_at": "2026-07-23T09:50:01.544323+09:00",
|
||||
"stop": 78539,
|
||||
"target": 105987,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3814573.88062613,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5436300.471625002,
|
||||
"last_add_price": 120500
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5045807.2398149045,
|
||||
"last_add_price": 125200
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,019 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5355663.862750002,
|
||||
"last_add_price": 19090
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 320,
|
||||
"entry_price": 6130,
|
||||
"qty": 619,
|
||||
"entry_price": 6332.875605815832,
|
||||
"entry_at": "2026-07-30T09:04:07.536435+09:00",
|
||||
"stop": 4793,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1962123.1366758423,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3860356.183815298,
|
||||
"last_add_price": 131800
|
||||
@@ -169,13 +148,34 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 5341728.159493153,
|
||||
"last_add_price": 6300
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 404,
|
||||
"entry_price": 25668.688118811882,
|
||||
"entry_at": "2026-07-31T09:10:13.109330+09:00",
|
||||
"stop": 23650,
|
||||
"target": 28697,
|
||||
"peak": 26100,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 25,331 도달",
|
||||
"cur_price": 25850,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5195064.988218753,
|
||||
"last_add_price": 26100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -14884731.466000017,
|
||||
"closed_trades": 31,
|
||||
"realized_pnl": -15891286.651000017,
|
||||
"closed_trades": 32,
|
||||
"wins": 2,
|
||||
"peak_equity": 101140808.32700005,
|
||||
"max_drawdown": 0.16118367805893888,
|
||||
"max_drawdown": 0.17816516214938674,
|
||||
"last_exit": {
|
||||
"030000": "2026-07-29",
|
||||
"086790": "2026-07-29",
|
||||
@@ -193,8 +193,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583318+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.024000+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.405006+09:00"
|
||||
}
|
||||
@@ -90,3 +90,7 @@
|
||||
{"ts": "2026-07-30T09:16:11.978788+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 40, "cost": 5008751, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 136750, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 136,750"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.580164+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 29, "cost": 3822773, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 116987, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.527449+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 847, "cost": 5336900, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5789, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:06:07.690648+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 299, "cost": 1958744, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:07.690792+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 84, "proceeds": 6514073, "entry_price": 89518, "pnl": -1006555, "pnl_pct": -13.2, "hold_from": "2026-07-23T09:50:01.544323+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,539 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,987"}, {"label": "추세(10일선)", "ok": false, "detail": "79,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:10:13.109332+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25250, "qty": 205, "cost": 5177026, "path": "pullback", "reason": "눌림목 지정가 25,331 도달", "stop": 23650, "target": 27650, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,200 vs 25,175"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,380 / 25,175"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,380 / 25,155"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.9%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -414 · 기 +642 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+45%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.35% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "1,295,520 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.35% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "48"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,331 (현재 25,200)"}]}
|
||||
{"ts": "2026-07-31T10:36:07.715089+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 26100, "qty": 199, "cost": 5194679, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 23650, "target": 27650, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 26,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 27,650"}, {"label": "추세(10일선)", "ok": true, "detail": "25,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -410 · 기 +640"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,884"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 23922167.98359999,
|
||||
"cash": 24296204.55109999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5038910.050638685,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 108,
|
||||
"entry_price": 89525.0,
|
||||
"entry_at": "2026-07-23T09:50:01.546094+09:00",
|
||||
"stop": 81291,
|
||||
"target": 105994,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4907020.835552651,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,032 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5601008.3746875,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 2,135 도달",
|
||||
"cur_price": 1846,
|
||||
"cur_price": 1911,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2627079.6319200005,
|
||||
"last_add_price": 1951
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5278498.658468749,
|
||||
"last_add_price": 120500
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5079406.382253983,
|
||||
"last_add_price": 125200
|
||||
@@ -134,27 +113,48 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 416,
|
||||
"entry_price": 6130,
|
||||
"qty": 805,
|
||||
"entry_price": 6332.95652173913,
|
||||
"entry_at": "2026-07-30T09:04:07.538973+09:00",
|
||||
"stop": 5127,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5363,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2553079.5546287536,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
"name": "S-Oil",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 36,
|
||||
"entry_price": 125700,
|
||||
"entry_at": "2026-07-31T09:46:07.688446+09:00",
|
||||
"stop": 114633,
|
||||
"target": 147835,
|
||||
"peak": 128500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4531819.457811181,
|
||||
"last_add_price": 125700
|
||||
}
|
||||
},
|
||||
"realized_pnl": -17253943.75650002,
|
||||
"closed_trades": 40,
|
||||
"realized_pnl": -19475846.52150002,
|
||||
"closed_trades": 41,
|
||||
"wins": 4,
|
||||
"peak_equity": 101501376.42350003,
|
||||
"max_drawdown": 0.19049332256565776,
|
||||
"max_drawdown": 0.22092032524603686,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-20",
|
||||
"030000": "2026-07-24",
|
||||
@@ -172,8 +172,9 @@
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583333+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.026155+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.407764+09:00"
|
||||
}
|
||||
@@ -114,3 +114,6 @@
|
||||
{"ts": "2026-07-30T09:04:07.538974+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 416, "cost": 2550463, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 5127, "target": 8135, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:11.980919+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 40, "cost": 5008751, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111347, "target": 141206, "signals": [{"label": "손절선", "ok": true, "detail": "111,347 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,206"}, {"label": "추세(20일선)", "ok": true, "detail": "118,515"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T11:58:08.485485+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 110, "proceeds": 10067330, "entry_price": 101115, "pnl": -1056938, "pnl_pct": -9.31, "hold_from": "2026-07-22T09:04:01.849191+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 119,144"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:04:08.471419+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 108, "proceeds": 7448248, "entry_price": 89525, "pnl": -2221903, "pnl_pct": -22.81, "hold_from": "2026-07-23T09:50:01.546094+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,291 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,994"}, {"label": "추세(20일선)", "ok": true, "detail": "74,655"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.693609+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 389, "cost": 2548332, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:46:07.688449+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 125700, "qty": 36, "cost": 4525879, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 114633, "target": 147835, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "125,700 vs 108,610"}, {"label": "정배열(5>20)", "ok": true, "detail": "114,320 / 108,610"}, {"label": "추세 기울기(20일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "114,320 / 113,125"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+29.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -25 · 기 +53 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+26%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.64% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "725,940 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.64% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "65"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 18351172.354000002,
|
||||
"cash": 13473931.171500001,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5033450.427529937,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 110,
|
||||
"entry_price": 89525.45454545454,
|
||||
"entry_at": "2026-07-23T09:50:01.547830+09:00",
|
||||
"stop": 81291,
|
||||
"target": 105994,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4951509.819030465,
|
||||
"last_add_price": 90900
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,012 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5662520.118343751,
|
||||
"last_add_price": 18950
|
||||
@@ -81,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 118,115 도달",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5234858.44571875,
|
||||
"last_add_price": 120500
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 122,665 도달",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5051285.121721717,
|
||||
"last_add_price": 125200
|
||||
@@ -113,20 +92,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 413,
|
||||
"entry_price": 6130,
|
||||
"qty": 799,
|
||||
"entry_price": 6332.9036295369215,
|
||||
"entry_at": "2026-07-30T09:04:07.541375+09:00",
|
||||
"stop": 5127,
|
||||
"target": 8135,
|
||||
"peak": 6330,
|
||||
"stop": 5362,
|
||||
"target": 8274,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 2534339.801822408,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4999655.762454186,
|
||||
"last_add_price": 131800
|
||||
@@ -169,13 +148,34 @@
|
||||
"tranches": 1,
|
||||
"tranche_value": 5258695.03025,
|
||||
"last_add_price": 6300
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 387,
|
||||
"entry_price": 25667.31266149871,
|
||||
"entry_at": "2026-07-31T09:06:07.726656+09:00",
|
||||
"stop": 23764,
|
||||
"target": 29473,
|
||||
"peak": 26100,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 25,335 도달",
|
||||
"cur_price": 25850,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4983661.27525,
|
||||
"last_add_price": 26100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -17677343.36250002,
|
||||
"closed_trades": 36,
|
||||
"realized_pnl": -19940442.48250002,
|
||||
"closed_trades": 37,
|
||||
"wins": 2,
|
||||
"peak_equity": 101258161.16350003,
|
||||
"max_drawdown": 0.19142992543288662,
|
||||
"max_drawdown": 0.2221436364588878,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"030000": "2026-07-16",
|
||||
@@ -193,8 +193,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29"
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583347+09:00",
|
||||
"updated_at": "2026-07-30T15:28:07.028244+09:00"
|
||||
"updated_at": "2026-07-31T15:28:08.410508+09:00"
|
||||
}
|
||||
@@ -102,3 +102,7 @@
|
||||
{"ts": "2026-07-30T09:16:11.983033+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 40, "cost": 5008751, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111347, "target": 141206, "signals": [{"label": "손절선", "ok": true, "detail": "111,347 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 141,206"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T09:24:07.584370+09:00", "side": "BUY", "code": "010950", "name": "S-Oil", "price": 131800, "qty": 37, "cost": 4877331, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 120690, "target": 154020, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "132,000 vs 108,670"}, {"label": "정배열(5>10)", "ok": true, "detail": "115,580 / 108,670"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "115,580 / 113,230"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+51.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -6 · 기 +178 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+20%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.66% (환산) vs 평균 0.32% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 116,900"}, {"label": "거래량 급증", "ok": true, "detail": "738,813 (환산) vs 평균 359,705"}, {"label": "회전율 급증", "ok": true, "detail": "0.66% (환산) vs 평균 0.32%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-30T09:26:07.531673+09:00", "side": "BUY", "code": "090850", "name": "현대이지웰", "price": 6300, "qty": 834, "cost": 5254988, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 5917, "target": 7067, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,280 vs 5,581"}, {"label": "정배열(5>10)", "ok": true, "detail": "5,722 / 5,581"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "5,722 / 5,620"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +87 · 기 +6 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.22% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 5,700"}, {"label": "거래량 급증", "ok": true, "detail": "109,080 (환산) vs 평균 49,512"}, {"label": "회전율 급증", "ok": true, "detail": "0.51% (환산) vs 평균 0.22%"}, {"label": "RSI", "ok": true, "detail": "71"}]}
|
||||
{"ts": "2026-07-31T09:04:08.474094+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 110, "proceeds": 7586178, "entry_price": 89525, "pnl": -2263099, "pnl_pct": -22.82, "hold_from": "2026-07-23T09:50:01.547830+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "81,291 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 105,994"}, {"label": "추세(10일선)", "ok": false, "detail": "80,070"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:07.726659+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 25250, "qty": 197, "cost": 4974996, "path": "pullback", "reason": "눌림목 지정가 25,335 도달", "stop": 23650, "target": 28450, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "25,300 vs 25,185"}, {"label": "정배열(5>10)", "ok": true, "detail": "25,400 / 25,185"}, {"label": "추세 기울기(10일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 하향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "25,400 / 25,157"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -414 · 기 +642 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.27% (환산) vs 평균 0.58% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 28,400"}, {"label": "거래량 급증", "ok": false, "detail": "976,253 (환산) vs 평균 2,146,231"}, {"label": "회전율 급증", "ok": false, "detail": "0.27% (환산) vs 평균 0.58%"}, {"label": "RSI", "ok": true, "detail": "49"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 25,335 (현재 25,300)"}]}
|
||||
{"ts": "2026-07-31T09:06:07.727005+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 386, "cost": 2528679, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 5127, "target": 8135, "signals": [{"label": "손절선", "ok": true, "detail": "5,127 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 8,135"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T10:36:07.720717+09:00", "side": "BUY", "code": "003490", "name": "대한항공", "price": 26100, "qty": 190, "cost": 4959744, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 23650, "target": 28450, "signals": [{"label": "손절선", "ok": true, "detail": "23,650 (현재 26,100)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 28,450"}, {"label": "추세(10일선)", "ok": true, "detail": "25,265"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -410 · 기 +640"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 25,884"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 49729888.414000005,
|
||||
"cash": 51281233.3715,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3627364.7637924887,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:02.863253+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559940.05276684,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4841528.853832099,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 297,
|
||||
"entry_price": 6130,
|
||||
"qty": 574,
|
||||
"entry_price": 6332.682926829269,
|
||||
"entry_at": "2026-07-30T09:04:08.134813+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10214,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1821085.8869957556,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3547525.853504033,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:09.540195+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1688085.214726109,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21269252.109500043,
|
||||
"closed_trades": 88,
|
||||
"realized_pnl": -23364904.11950005,
|
||||
"closed_trades": 94,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.22011142445999995,
|
||||
"max_drawdown": 0.243873965035,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
@@ -125,14 +125,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -141,8 +141,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621011+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.183337+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.638904+09:00"
|
||||
}
|
||||
@@ -199,3 +199,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.106315+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.080909+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.106299+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:07.867097+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.560863+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:17.033030+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:17.983416+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 37, "cost": 4773716, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.039950+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 51, "cost": 4804921, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.226130+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 37, "proceeds": 4663987, "entry_price": 129000, "pnl": -109728, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:17.983399+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.763721+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 94200, "pnl": -147520, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:19.039933+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.523981+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:02.863253+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.468117+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 277, "cost": 1814622, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.047645+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:17.033013+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:08.905660+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:10.644653+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:08.905644+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:13.463887+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:09.280871+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:13.463869+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:09.540211+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 42616576.14,
|
||||
"cash": 41331909.855000004,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3627364.7637924887,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5013998.744343751,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4760241.173848085,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 291,
|
||||
"entry_price": 6130,
|
||||
"qty": 563,
|
||||
"entry_price": 6332.91296625222,
|
||||
"entry_at": "2026-07-30T09:04:08.152605+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1786459.912670363,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3470885.263866936,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4834735.918983269,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 34,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.456357+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.144403+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3206592.870573522,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1668794.556510239,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -22861096.287500046,
|
||||
"closed_trades": 90,
|
||||
"realized_pnl": -23932130.532500047,
|
||||
"closed_trades": 96,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.23670020299999997,
|
||||
"max_drawdown": 0.25204854345,
|
||||
"last_exit": {
|
||||
"086790": "2026-07-29",
|
||||
"005930": "2026-06-23",
|
||||
@@ -167,14 +167,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -183,10 +183,10 @@
|
||||
"095610": "2026-07-30",
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583395+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.192156+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.647259+09:00"
|
||||
}
|
||||
@@ -206,3 +206,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.470811+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.846251+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.513874+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.116228+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.513862+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.147918+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 8, "cost": 4264640, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.540118+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 34, "proceeds": 2344819, "entry_price": 92000, "pnl": -783651, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.456357+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.519482+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 37, "cost": 4621993, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.520559+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 272, "cost": 1781867, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.656798+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 8, "proceeds": 4239716, "entry_price": 533000, "pnl": -24923, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.147905+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.697678+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 37, "proceeds": 4494119, "entry_price": 124900, "pnl": -127874, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.519470+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.501040+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 51, "cost": 4697805, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.337120+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 92100, "pnl": -40404, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.501023+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.075908+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.939812+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.075903+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.739172+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 14, "cost": 4410662, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.602878+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 14, "proceeds": 4345510, "entry_price": 315000, "pnl": -65152, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.739168+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.144418+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 50302299.84549998,
|
||||
"cash": 51704665.14799999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.295983+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4871303.908250191,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 299,
|
||||
"entry_price": 6130,
|
||||
"qty": 578,
|
||||
"entry_price": 6332.733564013841,
|
||||
"entry_at": "2026-07-30T09:04:08.158176+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10214,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1833305.2441214651,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3570553.5376633056,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 13,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.152131+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1700911.5399726962,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -20684578.839000043,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -22786089.03900004,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.21431412839500025,
|
||||
"max_drawdown": 0.23808745227000014,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621059+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.198278+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.654732+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.127031+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.100450+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.127028+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.526275+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 31, "proceeds": 3115613, "entry_price": 124923, "pnl": -757568, "pnl_pct": -19.39, "hold_from": "2026-07-28T09:00:22.236421+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 197,590"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.255702+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.257638+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 38, "cost": 4902735, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.258507+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 52, "cost": 4899135, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.785626+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 38, "proceeds": 4790041, "entry_price": 129000, "pnl": -112694, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:19.257632+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.786094+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 52, "proceeds": 4748722, "entry_price": 94200, "pnl": -150413, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:19.258501+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.546349+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.295983+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.529538+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 279, "cost": 1827724, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.705478+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.255695+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.083576+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.946954+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.083572+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.747107+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.612056+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.747103+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.152136+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 13, "cost": 1690254, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 43187379.78399998,
|
||||
"cash": 41940800.65649999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5059022.326624999,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4804885.651525278,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 294,
|
||||
"entry_price": 6130,
|
||||
"qty": 569,
|
||||
"entry_price": 6332.98769771529,
|
||||
"entry_at": "2026-07-30T09:04:08.164091+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1807632.1012232043,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3511790.845106854,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4891717.004707093,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 35,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.466995+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.157501+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3244481.6990387705,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1688285.922413822,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21938549.890000038,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23043857.830000043,
|
||||
"closed_trades": 97,
|
||||
"wins": 2,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.2275985665600002,
|
||||
"max_drawdown": 0.24322889843500017,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -185,9 +185,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"078930": "2026-07-31",
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583512+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.203526+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.659583+09:00"
|
||||
}
|
||||
@@ -209,3 +209,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.533345+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.858523+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.534022+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.135701+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.534018+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.357240+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.551465+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 35, "proceeds": 2413784, "entry_price": 92000, "pnl": -806699, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.466995+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.534643+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 38, "cost": 4746912, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.535203+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 275, "cost": 1801520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.711892+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.357235+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.712282+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 38, "proceeds": 4615582, "entry_price": 124900, "pnl": -131330, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.534640+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.517432+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 51, "cost": 4697805, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.355707+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 92100, "pnl": -40404, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.517428+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.089262+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.952328+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.089256+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.753172+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.618411+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.753168+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.157504+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 49721770.21849997,
|
||||
"cash": 51273115.17599997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.310812+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4840682.195130728,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 296,
|
||||
"entry_price": 6130,
|
||||
"qty": 573,
|
||||
"entry_price": 6333.0366492146595,
|
||||
"entry_at": "2026-07-30T09:04:08.168790+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1820759.233761088,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3546894.320639113,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.162967+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1687768.019262798,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21283501.22450004,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -23379153.234500043,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.22025160641500027,
|
||||
"max_drawdown": 0.2440181469900003,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621103+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.208139+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.664783+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.136931+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.110478+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.136928+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.539547+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.864085+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.465477+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.467150+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 37, "cost": 4773716, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.467943+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 51, "cost": 4804921, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.795920+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 37, "proceeds": 4663987, "entry_price": 129000, "pnl": -109728, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:19.467143+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.796221+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 94200, "pnl": -147520, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:19.467937+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.556786+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.310812+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.541647+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 277, "cost": 1814622, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.717503+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.465469+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.095234+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.958076+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.095230+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.758513+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.623919+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.758510+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.162971+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 42562145.01899998,
|
||||
"cash": 41278270.97399998,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5010126.595875,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4756556.382853909,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 291,
|
||||
"entry_price": 6130,
|
||||
"qty": 563,
|
||||
"entry_price": 6332.91296625222,
|
||||
"entry_at": "2026-07-30T09:04:08.173280+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1785067.433710845,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3468191.0592600796,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4830985.601508463,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 34,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.476907+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.167956+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3204099.6853260673,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1667469.2912320814,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -22921838.35500005,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23992080.36000005,
|
||||
"closed_trades": 97,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.23730531421000017,
|
||||
"max_drawdown": 0.25264613226000027,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -184,10 +184,10 @@
|
||||
"095610": "2026-07-30",
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583628+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.212257+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.668945+09:00"
|
||||
}
|
||||
@@ -208,3 +208,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.544147+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.869049+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.544554+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.146821+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.544552+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.568617+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 8, "cost": 4264640, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.561610+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 34, "proceeds": 2344819, "entry_price": 92000, "pnl": -783651, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.476907+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.546071+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 37, "cost": 4621993, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.546348+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 272, "cost": 1781867, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.721782+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 8, "proceeds": 4239716, "entry_price": 533000, "pnl": -24923, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.568608+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.721945+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 37, "proceeds": 4494119, "entry_price": 124900, "pnl": -127874, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.546067+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.528902+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 50, "cost": 4605691, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.367010+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 50, "proceeds": 4566079, "entry_price": 92100, "pnl": -39612, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.528897+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.100060+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.962571+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.100057+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.762890+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 14, "cost": 4410662, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.628614+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 14, "proceeds": 4345510, "entry_price": 315000, "pnl": -65152, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.762887+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.167959+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 50302299.84549998,
|
||||
"cash": 51704665.14799999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.323082+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4871303.908250191,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 299,
|
||||
"entry_price": 6130,
|
||||
"qty": 578,
|
||||
"entry_price": 6332.733564013841,
|
||||
"entry_at": "2026-07-30T09:04:08.177640+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10214,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1833305.2441214651,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3570553.5376633056,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 13,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.171880+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1700911.5399726962,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -20684578.839000043,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -22786089.03900004,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.21431412839500025,
|
||||
"max_drawdown": 0.23808745227000014,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621148+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.216191+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.672572+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.145344+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.118312+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.145341+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.548002+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 31, "proceeds": 3115613, "entry_price": 124923, "pnl": -757568, "pnl_pct": -19.39, "hold_from": "2026-07-28T09:00:22.654170+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 197,590"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.673566+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.675135+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 38, "cost": 4902735, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.675813+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 52, "cost": 4899135, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.804160+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 38, "proceeds": 4790041, "entry_price": 129000, "pnl": -112694, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:19.675129+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.804383+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 52, "proceeds": 4748722, "entry_price": 94200, "pnl": -150413, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:19.675808+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.565481+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.323082+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.550653+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 279, "cost": 1827724, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.726103+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.673558+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.104148+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.966794+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.104145+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.766716+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.632970+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.766714+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.171882+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 13, "cost": 1690254, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 43187379.78399998,
|
||||
"cash": 41940800.65649999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5059022.326624999,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4804885.651525278,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 294,
|
||||
"entry_price": 6130,
|
||||
"qty": 569,
|
||||
"entry_price": 6332.98769771529,
|
||||
"entry_at": "2026-07-30T09:04:08.181805+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1807632.1012232043,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3511790.845106854,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4891717.004707093,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 35,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.484228+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.175583+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3244481.6990387705,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1688285.922413822,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21938549.890000038,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23043857.830000043,
|
||||
"closed_trades": 97,
|
||||
"wins": 2,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.2275985665600002,
|
||||
"max_drawdown": 0.24322889843500017,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -185,9 +185,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"078930": "2026-07-31",
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.583751+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.219742+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.676157+09:00"
|
||||
}
|
||||
@@ -209,3 +209,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.551656+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.877598+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.552024+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.155246+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.552022+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.775009+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.569169+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 35, "proceeds": 2413784, "entry_price": 92000, "pnl": -806699, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.484228+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.554259+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 38, "cost": 4746912, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.554491+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 275, "cost": 1801520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.729704+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.775002+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.729834+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 38, "proceeds": 4615582, "entry_price": 124900, "pnl": -131330, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.554256+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.537871+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 51, "cost": 4697805, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.375215+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 92100, "pnl": -40404, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.537867+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.107952+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.970531+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.107950+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.770420+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.636700+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.770417+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.175585+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 50302299.84549998,
|
||||
"cash": 51704665.14799999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.333068+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4871303.908250191,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 299,
|
||||
"entry_price": 6130,
|
||||
"qty": 578,
|
||||
"entry_price": 6332.733564013841,
|
||||
"entry_at": "2026-07-30T09:04:08.185692+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10214,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1833305.2441214651,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3570553.5376633056,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 13,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.179162+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1700911.5399726962,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -20684578.839000043,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -22786089.03900004,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.21431412839500025,
|
||||
"max_drawdown": 0.23808745227000014,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621367+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.223308+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.679464+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.152216+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.125170+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.152214+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.555218+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 31, "proceeds": 3115613, "entry_price": 124923, "pnl": -757568, "pnl_pct": -19.39, "hold_from": "2026-07-28T09:00:22.865306+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 197,590"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.880173+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.882110+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 38, "cost": 4902735, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:19.882873+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 52, "cost": 4899135, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.811431+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 38, "proceeds": 4790041, "entry_price": 129000, "pnl": -112694, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:19.882103+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.811631+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 52, "proceeds": 4748722, "entry_price": 94200, "pnl": -150413, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:19.882867+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.572645+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.333068+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.557905+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 279, "cost": 1827724, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.733413+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.880166+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.111619+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.974285+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.111616+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.773980+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.640385+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.773978+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.179164+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 13, "cost": 1690254, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 43187379.78399998,
|
||||
"cash": 41940800.65649999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5059022.326624999,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4804885.651525278,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 294,
|
||||
"entry_price": 6130,
|
||||
"qty": 569,
|
||||
"entry_price": 6332.98769771529,
|
||||
"entry_at": "2026-07-30T09:04:08.189515+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1807632.1012232043,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3511790.845106854,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4891717.004707093,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 35,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.490882+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.182486+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3244481.6990387705,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1688285.922413822,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21938549.890000038,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23043857.830000043,
|
||||
"closed_trades": 97,
|
||||
"wins": 2,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.2275985665600002,
|
||||
"max_drawdown": 0.24322889843500017,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -185,9 +185,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"078930": "2026-07-31",
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.584337+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.226495+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.682643+09:00"
|
||||
}
|
||||
@@ -209,3 +209,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.558426+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.886191+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.558735+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.162472+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.558733+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:19.986131+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.575939+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 35, "proceeds": 2413784, "entry_price": 92000, "pnl": -806699, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.490882+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.561023+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 38, "cost": 4746912, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.561230+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 275, "cost": 1801520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.736657+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:19.986122+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.736793+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 38, "proceeds": 4615582, "entry_price": 124900, "pnl": -131330, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.561021+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.545158+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 51, "cost": 4697805, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.382317+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 92100, "pnl": -40404, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.545156+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.114949+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.977602+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.114947+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.777271+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.643902+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.777269+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.182488+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 50302299.84549998,
|
||||
"cash": 51704665.14799999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.341660+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4871303.908250191,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 299,
|
||||
"entry_price": 6130,
|
||||
"qty": 578,
|
||||
"entry_price": 6332.733564013841,
|
||||
"entry_at": "2026-07-30T09:04:08.192841+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10214,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1833305.2441214651,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3570553.5376633056,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 13,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.185779+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1700911.5399726962,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -20684578.839000043,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -22786089.03900004,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.21431412839500025,
|
||||
"max_drawdown": 0.23808745227000014,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621411+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.229484+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.685807+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.158629+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.131100+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.158627+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.561778+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 31, "proceeds": 3115613, "entry_price": 124923, "pnl": -757568, "pnl_pct": -19.39, "hold_from": "2026-07-28T09:00:23.083067+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 197,590"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:20.088315+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:20.090008+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 38, "cost": 4902735, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:20.091172+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 52, "cost": 4899135, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.817649+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 38, "proceeds": 4790041, "entry_price": 129000, "pnl": -112694, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:20.089998+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.817834+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 52, "proceeds": 4748722, "entry_price": 94200, "pnl": -150413, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:20.091164+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.579251+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.341660+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.564480+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 279, "cost": 1827724, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.739858+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:20.088308+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.118024+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.980768+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.118022+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.780588+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.647165+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.780586+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.185781+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 13, "cost": 1690254, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 43187379.78399998,
|
||||
"cash": 41940800.65649999,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5059022.326624999,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4804885.651525278,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 294,
|
||||
"entry_price": 6130,
|
||||
"qty": 569,
|
||||
"entry_price": 6332.98769771529,
|
||||
"entry_at": "2026-07-30T09:04:08.196316+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1807632.1012232043,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3511790.845106854,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4891717.004707093,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 35,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.497001+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.188782+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3244481.6990387705,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1688285.922413822,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21938549.890000038,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23043857.830000043,
|
||||
"closed_trades": 97,
|
||||
"wins": 2,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.2275985665600002,
|
||||
"max_drawdown": 0.24322889843500017,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -185,9 +185,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"090850": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"078930": "2026-07-31",
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.584451+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.232327+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.688666+09:00"
|
||||
}
|
||||
@@ -209,3 +209,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.564699+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.894214+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.564981+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.169075+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.564979+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:20.199055+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.582298+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 35, "proceeds": 2413784, "entry_price": 92000, "pnl": -806699, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.497001+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.567296+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 38, "cost": 4746912, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.567479+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 275, "cost": 1801520, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.742747+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:20.199047+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.742867+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 38, "proceeds": 4615582, "entry_price": 124900, "pnl": -131330, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.567294+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.551680+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 51, "cost": 4697805, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.388474+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 92100, "pnl": -40404, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.551678+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.121057+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.983691+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.121055+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.783569+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.650108+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.783567+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.188784+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 49721770.21849997,
|
||||
"cash": 51273115.17599997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.350271+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4840682.195130728,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 296,
|
||||
"entry_price": 6130,
|
||||
"qty": 573,
|
||||
"entry_price": 6333.0366492146595,
|
||||
"entry_at": "2026-07-30T09:04:08.199417+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1820759.233761088,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3546894.320639113,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.191677+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1687768.019262798,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21283501.22450004,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -23379153.234500043,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.22025160641500027,
|
||||
"max_drawdown": 0.2440181469900003,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621453+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.235152+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.691455+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.164212+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.136768+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.164210+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.567616+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.897785+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:20.301235+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:20.302795+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 37, "cost": 4773716, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:20.303561+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 51, "cost": 4804921, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.823579+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 37, "proceeds": 4663987, "entry_price": 129000, "pnl": -109728, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:20.302787+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.823740+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 94200, "pnl": -147520, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:20.303555+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.585142+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.350271+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.570274+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 277, "cost": 1814622, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.745738+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:20.301228+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.124064+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.986374+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.124062+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.786424+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.653104+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.786422+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.191679+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 42562145.01899998,
|
||||
"cash": 41278270.97399998,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5010126.595875,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4756556.382853909,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 291,
|
||||
"entry_price": 6130,
|
||||
"qty": 563,
|
||||
"entry_price": 6332.91296625222,
|
||||
"entry_at": "2026-07-30T09:04:08.202607+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1785067.433710845,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3468191.0592600796,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4830985.601508463,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 34,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.502413+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.194352+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3204099.6853260673,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1667469.2912320814,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -22921838.35500005,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23992080.36000005,
|
||||
"closed_trades": 97,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.23730531421000017,
|
||||
"max_drawdown": 0.25264613226000027,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -184,10 +184,10 @@
|
||||
"095610": "2026-07-30",
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.584565+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.237889+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.694058+09:00"
|
||||
}
|
||||
@@ -208,3 +208,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.570244+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.901179+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.570496+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.174854+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.570494+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:20.412353+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 8, "cost": 4264640, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.587801+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 34, "proceeds": 2344819, "entry_price": 92000, "pnl": -783651, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.502413+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.572846+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 37, "cost": 4621993, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.573022+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 272, "cost": 1781867, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.748507+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 8, "proceeds": 4239716, "entry_price": 533000, "pnl": -24923, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:20.412345+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.748604+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 37, "proceeds": 4494119, "entry_price": 124900, "pnl": -127874, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.572844+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.557495+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 50, "cost": 4605691, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.394281+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 50, "proceeds": 4566079, "entry_price": 92100, "pnl": -39612, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.557494+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.126786+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.989011+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.126784+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.789061+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 14, "cost": 4410662, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.656004+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 14, "proceeds": 4345510, "entry_price": 315000, "pnl": -65152, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.789059+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.194354+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 49721770.21849997,
|
||||
"cash": 51273115.17599997,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,32 +18,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 77,
|
||||
"entry_price": 91179.22077922078,
|
||||
"entry_at": "2026-07-23T10:44:03.357444+09:00",
|
||||
"stop": 79957,
|
||||
"target": 124846,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3559349.4158756477,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
@@ -60,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4840682.195130728,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +50,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 296,
|
||||
"entry_price": 6130,
|
||||
"qty": 573,
|
||||
"entry_price": 6333.0366492146595,
|
||||
"entry_at": "2026-07-30T09:04:08.205546+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1820759.233761088,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,17 +81,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3546894.320639113,
|
||||
"last_add_price": 130900
|
||||
},
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.196890+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 1687768.019262798,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -21283501.22450004,
|
||||
"closed_trades": 89,
|
||||
"realized_pnl": -23379153.234500043,
|
||||
"closed_trades": 95,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.22025160641500027,
|
||||
"max_drawdown": 0.2440181469900003,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -126,14 +126,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -142,8 +142,9 @@
|
||||
"003680": "2026-07-29",
|
||||
"138040": "2026-07-28",
|
||||
"010950": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:40:00.621497+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.240441+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.696505+09:00"
|
||||
}
|
||||
@@ -201,3 +201,16 @@
|
||||
{"ts": "2026-07-30T11:14:10.169477+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94400, "qty": 52, "cost": 4909536, "path": "pullback", "reason": "눌림목 지정가 94,648 도달", "stop": 92100, "target": 101300, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.2%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -7 · 기 +40 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.61% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "615,364 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.61% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,648 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.141824+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 94400, "pnl": -150435, "pnl_pct": -2.86, "hold_from": "2026-07-30T11:14:10.169475+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 101,300"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,436"}]}
|
||||
{"ts": "2026-07-30T13:08:08.572854+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.904456+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:20.514537+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 9, "cost": 4797720, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:00:20.516063+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 129000, "qty": 37, "cost": 4773716, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 128999, "target": 129003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "119,700 vs 112,553"}, {"label": "정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "161,580 / 112,553"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+52.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+53%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.37% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,267,313 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "4.37% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "43"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 119,700)"}]}
|
||||
{"ts": "2026-07-31T09:00:20.516731+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94200, "qty": 51, "cost": 4804921, "path": "pullback", "reason": "눌림목 지정가 94,541 도달", "stop": 92100, "target": 100500, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "94,300 vs 91,838"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,160 / 91,838"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+41.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.67% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": false, "detail": "158,873 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "0.67% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,541 (현재 94,300)"}]}
|
||||
{"ts": "2026-07-31T09:02:14.828856+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 126300, "qty": 37, "proceeds": 4663987, "entry_price": 129000, "pnl": -109728, "pnl_pct": -2.09, "hold_from": "2026-07-31T09:00:20.516057+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "128,999 (현재 121,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 129,003"}, {"label": "추세(60일선)", "ok": true, "detail": "112,575"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 140,148"}]}
|
||||
{"ts": "2026-07-31T09:02:14.828995+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 51, "proceeds": 4657400, "entry_price": 94200, "pnl": -147520, "pnl_pct": -2.87, "hold_from": "2026-07-31T09:00:20.516725+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 100,500"}, {"label": "추세(60일선)", "ok": false, "detail": "91,790"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 98,251"}]}
|
||||
{"ts": "2026-07-31T09:04:10.590440+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 77, "proceeds": 5310325, "entry_price": 91179, "pnl": -1711528, "pnl_pct": -24.22, "hold_from": "2026-07-23T10:44:03.357444+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "79,957 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,846"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:06:09.575695+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 277, "cost": 1814622, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.751221+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 9, "proceeds": 4769681, "entry_price": 533000, "pnl": -28039, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:20.514529+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:34:11.129430+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.991677+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.129428+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.791610+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 15, "cost": 4725709, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.658718+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 15, "proceeds": 4655903, "entry_price": 315000, "pnl": -69806, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.791609+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.196892+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 42562145.01899998,
|
||||
"cash": 41278270.97399998,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"214450": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3624744.3180141365,
|
||||
"last_add_price": 356000
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 5010126.595875,
|
||||
"last_add_price": 19370
|
||||
@@ -60,7 +60,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4756556.382853909,
|
||||
"last_add_price": 126400
|
||||
@@ -71,20 +71,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 291,
|
||||
"entry_price": 6130,
|
||||
"qty": 563,
|
||||
"entry_price": 6332.91296625222,
|
||||
"entry_at": "2026-07-30T09:04:08.208371+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1785067.433710845,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"010950": {
|
||||
"code": "010950",
|
||||
@@ -102,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3468191.0592600796,
|
||||
"last_add_price": 130900
|
||||
@@ -128,33 +128,33 @@
|
||||
"tranche_value": 4830985.601508463,
|
||||
"last_add_price": 6310
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"095610": {
|
||||
"code": "095610",
|
||||
"name": "테스",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 34,
|
||||
"entry_price": 92000,
|
||||
"entry_at": "2026-07-30T09:22:08.507277+09:00",
|
||||
"stop": 80806,
|
||||
"target": 125581,
|
||||
"peak": 92000,
|
||||
"qty": 12,
|
||||
"entry_price": 130000,
|
||||
"entry_at": "2026-07-31T12:36:11.199406+09:00",
|
||||
"stop": 100700,
|
||||
"target": 217900,
|
||||
"peak": 130000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 144,129 도달",
|
||||
"cur_price": 130000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3204099.6853260673,
|
||||
"last_add_price": 92000
|
||||
"tranche_value": 1667469.2912320814,
|
||||
"last_add_price": 130000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -22921838.35500005,
|
||||
"closed_trades": 91,
|
||||
"realized_pnl": -23992080.36000005,
|
||||
"closed_trades": 97,
|
||||
"wins": 1,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.23730531421000017,
|
||||
"max_drawdown": 0.25264613226000027,
|
||||
"last_exit": {
|
||||
"017670": "2026-06-19",
|
||||
"086790": "2026-07-29",
|
||||
@@ -168,14 +168,14 @@
|
||||
"009150": "2026-07-27",
|
||||
"214450": "2026-07-06",
|
||||
"093370": "2026-07-20",
|
||||
"034730": "2026-07-28",
|
||||
"032830": "2026-07-27",
|
||||
"319660": "2026-07-30",
|
||||
"034730": "2026-07-31",
|
||||
"032830": "2026-07-31",
|
||||
"319660": "2026-07-31",
|
||||
"011070": "2026-07-24",
|
||||
"003490": "2026-07-09",
|
||||
"402340": "2026-07-22",
|
||||
"004170": "2026-07-23",
|
||||
"028260": "2026-07-24",
|
||||
"028260": "2026-07-31",
|
||||
"055550": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"222800": "2026-07-21",
|
||||
@@ -184,10 +184,10 @@
|
||||
"095610": "2026-07-30",
|
||||
"003680": "2026-07-29",
|
||||
"010950": "2026-07-29",
|
||||
"078930": "2026-07-29",
|
||||
"078930": "2026-07-31",
|
||||
"090850": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-15T14:55:00.584680+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.242886+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.698884+09:00"
|
||||
}
|
||||
@@ -208,3 +208,16 @@
|
||||
{"ts": "2026-07-30T13:08:08.575309+09:00", "side": "SELL", "code": "095610", "name": "테스", "price": 100700, "qty": 36, "proceeds": 3618131, "entry_price": 122750, "pnl": -801532, "pnl_pct": -17.96, "hold_from": "2026-07-29T09:02:02.907686+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "100,700 (현재 100,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 188,900"}, {"label": "추세(60일선)", "ok": true, "detail": "98,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +331 · 기 -349"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T13:08:08.575548+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 91800, "qty": 52, "cost": 4774316, "path": "pullback", "reason": "눌림목 지정가 94,208 도달", "stop": 91799, "target": 91803, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,900 vs 91,798"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,680 / 91,798"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -23 · 기 +38 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.37% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "557,141 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.37% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 94,208 (현재 91,900)"}]}
|
||||
{"ts": "2026-07-30T13:20:09.180299+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 52, "proceeds": 4759102, "entry_price": 91800, "pnl": -15214, "pnl_pct": -0.11, "hold_from": "2026-07-30T13:08:08.575546+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "91,799 (현재 91,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": false, "detail": "91,795"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -23 · 기 +38"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:00:20.617220+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 533000, "qty": 8, "cost": 4264640, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 532999, "target": 533003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "528,000 vs 527,000"}, {"label": "정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "723,600 / 527,000"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+10.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+62%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.31% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "223,753 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.31% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 528,000)"}]}
|
||||
{"ts": "2026-07-31T09:04:10.593098+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 34, "proceeds": 2344819, "entry_price": 92000, "pnl": -783651, "pnl_pct": -24.89, "hold_from": "2026-07-30T09:22:08.507277+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 125,581"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 94,963"}]}
|
||||
{"ts": "2026-07-31T09:06:09.578227+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 124900, "qty": 37, "cost": 4621993, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 124899, "target": 124903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "124,900 vs 112,640"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,620 / 112,640"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+47.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+46%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.16% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,785,393 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.16% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "45"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 124,900)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.578387+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 272, "cost": 1781867, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.753672+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 8, "proceeds": 4239716, "entry_price": 533000, "pnl": -24923, "pnl_pct": -0.38, "hold_from": "2026-07-31T09:00:20.617215+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "532,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:10.753765+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121700, "qty": 37, "proceeds": 4494119, "entry_price": 124900, "pnl": -127874, "pnl_pct": -2.56, "hold_from": "2026-07-31T09:06:09.578225+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "124,899 (현재 123,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 124,903"}, {"label": "추세(60일선)", "ok": true, "detail": "112,608"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +713 · 기 -510"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 136,048"}]}
|
||||
{"ts": "2026-07-31T09:14:10.562794+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 92100, "qty": 50, "cost": 4605691, "path": "pullback", "reason": "눌림목 지정가 93,866 도달", "stop": 92099, "target": 92103, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "91,800 vs 91,797"}, {"label": "정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "105,660 / 91,797"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+23.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +77 · 기 -22 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+44%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.30% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "540,460 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.30% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 93,866 (현재 91,800)"}]}
|
||||
{"ts": "2026-07-31T09:16:13.399568+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91500, "qty": 50, "proceeds": 4566079, "entry_price": 92100, "pnl": -39612, "pnl_pct": -0.65, "hold_from": "2026-07-31T09:14:10.562792+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,099 (현재 91,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 92,103"}, {"label": "추세(60일선)", "ok": false, "detail": "91,792"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +77 · 기 -22"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 96,311"}]}
|
||||
{"ts": "2026-07-31T09:34:11.132019+09:00", "side": "BUY", "code": "028260", "name": "삼성물산", "price": 350500, "qty": 13, "cost": 4557183, "path": "pullback", "reason": "눌림목 지정가 358,486 도달", "stop": 350499, "target": 350503, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "351,000 vs 350,117"}, {"label": "정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "405,900 / 350,117"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-4.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -111 · 기 +179 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+42%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.18% (환산) vs 평균 0.43% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 565,000"}, {"label": "거래량 급증", "ok": true, "detail": "1,917,627 (환산) vs 평균 706,119"}, {"label": "회전율 급증", "ok": true, "detail": "1.18% (환산) vs 평균 0.43%"}, {"label": "RSI", "ok": true, "detail": "42"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 358,486 (현재 351,000)"}]}
|
||||
{"ts": "2026-07-31T09:36:12.994186+09:00", "side": "SELL", "code": "028260", "name": "삼성물산", "price": 349000, "qty": 13, "proceeds": 4528153, "entry_price": 350500, "pnl": -29031, "pnl_pct": -0.43, "hold_from": "2026-07-31T09:34:11.132018+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "350,499 (현재 348,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 350,503"}, {"label": "추세(60일선)", "ok": false, "detail": "350,075"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -111 · 기 +179"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 375,005"}]}
|
||||
{"ts": "2026-07-31T10:10:15.794121+09:00", "side": "BUY", "code": "032830", "name": "삼성생명", "price": 315000, "qty": 14, "cost": 4410662, "path": "pullback", "reason": "눌림목 지정가 386,093 도달", "stop": 314999, "target": 315003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "315,000 vs 311,175"}, {"label": "정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "435,700 / 311,175"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+1.4%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +38 · 기 +29 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+32%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.58% (환산) vs 평균 0.28% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 516,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,148,524 (환산) vs 평균 563,003"}, {"label": "회전율 급증", "ok": true, "detail": "0.58% (환산) vs 평균 0.28%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 386,093 (현재 315,000)"}]}
|
||||
{"ts": "2026-07-31T10:12:11.661315+09:00", "side": "SELL", "code": "032830", "name": "삼성생명", "price": 311000, "qty": 14, "proceeds": 4345510, "entry_price": 315000, "pnl": -65152, "pnl_pct": -1.27, "hold_from": "2026-07-31T10:10:15.794120+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "314,999 (현재 311,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 315,003"}, {"label": "추세(60일선)", "ok": true, "detail": "311,117"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +38 · 기 +29"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 336,469"}]}
|
||||
{"ts": "2026-07-31T12:36:11.199408+09:00", "side": "BUY", "code": "095610", "name": "테스", "price": 130000, "qty": 12, "cost": 1560234, "path": "pullback", "reason": "눌림목 지정가 144,129 도달", "stop": 100700, "target": 217900, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "130,000 vs 99,283"}, {"label": "정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "추세 기울기(60일선↑)", "ok": null, "detail": "게이트 끔(완화) · 실제 우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "166,640 / 99,283"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+28.7%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +397 · 기 -253 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+51%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "9.13% (환산) vs 평균 3.06% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 202,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,767,926 (환산) vs 평균 591,925"}, {"label": "회전율 급증", "ok": true, "detail": "9.13% (환산) vs 평균 3.06%"}, {"label": "RSI", "ok": true, "detail": "50"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 144,129 (현재 130,000)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 30020166.7685,
|
||||
"cash": 25925193.426,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"055550": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 100200,
|
||||
"cur_price": 101100,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4371332.168068898,
|
||||
"last_add_price": 105800
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3448434.606240806,
|
||||
"last_add_price": 130800
|
||||
@@ -60,32 +60,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3417673.0117698065,
|
||||
"last_add_price": 338000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 32,
|
||||
"entry_price": 92800,
|
||||
"entry_at": "2026-07-27T12:12:01.551385+09:00",
|
||||
"stop": 80806,
|
||||
"target": 128781,
|
||||
"peak": 93500,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 1,
|
||||
"tranche_value": 3055813.2324855765,
|
||||
"last_add_price": 92800
|
||||
},
|
||||
"003490": {
|
||||
"code": "003490",
|
||||
"name": "대한항공",
|
||||
@@ -102,7 +81,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 24600,
|
||||
"cur_price": 25850,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4829886.125812501,
|
||||
"last_add_price": 25650
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4425860.654266699,
|
||||
"last_add_price": 125200
|
||||
@@ -134,20 +113,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 281,
|
||||
"entry_price": 6130,
|
||||
"qty": 544,
|
||||
"entry_price": 6333.051470588235,
|
||||
"entry_at": "2026-07-30T09:04:08.798504+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 1723803.5365682123,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
@@ -165,17 +144,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4248451.425139817,
|
||||
"last_add_price": 124700
|
||||
},
|
||||
"161890": {
|
||||
"code": "161890",
|
||||
"name": "한국콜마",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 48,
|
||||
"entry_price": 94100,
|
||||
"entry_at": "2026-07-31T11:20:11.598540+09:00",
|
||||
"stop": 92100,
|
||||
"target": 100100,
|
||||
"peak": 95400,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 95400,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4596386.934125,
|
||||
"last_add_price": 94100
|
||||
}
|
||||
},
|
||||
"realized_pnl": -25345909.14700003,
|
||||
"closed_trades": 66,
|
||||
"realized_pnl": -26170542.01200003,
|
||||
"closed_trades": 69,
|
||||
"wins": 0,
|
||||
"peak_equity": 100000000,
|
||||
"max_drawdown": 0.259921332315,
|
||||
"max_drawdown": 0.27445155613999994,
|
||||
"last_exit": {
|
||||
"083450": "2026-07-06",
|
||||
"278470": "2026-07-14",
|
||||
@@ -201,7 +201,7 @@
|
||||
"000660": "2026-07-20",
|
||||
"005930": "2026-07-08",
|
||||
"005935": "2026-07-16",
|
||||
"319660": "2026-07-28",
|
||||
"319660": "2026-07-31",
|
||||
"032830": "2026-07-20",
|
||||
"402340": "2026-07-23",
|
||||
"222800": "2026-07-16",
|
||||
@@ -210,13 +210,14 @@
|
||||
"353200": "2026-07-20",
|
||||
"105560": "2026-07-20",
|
||||
"089970": "2026-07-21",
|
||||
"034730": "2026-07-28",
|
||||
"034730": "2026-07-31",
|
||||
"252990": "2026-07-27",
|
||||
"086790": "2026-07-28",
|
||||
"475150": "2026-07-29",
|
||||
"095610": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-16T09:00:03.113416+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.830005+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.701242+09:00"
|
||||
}
|
||||
@@ -159,3 +159,10 @@
|
||||
{"ts": "2026-07-30T09:16:13.761907+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 35, "cost": 4382657, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 152200, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,200"}, {"label": "추세(60일선)", "ok": true, "detail": "118,488"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-30T11:58:09.726796+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 80, "proceeds": 7321695, "entry_price": 103750, "pnl": -979550, "pnl_pct": -11.61, "hold_from": "2026-07-21T11:08:01.673418+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 138,700"}, {"label": "추세(60일선)", "ok": true, "detail": "91,797"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T11:58:09.775106+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124700, "qty": 34, "cost": 4240436, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113759, "target": 157523, "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": "+55.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +35 · 기 +392 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.44% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "743,769 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.44% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-31T09:04:10.595530+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69100, "qty": 32, "proceeds": 2206888, "entry_price": 92800, "pnl": -763157, "pnl_pct": -25.54, "hold_from": "2026-07-27T12:12:01.551385+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "80,806 (현재 79,900)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 128,781"}, {"label": "추세(60일선)", "ok": true, "detail": "74,920"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 95,763"}]}
|
||||
{"ts": "2026-07-31T09:06:09.936380+09:00", "side": "BUY", "code": "034730", "name": "SK", "price": 535000, "qty": 8, "cost": 4280642, "path": "pullback", "reason": "눌림목 지정가 692,675 도달", "stop": 534999, "target": 535003, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "540,000 vs 527,200"}, {"label": "정배열(5>60)", "ok": true, "detail": "726,000 / 527,200"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "726,000 / 527,200"}, {"label": "상대강도(시장대비)", "ok": false, "detail": "-2.8%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +109 · 기 -43 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+58%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.51% (환산) vs 평균 0.45% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 883,000"}, {"label": "거래량 급증", "ok": false, "detail": "366,187 (환산) vs 평균 329,863"}, {"label": "회전율 급증", "ok": false, "detail": "0.51% (환산) vs 평균 0.45%"}, {"label": "RSI", "ok": true, "detail": "41"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 692,675 (현재 540,000)"}]}
|
||||
{"ts": "2026-07-31T09:06:09.937969+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 263, "cost": 1722908, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(60일선)", "ok": true, "detail": "4,875"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.756130+09:00", "side": "SELL", "code": "034730", "name": "SK", "price": 531000, "qty": 8, "proceeds": 4239716, "entry_price": 535000, "pnl": -40926, "pnl_pct": -0.75, "hold_from": "2026-07-31T09:06:09.936364+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "534,999 (현재 529,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 535,003"}, {"label": "추세(60일선)", "ok": true, "detail": "527,017"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +109 · 기 -43"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 575,775"}]}
|
||||
{"ts": "2026-07-31T09:08:10.756235+09:00", "side": "BUY", "code": "319660", "name": "피에스케이", "price": 121900, "qty": 37, "cost": 4510977, "path": "pullback", "reason": "눌림목 지정가 154,757 도달", "stop": 121899, "target": 121903, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "123,000 vs 112,608"}, {"label": "정배열(5>60)", "ok": true, "detail": "162,240 / 112,608"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "162,240 / 112,608"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+46.0%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +713 · 기 -510 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+49%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "어닝 서프라이즈", "ok": true, "detail": "+ ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "6.55% (환산) vs 평균 2.68% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 196,500"}, {"label": "거래량 급증", "ok": true, "detail": "1,898,747 (환산) vs 평균 777,376"}, {"label": "회전율 급증", "ok": true, "detail": "6.55% (환산) vs 평균 2.68%"}, {"label": "RSI", "ok": true, "detail": "44"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 154,757 (현재 123,000)"}]}
|
||||
{"ts": "2026-07-31T11:20:11.164902+09:00", "side": "SELL", "code": "319660", "name": "피에스케이", "price": 121600, "qty": 37, "proceeds": 4490427, "entry_price": 121900, "pnl": -20550, "pnl_pct": -0.25, "hold_from": "2026-07-31T09:08:10.756233+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "121,899 (현재 121,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "트레일링 ON"}, {"label": "추세(60일선)", "ok": true, "detail": "112,582"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +662 · 기 -449"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T11:20:11.598557+09:00", "side": "BUY", "code": "161890", "name": "한국콜마", "price": 94100, "qty": 48, "cost": 4517478, "path": "immediate", "reason": "조건 충족 — 즉시매수(눌림 안 기다림)", "stop": 92100, "target": 100100, "signals": [{"label": "추세(60일선 위)", "ok": true, "detail": "93,900 vs 91,832"}, {"label": "정배열(5>60)", "ok": true, "detail": "106,080 / 91,832"}, {"label": "추세 기울기(60일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "106,080 / 91,832"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+25.5%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +82 · 기 -28 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+41%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "2.60% (환산) vs 평균 1.76% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 124,600"}, {"label": "거래량 급증", "ok": true, "detail": "612,615 (환산) vs 평균 415,172"}, {"label": "회전율 급증", "ok": false, "detail": "2.60% (환산) vs 평균 1.76%"}, {"label": "RSI", "ok": true, "detail": "46"}, {"label": "눌림목 도달", "ok": false, "detail": "지정가 93,866 (현재 93,900)"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 4168055.939499967,
|
||||
"cash": 544360.4494999652,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"055550": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 100200,
|
||||
"cur_price": 101100,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5402457.352781249,
|
||||
"last_add_price": 104900
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4939827.041843749,
|
||||
"last_add_price": 130800
|
||||
@@ -81,32 +81,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4843602.718718749,
|
||||
"last_add_price": 338000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 116,
|
||||
"entry_price": 83072.41379310345,
|
||||
"entry_at": "2026-07-21T10:08:05.932367+09:00",
|
||||
"stop": 73000,
|
||||
"target": 113290,
|
||||
"peak": 99800,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 85700,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4883011.806843748,
|
||||
"last_add_price": 84700
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 19,645 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4682248.774874998,
|
||||
"last_add_price": 19370
|
||||
@@ -144,7 +123,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 124500,
|
||||
"cur_price": 125800,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4504266.321593748,
|
||||
"last_add_price": 125200
|
||||
@@ -155,27 +134,48 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 538,
|
||||
"entry_price": 6130,
|
||||
"qty": 1042,
|
||||
"entry_price": 6333.147792706334,
|
||||
"entry_at": "2026-07-30T09:04:08.809546+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,457 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3302234.573028907,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
"name": "메리츠금융지주",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 69,
|
||||
"entry_price": 121428.98550724638,
|
||||
"entry_at": "2026-07-31T09:08:11.129265+09:00",
|
||||
"stop": 111200,
|
||||
"target": 152116,
|
||||
"peak": 123900,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 123900,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4268049.827468748,
|
||||
"last_add_price": 122900
|
||||
}
|
||||
},
|
||||
"realized_pnl": -29038556.555000022,
|
||||
"closed_trades": 31,
|
||||
"realized_pnl": -30618545.535000023,
|
||||
"closed_trades": 32,
|
||||
"wins": 1,
|
||||
"peak_equity": 100289247.17,
|
||||
"max_drawdown": 0.2948997710030375,
|
||||
"max_drawdown": 0.3190878467384953,
|
||||
"last_exit": {
|
||||
"278470": "2026-06-18",
|
||||
"017670": "2026-06-19",
|
||||
@@ -197,8 +197,9 @@
|
||||
"089970": "2026-07-21",
|
||||
"095610": "2026-07-29",
|
||||
"252990": "2026-07-28",
|
||||
"003680": "2026-07-29"
|
||||
"003680": "2026-07-29",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-16T09:00:03.113433+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.841587+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.703594+09:00"
|
||||
}
|
||||
@@ -89,3 +89,7 @@
|
||||
{"ts": "2026-07-30T09:04:08.808598+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 121300, "qty": 37, "cost": 4488773, "path": "immediate", "reason": "조건 충족 — 즉시매수(눌림 안 기다림)", "stop": 111000, "target": 152200, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "121,200 vs 119,680"}, {"label": "정배열(5>10)", "ok": true, "detail": "120,840 / 119,680"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "120,840 / 118,418"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+34.1%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -214 · 기 +182 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+36%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.18% (환산) vs 평균 0.37% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 130,700"}, {"label": "거래량 급증", "ok": false, "detail": "494,880 (환산) vs 평균 1,026,357"}, {"label": "회전율 급증", "ok": false, "detail": "0.18% (환산) vs 평균 0.37%"}, {"label": "RSI", "ok": true, "detail": "51"}, {"label": "눌림목 도달", "ok": false, "detail": "지정가 119,680 (현재 121,200)"}]}
|
||||
{"ts": "2026-07-30T09:04:08.809551+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 538, "cost": 3298435, "path": "pullback", "reason": "눌림목 지정가 7,457 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "6,120 vs 5,256"}, {"label": "정배열(5>10)", "ok": true, "detail": "6,182 / 5,256"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,457 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T09:16:13.773831+09:00", "side": "BUY", "code": "086790", "name": "하나금융지주", "price": 125200, "qty": 35, "cost": 4382657, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111000, "target": 152200, "signals": [{"label": "손절선", "ok": true, "detail": "111,000 (현재 125,400)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 152,200"}, {"label": "추세(10일선)", "ok": true, "detail": "120,100"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -214 · 기 +182"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 124,618"}]}
|
||||
{"ts": "2026-07-31T09:06:09.949445+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 504, "cost": 3301695, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(10일선)", "ok": true, "detail": "5,308"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:08:10.758595+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 69600, "qty": 116, "proceeds": 8057856, "entry_price": 83072, "pnl": -1579989, "pnl_pct": -16.22, "hold_from": "2026-07-21T10:08:05.932367+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "73,000 (현재 69,500)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 113,290"}, {"label": "추세(10일선)", "ok": false, "detail": "79,030"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-31T09:08:11.129281+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 120000, "qty": 35, "cost": 4200630, "path": "immediate", "reason": "조건 충족 — 즉시매수(눌림 안 기다림)", "stop": 111200, "target": 146400, "signals": [{"label": "추세(10일선 위)", "ok": true, "detail": "120,000 vs 116,610"}, {"label": "정배열(5>10)", "ok": true, "detail": "117,460 / 116,610"}, {"label": "추세 기울기(10일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "117,460 / 110,018"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+37.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 -41 · 기 +362 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+24%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.11% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": false, "detail": "190,500 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": false, "detail": "0.11% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "60"}, {"label": "눌림목 도달", "ok": false, "detail": "지정가 116,610 (현재 120,000)"}]}
|
||||
{"ts": "2026-07-31T10:28:10.807514+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 122900, "qty": 34, "cost": 4179227, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 111200, "target": 146400, "signals": [{"label": "손절선", "ok": true, "detail": "111,200 (현재 122,700)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 146,400"}, {"label": "추세(10일선)", "ok": true, "detail": "116,880"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -41 · 기 +361"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 122,575"}]}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
{
|
||||
"cash": 7883168.794999965,
|
||||
"cash": 4460111.282499963,
|
||||
"initial": 100000000,
|
||||
"positions": {
|
||||
"055550": {
|
||||
@@ -18,7 +18,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 100200,
|
||||
"cur_price": 101100,
|
||||
"tranches": 2,
|
||||
"tranche_value": 5666061.52171875,
|
||||
"last_add_price": 99700
|
||||
@@ -39,7 +39,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 129000,
|
||||
"cur_price": 127600,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4789675.2297187485,
|
||||
"last_add_price": 130800
|
||||
@@ -81,32 +81,11 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 349000,
|
||||
"cur_price": 339500,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4623660.577343748,
|
||||
"last_add_price": 338000
|
||||
},
|
||||
"078930": {
|
||||
"code": "078930",
|
||||
"name": "GS",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 49,
|
||||
"entry_price": 89800,
|
||||
"entry_at": "2026-07-28T09:58:01.791914+09:00",
|
||||
"stop": 78664,
|
||||
"target": 123209,
|
||||
"peak": 92300,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 85700,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4476141.774093748,
|
||||
"last_add_price": 89800
|
||||
},
|
||||
"030000": {
|
||||
"code": "030000",
|
||||
"name": "제일기획",
|
||||
@@ -123,7 +102,7 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 20,014 도달",
|
||||
"cur_price": 19130,
|
||||
"cur_price": 18990,
|
||||
"tranches": 2,
|
||||
"tranche_value": 4465513.872843748,
|
||||
"last_add_price": 18950
|
||||
@@ -134,20 +113,20 @@
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 520,
|
||||
"entry_price": 6130,
|
||||
"qty": 1007,
|
||||
"entry_price": 6333.118172790467,
|
||||
"entry_at": "2026-07-30T09:04:08.817092+09:00",
|
||||
"stop": 4793,
|
||||
"target": 10140,
|
||||
"peak": 6330,
|
||||
"stop": 5039,
|
||||
"target": 10215,
|
||||
"peak": 6640,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "pullback",
|
||||
"entry_reason": "눌림목 지정가 7,792 도달",
|
||||
"cur_price": 5800,
|
||||
"tranches": 1,
|
||||
"cur_price": 6130,
|
||||
"tranches": 2,
|
||||
"tranche_value": 3191383.0634775604,
|
||||
"last_add_price": 6130
|
||||
"last_add_price": 6550
|
||||
},
|
||||
"138040": {
|
||||
"code": "138040",
|
||||
@@ -165,17 +144,38 @@
|
||||
"scaled_out": false,
|
||||
"entry_path": "breakout",
|
||||
"entry_reason": "거래량·회전율 동반 전고점 돌파",
|
||||
"cur_price": 123100,
|
||||
"cur_price": 123900,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4300292.172812498,
|
||||
"last_add_price": 124700
|
||||
},
|
||||
"051900": {
|
||||
"code": "051900",
|
||||
"name": "LG생활건강",
|
||||
"sources": [
|
||||
"auto"
|
||||
],
|
||||
"qty": 14,
|
||||
"entry_price": 288000,
|
||||
"entry_at": "2026-07-31T15:22:10.000237+09:00",
|
||||
"stop": 258445,
|
||||
"target": 376664,
|
||||
"peak": 288000,
|
||||
"trailing_on": false,
|
||||
"scaled_out": false,
|
||||
"entry_path": "immediate",
|
||||
"entry_reason": "조건 충족 — 즉시매수(눌림 안 기다림)",
|
||||
"cur_price": 287000,
|
||||
"tranches": 1,
|
||||
"tranche_value": 4236521.005156248,
|
||||
"last_add_price": 288000
|
||||
}
|
||||
},
|
||||
"realized_pnl": -32124803.75050003,
|
||||
"closed_trades": 36,
|
||||
"realized_pnl": -32725788.01550003,
|
||||
"closed_trades": 37,
|
||||
"wins": 1,
|
||||
"peak_equity": 102093754.3635,
|
||||
"max_drawdown": 0.33274666832749256,
|
||||
"max_drawdown": 0.346576129965988,
|
||||
"last_exit": {
|
||||
"036010": "2026-06-17",
|
||||
"017670": "2026-06-19",
|
||||
@@ -203,8 +203,9 @@
|
||||
"095610": "2026-07-28",
|
||||
"086790": "2026-07-28",
|
||||
"252990": "2026-07-29",
|
||||
"161890": "2026-07-30"
|
||||
"161890": "2026-07-30",
|
||||
"078930": "2026-07-31"
|
||||
},
|
||||
"created_at": "2026-06-16T09:00:03.113489+09:00",
|
||||
"updated_at": "2026-07-30T15:28:08.849256+09:00"
|
||||
"updated_at": "2026-07-31T15:28:10.705756+09:00"
|
||||
}
|
||||
@@ -103,3 +103,6 @@
|
||||
{"ts": "2026-07-30T09:04:08.817095+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6130, "qty": 520, "cost": 3188078, "path": "pullback", "reason": "눌림목 지정가 7,792 도달", "stop": 4793, "target": 10140, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "6,120 vs 4,808"}, {"label": "정배열(5>20)", "ok": true, "detail": "6,182 / 4,808"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "6,182 / 4,866"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+65.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +234 · 기 +0 (천주)"}, {"label": "애널", "ok": null, "detail": "데이터 없음(통과)"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "4.31% (환산) vs 평균 5.69% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 8,460"}, {"label": "거래량 급증", "ok": false, "detail": "267,687 (환산) vs 평균 353,452"}, {"label": "회전율 급증", "ok": false, "detail": "4.31% (환산) vs 평균 5.69%"}, {"label": "RSI", "ok": true, "detail": "59"}, {"label": "눌림목 도달", "ok": true, "detail": "지정가 7,792 (현재 6,120)"}]}
|
||||
{"ts": "2026-07-30T11:58:09.790386+09:00", "side": "SELL", "code": "161890", "name": "한국콜마", "price": 91700, "qty": 94, "proceeds": 8602991, "entry_price": 104660, "pnl": -1236484, "pnl_pct": -12.38, "hold_from": "2026-07-15T10:30:04.263817+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "92,100 (현재 91,800)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 142,338"}, {"label": "추세(20일선)", "ok": false, "detail": "98,155"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -7 · 기 +40"}, {"label": "분할(2/2)", "ok": null, "detail": "추가 종료"}]}
|
||||
{"ts": "2026-07-30T11:58:09.791084+09:00", "side": "BUY", "code": "138040", "name": "메리츠금융지주", "price": 124700, "qty": 34, "cost": 4240436, "path": "breakout", "reason": "거래량·회전율 동반 전고점 돌파", "stop": 113759, "target": 157523, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "125,000 vs 113,805"}, {"label": "정배열(5>20)", "ok": true, "detail": "118,460 / 113,805"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "118,460 / 110,102"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+55.3%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +35 · 기 +392 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+19%"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "0.44% (환산) vs 평균 0.17% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": true, "detail": "고점 123,300"}, {"label": "거래량 급증", "ok": true, "detail": "743,769 (환산) vs 평균 289,522"}, {"label": "회전율 급증", "ok": true, "detail": "0.44% (환산) vs 평균 0.17%"}, {"label": "RSI", "ok": true, "detail": "69"}]}
|
||||
{"ts": "2026-07-31T09:06:09.956870+09:00", "side": "BUY", "code": "003680", "name": "한성기업", "price": 6550, "qty": 487, "cost": 3190328, "path": "add", "reason": "추격매수 — 2/2차 (추세 지속)", "stop": 4793, "target": 10140, "signals": [{"label": "손절선", "ok": true, "detail": "4,793 (현재 6,640)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 10,140"}, {"label": "추세(20일선)", "ok": true, "detail": "4,834"}, {"label": "수급(외/기)", "ok": true, "detail": "외 +355 · 기 +0"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 6,453"}]}
|
||||
{"ts": "2026-07-31T09:06:09.957283+09:00", "side": "SELL", "code": "078930", "name": "GS", "price": 77700, "qty": 49, "proceeds": 3799876, "entry_price": 89800, "pnl": -600984, "pnl_pct": -13.47, "hold_from": "2026-07-28T09:58:01.791914+09:00", "reason": "손절", "partial": false, "signals": [{"label": "손절선", "ok": false, "detail": "78,664 (현재 78,000)"}, {"label": "목표/트레일링", "ok": null, "detail": "목표 123,209"}, {"label": "추세(20일선)", "ok": true, "detail": "74,560"}, {"label": "수급(외/기)", "ok": true, "detail": "외 -179 · 기 +325"}, {"label": "분할(1/2)", "ok": null, "detail": "추가 트리거 92,798"}]}
|
||||
{"ts": "2026-07-31T15:22:10.000239+09:00", "side": "BUY", "code": "051900", "name": "LG생활건강", "price": 288000, "qty": 14, "cost": 4032605, "path": "immediate", "reason": "조건 충족 — 즉시매수(눌림 안 기다림)", "stop": 258445, "target": 376664, "signals": [{"label": "추세(20일선 위)", "ok": true, "detail": "287,000 vs 252,500"}, {"label": "정배열(5>20)", "ok": true, "detail": "270,700 / 252,500"}, {"label": "추세 기울기(20일선↑)", "ok": true, "detail": "우상향"}, {"label": "중기 정배열(5>60)", "ok": true, "detail": "270,700 / 249,217"}, {"label": "상대강도(시장대비)", "ok": true, "detail": "+30.6%p"}, {"label": "수급(5일 외/기)", "ok": true, "detail": "외 +118 · 기 +171 (천주)"}, {"label": "상승여력", "ok": true, "detail": "+6%"}, {"label": "목표가 리비전", "ok": true, "detail": "상향 ➕"}, {"label": "시장 강세", "ok": true, "detail": "강세"}, {"label": "과열 아님(회전율)", "ok": true, "detail": "1.58% (환산) vs 평균 0.53% (보류 3배↑)"}, {"label": "돌파(전고점)", "ok": false, "detail": "고점 314,500"}, {"label": "거래량 급증", "ok": true, "detail": "236,959 (환산) vs 평균 78,860"}, {"label": "회전율 급증", "ok": true, "detail": "1.58% (환산) vs 평균 0.53%"}, {"label": "RSI", "ok": true, "detail": "71"}, {"label": "눌림목 도달", "ok": false, "detail": "지정가 277,223 (현재 287,000)"}]}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user