Compare commits

...

14 Commits

Author SHA1 Message Date
whdwo 1777da1c41 [2026-07-08] 저녁 결산 — 0건 / AI차단·全업종하락·KOSPI-1.68%·건설예측빗나감·샤프-0.98
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-08 15:31:55 +09:00
whdwo 1f2676ba02 [2026-07-08] 장중 분석 — KOSPI-1.68%·全업종하락·인버스ETF1위·오전예측빗나감·점심차단유지 2026-07-08 11:21:29 +09:00
whdwo eaad9dd2df [2026-07-08] 장전 분석 — SOX-4.65%·삼전外人2조매도·WTI+5.66%·trade_allowed=false·건설내수관심 2026-07-08 08:16:44 +09:00
whdwo 7d70a5367d [2026-07-07] 저녁 결산 — 2건 / 2승 0패 / +31,115원 / TP1·TP2·건설섹터순환매 2026-07-07 15:31:55 +09:00
whdwo 8342e3dbb4 [2026-07-07] 장중 분석 — 오전2승·KOSPI-5.38%급락·인버스ETF1위·건설반도체강세유지 2026-07-07 11:21:27 +09:00
whdwo 04ac24b578 [2026-07-07] 장전 분석 — 삼전역대최대실적불구급락·KOSPI-2.82%·인버스ETF1위·글로벌SOX+2.17%긍정 2026-07-07 09:21:51 +09:00
whdwo 2dc29be75e [2026-07-06] 저녁 결산 — 2건 / 0승 2패 / -54,885원 / SL x2·삼성전자우 섹터분류 버그 의심
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 15:32:42 +09:00
whdwo 807f22158d [2026-07-06] 장중 분석 — 연속손절2회·KOSPI-1.74%하락·인버스ETF1위·점심진입중단 2026-07-06 11:21:19 +09:00
whdwo cf258cec87 [2026-07-06] 장전 분석 — SOX-5.44%반도체2연락·달러약세·삼전실적D-1·방산금융순환매 2026-07-06 08:17:17 +09:00
whdwo 73f9d456fb [2026-07-03] 저녁 결산 — 0건 / 거래없음 / SOX-5.44%반도체2연락·글로벌리스크·AI필터패스·자본보존 2026-07-03 15:32:28 +09:00
whdwo c62820ab48 [2026-07-03] 장중 분석 — KOSPI반등+2.01%·금융강세, SOX-5.44%글로벌리스크·인버스ETF1위, 점심진입패스 2026-07-03 11:21:40 +09:00
whdwo ea902f0ce1 [2026-07-03] 장전 분석 — SOX-5.44%·반도체2연락·달러약세, 금융순환매, 거래패스 2026-07-03 08:17:38 +09:00
whdwo 80457fe6c4 Hide Windows scheduler bot execution 2026-07-02 16:06:14 +09:00
whdwo c43163629d [2026-07-02] 저녁 결산 — 0건 / 거래없음 / KOSPI-2.8%·SOX-6.27% 약세장 완전 패스·자본보존 2026-07-02 15:32:40 +09:00
12 changed files with 633 additions and 27 deletions
+6
View File
@@ -45,6 +45,8 @@ AI에게 맡기지는 않습니다. AI는 장 전/장중/장후 시장을 분석
- DB: SQLite (`data/stockbot.db`)
- 알림: Discord Webhook
- AI/ML: 시장 분석과 관찰용 점수 기록까지만 사용
- 스케줄러 작업은 숨김 실행으로 등록하고, 장중 봇 본체는 Windows에서
`pythonw.exe`를 우선 사용해 콘솔 창 없이 백그라운드로 실행합니다.
운영 모드는 아래처럼 나뉩니다.
@@ -79,6 +81,10 @@ powershell -ExecutionPolicy Bypass -File scripts\setup_scheduler.ps1
powershell -ExecutionPolicy Bypass -File scripts\run_training_pipeline.ps1
```
운영 중 봇을 직접 켜야 할 때는 `python app/main.py`보다
`python scripts\start_bot.py`를 사용합니다. 이 경로는 기존 봇을 정리한 뒤
콘솔 없는 백그라운드 프로세스로 새 봇을 띄우고 Discord 시작 알림을 보냅니다.
## 에이전트 운영 문서
- `AGENTS.md`: Codex가 읽는 운영 지침
+16 -16
View File
@@ -1,26 +1,26 @@
{
"date": "2026-07-02",
"generated_at": "08:15:29",
"date": "2026-07-08",
"generated_at": "08:15:11",
"trade_allowed": false,
"market_sentiment": "약세",
"sentiment_score": 33,
"domestic_score": 38,
"sentiment_score": 36,
"domestic_score": 44,
"global_context": {
"nasdaq_change": -0.66,
"sp500_change": -0.22,
"dow_change": -0.03,
"sox_change": -6.27,
"usdkrw_change": null,
"wti_change": -2.17,
"us10y": 4.47,
"global_score": 25,
"nasdaq_change": -1.16,
"sp500_change": -0.45,
"dow_change": -0.25,
"sox_change": -4.65,
"usdkrw_change": -0.98,
"wti_change": 5.66,
"us10y": 4.53,
"global_score": 24,
"global_risk": "높음"
},
"risk_level": "높음",
"hot_sectors": ["방산", "화장품", "금융"],
"avoid_sectors": ["반도체", "반도체장비", "석유화학"],
"hot_sectors": ["건설", "내수소비", "바이오"],
"avoid_sectors": ["반도체", "항공", "방산"],
"boosted_tickers": [],
"blacklist_tickers": ["000040"],
"blacklist_tickers": [],
"position_size_multiplier": 0.5,
"reason": "SOX-6.27%·CPI3.2%·外人폭매도, 반도체 급락 전망"
"reason": "SOX-4.65%·삼전外人2조매도·WTI+5.66%·KOSPI급락후반등시도·건설내수관심"
}
+14 -6
View File
@@ -1,10 +1,18 @@
{
"date": "2026-07-02",
"generated_at": "11:20:17",
"date": "2026-07-08",
"generated_at": "11:20:16",
"lunch_trade_allowed": false,
"position_size_multiplier": 0.5,
"hot_sectors": ["건설업", "기계"],
"avoid_sectors": ["금융업", "전기가스업", "반도체장비"],
"position_size_multiplier": 1.0,
"hot_sectors": [
"2차전지"
],
"avoid_sectors": [
"전기전자",
"철강금속",
"의약품",
"건설업",
"통신업"
],
"strategy_note": "",
"reason": "KOSPI-2.8%·인버스폭등·금융급락, 건설·기계만 강세, 점심중단"
"reason": "KOSPI-1.68%·全업종하락·인버스ETF1위·오전예측빗나감·점심차단유지"
}
+101
View File
@@ -0,0 +1,101 @@
# 2026-07-02 일일 결산
## 오늘 결과
| 항목 | 값 |
|---|---|
| 거래 건수 | 0건 |
| 승/패 | 0승 0패 |
| 순손익 | 0원 |
| 수수료 | 0원 |
**오늘 거래 없음 — 강한 약세 환경에서 완전 패스 (정상 방어 행동)**
---
## 장 개요
### 아침 컨텍스트 (08:15 생성)
- **글로벌 리스크**: 높음 | **심리 점수**: 33/100
- SOX **-6.27%** / S&P500 -0.22% / NASDAQ -0.66%
- CPI 3.2% 예상 상회 → 금리 인하 기대 약화
- 외국인 폭매도 지속
- `trade_allowed: false`, `position_size_multiplier: 0.5`
- 회피 섹터: 반도체 / 반도체장비 / 석유화학
### 장중 흐름
- KOSPI **-2.8%** 하락 — 인버스 ETF 폭등
- 금융업 급락, 건설·기계만 강세
- 점심 컨텍스트 `lunch_trade_allowed: false`, 배율 ×0.5 유지
---
## 봇 행동 분석
### 유니버스 및 목표가
- 전체 유니버스: **11종목** (ETF 제외)
- 유효 목표가: **7/11종목** (4종목 거래대금 100억 미달 제외)
- 024840, 010960, 002780, 007610 → 거래대금 미달로 제외
- 유효 7종목 모두 장중 목표가 미달 (시장 전체 하락으로 돌파 없음)
### AI 필터 동작
| 종목 | 처리 결과 |
|---|---|
| 삼성전자(005930) | **AI 거래 차단** — SOX-6.27%·CPI·外人 이유 명시 |
| 나머지 6종목 | 목표가 미달 (시장 약세로 돌파 미발생) |
- 아침 AI 블락 → 삼성전자 반도체 섹터 진입 완전 차단 ✓
- 장중(11:21) midday_context 로드 후 점심 진입 중단 활성화 ✓
- 14:50 강제 청산 — 포지션 없어 즉시 완료 ✓
### 평가
오늘은 **KOSPI -2.8%, SOX -6.27%** 의 강한 약세장이었다. 7종목 모두 시가 대비 하락 또는 횡보하여 돌파 목표가 미달이 정상이다. AI 필터가 리스크를 사전에 정확히 감지하여 전체 진입을 실질적으로 차단했고, 결과적으로 자본 보존에 성공했다.
- **AI 필터 정확도**: 우수 — 고리스크 환경(SOX -6%+, 외인 폭매도) 사전 감지
- **거래량 필터**: 정상 동작 — 거래대금 미달 4종목 자동 제외
- **강제 청산**: 포지션 없어 즉시 완료
- **과매매 위험**: 없음 (0건)
- **집행 오류**: 없음
---
## 최근 30일 누적 성과
| 지표 | 값 | 기준 | 상태 |
|---|---|---|---|
| 운영 거래일 | 18일 | 30일 이상 | ❌ |
| 승률 | 50.8% | > 48% | ✅ |
| MDD | -2.9% | < -10% | ✅ |
| Sharpe | -0.70 | > 1.0 | ❌ |
| L3 발동 | 0회 | 월 2회 이하 | ✅ |
**실전 전환 불가** — 2개 기준 미달 (거래일 부족, Sharpe 음수)
### Sharpe 음수 원인 분석
6/22 단일 대형 손실(-110,270원)이 분모(변동성) 대비 수익 기대를 끌어내리고 있다.
6/22 데이터 제외 시 최근 7거래일 수익 추세는 개선 중 (6/30 +66K, 7/1 +70K).
샤프 개선은 안정적 수익 누적이 필요하며 현 단계에서 전략 변경보다 데이터 축적이 우선이다.
---
## 전략 제안
없음. 오늘 거래 0건으로 판단 근거 부족. 시스템이 의도대로 동작했다.
---
## 라이브 준비 점검
- 30일 운영: 18일 진행 중 (12일 더 필요)
- 승률: 50.8% ✅
- MDD: -2.9% ✅
- Sharpe: -0.70 ❌
- L3 발동: 0회 ✅
**실전 전환 미충족** — 조건 2개 불충족.
+107
View File
@@ -0,0 +1,107 @@
# 2026-07-03 저녁 결산
## 요약
| 항목 | 값 |
|------|-----|
| 거래 건수 | 0건 |
| 승/패 | - |
| 순손익 | +0원 |
| 수수료 | 0원 |
| 전략 판단 | 거래 패스 — 자본 보존 |
## 오늘 시장 환경
| 지표 | 값 |
|------|-----|
| SOX | -5.44% (반도체 2연속 급락) |
| NASDAQ | -0.80% |
| S&P500 | 0.00% |
| Dow | +1.14% |
| KOSPI 장중 | +2.01% 반등 (금융·비테크 주도) |
| 달러/원 | 1,540원 (약달러) |
| 미국채 10년 | 4.48% |
| 인버스 ETF | 거래량 1위 (시장 헤지 수요 높음) |
- 글로벌 리스크 점수: 27 (높음)
- 전체 감성 점수: 36 (약세)
- 국내 점수: 42
## 봇 동작 분석
### 진입 판단
아침 컨텍스트에서 `trade_allowed = False`, `position_size_multiplier = 0.5` 설정.
이유: SOX -5.44% 반도체 2연속 낙폭·AI 기대 꺾임·달러약세, 금융 순환매 국면.
장중 종일 목표가 미달로 진입 없음. 주요 종목 현황:
| 종목 | 사유 |
|------|------|
| 마키나락스(477850) | AI 거래 중단 (SOX 연락) 오전; 이후 목표가 미달 |
| 엘티씨(170920) | 오후 AI 거래 중단 (목표가 도달하나 블랙리스트 조건 적용) |
| 에코프로(086520) | 목표가 미달 (84~87k < 92,250) |
| 원익IPS(240810) | 목표가 미달 (121~128k < 144,850) |
| 금호건설(002990) | 목표가 미달 (10,120~10,890 < 12,305) |
| 테크윙(089030) | 목표가 미달 (43,750~45,350 < 50,200) |
| 하나마이크론(067310) | 목표가 미달 (39,300~40,750 < 44,975) |
| 주성엔지니어링(036930) | 목표가 미달 (190~202k < 238,850) |
→ KOSPI 반등은 금융·건설 주도였으며 반도체 watch 종목은 목표가까지 거리 유지.
### 장중 이벤트
- **KIS 레이트 리밋 2회** (09:52, 09:54) — 4회 재시도 자동 복구, 정상 운영 지속.
- **점심 세션 진입 중단**: midday_context `lunch_trade_allowed = False`, 피하는 섹터에 전기전자·화학·반도체·통신 추가.
- **14:50 강제 청산**: 포지션 없음 → 정상 완료.
- **15:10 결산**: 0건 / 승0 패0 / +0원. 중복 결산 방지 로그 확인 (`결산 이미 처리됨`).
### AI 필터 품질
| 항목 | 평가 |
|------|------|
| 아침 trade_allowed 판단 | 정확 — SOX 이중 낙폭 환경에서 거래 중단 올바름 |
| 반도체 ticker AI 블록 | 정확 — 마키나락스, 엘티씨 사전 차단 |
| 목표가 필터 | 정상 — 나머지 종목 가격 조건 미달로 미진입 |
| 점심 진입 중단 | 정확 — 글로벌 리스크 지속 상황에서 보수적 판단 적절 |
| 부스트 종목 | 0개 (위험 환경에서 부스트 없음 → 올바른 동작) |
| 블랙리스트 | 000040 1개 |
## 실행 품질
- 거래 없음 → 가격 누락·0원 행·불일치 포지션 없음.
- KIS 레이트 리밋 자동 복구 정상.
- 봇 정상 종료 (15:10 결산, 중복 방지 동작).
## 과거 30일 성과 (19 거래일)
| 지표 | 값 | 기준 | 통과 |
|------|-----|------|------|
| 누적 운영일 | 19일 | 30일 | FAIL |
| 승률 | 50.8% | >48% | PASS |
| MDD | -2.9% | <-10% | PASS |
| 샤프 | -0.68 | >1.0 | FAIL |
| L3 발동 횟수 | 0회 | ≤2회 | PASS |
**샤프 음수 주의**: 6월 22일 -110,270원 등 손실 집중일이 반영됨. 7월 1일 +69,663원, 6월 30일 +66,422원으로 최근 수익성은 개선 추세.
**라이브 준비**: 미통과 (19일 / Sharpe -0.68).
## 연속 무거래일 평가
| 날짜 | 이유 | 판단 |
|------|------|------|
| 2026-07-02 | KOSPI -2.8%·SOX -6.27% 약세장 | 올바른 패스 |
| 2026-07-03 | SOX -5.44%·반도체 2연락·글로벌 리스크 | 올바른 패스 |
2일 연속 무거래는 약세 환경 자본 보존 전략의 정상 동작. 다음 거래일(07/04) 미국 독립기념일 휴장 여부 확인 필요.
## 전략 변경 제안
없음. 현재 AI 필터와 목표가 조건이 위험 환경에서 올바르게 작동하고 있음.
## 내일 주요 체크
1. 07/04 미국 독립기념일 → 미국 시장 휴장 → KOSPI 외부 영향 제한적이나 야간 선물 부재로 불확실.
2. SOX 연속 하락 이후 반등 여부 — 반도체 섹터 재진입 조건 재검토.
3. 샤프 개선을 위해 수익 거래일 집중 필요 — 과도한 패스보다 우량 신호 선별 강화 방향 검토.
+110
View File
@@ -0,0 +1,110 @@
# 2026-07-06 저녁 결산
## 요약
| 항목 | 값 |
|------|-----|
| 거래 건수 | 2건 |
| 승/패 | 0승 2패 |
| 순손익 | -54,885원 |
| 수수료 | 5,565원 |
| 전략 판단 | SL 2회 → 점심 진입 차단 (자본 보존) |
## 오늘 시장 환경
| 지표 | 값 |
|------|-----|
| KOSPI | -1.74% (하락) |
| SOX | -5.44% (반도체 2연속 급락) |
| 인버스 ETF | 거래량 1위 (헤지 수요 집중) |
| 피하는 섹터 | 반도체, AI장비 |
| 이벤트 | 삼성전자 실적 발표 D-1 |
## 오늘 거래 내역
| 종목 | 진입 | 청산 | 진입가 | 청산가 | 수량 | 보유시간 | 청산사유 | 손익 | AI부스트 |
|------|------|------|-------|-------|-----|---------|---------|-----|---------|
| 금호건설(002990) | 09:35:36 | 09:36:31 | 9,790 | 9,550 | 143주 | 55초 | SL | -37,193원 | 없음 |
| 삼성전자우(005935) | 09:36:25 | 10:05:06 | 216,000 | 213,500 | 6주 | 29분 | SL | -17,692원 | 없음 |
## 봇 동작 분석
### 진입 판단
아침 컨텍스트에서 `avoid_sectors = ['반도체', 'AI장비']` 설정. SOX -5.44% 반도체 2연속 급락·KOSPI 약세 환경.
두 종목 모두 AI 부스트 없이 진입 — 변동성 돌파 신호만으로 진입.
**주요 이슈:**
- 금호건설(002990): 진입 55초 만에 SL 실행 — 시가 직후 급락 구간에 진입한 것으로 판단. 이 시간대 슬리피지·스프레드 위험 높음.
- 삼성전자우(005935): `avoid_sectors = ['반도체']` 설정에도 불구하고 진입. 섹터 캐시 또는 이름 기반 힌트가 삼성전자우를 반도체로 분류하지 못했을 가능성. 삼성전자 실적 발표 D-1 환경에서의 진입은 리스크 관리상 문제.
### 연속 손절 및 점심 진입 차단
| 시간 | 이벤트 |
|------|--------|
| 09:36:31 | 금호건설 SL (1번째) |
| 10:05:06 | 삼성전자우 SL (2번째) |
| 11:20:09 | midday_context 로드 — 점심 진입 차단 (연속손절 2회·KOSPI-1.74%·인버스ETF 1위) |
| 14:50:00 | 강제 청산 실행 (포지션 없음) |
| 15:10:02 | 결산 완료 (-54,885원) |
점심 진입 차단 판단은 올바름. 이후 장 내내 워치리스트 전 종목 목표가 미달로 추가 진입 없음.
### AI 필터 품질
| 항목 | 평가 |
|------|------|
| 섹터 필터 | 부분 작동 — '반도체' 회피 설정에도 삼성전자우 진입 허용 (분류 미스) |
| AI 부스트 | 0개 (부스트 없이 진입 — 신호 품질 낮음) |
| 점심 진입 차단 | 정확 — 연속손절 2회 + 하락장 환경에서 올바른 차단 |
| 강제 청산 | 정상 (14:50) |
## 실행 품질
| 항목 | 평가 |
|------|------|
| 금호건설 보유시간 | 55초 — 오픈 직후 슬리피지 위험 구간 진입 의심 |
| 삼성전자우 보유시간 | 29분 — 정상 범위 |
| 가격 누락 / 0원 행 | 없음 |
| 열린 포지션 불일치 | 없음 |
| 결산 중복 방지 | 정상 작동 (`결산 이미 처리됨` 확인) |
## 과거 30일 성과 (20 거래일)
| 지표 | 값 | 기준 | 통과 |
|------|-----|------|------|
| 누적 운영일 | 20일 | 30일 | FAIL |
| 승률 | 49.2% | >48% | PASS |
| MDD | -2.9% | <-10% | PASS |
| 샤프 | -1.57 | >1.0 | FAIL |
| L3 발동 횟수 | 0회 | ≤2회 | PASS |
**샤프 악화 주의:** 전일 -0.68에서 오늘 -1.57로 크게 하락. 7월 1일(+69,663원), 6월 30일(+66,422원) 수익일이 있으나 손실 집중일(오늘 -54,885원, 6월 26일 -47,783원)이 샤프를 압박.
**라이브 준비:** 미통과 (20일 / Sharpe -1.57).
## 전략 변경 제안
두 가지 문제가 관찰됨. 증거 부족(20거래일)으로 제안은 관찰 기록 수준.
### 관찰 1: 삼성전자우 반도체 섹터 분류 미스
`avoid_sectors = ['반도체']` 설정에서 삼성전자우(005935)가 진입 허용됨.
삼성전자우는 반도체 기업임에도 섹터 캐시/이름 힌트에서 누락된 것으로 추정.
→ 005935 / 005930 (삼성전자 계열) 하드코딩 또는 종목명 힌트 강화 필요.
**증거: 1건 / 즉시 검토 권장 (버그성).**
### 관찰 2: KOSPI 일중 약세 환경 오픈 진입
KOSPI -1.74% 하락장 + SOX -5.44% 연락 환경에서 09:35~09:36 오픈 직후 진입.
금호건설은 55초 만에 SL — 오픈 변동성이 흡수되기 전 진입한 것으로 판단.
`ENTRY_START = "09:20"``"09:30"` 이후 검토, 또는 KOSPI 일중 낙폭 -1.5% 이상 시 첫 진입을 09:35 이후로 제한하는 방안.
**증거: 20거래일 / 부족. 별도 제안 파일 없이 내부 관찰로 기록.**
## 내일 주요 체크
1. **삼성전자우 섹터 분류 버그 확인**`app/strategy/volatility_breakout.py` 또는 `app/main.py` 섹터 캐시 로직에서 005930/005935 처리 확인.
2. **삼성전자 실적 발표** — 결과에 따라 반도체 섹터 방향 주시.
3. **샤프 회복** — 연속 수익 거래일 필요. 부스트 없는 진입 신중히 관리.
4. **오픈 직후(09:35 전) 진입 품질** — 55초 SL 재발 시 진입 시간 조정 검토.
+101
View File
@@ -0,0 +1,101 @@
# 2026-07-07 저녁 결산
## 요약
| 항목 | 값 |
|------|-----|
| 거래 건수 | 2건 |
| 승/패 | 2승 0패 |
| 순손익 | +31,115원 |
| 수수료 | 2,985원 |
| 전략 판단 | 건설 섹터 강세 포착 → TP1·TP2 조기 완전 청산 |
## 오늘 시장 환경
| 지표 | 값 |
|------|-----|
| KOSPI | -5.38% (삼성전자 역대 최대 실적 불구 급락) |
| SOX (전일) | +2.17% (미국 반도체 반등) |
| USD/KRW | -0.09% (소폭 달러 약세) |
| 인버스 ETF | 거래량 1위 (헤지 수요 집중) |
| 리스크 레벨 | 높음 |
| 섹터 | hot: 반도체·건설업 / avoid: 전기전자·금융·의약품·전기가스 |
| 포지션 배율 | 0.7x (리스크 높음 감안 축소) |
## 오늘 거래 내역
| 종목 | 진입 | 청산 | 진입가 | 청산가 | 수량 | 보유시간 | 청산사유 | 손익 | AI부스트 |
|------|------|------|-------|-------|-----|---------|---------|-----|---------|
| 금호건설(002990) | 09:26:20 | 09:27:58 | 13,900 | 14,220 | 70주 | 1분 38초 | TP1 | +20,313원 | 없음 |
| 금호건설(002990) | 09:26:20 | 09:28:12 | 13,900 | 14,290 | 30주 | 1분 52초 | TP2 | +10,801원 | 없음 |
두 행은 동일 진입의 분할 청산 (TP1 70주 → TP2 30주 순서).
## 봇 동작 분석
### 진입 판단
KOSPI -5.38% 폭락 환경에서 `hot_sectors = ['반도체', '건설업']`, `position_size_multiplier = 0.7` 적용.
AI 부스트 없는 순수 변동성 돌파 신호로 금호건설 진입.
금호건설은 `hot_sectors`의 건설업 종목 — 인버스 ETF 지배 장세에서도 건설 순환매가 유효했음을 확인.
### 청산 흐름
| 시간 | 이벤트 |
|------|--------|
| 09:26:20 | 금호건설 100주 진입 (13,900원) |
| 09:27:58 | TP1 청산 70주 (14,220원, +2.30%) |
| 09:28:12 | TP2 청산 30주 (14,290원, +2.81%) |
| 14:00:xx | 진입 차단 (14:00 이후 pause) |
| 14:50:00 | 강제 청산 실행 (포지션 없음) |
| 15:10:02 | 결산 완료 (+31,115원) |
진입 후 2분 이내 전량 청산 완료 — 폭락장 오전 가격 급등 구간 포착 성공.
### AI 필터 품질
| 항목 | 평가 |
|------|------|
| 섹터 필터 | 정상 — 건설업 hot 종목만 진입, 피하는 섹터 종목 없음 |
| AI 부스트 | 0개 — 순수 신호 의존 (부스트 없이도 수익) |
| 강제 청산 | 정상 (14:50, 포지션 없음) |
## 실행 품질
| 항목 | 평가 |
|------|------|
| 금호건설 보유시간 | 1분 38초 / 1분 52초 — 빠른 청산, 정상 |
| 가격 누락 / 0원 행 | 없음 |
| 열린 포지션 불일치 | 없음 |
| 결산 정상 처리 | 확인 |
## 과거 30일 성과 (21 거래일)
| 지표 | 값 | 기준 | 통과 |
|------|-----|------|------|
| 누적 운영일 | 21일 | 30일 | FAIL |
| 승률 | 50.7% | >48% | PASS |
| MDD | -2.9% | <-10% | PASS |
| 샤프 | -1.00 | >1.0 | FAIL |
| L3 발동 횟수 | 0회 | ≤2회 | PASS |
**샤프 개선 추이:** 전일 -1.57 → 오늘 -1.00. 오늘 수익이 손실 일수를 부분 상쇄.
손실 집중일(7/6 -54,885원, 6/26 -47,783원)이 샤프를 압박 중 — 연속 수익일 누적이 필요.
**라이브 준비:** 미통과 (21일 / Sharpe -1.00).
## 전략 변경 제안
없음. 21거래일로 통계 근거 부족. 오늘 결과는 양호하며 기존 전략 파라미터 유지 권장.
**지속 관찰 사항:**
- AI 부스트 0개 지속 — 부스트 없는 진입이 주류. 아침 컨텍스트 `boosted_tickers` 생성 품질 점검 필요.
- KOSPI 폭락장(-5.38%)에서도 수익 — 섹터 순환매 포착 유효성 확인. 단, 표본 수 부족.
## 내일 주요 체크
1. **삼성전자 쇼크 여진** — KOSPI 추가 변동성·외국인 매도 지속 여부 주시.
2. **인버스 ETF 지배 지속 여부** — 거래량 1위 지속 시 신중한 포지션 배율 유지.
3. **건설·방산 강세 지속** — 순환매 방향 확인 후 진입.
4. **AI 부스트 부재**`boosted_tickers` 생성 로직 및 아침 시장 분석 품질 점검.
+143
View File
@@ -0,0 +1,143 @@
# 2026-07-08 저녁 결산
## 요약
| 항목 | 값 |
|---|---|
| 거래 건수 | 0건 |
| 승/패 | - / - |
| 승률 | - |
| 순손익 | 0원 |
| 수수료 | 0원 |
| 청산 사유 분포 | 없음 |
**거래 없음 — AI 진입 차단 (trade_allowed=false) 및 전 종목 목표가 미달**
---
## 1. 시장 환경
### 오전 컨텍스트 (08:15)
| 지표 | 값 |
|---|---|
| 감정 점수 | 36 / 100 (약세) |
| 국내 점수 | 44 |
| 글로벌 점수 | 24 (리스크 높음) |
| SOX | -4.65% |
| WTI | +5.66% |
| NASDAQ | -1.16% |
| USD/KRW | -0.98% |
| 미국채 10Y | 4.53% |
| trade_allowed | **false** |
| 포지션 배율 | 0.5× |
- AI 차단 사유: SOX -4.65%·삼전 外人 2조 매도·WTI +5.66%
- Hot 섹터: 건설, 내수소비, 바이오
- Avoid 섹터: 반도체, 항공, 방산
### 장중 컨텍스트 (11:20)
| 지표 | 값 |
|---|---|
| KOSPI 변동 | -1.68% |
| 점심 진입 허용 | **false** |
| 인버스 ETF | 거래량 1위 |
| 오전 평가 | 예측 빗나감 |
- 장중 Hot 섹터: 2차전지 (오전 예상과 다름)
- 장중 Avoid 섹터: 전기전자, 철강금속, 의약품, **건설업**, 통신업
- 주목: 오전에 Hot이었던 건설 섹터가 장중에 Avoid로 전환
---
## 2. 진입 차단 분석
오늘 09:20~14:00 동안 봇이 정상 순환했으나 체결 건수 0건.
**차단 경로 (이중 차단):**
1. **AI 레벨**: trade_allowed=false → 모든 신호 진입 불가
2. **가격 레벨**: 전 종목 목표가 미달 (단일 예외 아래 참조)
**신호 진단 특이사항:**
- 삼성전기(009150): 09:58경 현재가 1,644,000 > 목표가 1,625,500 (목표가 돌파) → AI 차단으로 진입 불가
- 두산(000150): 09:32 목표가 넘어선 순간도 있었으나 대부분 미달 + AI 차단 혼재
- 삼성전자(005930): 종일 목표가(299,250) 대비 5,000~12,000 미달
**평가:** AI 차단 메커니즘이 시장 약세일에 정확히 작동함. SOX -4.65% 같은 강한 반도체 하락 환경에서 진입 차단은 손실 회피에 기여.
---
## 3. 섹터 예측 정확도
| 섹터 | 오전 예측 | 실제 결과 | 정확도 |
|---|---|---|---|
| 건설 | Hot | 장중 하락 (Avoid 전환) | 빗나감 |
| 반도체 | Avoid | 전 종목 하락 | 정확 |
| 항공 | Avoid | 해당 없음 | - |
| 2차전지 | 언급 없음 | 유일한 Hot (장중) | 놓침 |
- 건설 섹터: WTI +5.66%를 건설 호재로 연결했으나 실제 시장은 다르게 반응.
KOSPI 全업종 하락 속에서 건설도 예외 없이 하락. 오전 섹터 예측 개선 여지 있음.
- 2차전지: 장중 유일 Hot 섹터였으나 오전 컨텍스트에 포함되지 않음.
---
## 4. 30일 누적 성과
| 항목 | 값 | 기준 | 통과 |
|---|---|---|---|
| 운영 거래일 | 22일 | 30일 이상 | FAIL |
| 승률 | 50.7% | 48% 초과 | PASS |
| MDD | -2.9% | -10% 이내 | PASS |
| 샤프 지수 | -0.98 | 1.0 초과 | FAIL |
| L3 발동 | 0회 | 월 2회 이하 | PASS |
**라이브 준비: 미충족 (2개 항목 미달)**
### 샤프 지수 분석
샤프 -0.98은 일간 PnL 변동성 대비 평균 수익이 음수임을 의미.
최근 30일 내 고손실일 (6/25: -32k, 6/26: -48k, 7/6: -55k)이 변동성을 끌어올림.
7/1 +70k, 6/30 +66k 같은 고수익일이 있어도 음의 샤프가 나오는 이유는
손실 쪽 변동성 기여가 더 크기 때문. 수익/손실 비대칭성 문제 존재.
---
## 5. 실행 품질
- 미체결 주문: 없음 (진입 0건)
- 0원 가격 행: 없음
- 불일치 포지션: 없음
- 14:50 강제 청산: 정상 완료 (포지션 없음)
- 15:10 결산: 정상 완료
- 봇 단일 실행 보장: 정상 (lock 파일 기반)
---
## 6. 종합 평가
**오늘의 핵심 판단:**
글로벌 반도체 급락 (SOX -4.65%)과 삼전 외인 대규모 매도 환경에서 AI가 trade_allowed=false를 발동한 것은 적절한 판단이었음. KOSPI -1.68% + 全업종 하락이 실제 확인되며 차단 근거가 유효했음.
**개선 포인트:**
1. 건설 섹터 오전 예측 로직: WTI 상승을 건설 호재로 자동 연결하는 패턴 재검토 필요. 글로벌 리스크 High 환경에서는 WTI 상승 = 인플레이션 우려로 해석해야 할 수 있음.
2. 2차전지 섹터 모니터링: 오전 컨텍스트에 포함되지 않았으나 장중 유일 Hot. 글로벌 배터리/EV 흐름을 오전 데이터에 반영하는 방안 검토.
**샤프 개선을 위한 관찰:**
- 현재 샤프 -0.98은 손실 변동성이 지나치게 큼에 기인
- 고손실일 (6/26 -48k, 7/6 -55k)의 공통점: SL 연속 + 시장 급락일
- L3-B 포지션 축소가 작동하고 있으나, 그 이전에 발생하는 첫 번째 SL의 크기 자체가 큼
- 30거래일 도달 후 구체적인 SL 크기 분석 필요
---
## 7. 라이브 준비 체크리스트
- [ ] 누적 운영 30거래일 (현재 22일)
- [x] 승률 > 48% (50.7%)
- [x] MDD < -10% (-2.9%)
- [ ] 샤프 > 1.0 (-0.98)
- [x] L3 월 2회 이하 (0회)
**결론:** 라이브 전환 불가. 30거래일 요건 충족까지 약 8거래일 남음. 샤프 개선이 더 큰 과제.
+12
View File
@@ -1,5 +1,17 @@
# Implementation Log
## 2026-07-02
- Hardened Windows background operation so users do not need to keep a visible
console window open:
- `scripts/start_bot.py` now starts `app/main.py` with `pythonw.exe` when it is
available.
- `scripts/_watchdog.py` uses the same `pythonw.exe` restart path.
- `scripts/setup_scheduler.ps1` registers scheduled PowerShell tasks with
`-WindowStyle Hidden` and marks task settings as hidden.
- Updated `README.md` with the background-operation rule and the preferred
manual start command.
## 2026-06-10
- Enabled wake-from-sleep behavior for Scheduler tasks:
+9 -1
View File
@@ -17,6 +17,14 @@ from app.main import load_env
load_env()
def _bot_python() -> str:
if os.name == "nt":
pythonw = Path(sys.executable).with_name("pythonw.exe")
if pythonw.exists():
return str(pythonw)
return sys.executable
def _is_process_alive(pid: int) -> bool:
result = subprocess.run(
["tasklist", "/FI", f"PID eq {pid}", "/NH"],
@@ -69,7 +77,7 @@ def _restart_bot() -> int:
log_path = PROJECT / "logs" / "bot_stderr.log"
with open(log_path, "a", encoding="utf-8") as log:
proc = subprocess.Popen(
[sys.executable, "-u", "app/main.py"],
[_bot_python(), "-u", "app/main.py"],
cwd=PROJECT,
creationflags=creationflags,
stdout=log,
+4 -2
View File
@@ -25,7 +25,7 @@ function Register-StockTask {
$Trigger = New-ScheduledTaskTrigger -Weekly -DaysOfWeek $Weekdays -At $Time
$Action = New-ScheduledTaskAction `
-Execute "powershell.exe" `
-Argument "-NonInteractive -ExecutionPolicy Bypass -File `"$Project\scripts\$Script`"" `
-Argument "-NoProfile -WindowStyle Hidden -NonInteractive -ExecutionPolicy Bypass -File `"$Project\scripts\$Script`"" `
-WorkingDirectory $Project
$Settings = New-ScheduledTaskSettingsSet `
-ExecutionTimeLimit (New-TimeSpan -Minutes $LimitMinutes) `
@@ -34,6 +34,7 @@ function Register-StockTask {
-DontStopIfGoingOnBatteries `
-RunOnlyIfNetworkAvailable:$false
$Settings.DisallowStartIfOnBatteries = $false
$Settings.Hidden = $true
Register-ScheduledTask `
-TaskName $Name `
@@ -49,7 +50,7 @@ function Register-StockTask {
function Register-WatchdogTask {
$ScriptPath = Join-Path $Project "scripts\run_watchdog.ps1"
$Command = 'schtasks /Create /TN "\StockBot\StockBot_Watchdog" /TR "\"powershell.exe\" -NonInteractive -ExecutionPolicy Bypass -File \"' + $ScriptPath + '\"" /SC WEEKLY /D MON,TUE,WED,THU,FRI /ST 09:00 /RI 5 /DU 06:05 /F'
$Command = 'schtasks /Create /TN "\StockBot\StockBot_Watchdog" /TR "\"powershell.exe\" -NoProfile -WindowStyle Hidden -NonInteractive -ExecutionPolicy Bypass -File \"' + $ScriptPath + '\"" /SC WEEKLY /D MON,TUE,WED,THU,FRI /ST 09:00 /RI 5 /DU 06:05 /F'
cmd.exe /c $Command | Out-Null
if ($LASTEXITCODE -ne 0) {
throw "StockBot_Watchdog registration failed"
@@ -60,6 +61,7 @@ function Register-WatchdogTask {
$Task.Settings.WakeToRun = $true
$Task.Settings.DisallowStartIfOnBatteries = $false
$Task.Settings.StopIfGoingOnBatteries = $false
$Task.Settings.Hidden = $true
Set-ScheduledTask -TaskName "StockBot_Watchdog" -TaskPath $TaskPath -Settings $Task.Settings | Out-Null
Write-Host "[OK] StockBot_Watchdog registered weekdays at 09:00-15:05 every 5 minutes" -ForegroundColor Green
+9 -1
View File
@@ -11,6 +11,14 @@ PID_FILE = PROJECT / "logs" / "bot.pid"
LOG_FILE = PROJECT / "logs" / "bot_stderr.log"
def _bot_python() -> str:
if os.name == "nt":
pythonw = Path(sys.executable).with_name("pythonw.exe")
if pythonw.exists():
return str(pythonw)
return sys.executable
def _taskkill(pid: int) -> None:
subprocess.run(["taskkill", "/PID", str(pid), "/F"], capture_output=True, text=True)
@@ -69,7 +77,7 @@ def _start_bot() -> int:
with open(LOG_FILE, "a", encoding="utf-8") as log:
proc = subprocess.Popen(
[sys.executable, "-u", "app/main.py"],
[_bot_python(), "-u", "app/main.py"],
cwd=PROJECT,
creationflags=creationflags,
stdout=log,