init
This commit is contained in:
103
hts/DailyStatus.py
Normal file
103
hts/DailyStatus.py
Normal file
@@ -0,0 +1,103 @@
|
||||
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
|
||||
Reference in New Issue
Block a user