feat: WBS-5.3 일일 타이머 트리거 설정 함수 추가

- gdf_06_rebalance.gs: setupDailyRunAllTrigger() 추가
  * 매일 16:00 KST run_all 자동 실행 타이머 트리거 등록
  * 중복 트리거 자동 삭제 (재실행 시 안전)
  * listTriggers() 검증 함수 포함
  * 사용: GAS 편집기에서 setupDailyRunAllTrigger() 1회 수동 실행
- docs/ROADMAP_WBS.md: WBS-5.3 완료 표시

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-13 16:23:39 +09:00
parent 72f8d61244
commit 467e3fd441
2 changed files with 46 additions and 2 deletions
+2 -2
View File
@@ -495,7 +495,7 @@ CI 게이트:
| **작업** | 장 마감(오후 3:30) → HTS 캡처 → ChatGPT 파싱 → GAS run_all → Python 하네스 → 결정 패킷 → 알림 |
| **현재 자동화 수준** | GAS run_all 63단계 DAG 존재, 수동 트리거 |
| **목표** | 타이머 트리거 설정 → 완전 자율화 |
| **상태** | 타이머 트리거 미설정 |
| **상태** | 완료 (gdf_06_rebalance.gs `setupDailyRunAllTrigger()` 추가; GAS 편집기에서 1회 실행 필요) |
**성공 하네스 (데이터 기준)**:
```
@@ -613,7 +613,7 @@ CI 게이트:
[ ] WBS-4.3: 알파 보정 루프 (WBS-4.2 완료 후)
[ ] WBS-4.4: 성과 모니터링 대시보드 완성
[x] WBS-5.2: GAS 자동 배포 스크립트 (tools/deploy_gas.py -- dry-run PASS 17 files)
[ ] WBS-5.3: 타이머 트리거 설정 (GAS 트리거 일일 자율 실행)
[x] WBS-5.3: 타이머 트리거 설정 (gdf_06_rebalance.gs setupDailyRunAllTrigger() 추가)
```
---
+44
View File
@@ -417,3 +417,47 @@ function _rbLimitPrice_(close, action) {
if (close <= 0) return 0;
return action === "SELL" ? Math.round(close * (1 - RB_LIMIT_PRICE_DISCOUNT)) : Math.round(close);
}
// ── WBS-5.3 일일 자율 실행 타이머 트리거 설정 ─────────────────────────────────
/**
* setupDailyRunAllTrigger()
* GAS 편집기에서 수동 1회 실행 → 매일 16:30 run_all 타이머 트리거 등록.
* 중복 트리거 방지: 동일 함수명 트리거가 존재하면 먼저 삭제.
*/
function setupDailyRunAllTrigger() {
const TARGET_FN = "run_all";
const TRIGGER_HOUR = 16; // 오후 4시 (장 마감 30분 후)
// 기존 동일 함수 트리거 삭제 (중복 방지)
ScriptApp.getProjectTriggers().forEach(t => {
if (t.getHandlerFunction() === TARGET_FN) {
ScriptApp.deleteTrigger(t);
Logger.log("[WBS-5.3] 기존 트리거 삭제: " + TARGET_FN);
}
});
// 일일 타이머 트리거 등록 (매일 16:00~17:00 사이 실행)
ScriptApp.newTrigger(TARGET_FN)
.timeBased()
.atHour(TRIGGER_HOUR)
.everyDays(1)
.inTimezone("Asia/Seoul")
.create();
Logger.log("[WBS-5.3] 일일 트리거 등록 완료: " + TARGET_FN + " @ " + TRIGGER_HOUR + ":00 KST");
}
/**
* listTriggers()
* 현재 등록된 모든 트리거 목록 출력 (검증용).
*/
function listTriggers() {
ScriptApp.getProjectTriggers().forEach(t => {
Logger.log(
"trigger: fn=" + t.getHandlerFunction() +
" type=" + t.getEventType() +
" source=" + t.getTriggerSource()
);
});
}