auto: 일일 백업 2026-06-30 02:00
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -1202,6 +1202,18 @@ def _fetch_all_data(entries: list[dict], only_owner: str | None = None) -> dict:
|
||||
tj.record_trades(journal_by_label, quiet=True, tag='render')
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[render→journal] record_trades failed: {e}\n')
|
||||
# 당일 매수 동반 매도행의 pl을 '전일 보유 평단' 기준으로 재계산 (ka10170 round-trip 오표시 교정).
|
||||
# 전일 평단은 파일 이력 재생에서. raw 저장(record_trades) 직후라 prev_avg_map은 당일분 제외(date<오늘).
|
||||
try:
|
||||
_today_iso = datetime.now(tj.KST).strftime('%Y-%m-%d')
|
||||
_prev_avgs = tj.prev_avg_map(_today_iso)
|
||||
for _lb, _trs in journal_by_label.items():
|
||||
for _t in _trs:
|
||||
_pa = _prev_avgs.get((_lb, _t.get('code')), 0)
|
||||
if (_t.get('sell_qty') or 0) > 0 and (_t.get('buy_qty') or 0) > 0 and _pa > 0:
|
||||
tj._apply_rebase(_t, float(_t.get('sell_avg') or 0), int(_t['sell_qty']), _pa)
|
||||
except Exception as e:
|
||||
sys.stderr.write(f'[journal rebase] failed: {e}\n')
|
||||
cards = quotes_f.result()
|
||||
try:
|
||||
open_orders = open_orders_f.result()
|
||||
@@ -8442,6 +8454,7 @@ def render_html() -> str:
|
||||
'var pl=r.pl_amt||0;'
|
||||
'var plCls=pl>0?"pl-pos":(pl<0?"pl-neg":"muted");'
|
||||
'var sgn=pl>0?"+":"";'
|
||||
'var reNote=r._pl_rebased?\'<div class="muted small" style="margin-top:2px">원가 \'+fmtInt(r.prev_avg)+\'원(전일 보유 평단) 기준 · 당일 매수분 제외</div>\':"";'
|
||||
'out+=\'<li class="trade-item trade-item-sell\'+seedCls+\'">\'+stockLine+'
|
||||
'\'<div class="ti-row1"><div class="ti-meta">\'+'
|
||||
'\'<span class="ti-side side-sell">매도</span>\'+'
|
||||
@@ -8450,7 +8463,7 @@ def render_html() -> str:
|
||||
'\'<div class="ti-row2"><div class="ti-data">\'+'
|
||||
'\'<span class="ti-price"><span class="ti-label">평균가</span> \'+fmtInt(r.sell_avg)+\'원</span><span class="ti-sep">·</span>\'+'
|
||||
'\'<span class="ti-qty"><span class="ti-label">수량</span> \'+fmtInt(r.sell_qty)+\'주</span><span class="ti-sep">·</span>\'+'
|
||||
'\'<span class="ti-amt"><span class="ti-label">금액</span> \'+fmtInt(r.sell_amt)+\'원</span></div></div>\'+'
|
||||
'\'<span class="ti-amt"><span class="ti-label">금액</span> \'+fmtInt(r.sell_amt)+\'원</span></div></div>\'+reNote+'
|
||||
'\'</li>\';'
|
||||
'}'
|
||||
'return out;'
|
||||
@@ -10227,6 +10240,9 @@ class Handler(BaseHTTPRequestHandler):
|
||||
rows = [r for r in all_rows if _row_owner(r) == owner_q]
|
||||
if account:
|
||||
rows = [r for r in rows if r.get('account') == account]
|
||||
# 매도 실현손익을 '전일 보유 평단' 기준으로 재계산 (ka10170 round-trip 오표시 교정).
|
||||
# rows는 해당 (account,code)의 전체 이력을 포함하므로 재생이 정확하다.
|
||||
rows = tj.rebase_pl(rows)
|
||||
rows.sort(key=lambda r: (r.get('date', ''), r.get('account', '')), reverse=True)
|
||||
name = rows[0]['name'] if rows and code else ''
|
||||
mode = 'owner' if (not code and owner_q) else 'code'
|
||||
|
||||
Reference in New Issue
Block a user