This commit is contained in:
dsyoon
2025-08-24 17:26:35 +09:00
parent 45b563f39c
commit 82240c7542
5 changed files with 22 additions and 14 deletions

View File

@@ -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)

View File

@@ -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 파라미터 미사용)

View File

@@ -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

View File

@@ -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:

View File

@@ -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: