This commit is contained in:
dsyoon
2025-09-01 12:08:32 +09:00
parent 2b4d0019ae
commit c1f12cd4ea
3 changed files with 62 additions and 39 deletions

View File

@@ -229,8 +229,8 @@ class Monitor(HTS):
try: try:
# 신호 생성 및 최신 포인트 확인 # 신호 생성 및 최신 포인트 확인
data = self.annotate_signals(symbol, data) data = self.annotate_signals(symbol, data)
if data['point'].iloc[-1] != 1: #if data['point'].iloc[-1] != 1:
return False # return False
# 인버스 데이터: 매수 신호를 매도로 처리 (fall_6p, deviation40 만 허용) # 인버스 데이터: 매수 신호를 매도로 처리 (fall_6p, deviation40 만 허용)
if is_inverse: if is_inverse:
@@ -283,11 +283,11 @@ class Monitor(HTS):
# Ignore errors in MA calculation so as not to block trading logic # Ignore errors in MA calculation so as not to block trading logic
pass pass
buy_amount = 6000 buy_amount = 5100
current_time = datetime.now() current_time = datetime.now()
if data['signal'].iloc[-1] == 'fall_6p': if data['signal'].iloc[-1] == 'fall_6p':
if data['Close'].iloc[-1] > 100: if data['Close'].iloc[-1] > 100:
buy_amount = 500000 buy_amount = 600000
else: else:
buy_amount = 300000 buy_amount = 300000
@@ -305,24 +305,32 @@ class Monitor(HTS):
print(f"{symbol}: 매수 금지 중 (남은 시간: {1800 - time_diff.total_seconds():.0f}초)") print(f"{symbol}: 매수 금지 중 (남은 시간: {1800 - time_diff.total_seconds():.0f}초)")
return False return False
buy_amount = 5100
if data['signal'].iloc[-1] == 'movingaverage': if data['signal'].iloc[-1] == 'movingaverage':
buy_amount = 30000 buy_amount = 100000
elif data['signal'].iloc[-1] == 'deviation40': elif data['signal'].iloc[-1] == 'deviation40':
buy_amount = 50000 buy_amount = 500000
elif data['signal'].iloc[-1] == 'deviation240': elif data['signal'].iloc[-1] == 'deviation240':
buy_amount = 6000 buy_amount = 60000
elif data['signal'].iloc[-1] == 'deviation1440': elif data['signal'].iloc[-1] == 'deviation1440':
if symbol in ['BONK', 'PEPE', 'TON']: if symbol in ['BONK', 'PEPE', 'TON']:
buy_amount = 20000 buy_amount = 200000
else: else:
buy_amount = 30000 buy_amount = 300000
# heikin_ashi 조건 제거 완료
if data['signal'].iloc[-1] in ['movingaverage', 'deviation40', 'deviation240', 'deviation1440']: if data['signal'].iloc[-1] in ['movingaverage', 'deviation40', 'deviation240', 'deviation1440']:
if check_5_week_lowest: if check_5_week_lowest:
buy_amount *= 4 buy_amount *= 4
# 분봉 시스널이 없을 때는 이전 봉보다 높으면 60분 마다 매수
if data['point'].iloc[-1] != 1:
buy_amount = 30000
last_buy_dt = self.buy_cooldown.get(symbol, {}).get('buy', {}).get('datetime')
if last_buy_dt:
time_diff = current_time - last_buy_dt
if time_diff.total_seconds() < 3600:
print(f"{symbol}: 매수 금지 중 (남은 시간: {3600 - time_diff.total_seconds():.0f}초)")
return False
_ = self.hts.buyCoinMarket(symbol, buy_amount) _ = self.hts.buyCoinMarket(symbol, buy_amount)
if self.cooldown_file is not None: if self.cooldown_file is not None:
@@ -554,6 +562,7 @@ class Monitor(HTS):
data = self.get_coin_data(symbol, interval) data = self.get_coin_data(symbol, interval)
data_1 = self.get_coin_data(symbol, interval=1) data_1 = self.get_coin_data(symbol, interval=1)
data_1.at[data_1.index[-1], 'Volume'] = data_1['Volume'].iloc[-1] * 60 data_1.at[data_1.index[-1], 'Volume'] = data_1['Volume'].iloc[-1] * 60
saved_data = self.get_coin_saved_data(symbol, interval, data) saved_data = self.get_coin_saved_data(symbol, interval, data)
data = pd.concat([data, saved_data, data_1.iloc[[-1]]], ignore_index=True) data = pd.concat([data, saved_data, data_1.iloc[[-1]]], ignore_index=True)
data['datetime'] = pd.to_datetime(data['datetime'], format='%Y-%m-%d %H:%M:%S') data['datetime'] = pd.to_datetime(data['datetime'], format='%Y-%m-%d %H:%M:%S')

View File

@@ -19,21 +19,28 @@ class MonitorCoin (Monitor):
for symbol in KR_COINS_1: for symbol in KR_COINS_1:
print("[{}] {}".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), symbol)) print("[{}] {}".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), symbol))
interval = 60 interval = 1440
data = self.get_coin_some_data(symbol, interval) data = self.get_coin_some_data(symbol, interval)
if data is not None and not data.empty: data = self.calculate_technical_indicators(data)
try: recent_data = self.annotate_signals(symbol, data)
inverseData= self.inverse_data(data) if recent_data['point'].iloc[-1] == 1:
recent_inverseData = self.annotate_signals(symbol, inverseData)
_ = self.buy_sell_ticker_1h(symbol, recent_inverseData, balances=balances, is_inverse=True)
data = self.calculate_technical_indicators(data) interval = 60
recent_data = self.annotate_signals(symbol, data) data = self.get_coin_some_data(symbol, interval)
_ = self.buy_sell_ticker_1h(symbol, recent_data, balances=None, is_inverse=False) if data is not None and not data.empty:
except Exception as e: try:
print(f"Error processing data for {symbol}: {str(e)}") inverseData= self.inverse_data(data)
else: recent_inverseData = self.annotate_signals(symbol, inverseData)
print(f"Data for {symbol} is empty or None.") _ = self.buy_sell_ticker_1h(symbol, recent_inverseData, balances=balances, is_inverse=True)
data = self.calculate_technical_indicators(data)
recent_data = self.annotate_signals(symbol, data)
_ = self.buy_sell_ticker_1h(symbol, recent_data, balances=None, is_inverse=False)
except Exception as e:
print(f"Error processing data for {symbol}: {str(e)}")
else:
print(f"Data for {symbol} is empty or None.")
time.sleep(1) time.sleep(1)

View File

@@ -17,22 +17,29 @@ class MonitorCoin (Monitor):
balances[tmp['currency']] = {'balance': float(tmp['balance']), 'avg_buy_price': float(tmp['avg_buy_price'])} balances[tmp['currency']] = {'balance': float(tmp['balance']), 'avg_buy_price': float(tmp['avg_buy_price'])}
for symbol in KR_COINS_2: for symbol in KR_COINS_2:
print("[{}] {}".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), symbol))
interval = 60
data = self.get_coin_some_data(symbol, interval)
if data is not None and not data.empty:
try:
inverseData= self.inverse_data(data)
recent_inverseData = self.annotate_signals(symbol, inverseData)
_ = self.buy_sell_ticker_1h(symbol, recent_inverseData, balances=balances, is_inverse=True)
data = self.calculate_technical_indicators(data) print("[{}] {}".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), symbol))
recent_data = self.annotate_signals(symbol, data) interval = 1440
_ = self.buy_sell_ticker_1h(symbol, recent_data, balances=None, is_inverse=False) data = self.get_coin_some_data(symbol, interval)
except Exception as e: data = self.calculate_technical_indicators(data)
print(f"Error processing data for {symbol}: {str(e)}") recent_data = self.annotate_signals(symbol, data)
else: if recent_data['point'].iloc[-1] == 1:
print(f"Data for {symbol} is empty or None.")
interval = 60
data = self.get_coin_some_data(symbol, interval)
if data is not None and not data.empty:
try:
inverseData= self.inverse_data(data)
recent_inverseData = self.annotate_signals(symbol, inverseData)
_ = self.buy_sell_ticker_1h(symbol, recent_inverseData, balances=balances, is_inverse=True)
data = self.calculate_technical_indicators(data)
recent_data = self.annotate_signals(symbol, data)
_ = self.buy_sell_ticker_1h(symbol, recent_data, balances=None, is_inverse=False)
except Exception as e:
print(f"Error processing data for {symbol}: {str(e)}")
else:
print(f"Data for {symbol} is empty or None.")
time.sleep(1) time.sleep(1)