From a616dec3c0d2268594bbf670811aede32dcd3d74 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Thu, 1 Feb 2024 09:25:53 +0900 Subject: [PATCH] init --- HTS_stocks.py | 80 ++++++++++++++++++++++++++++----------------------- 1 file changed, 44 insertions(+), 36 deletions(-) diff --git a/HTS_stocks.py b/HTS_stocks.py index 5236420..9730a52 100644 --- a/HTS_stocks.py +++ b/HTS_stocks.py @@ -1,7 +1,7 @@ import re import os import time -import math +import psutil import sqlite3 from datetime import datetime, timedelta @@ -55,7 +55,7 @@ class HTS_Stocks (HTS): self.conn_stock.close() return - def sellStocks(self, stock_code, golden=True): + def sellStocks(self, stock_code=None): check = False jangoDic = self.requstJango() if jangoDic and len(jangoDic.keys()) > 0: @@ -63,16 +63,15 @@ class HTS_Stocks (HTS): if stock_code is not None: if code == "A" + stock_code: if jangoDic[code]['매도가능'] > 0: - if golden: - if 7.0 < jangoDic[code]['평가손익']: - self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) - self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) - check = True - else: - if 1.0 < jangoDic[code]['평가손익']: - self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) - self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, stock_name)) - check = True + if 3.0 < jangoDic[code]['평가손익']: + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, '')) + check = True + else: + if 10.0 < jangoDic[code]['평가손익']: + self.requestOrder(OrderType.sell, code[1:], jangoDic[code]['매도가능'], jangoDic[code]['현재가']) + self.bot.sendMsg("Profit {:.2f}, {} ({})".format(jangoDic[code]['평가손익'], stock_code, '')) + check = True return check def buyRealTime(self, today, n = 200): @@ -80,15 +79,16 @@ class HTS_Stocks (HTS): THIS_TIME = datetime.now() today_stock = self.get_today_stock() - if len(today_stock) < 1: - return while datetime.strptime(today + " 070000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 153100", '%Y%m%d %H%M%S'): # 1515 까지만 매수를 시도한다. - if datetime.strptime(today + " 090000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'): + if datetime.strptime(today + " 080000", '%Y%m%d %H%M%S') < THIS_TIME < datetime.strptime(today + " 151500", '%Y%m%d %H%M%S'): + + self.sellStocks() if len(today_stock) < 1: + time.sleep(3600) return buy_stock = [] @@ -101,35 +101,43 @@ class HTS_Stocks (HTS): self.getRealTime_DailyCheck(today, stock_code, stock) data = self.stockStatus.analyze(stock, self.analyzed_day) - # 매수 - if data['avg60'] < data['avg20'] < data['avg5']: - bs_buy_price = data["close"][-1] - - buy_count = int(150000 / bs_buy_price) - - # 매수를 주문한다. - orderNum = self.requestOrder(OrderType.buy, stock_code, buy_count, bs_buy_price) - self.orderChecker.buy(today, "A" + stock_code, buy_count, bs_buy_price, orderNum) - - # bot에 메시지를 보냄 - self.bot.post(stock_code, '', "BUY", bs_buy_price, buy_count) - - buy_stock.append( stock_code ) - - # 로그 출력 - print("BUY", THIS_TIME.strftime('%Y%m%d %H%M%S'), orderNum, stock_code, '', bs_buy_price, buy_count) # 매도 - if not data['avg60'] < data['avg20'] < data['avg5']: - self.sellStocks(stock_code, True) + if not data['avg60'][-1] < data['avg20'][-1] < data['avg5'][-1]: + self.sellStocks(stock_code) + + # 매수 + bs_buy_price = data["close"][-1] + + if 150000 < bs_buy_price: + buy_count = 1 else: - self.sellStocks(stock_code, False) + buy_count = 150000 // bs_buy_price + + # 매수를 주문한다. + orderNum = self.requestOrder(OrderType.buy, stock_code, buy_count, bs_buy_price) + self.orderChecker.buy(today, "A" + stock_code, buy_count, bs_buy_price, orderNum) + + # bot에 메시지를 보냄 + self.bot.sendMsg('BUY {} {} ({})'.format(stock_code, bs_buy_price, buy_count)) + + buy_stock.append( stock_code ) + + # 로그 출력 + print("BUY", THIS_TIME.strftime('%Y%m%d %H%M%S'), orderNum, stock_code, '', bs_buy_price, buy_count) # 매수 후 제거 for stock_code in buy_stock: today_stock.remove(stock_code) - time.sleep(3600) + if int(THIS_TIME.strftime("%M")) in (10, 40): + vm = psutil.virtual_memory() + vm_item = dict() + vm_item['free'] = vm.available // (1024 * 1024) + vm_item['idle'] = vm.available / vm.total * 100 + hts.bot.sendMsg("Alive... close: {}, mem: {:.1f}".format(str(close_data), vm_item['idle'])) + + time.sleep(600) THIS_TIME = datetime.now() return