feat(sim): 관찰목록 자동편입/제외 — 키움 순위정보로 주도주 매일 편입

- kiwoom_client: get_volume_surge(ka10023)·get_foreign_inst_netbuy(ka90009) 순위 조회 추가 (rkinfo endpoint)
- universe: auto_import(외인·기관 순매수+거래량급증 상위, ETF·하락·급증률이상치 제외, 각15·총120 상한, origin=auto) + auto_prune(auto·미보유·10거래일 무신호만, 보유/수동/비하이브 불가침) + mark_signals
- engine.scan_all: 변이 watching 종목을 mark_signals로 신호 추적(auto_seen.json)
- CLI: python3 -m sim universe {import|prune|all}
- trade-journal plist 평일21:00에 'sim universe all' 4번째 명령 추가
- 첫 실행: 후보38 → 32편입 (59→91종목)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
hyowons
2026-06-15 19:03:35 +09:00
parent e3c54d62ed
commit a5e52dc69b
7 changed files with 329 additions and 3 deletions
+11 -1
View File
@@ -136,13 +136,23 @@ def _cmd_reset(argv):
print(f'초기화 완료 — 가상자본 {config.INITIAL_CAPITAL:,}')
def _cmd_universe(argv):
"""관찰목록 자동편입/제외 — 매일 장 마감 후 1회. 'import'=주도주 편입, 'prune'=무신호 auto 제외, 둘 다 기본."""
from . import universe
sub = argv[0] if argv else 'all'
if sub in ('import', 'all'):
print('자동편입:', universe.auto_import())
if sub in ('prune', 'all'):
print('자동제외:', universe.auto_prune())
def main():
argv = sys.argv[1:]
cmd = argv[0] if argv else 'status'
rest = argv[1:]
{'scan': _cmd_scan, 'status': _cmd_status, 'report': _cmd_report,
'sweep': _cmd_sweep, 'backtest': _cmd_backtest, 'backfill': _cmd_backfill,
'backfill-index': _cmd_backfill_index,
'backfill-index': _cmd_backfill_index, 'universe': _cmd_universe,
'variants': _cmd_variants, 'reset': _cmd_reset}.get(cmd, lambda a: print(__doc__))(rest)