15m/30m/1h 진입 알림을 closed candle 전용으로 변경 (forming 차단)

## 사례
2026-05-04 23:02 KST 1시간봉 일반 숏 진입 알림 발사. 그러나 23:00
캔들은 forming 중이고 그 시점 close 가 일시적으로 open 아래로
내려가 short_signal=True 깜빡 발화. 이후 close=79,203 으로 회복
(open 78,747 위) -> 마감 시점 short_signal=False. 사용자 입장에서는
"숏 마커도 없는데 1시간봉에 숏 알림 오는 지랄".

## 수정
forming candle 깜빡임은 두 가지 방법으로 대응:
1. 5분봉 - forming 발사 허용 + 깜빡 시 a9ad52f 의 즉시 취소(30s)
   (반응성 우선, 사용자 5분 단타용)
2. 15m / 30m / 1h - forming 자체 제외, closed candle 만 신호 검사
   (가짜 알림 차단. 발사는 캔들 마감 후 다음 polling = ~30초 이내)

  recent = df.iloc[:-1].tail(3)  if interval in (15m, 30m, 1h)

장기 시간봉은 1캔들 늦은 알림 (15~60분 지연) 보다 가짜 알림 차단이
더 가치 있음 — 사용자 손익에 큰 영향. 5분봉은 깜빡 후 30초 취소로
충분.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
ILSEON-RYU
2026-05-04 23:25:45 +09:00
parent a9ad52f3d7
commit a57941e1ef
+8 -2
View File
@@ -124,8 +124,14 @@ def check_and_alert(df, symbol, interval):
alert_state.short_entry[interval] = None alert_state.short_entry[interval] = None
alert_state.pending_groups = new_pending alert_state.pending_groups = new_pending
# Phase 2 — 신호 검사 + 알림 발사 (forming candle 포함) # Phase 2 — 신호 검사 + 알림 발사.
recent = df.tail(3) # 5분봉: forming candle 포함 (반응성 우선, 깜빡임은 a9ad52f 의 즉시 취소로 대응)
# 15m / 30m / 1h: forming candle 제외 (forming 동안 신호 깜빡으로 인한 가짜
# 알림 자체를 차단. 알림은 캔들 마감 후 ~30초 이내 발사 — 신뢰성 우선)
if interval in ("15m", "30m", "1h"):
recent = df.iloc[:-1].tail(3)
else:
recent = df.tail(3)
eligible = [] eligible = []
for sig, key, sub_label, direction in SIG_DEFS: for sig, key, sub_label, direction in SIG_DEFS: