This commit is contained in:
dsyoon
2025-08-07 01:33:45 +09:00
parent cbb5b196fd
commit cd62beb2a9

View File

@@ -2,6 +2,7 @@ import pandas as pd
from HTS2 import HTS from HTS2 import HTS
from dateutil.relativedelta import relativedelta from dateutil.relativedelta import relativedelta
from datetime import datetime, timedelta from datetime import datetime, timedelta
import sqlite3
import telegram import telegram
import time import time
import requests import requests
@@ -219,7 +220,7 @@ def format_ma_message(info, market_type):
return message return message
def get_coin_data(symbol, interval=240, to=None, retries=3): def get_coin_data(symbol, interval=60, to=None, retries=3):
for attempt in range(retries): for attempt in range(retries):
try: try:
#url = "https://api.bithumb.com/v1/candles/minutes/{}?market=KRW-{}&count=3000".format(interval, symbol) #url = "https://api.bithumb.com/v1/candles/minutes/{}?market=KRW-{}&count=3000".format(interval, symbol)
@@ -272,8 +273,11 @@ def get_coin_more_data(symbol, interval, bong_count=3000):
if data is None: if data is None:
data = get_coin_data(symbol, interval, to.strftime("%Y-%m-%d %H:%M:%S")) data = get_coin_data(symbol, interval, to.strftime("%Y-%m-%d %H:%M:%S"))
else: else:
p_count = len(data)
df = get_coin_data(symbol, interval, to.strftime("%Y-%m-%d %H:%M:%S")) df = get_coin_data(symbol, interval, to.strftime("%Y-%m-%d %H:%M:%S"))
data = pd.concat([data, df], ignore_index=True) data = pd.concat([data, df], ignore_index=True)
if p_count == len(data):
break
time.sleep(0.3) time.sleep(0.3)
to = to - relativedelta(minutes=interval * 200) to = to - relativedelta(minutes=interval * 200)
@@ -285,6 +289,46 @@ def get_coin_more_data(symbol, interval, bong_count=3000):
return data return data
def get_coin_saved_data(symbol, interval, data):
conn = sqlite3.connect('coins.db')
cursor = conn.cursor()
for i in range(2, len(data)):
cursor.execute("SELECT * from " + symbol + " where CODE = ? and ymdhms = ? and interval = ?", (symbol, data['datetime'].iloc[-i].strftime('%Y-%m-%d %H:%M:%S'), interval))
arr = cursor.fetchone()
if not arr:
cursor.execute("INSERT INTO " + symbol + " (interval, CODE, NAME, ymdhms, ymd, hms, close, open, high, low, volume) VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", (interval, symbol, KR_COINS[symbol], data['datetime'].iloc[-i].strftime('%Y-%m-%d %H:%M:%S'), data['datetime'].iloc[-i].strftime('%Y%m%d'), data['datetime'].iloc[-i].strftime('%H%M%S'), data['Close'].iloc[-i], data['Open'].iloc[-i], data['High'].iloc[-i], data['Low'].iloc[-i], data['Volume'].iloc[-i]))
else:
break
cursor.execute("select * from (SELECT Open,Close,High,Low,Volume,ymdhms as datetime from " + symbol + " order by ymdhms desc limit 5000) subquery order by ymdhms")
result = cursor.fetchall()
conn.commit()
cursor.close()
conn.close()
saved_data = pd.DataFrame(result)
data = pd.concat([data, saved_data], ignore_index=True)
data = data.set_index('datetime')
data = data.sort_index()
data = data.drop_duplicates(keep='first')
data["datetime"] = data.index
return
def get_coin_some_data(symbol, interval):
data = get_coin_data(symbol, interval)
saved_data = get_coin_saved_data(symbol, interval, data)
data = data.set_index('datetime')
data = data.sort_index()
data = data.drop_duplicates(keep='first')
data["datetime"] = data.index
# 코인 데이터 1500개 봉 가져오기
return data
def get_kr_stock_data(symbol, retries=3): def get_kr_stock_data(symbol, retries=3):
for attempt in range(retries): for attempt in range(retries):
@@ -391,7 +435,7 @@ def monitor_coins():
# 1시간 # 1시간
interval = 60 interval = 60
data = get_coin_more_data(symbol, interval) data = get_coin_some_data(symbol, interval)
if data is not None and not data.empty: if data is not None and not data.empty:
try: try:
@@ -456,5 +500,5 @@ def run_schedule():
if __name__ == "__main__": if __name__ == "__main__":
run_schedule() #run_schedule()
#monitor_coins() monitor_coins()