auto: 일일 백업 2026-07-31 02:00

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
hyowons
2026-07-31 02:00:02 +09:00
parent a5f6b0ecd8
commit d7042430c3
183 changed files with 7898 additions and 2204 deletions
@@ -68,6 +68,8 @@ def format_card(request: dict, market_data: dict, card_id: str,
type_marker = f' {cfg["warning_emoji"]} 공격적 지정가'
elif request['order_type'] == 'STOP_LIMIT':
type_marker = f' {cfg["warning_emoji"]} 스톱지정가(예약)'
elif request['order_type'] == 'TRAILING_STOP':
type_marker = f' {cfg["warning_emoji"]} 트레일링 스톱(예약)'
amend_marker = ' ✏️ 수정됨' if amended else ''
lines = [f'{side_emoji} {_md_bold(side_word + " 미리보기")} [#{card_id}]{type_marker}{spouse_marker}{amend_marker}', '']
@@ -91,6 +93,26 @@ def format_card(request: dict, market_data: dict, card_id: str,
cur_part = f' (현재가 {_money(cur)})' if cur else ''
lines.append(f'{marker} 조건: {_md_bold(_money(stop_p) + " 도달 시")}{cur_part}')
lines.append(f'{marker} 매도가격: {_md_bold(_money(request["price"]))} (지정가)')
elif request['order_type'] == 'TRAILING_STOP':
# 승인 대상은 "트레일 폭" — 조건단가는 고점이 오르면 이 폭을 유지하며 따라 올라간다.
stop_p = request.get('stop_price') or 0
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)}')
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 '트레일 적용'
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} 고점이 오르면 손절선도 따라 올라갑니다 (내려가지 않음)')
elif request['order_type'] == 'MARKET':
lines.append(f'{marker} 가격: {_md_bold("시장가")}')
else:
@@ -300,6 +322,8 @@ def format_card_locked(active: Optional[dict] = None) -> str:
price_str = '시장가'
elif order_type == 'AGGRESSIVE_LIMIT':
price_str = f'공격적 지정가 {_money(price)}' if price else '공격적 지정가'
elif order_type == 'TRAILING_STOP':
price_str = f'트레일링 {active.get("trail_pct")}% (손절 {_money(active.get("stop_price"))})'
else:
price_str = _money(price) if price is not None else '지정가'