Forming candle 의 일시적 신호 깜빡임으로 인한 false alert 차단

## 사례
2026-05-04 09:38 KST 에 30분봉 [09:30, 10:00) 형성 중 캔들 기준으로
'일반 숏 진입 신호' 알림이 발사되었으나, 09:30 캔들이 close=78,504.90
으로 마감된 후 동일 캔들에 대해 모든 진입 신호가 False 로 확인됨. 즉,
캔들 형성 중 일시적으로 close 가 MA / BB 기준선 아래로 내려간 순간
short_signal 이 잠깐 True 로 떴다가 close 가 위로 회복되며 False 로
전환된 것을 알림 스레드가 그 순간 잡아 발사함. 이후 손절가 알림
([손절가알림])까지 trail 되어 잘못된 시그널이 두 번 텔레그램에 도착.

## 수정
check_and_alert 의 검사 윈도우를 df.tail(3) 에서
df.iloc[:-1].tail(3) 로 변경. 마지막 행 (= 현재 형성 중 캔들) 을
제외하고 최근 3 개 닫힌 캔들만 검사. close 가 확정된 데이터만
보므로 forming 깜빡임에 속지 않음.

부작용: 알림이 캔들 마감 후 ~30s (다음 polling 주기) 이내로 자연
미뤄짐. accuracy / latency 트레이드오프에서 accuracy 우선이라고 판단.
손절가 도달 체크는 여전히 df.iloc[-1]['close'] (현재가) 사용해서
real-time 반응성 유지.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
ILSEON-RYU
2026-05-04 13:08:05 +09:00
parent 632fd551ae
commit 8fd47d0926
+3 -1
View File
@@ -91,7 +91,9 @@ SIG_DEFS = [
def check_and_alert(df, symbol, interval): def check_and_alert(df, symbol, interval):
now = time.time() now = time.time()
recent = df.tail(3) # 마지막 행은 형성 중(forming) 캔들 — 지표가 close 변동에 따라 깜빡일 수 있어
# false alert 의 주범. 닫힌 캔들 (최근 3개) 만 신호 검사 대상으로 사용.
recent = df.iloc[:-1].tail(3)
eligible = [] eligible = []
for sig, key, sub_label, direction in SIG_DEFS: for sig, key, sub_label, direction in SIG_DEFS: