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=10): 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