init
This commit is contained in:
@@ -109,6 +109,16 @@ def check_buy_signals(symbol, data):
|
||||
|
||||
distance = (current_price - lower_band) / (upper_band - lower_band)
|
||||
bb_signal = distance < BOLLINGER_THRESHOLD
|
||||
|
||||
# U자 반등 후 이전 고점 돌파 여부 계산 (BREAKOUT)
|
||||
breakout_signal = False
|
||||
if len(data) >= BREAKOUT_LOOKBACK + 1:
|
||||
window_close = data['Close'].iloc[-BREAKOUT_LOOKBACK-1:-1]
|
||||
prev_high = window_close.max()
|
||||
prev_low = window_close.min()
|
||||
# 가격이 충분히 내려갔다가(BUY_THRESHOLD 비율) 다시 이전 고점을 돌파하면 breakout으로 간주
|
||||
if prev_high > 0 and (prev_high - prev_low) / prev_high > BUY_THRESHOLD and current_price > prev_high:
|
||||
breakout_signal = True
|
||||
|
||||
# RSI 과매도 신호 (RSI < 30)
|
||||
if not isinstance(latest['Upper'], float):
|
||||
@@ -129,7 +139,8 @@ def check_buy_signals(symbol, data):
|
||||
'rsi_signal': rsi_signal,
|
||||
'macd_signal': macd_signal,
|
||||
'ma_signal': ma_signal,
|
||||
'volume_signal': volume_signal
|
||||
'volume_signal': volume_signal,
|
||||
'breakout_signal': breakout_signal
|
||||
}
|
||||
|
||||
# 최소 3개 이상의 신호가 동시에 발생할 때 매수 신호로 간주
|
||||
@@ -145,7 +156,7 @@ def check_buy_signals(symbol, data):
|
||||
'signal_line': latest['Signal'].iloc[0],
|
||||
'buy_signals': buy_signals,
|
||||
'signal_count': signal_count,
|
||||
'buy': (bb_signal and rsi_signal) or (signal_count >= 2 and (bb_signal or rsi_signal))
|
||||
'buy': breakout_signal or ((bb_signal and rsi_signal) or (signal_count >= 2 and (bb_signal or rsi_signal)))
|
||||
}
|
||||
else:
|
||||
rsi_signal = latest['RSI'] < 30
|
||||
@@ -165,7 +176,8 @@ def check_buy_signals(symbol, data):
|
||||
'rsi_signal': rsi_signal,
|
||||
'macd_signal': macd_signal,
|
||||
'ma_signal': ma_signal,
|
||||
'volume_signal': volume_signal
|
||||
'volume_signal': volume_signal,
|
||||
'breakout_signal': breakout_signal
|
||||
}
|
||||
|
||||
# 최소 3개 이상의 신호가 동시에 발생할 때 매수 신호로 간주
|
||||
@@ -181,7 +193,7 @@ def check_buy_signals(symbol, data):
|
||||
'signal_line': latest['Signal'],
|
||||
'buy_signals': buy_signals,
|
||||
'signal_count': signal_count,
|
||||
'buy': (bb_signal and rsi_signal) or (signal_count >= 2 and (bb_signal or rsi_signal))
|
||||
'buy': breakout_signal or ((bb_signal and rsi_signal) or (signal_count >= 2 and (bb_signal or rsi_signal)))
|
||||
}
|
||||
|
||||
def format_message(info, market_type):
|
||||
@@ -211,6 +223,9 @@ def format_message(info, market_type):
|
||||
if info['buy_signals']['volume_signal']:
|
||||
message += "- 거래량 급증"
|
||||
count += 1
|
||||
if info['buy_signals'].get('breakout_signal'):
|
||||
message += "- U자 반등 돌파"
|
||||
count += 1
|
||||
message += "\n"
|
||||
message = message.replace("{count}", str(count))
|
||||
return message
|
||||
|
||||
Reference in New Issue
Block a user