diff --git a/app_streamlit.py b/app_streamlit.py index 73596a4..2156274 100644 --- a/app_streamlit.py +++ b/app_streamlit.py @@ -310,11 +310,13 @@ def compute_indicators(df, interval="5m"): return df def compute_signals(df, interval="5m"): + # close 가 MA7, MA25 양쪽 위/아래에 있는 것 만 요구. MA끼리 정렬 (MA7>MA25)은 + # 추세 반전 직후엔 늦게 형성되어 양봉/음봉 신호를 차단하는 부작용 있어 제거. df["bull_ma_2"] = ( - (df["close"] > df["MA7"]) & (df["MA7"] > df["MA25"]) + (df["close"] > df["MA7"]) & (df["close"] > df["MA25"]) ) df["bear_ma_2"] = ( - (df["close"] < df["MA7"]) & (df["MA7"] < df["MA25"]) + (df["close"] < df["MA7"]) & (df["close"] < df["MA25"]) ) df["bull_ma"] = ( (df["close"] > df["MA7"]) & (df["MA7"] > df["MA25"]) @@ -328,10 +330,12 @@ def compute_signals(df, interval="5m"): # 현재 캔들 자체의 방향이 신호 방향과 일치해야 발사. # 늦은 진입 (반등 중인 녹색 캔들에 short 등) 차단 + 현재 진행 중인 breakdown # (빨간 거대 캔들에 short) 은 통과 시킴. - # BB 상/하단 차단 제거 + RSI 임계 완화 (60→75 / 35→25). 큰 양봉/음봉이라도 - # 마커 발화하도록. 늦은 진입 차단보다 신호 캡처 우선. - df["long_signal"] = df["bull_ma_2"] & (df["RSI"] < 75) & (df["MACD_hist"] > df["MACD_hist"].shift(1)) & (df["close"] > df["BB_mid"]) & (df["close"] > df["open"]) - df["short_signal"] = df["bear_ma_2"] & (df["RSI"] > 25) & (df["MACD_hist"] < df["MACD_hist"].shift(1)) & (df["close"] < df["BB_mid"]) & (df["close"] < df["open"]) + # BB 상/하단 차단 제거 + RSI 임계 완화 (60→75 / 35→25). 캔들 body 최소 0.2% + # 요구해 작은 노이즈 캔들 차단 (close vs open 만으로는 -0.1% 같은 미미한 음봉도 + # 신호로 잡히던 문제 해결). + body_pct = (df["close"] - df["open"]) / df["open"].replace(0, float("nan")) + df["long_signal"] = df["bull_ma_2"] & (df["RSI"] < 75) & (df["MACD_hist"] > df["MACD_hist"].shift(1)) & (df["close"] > df["BB_mid"]) & (body_pct >= 0.002) + df["short_signal"] = df["bear_ma_2"] & (df["RSI"] > 25) & (df["MACD_hist"] < df["MACD_hist"].shift(1)) & (df["close"] < df["BB_mid"]) & (body_pct <= -0.002) df["long_signal"] = df["long_signal"] & (df["long_signal"].rolling(5, min_periods=1).sum().shift(1).fillna(0) == 0) df["short_signal"] = df["short_signal"] & (df["short_signal"].rolling(5, min_periods=1).sum().shift(1).fillna(0) == 0)