feat: add daily 24h PnL Telegram report and stop tracking .env
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
82
scripts/07_daily_pnl_telegram.py
Normal file
82
scripts/07_daily_pnl_telegram.py
Normal file
@@ -0,0 +1,82 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
매일 지정 시각(기본 19:00 KST) 최근 24시간 수익률 텔레그램 발송.
|
||||
|
||||
사용:
|
||||
python scripts/07_daily_pnl_telegram.py --once # 즉시 1회 발송
|
||||
python scripts/07_daily_pnl_telegram.py # 스케줄 루프 (상시)
|
||||
python scripts/07_daily_pnl_telegram.py --record # 스냅샷만 기록
|
||||
|
||||
Windows 작업 스케줄러: 매일 19:00에 --once 실행도 가능.
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import argparse
|
||||
import runpy
|
||||
import sys
|
||||
from pathlib import Path
|
||||
|
||||
runpy.run_path(str(Path(__file__).resolve().parent / "_bootstrap.py"))
|
||||
|
||||
from config import ( # noqa: E402
|
||||
DAILY_PNL_REPORT_ENABLED,
|
||||
DAILY_PNL_REPORT_HOUR,
|
||||
DAILY_PNL_REPORT_MINUTE,
|
||||
DAILY_PNL_REPORT_TZ,
|
||||
)
|
||||
from deepcoin.ops.monitor import Monitor # noqa: E402
|
||||
from deepcoin.ops.portfolio_report import ( # noqa: E402
|
||||
append_portfolio_snapshot,
|
||||
fetch_portfolio_snapshot,
|
||||
run_schedule_loop,
|
||||
send_daily_pnl_report,
|
||||
)
|
||||
|
||||
|
||||
def main() -> int:
|
||||
"""
|
||||
CLI 진입점.
|
||||
|
||||
Returns:
|
||||
0 성공, 1 비활성/오류.
|
||||
"""
|
||||
parser = argparse.ArgumentParser(description="일일 24h 수익률 텔레그램")
|
||||
parser.add_argument(
|
||||
"--once",
|
||||
action="store_true",
|
||||
help="즉시 1회 발송 후 종료",
|
||||
)
|
||||
parser.add_argument(
|
||||
"--record",
|
||||
action="store_true",
|
||||
help="스냅샷만 기록 (텔레그램 없음)",
|
||||
)
|
||||
args = parser.parse_args()
|
||||
|
||||
if not DAILY_PNL_REPORT_ENABLED:
|
||||
print("DAILY_PNL_REPORT_ENABLED=0 — 종료")
|
||||
return 1
|
||||
|
||||
print(
|
||||
f"[07] DAILY_PNL · {DAILY_PNL_REPORT_HOUR:02d}:"
|
||||
f"{DAILY_PNL_REPORT_MINUTE:02d} {DAILY_PNL_REPORT_TZ}"
|
||||
)
|
||||
mon = Monitor(cooldown_file=None)
|
||||
|
||||
if args.record:
|
||||
snap = fetch_portfolio_snapshot(mon)
|
||||
append_portfolio_snapshot(snap)
|
||||
print(f"[07] snapshot total=₩{snap['total_asset_krw']:,.0f}")
|
||||
return 0
|
||||
|
||||
if args.once:
|
||||
send_daily_pnl_report(mon)
|
||||
return 0
|
||||
|
||||
run_schedule_loop(mon)
|
||||
return 0
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
raise SystemExit(main())
|
||||
Reference in New Issue
Block a user