Files
DeepStock/hts/DailyStatus.py
dsyoon 9f9c7e290e init
2023-01-12 12:40:51 +09:00

139 lines
4.5 KiB
Python

import os.path
import pandas as pd
import platform
if platform.system().lower().find("window") >= 0 and platform.architecture()[0] != "64bit" :
import win32com.client
import sqlite3
from datetime import datetime, timedelta
class DailyStatus:
tableName = None
dbFileName = None
RESOURCE_PATH = None
def __init__(self, RESOURCE_PATH):
self.RESOURCE_PATH = RESOURCE_PATH
self.tableName = 'stock_analysis'
self.dbFileName = "stock.db"
return
def getDBData(self, stock_code, day, result):
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, self.dbFileName))
cursor = conn.cursor()
cursor.execute('SELECT ymd, close, open, high, low, envelope_upper, envelope_lower, envelope_middle, rsi, rsis, macd, macds, stochastic_slow_k, stochastic_slow_d FROM ' + self.tableName + ' WHERE CODE=? and ymd=? order by ymd', (stock_code, day,))
db_result = cursor.fetchall()
for rows in db_result:
ymd = rows[0]
close = rows[1]
open = rows[2]
high = rows[3]
low = rows[4]
envelope_upper = rows[5]
envelope_lower = rows[6]
envelope_middle = rows[7]
rsi = 0 if rows[8] is None else rows[8]
rsis = 0 if rows[9] is None else rows[9]
macd = rows[10]
macds = rows[11]
stochastic_slow_k = 0 if rows[12] is None else rows[12]
stochastic_slow_d = 0 if rows[13] is None else rows[13]
result["ymd"].append(ymd)
result["open"].append(int(open))
result["close"].append(int(close))
result["high"].append(int(high))
result["low"].append(int(low))
result["envelope_upper"].append(int(envelope_upper))
result["envelope_lower"].append(int(envelope_lower))
result["envelope_middle"].append(int(envelope_middle))
result["rsi"].append(int(rsi))
result["rsis"].append(int(rsis))
result["macd"].append(int(macd))
result["macds"].append(int(macds))
result["slow_k"].append(int(stochastic_slow_k))
result["slow_d"].append(int(stochastic_slow_d))
return
def isValidYMD(self, stock_code, day):
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, self.dbFileName))
cursor = conn.cursor()
cursor.execute('SELECT ymd, count(*) as cnt FROM ' + self.tableName + ' WHERE CODE=? and ymd=?', (stock_code, day,))
db_result = cursor.fetchone()
if db_result[1] > 0:
return True
return False
def getLastData(self, stock_code, today, n=100):
result = {
"ymd": [],
"open": [],
"close": [],
"high": [],
"low": [],
"envelope_upper": [],
"envelope_lower": [],
"envelope_middle": [],
"rsi": [],
"rsis": [],
"macd": [],
"macds": [],
"slow_k": [],
"slow_d": []
}
days = []
for i in range(1, n):
last_day = (datetime.strptime(today, '%Y%m%d') - timedelta(i)).strftime('%Y.%m.%d')
isValid = self.isValidYMD(stock_code, last_day)
if isValid:
days.append(last_day)
days = sorted(days)
for day in days:
self.getDBData(stock_code, day, result)
data = pd.DataFrame(result)
df_final_time = pd.DatetimeIndex(result['ymd'])
data.index = df_final_time
return data
def getLastData_realtime(self, stock_code, today, n=100):
result = {
"ymd": [],
"open": [],
"close": [],
"high": [],
"low": [],
"envelope_upper": [],
"envelope_lower": [],
"envelope_middle": [],
"rsi": [],
"rsis": [],
"macd": [],
"macds": [],
"slow_k": [],
"slow_d": []
}
days = []
for i in range(1, n):
last_day = (datetime.strptime(today, '%Y%m%d') - timedelta(i)).strftime('%Y.%m.%d')
isValid = self.isValidYMD(stock_code, last_day)
if isValid:
days.append(last_day)
days = sorted(days)
for day in days:
self.getDBData(stock_code, day, result)
data = pd.DataFrame(result)
df_final_time = pd.DatetimeIndex(result['ymd'])
data.index = df_final_time
return data