init
This commit is contained in:
@@ -14,10 +14,10 @@ class DBManager:
|
||||
cursor = conn.cursor()
|
||||
|
||||
# 테이블 생성
|
||||
cursor.execute("CREATE TABLE IF NOT EXISTS " + tableName + " (CODE text, NAME text, ymd text, hms text, close REAL, open REAL, high REAL, low REAL, volume REAL, type INTEGER)")
|
||||
cursor.execute("CREATE TABLE IF NOT EXISTS " + tableName + " (CODE text, NAME text, ymd text, hms text, close REAL, open REAL, high REAL, low REAL, volume REAL, label INTEGER)")
|
||||
|
||||
# 키 생성
|
||||
create_key = "CREATE INDEX IF NOT EXISTS " + tableName + "_idx on " + tableName + " (CODE, ymd, hms, type) "
|
||||
create_key = "CREATE INDEX IF NOT EXISTS " + tableName + "_idx on " + tableName + " (CODE, ymd, hms, label) "
|
||||
cursor.execute(create_key)
|
||||
|
||||
conn.commit()
|
||||
|
||||
@@ -1,7 +1,12 @@
|
||||
import os
|
||||
import copy
|
||||
import sqlite3
|
||||
from datetime import datetime, timedelta
|
||||
import numpy as np
|
||||
import pandas as pd
|
||||
from datetime import datetime, timedelta
|
||||
|
||||
from hts.BuySellChecker import BuySellChecker
|
||||
from hts.HTS import HTS
|
||||
|
||||
from stock.analysis.Common import Common
|
||||
from stock.analysis.Stochastic import Stochastic
|
||||
@@ -9,7 +14,7 @@ from stock.analysis.RSI import RSI
|
||||
from stock.analysis.MACD import MACD
|
||||
from stock.analysis.IchimokuCloud import IchimokuCloud
|
||||
|
||||
class Stock2Vector:
|
||||
class Stock2Vector(HTS):
|
||||
|
||||
RESOURCE_PATH = None
|
||||
|
||||
@@ -20,8 +25,12 @@ class Stock2Vector:
|
||||
ichimokuCloud = None
|
||||
|
||||
def __init__(self, RESOURCE_PATH):
|
||||
super().__init__(RESOURCE_PATH)
|
||||
|
||||
self.RESOURCE_PATH = RESOURCE_PATH
|
||||
|
||||
self.buySellChecker = BuySellChecker()
|
||||
|
||||
self.common = Common()
|
||||
self.stochastic = Stochastic()
|
||||
self.rsi = RSI()
|
||||
@@ -110,16 +119,48 @@ class Stock2Vector:
|
||||
df_final_time = pd.DatetimeIndex(point_temp)
|
||||
data.index = df_final_time
|
||||
|
||||
data.fillna(0)
|
||||
data = data.fillna(0)
|
||||
|
||||
return data
|
||||
|
||||
def getDBData(self, stock_code, lastday, result):
|
||||
def getRealTime(self, stock_code, today, LAST_DATA=None):
|
||||
if LAST_DATA is not None:
|
||||
result = copy.deepcopy(LAST_DATA)
|
||||
else:
|
||||
result = {"check": set(), "time": [], "open": [], "close": [], "high": [], "low": [], "vol": [], "label": []}
|
||||
|
||||
self.getDBData(stock_code, today, result)
|
||||
|
||||
return result
|
||||
|
||||
def makeData(self, today, stock_code):
|
||||
LAST_DATA = self.getLastData(stock_code, today)
|
||||
|
||||
result = self.getRealTime(stock_code, today, LAST_DATA)
|
||||
|
||||
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
|
||||
df = self.buySellChecker.getVectorFeature(result)
|
||||
minmax_df1 = (df - df.min()) / (df.max() - df.min())
|
||||
minmax_df2 = minmax_df1.drop(["date"], axis="columns")
|
||||
minmax_df = minmax_df2.join(df['date'])
|
||||
|
||||
# 4일치 중에서 앞에 2일은 제거한다.
|
||||
date = df['date'].dt.date.unique().tolist()
|
||||
df = df[df['date'].dt.date != date[0]]
|
||||
df = df[df['date'].dt.date != date[1]]
|
||||
minmax_df = minmax_df[minmax_df['date'].dt.date != date[0]]
|
||||
minmax_df = minmax_df[minmax_df['date'].dt.date != date[1]]
|
||||
|
||||
return df, minmax_df
|
||||
|
||||
def makeTrainData(self, stock_code):
|
||||
result = {"check": set(), "time": [], "open": [], "close": [], "high": [], "low": [], "vol": [], "label": []}
|
||||
|
||||
tableName = 'hts'
|
||||
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, "hts.db"))
|
||||
cursor = conn.cursor()
|
||||
|
||||
cursor.execute('SELECT ymd, hms, open, high, low, close, volume FROM ' + tableName + ' WHERE CODE=? and ymd=? order by ymd, hms', (stock_code, lastday,))
|
||||
cursor.execute('SELECT ymd, hms, open, high, low, close, volume, label FROM ' + tableName + ' WHERE CODE=? order by ymd, hms', (stock_code,))
|
||||
db_result = cursor.fetchall()
|
||||
for rows in db_result:
|
||||
ymd = rows[0] # hts.날짜
|
||||
@@ -129,6 +170,7 @@ class Stock2Vector:
|
||||
low = rows[4] # hts.저가
|
||||
close = rows[5] # hts.종가
|
||||
vol = rows[6] # hts.거래량
|
||||
label = 0 if rows[7] is None else rows[7] # hts.매매구분
|
||||
|
||||
temp = datetime.strptime(str(ymd) + " " + str(hms).zfill(4) + "00", '%Y%m%d %H%M%S')
|
||||
|
||||
@@ -138,46 +180,45 @@ class Stock2Vector:
|
||||
result["high"].append(int(high))
|
||||
result["low"].append(int(low))
|
||||
result["vol"].append(int(vol))
|
||||
return
|
||||
|
||||
def vectorize(self, stock_code, given_day):
|
||||
result = {"check": set(),
|
||||
"time": [],
|
||||
"open": [],
|
||||
"close": [],
|
||||
"high": [],
|
||||
"low": [],
|
||||
"vol": []}
|
||||
|
||||
for i in range(1, 10):
|
||||
last_day = (datetime.strptime(given_day, '%Y%m%d') - timedelta(i)).strftime('%Y%m%d')
|
||||
self.getDBData(stock_code, last_day, result)
|
||||
if len(result['time']) > 0:
|
||||
break
|
||||
self.getDBData(stock_code, given_day, result)
|
||||
result["label"].append(int(label))
|
||||
|
||||
# 분석을 통해서 볼린저밴드 상/하단을 계산한다.
|
||||
data = self.analyze(result)
|
||||
df = self.buySellChecker.getVectorFeature(result)
|
||||
minmax_df1 = (df - df.min()) / (df.max() - df.min())
|
||||
minmax_df2 = minmax_df1.drop(["date"], axis="columns")
|
||||
minmax_df = minmax_df2.join(df['date'])
|
||||
|
||||
return data
|
||||
minmax_df = minmax_df.fillna(0)
|
||||
return df, minmax_df
|
||||
|
||||
def vectorize(self, data):
|
||||
vector = []
|
||||
for key in data:
|
||||
if key == "date":
|
||||
continue
|
||||
vector.append(data[key].tolist())
|
||||
|
||||
return np.asarray(vector)
|
||||
|
||||
if __name__ == "__main__":
|
||||
PROJECT_HOME = os.path.join(os.path.dirname(os.path.join(os.path.dirname(os.path.join(os.path.dirname(__file__))))))
|
||||
RESOURCE_PATH = os.path.join(PROJECT_HOME, "resources")
|
||||
|
||||
stock2Vector = Stock2Vector(RESOURCE_PATH)
|
||||
|
||||
# to check bying
|
||||
stock_codes = {
|
||||
# 252670
|
||||
# 122630
|
||||
"122630": ['20220725'],
|
||||
"252670": ['20220729'],
|
||||
}
|
||||
|
||||
for stock_code in stock_codes:
|
||||
stock2Vector = Stock2Vector(RESOURCE_PATH)
|
||||
|
||||
for given_day in stock_codes[stock_code]:
|
||||
stock2Vector.vectorize(stock_code, given_day)
|
||||
data, minmax_data = stock2Vector.makeData(given_day, stock_code)
|
||||
vector = stock2Vector.vectorize(data)
|
||||
minmax_vector = stock2Vector.vectorize(minmax_data)
|
||||
print (given_day)
|
||||
|
||||
print ("done...")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user