From 82240c75427ad7044b309b72577e0d0409883465 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Sun, 24 Aug 2025 17:26:35 +0900 Subject: [PATCH] init --- HTS2.py | 6 +++--- monitor.py | 12 +++++++----- monitor_coin.py | 4 ++-- monitor_coin_1h_1.py | 10 ++++++++-- monitor_coin_1h_2.py | 4 ++-- 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/HTS2.py b/HTS2.py index 8237aa8..f378731 100644 --- a/HTS2.py +++ b/HTS2.py @@ -10,9 +10,9 @@ from urllib.parse import urlencode class HTS: bithumb = None - accessKey = None - secretKey = None - apiUrl = None + accessKey = "a5d33ce55f598185d37cd26272341b7b965c31a59457f7" # 본인의 Connect Key를 입력한다. + secretKey = "ODBiYWFmNWE2MTkwYjdhMTNhZTM1YjU5OGY4OGE2MGNkNDY2NzMzMjE2Nzc5NDVlMzBhMDk3NTNmM2M2Mg==" # 본인의 Secret Key를 입력한다. + apiUrl = 'https://api.bithumb.com' def __init__(self): #self.bithumb = pybithumb.Bithumb(self.con_key, self.sec_key) diff --git a/monitor.py b/monitor.py index b3c042f..3453ff7 100644 --- a/monitor.py +++ b/monitor.py @@ -9,13 +9,14 @@ import requests import json import asyncio from multiprocessing import Pool -from config import * import FinanceDataReader as fdr import numpy as np import os +from config import * +from HTS2 import HTS -class Monitor: +class Monitor(HTS): """자산(코인/주식/ETF) 모니터링 및 매수 실행 클래스""" last_signal = None @@ -224,7 +225,7 @@ class Monitor: return data # ------------- Strategy ------------- - def buy_ticker(self, symbol: str, data: pd.DataFrame) -> bool: + def buy_ticker_1h(self, symbol: str, data: pd.DataFrame) -> bool: try: # 기존 로직 --------------------------------------------------- #print('BUY: {}'.format(symbol)) @@ -253,6 +254,7 @@ class Monitor: # Ignore errors in MA calculation so as not to block trading logic pass + buy_amount = 6000 current_time = datetime.now() if data['signal'].iloc[-1] == 'fall_6p': if data['Close'].iloc[-1] > 100: @@ -311,7 +313,7 @@ class Monitor: return False return True - def sell_ticker(self, symbol: str, data: pd.DataFrame) -> bool: + def sell_ticker_1h(self, symbol: str, data: pd.DataFrame, balances) -> bool: """Dev40(Deviation40) 매도 조건을 만족할 때만 매도 실행""" try: # 최신 캔들의 시그널이 Dev40이 아니면 매도하지 않음 @@ -330,7 +332,7 @@ class Monitor: return False # 매도 수량/금액 산정 (예: 50,000 KRW 상당) - sell_amount = 50000 # KRW 기준 매도 총액 혹은 수량 설정 + sell_amount = balances[symbol]['balance'] * 0.7 # KRW 기준 매도 총액 혹은 수량 설정 # 실제 매도 실행 (HTS API) _ = self.hts.sellCoinMarket(symbol, 0, sell_amount) # market 매도 (price 파라미터 미사용) diff --git a/monitor_coin.py b/monitor_coin.py index a90b531..a76691d 100644 --- a/monitor_coin.py +++ b/monitor_coin.py @@ -21,7 +21,7 @@ class MonitorCoin (Monitor): recent_inverseData = self.check_point(symbol, inverseData) if recent_inverseData['point'].iloc[-1] != 1: continue - sell_success = self.sell_ticker(symbol, recent_inverseData) + sell_success = self.sell_ticker_1h(symbol, recent_inverseData) if not sell_success: continue @@ -30,7 +30,7 @@ class MonitorCoin (Monitor): if recent_data['point'].iloc[-1] != 1: continue - buy_success = self.buy_ticker(symbol, recent_data) + buy_success = self.buy_ticker_1h(symbol, recent_data) if not buy_success: continue diff --git a/monitor_coin_1h_1.py b/monitor_coin_1h_1.py index f7f02eb..22f0823 100644 --- a/monitor_coin_1h_1.py +++ b/monitor_coin_1h_1.py @@ -11,7 +11,13 @@ class MonitorCoin (Monitor): super().__init__(cooldown_file) def monitor_coins(self) -> None: + tmps = self.getBalances() + balances = {} + for tmp in tmps: + balances[tmp['currency']] = {'balance': float(tmp['balance']), 'avg_buy_price': float(tmp['avg_buy_price'])} + for symbol in KR_COINS_1: + print("[{}] {}".format(datetime.now().strftime('%Y-%m-%d %H:%M:%S'), symbol)) interval = 60 data = self.get_coin_some_data(symbol, interval) @@ -21,7 +27,7 @@ class MonitorCoin (Monitor): recent_inverseData = self.check_point(symbol, inverseData) if recent_inverseData['point'].iloc[-1] != 1: continue - sell_success = self.sell_ticker(symbol, recent_inverseData) + sell_success = self.sell_ticker_1h(symbol, recent_inverseData, balances) if not sell_success: continue @@ -29,7 +35,7 @@ class MonitorCoin (Monitor): recent_data = self.check_point(symbol, data) if recent_data['point'].iloc[-1] != 1: continue - buy_success = self.buy_ticker(symbol, recent_data) + buy_success = self.buy_ticker_1h(symbol, recent_data) if not buy_success: continue except Exception as e: diff --git a/monitor_coin_1h_2.py b/monitor_coin_1h_2.py index 91ab2f2..f5a512a 100644 --- a/monitor_coin_1h_2.py +++ b/monitor_coin_1h_2.py @@ -21,7 +21,7 @@ class MonitorCoin (Monitor): recent_inverseData = self.check_point(symbol, inverseData) if recent_inverseData['point'].iloc[-1] != 1: continue - sell_success = self.sell_ticker(symbol, recent_inverseData) + sell_success = self.sell_ticker_1h(symbol, recent_inverseData) if not sell_success: continue @@ -29,7 +29,7 @@ class MonitorCoin (Monitor): recent_data = self.check_point(symbol, data) if recent_data['point'].iloc[-1] != 1: continue - buy_success = self.buy_ticker(symbol, recent_data) + buy_success = self.buy_ticker_1h(symbol, recent_data) if not buy_success: continue except Exception as e: