버그 수정 - 14:00 이후 신규 진입 차단·SL 재진입 차단 재시작 초기화
check_entries 진입 시 현재 시간 재확인 추가 _restore_sl_tickers_from_db 추가: 봇 재시작 시 당일 SL 종목 복원 일일 리포트 bug11·12 내용 반영
This commit is contained in:
+18
@@ -107,6 +107,8 @@ class StockBot:
|
|||||||
|
|
||||||
# DB에서 열린 포지션 복원 (재시작 시)
|
# DB에서 열린 포지션 복원 (재시작 시)
|
||||||
self._restore_positions_from_db()
|
self._restore_positions_from_db()
|
||||||
|
# 당일 SL 종목 복원 (재시작 후에도 재진입 차단 유지)
|
||||||
|
self._restore_sl_tickers_from_db()
|
||||||
await send(f"[시작] 단타봇 가동 | 예수금: {cash:,}원 | "
|
await send(f"[시작] 단타봇 가동 | 예수금: {cash:,}원 | "
|
||||||
f"{'모의투자' if self.kis.is_mock else '실거래'}")
|
f"{'모의투자' if self.kis.is_mock else '실거래'}")
|
||||||
|
|
||||||
@@ -131,6 +133,19 @@ class StockBot:
|
|||||||
if self.positions:
|
if self.positions:
|
||||||
logger.info(f"DB 포지션 복원: {list(self.positions.keys())}")
|
logger.info(f"DB 포지션 복원: {list(self.positions.keys())}")
|
||||||
|
|
||||||
|
def _restore_sl_tickers_from_db(self):
|
||||||
|
"""재시작 시 당일 SL 종목 복원 — 재진입 차단 유지"""
|
||||||
|
today = datetime.now().strftime("%Y-%m-%d")
|
||||||
|
with get_conn() as conn:
|
||||||
|
rows = conn.execute(
|
||||||
|
"SELECT DISTINCT ticker FROM trades WHERE date=? AND exit_reason='SL'",
|
||||||
|
(today,)
|
||||||
|
).fetchall()
|
||||||
|
for (ticker,) in rows:
|
||||||
|
self.sl_tickers.add(ticker)
|
||||||
|
if self.sl_tickers:
|
||||||
|
logger.info(f"당일 SL 종목 복원(재진입 차단): {self.sl_tickers}")
|
||||||
|
|
||||||
def _db_save_position(self, ticker: str, pos: dict, target_price: float):
|
def _db_save_position(self, ticker: str, pos: dict, target_price: float):
|
||||||
with get_conn() as conn:
|
with get_conn() as conn:
|
||||||
conn.execute("""
|
conn.execute("""
|
||||||
@@ -296,6 +311,9 @@ class StockBot:
|
|||||||
|
|
||||||
async def check_entries(self):
|
async def check_entries(self):
|
||||||
"""유니버스 전체 진입 신호 확인"""
|
"""유니버스 전체 진입 신호 확인"""
|
||||||
|
# check_exits 처리 중 14:00을 넘었을 경우 진입 차단
|
||||||
|
if datetime.now().strftime("%H:%M") > "14:00":
|
||||||
|
return
|
||||||
for ticker in self.universe:
|
for ticker in self.universe:
|
||||||
if ticker in self.positions:
|
if ticker in self.positions:
|
||||||
continue
|
continue
|
||||||
|
|||||||
@@ -85,6 +85,8 @@ ETF 필터 미적용 상태라 인버스/레버리지 ETF가 다수 포함됨.
|
|||||||
| 8 | 중복 봇 프로세스 미종료 | PID 파일 + `Get-CimInstance` 이중 종료 |
|
| 8 | 중복 봇 프로세스 미종료 | PID 파일 + `Get-CimInstance` 이중 종료 |
|
||||||
| 9 | `daily_summary` DB 미저장 | `daily_summary()` 에서 테이블 INSERT 추가 |
|
| 9 | `daily_summary` DB 미저장 | `daily_summary()` 에서 테이블 INSERT 추가 |
|
||||||
| 10 | 장중 재시작 시 15:10 결산 미실행 | `trading_loop()` 후 15:10까지 대기 루프 추가 |
|
| 10 | 장중 재시작 시 15:10 결산 미실행 | `trading_loop()` 후 15:10까지 대기 루프 추가 |
|
||||||
|
| 11 | **14:00 이후 신규 진입 차단 미작동** | `check_entries()` 진입 시 현재 시간 재확인 추가 — `check_exits()` 처리 중 14:00 경과 케이스 차단 |
|
||||||
|
| 12 | **봇 재시작 시 SL 종목 재진입 차단 초기화** | `_restore_sl_tickers_from_db()` 추가 — 재시작 후 당일 SL 종목 DB 복원으로 재진입 차단 유지 |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -146,4 +148,4 @@ ETF 필터 미적용 상태라 인버스/레버리지 ETF가 다수 포함됨.
|
|||||||
4. L3 (3연속 손절) 차단 로직 실제 동작 여부
|
4. L3 (3연속 손절) 차단 로직 실제 동작 여부
|
||||||
5. morning 스케줄러 (08:15) 자동 실행 여부 확인
|
5. morning 스케줄러 (08:15) 자동 실행 여부 확인
|
||||||
6. 15:10 결산 정상 실행 및 `daily_summary` 테이블 저장 확인
|
6. 15:10 결산 정상 실행 및 `daily_summary` 테이블 저장 확인
|
||||||
7. 14:00 이후 신규 진입 제한 검토 (오후 반복 진입 → 손실 패턴)
|
7. ~~14:00 이후 신규 진입 제한 검토~~ → **수정 완료** (bug #11·#12 fix)
|
||||||
|
|||||||
Reference in New Issue
Block a user