MA 정렬 요구 완화 + 최소 캔들 body 0.2% 필터
## 변경 1 — bull_ma_2 / bear_ma_2 정의 완화 이전: close > MA7 > MA25 (MA끼리 정렬 요구) -> 추세 반전 직후 MA가 정렬되기 전 양봉/음봉을 차단해 신호 누락. 이후: close > MA7 AND close > MA25 (가격이 두 MA 모두 위/아래에만 있으면 OK). MA끼리 정렬 미완성도 통과. 예: 23:15 15m 양봉 +0.36% (close 79,201, MA7 78,903, MA25 79,092) 이전: MA7<MA25 라 차단 이후: close 가 MA7,MA25 위라 통과 -> long_signal 발화 ## 변경 2 — 최소 캔들 body 0.2% 필터 이전: close > open / close < open 만 요구 -> -0.11% 같은 미미한 음봉도 short 신호로 발화 (노이즈). 이후: body_pct >= +0.2% (long) / <= -0.2% (short) 추가 요구. 예: 22:45 15m -0.11% 작은 음봉 이전: close<open 통과 -> short 신호 이후: body -0.11% > -0.2% -> 차단 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
+10
-6
@@ -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)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user