init
This commit is contained in:
@@ -13,9 +13,45 @@ import schedule
|
|||||||
from config import *
|
from config import *
|
||||||
import FinanceDataReader as fdr
|
import FinanceDataReader as fdr
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
import os
|
||||||
|
|
||||||
hts = HTS()
|
hts = HTS()
|
||||||
|
|
||||||
|
# 매수 금지 시간을 관리하는 JSON 파일 경로
|
||||||
|
COOLDOWN_FILE = 'coins_buy_time.json'
|
||||||
|
|
||||||
|
def load_buy_cooldown():
|
||||||
|
"""매수 금지 시간을 JSON 파일에서 로드"""
|
||||||
|
if os.path.exists(COOLDOWN_FILE):
|
||||||
|
try:
|
||||||
|
with open(COOLDOWN_FILE, 'r', encoding='utf-8') as f:
|
||||||
|
data = json.load(f)
|
||||||
|
# 문자열을 datetime 객체로 변환
|
||||||
|
cooldown = {}
|
||||||
|
for symbol, time_str in data.items():
|
||||||
|
cooldown[symbol] = datetime.fromisoformat(time_str)
|
||||||
|
return cooldown
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error loading cooldown data: {e}")
|
||||||
|
return {}
|
||||||
|
return {}
|
||||||
|
|
||||||
|
def save_buy_cooldown(cooldown):
|
||||||
|
"""매수 금지 시간을 JSON 파일에 저장"""
|
||||||
|
try:
|
||||||
|
# datetime 객체를 문자열로 변환
|
||||||
|
data = {}
|
||||||
|
for symbol, dt in cooldown.items():
|
||||||
|
data[symbol] = dt.isoformat()
|
||||||
|
|
||||||
|
with open(COOLDOWN_FILE, 'w', encoding='utf-8') as f:
|
||||||
|
json.dump(data, f, ensure_ascii=False, indent=2)
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error saving cooldown data: {e}")
|
||||||
|
|
||||||
|
# 매수 금지 시간을 추적하는 전역 딕셔너리
|
||||||
|
buy_cooldown = load_buy_cooldown()
|
||||||
|
|
||||||
def send_coin_msg(text):
|
def send_coin_msg(text):
|
||||||
coin_client = telegram.Bot(token=COIN_TELEGRAM_BOT_TOKEN)
|
coin_client = telegram.Bot(token=COIN_TELEGRAM_BOT_TOKEN)
|
||||||
asyncio.run(coin_client.send_message(chat_id=COIN_TELEGRAM_CHAT_ID, text=text))
|
asyncio.run(coin_client.send_message(chat_id=COIN_TELEGRAM_CHAT_ID, text=text))
|
||||||
@@ -40,6 +76,14 @@ def send_coin_telegram_message(message_list, header):
|
|||||||
|
|
||||||
def buy_ticker(symbole, data):
|
def buy_ticker(symbole, data):
|
||||||
try:
|
try:
|
||||||
|
# 매수 금지 시간 확인 (20분)
|
||||||
|
current_time = datetime.now()
|
||||||
|
if symbole in buy_cooldown:
|
||||||
|
time_diff = current_time - buy_cooldown[symbole]
|
||||||
|
if time_diff.total_seconds() < 1200: # 20분 = 1200초
|
||||||
|
print(f"{symbole}: 매수 금지 중 (남은 시간: {1200 - time_diff.total_seconds():.0f}초)")
|
||||||
|
return False
|
||||||
|
|
||||||
BUY_AMOUNT = 6000
|
BUY_AMOUNT = 6000
|
||||||
|
|
||||||
if data['buy_signal'].iloc[-1] == 'movingaverage':
|
if data['buy_signal'].iloc[-1] == 'movingaverage':
|
||||||
@@ -50,8 +94,16 @@ def buy_ticker(symbole, data):
|
|||||||
BUY_AMOUNT = 6000
|
BUY_AMOUNT = 6000
|
||||||
|
|
||||||
_ = hts.buyCoinMarket(symbole, BUY_AMOUNT)
|
_ = hts.buyCoinMarket(symbole, BUY_AMOUNT)
|
||||||
|
|
||||||
|
# 매수 성공 시 금지 시간 설정 및 파일에 저장
|
||||||
|
buy_cooldown[symbole] = current_time
|
||||||
|
save_buy_cooldown(buy_cooldown)
|
||||||
|
print(f"{symbole}: 매수 완료, 20분간 매수 금지 시작")
|
||||||
|
return True
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error buying {symbole}: {str(e)}")
|
print(f"Error buying {symbole}: {str(e)}")
|
||||||
|
return False
|
||||||
return
|
return
|
||||||
|
|
||||||
|
|
||||||
@@ -449,7 +501,9 @@ def monitor_coins():
|
|||||||
message_list.append(format_message('COIN', symbol, KR_COINS[symbol], recent_data['Close'].iloc[-1], recent_data['buy_signal'].iloc[-1]))
|
message_list.append(format_message('COIN', symbol, KR_COINS[symbol], recent_data['Close'].iloc[-1], recent_data['buy_signal'].iloc[-1]))
|
||||||
|
|
||||||
# buy
|
# buy
|
||||||
buy_ticker(symbol, recent_data)
|
buy_success = buy_ticker(symbol, recent_data)
|
||||||
|
if not buy_success:
|
||||||
|
continue # 매수 금지 중이면 다음 코인으로 넘어감
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
print(f"Error processing data for {symbol}: {str(e)}")
|
print(f"Error processing data for {symbol}: {str(e)}")
|
||||||
@@ -482,6 +536,8 @@ def run_schedule():
|
|||||||
schedule.every().day.at("07:10").do(monitor_kr_stocks)
|
schedule.every().day.at("07:10").do(monitor_kr_stocks)
|
||||||
|
|
||||||
print("Scheduler started. Monitoring will run at specified times.")
|
print("Scheduler started. Monitoring will run at specified times.")
|
||||||
|
print(f"Loaded cooldown data for {len(buy_cooldown)} coins")
|
||||||
|
|
||||||
while True:
|
while True:
|
||||||
schedule.run_pending()
|
schedule.run_pending()
|
||||||
time.sleep(1)
|
time.sleep(1)
|
||||||
|
|||||||
Reference in New Issue
Block a user