This commit is contained in:
dsyoon
2023-11-05 19:28:12 +09:00
parent e4a3d6c412
commit e832b629e1
12 changed files with 546 additions and 157 deletions

View File

@@ -3,23 +3,35 @@ import pandas as pd
import plotly.graph_objects as go
from plotly import subplots
import os
import sqlite3
from hts.HTS import HTS
from stock.util.Stock2Vector import Stock2Vector
from stock.util.LabelChecker import LabelChecker
from hts.BuySellChecker import BuySellChecker
from stock.analysis.StockStatus import StockStatus
from hts.BuySellChecker_122630 import BuySellChecker_122630
from hts.BuySellChecker_233740 import BuySellChecker_233740
from hts.BuySellChecker_251340 import BuySellChecker_251340
from hts.BuySellChecker_252670 import BuySellChecker_252670
class Simulation (HTS):
stock2Vector = None
buySellChecker = None
def __init__(self, RESOURCE_PATH):
def __init__(self, RESOURCE_PATH, stock_code):
super().__init__(RESOURCE_PATH)
self.RESOURCE_PATH = RESOURCE_PATH
self.buySellChecker = BuySellChecker()
self.buySellChecker = None
if stock_code == '122630':
self.buySellChecker = BuySellChecker_122630()
elif stock_code == '233740':
self.buySellChecker = BuySellChecker_233740()
elif stock_code == '251340':
self.buySellChecker = BuySellChecker_251340()
elif stock_code == '252670':
self.buySellChecker = BuySellChecker_252670()
try:
self.stock2Vector = Stock2Vector(RESOURCE_PATH)
@@ -230,38 +242,59 @@ class Simulation (HTS):
return result
def simulate(self, stock_codes:dict=None, analyzed_day=1000):
for stock_code in stock_codes:
for given_day in stock_codes[stock_code]:
LAST_DATA = self.stock2Vector.getLastData(stock_code, given_day)
# 1분봉
result = self.stock2Vector.getRealTime(stock_code, given_day, LAST_DATA)
# 5분봉
#result = self.makeTickData(result, mins=5)
# 30분봉
#result = self.makeTickData(result, mins=30)
def getLIMITInfo(self, stock_code, ymd, dbfile_name="stock.db"):
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, dbfile_name))
cursor = conn.cursor()
data = self.buySellChecker.analyze(result)
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
cursor.execute('select ymd, open, close, high, low, volume from stock where code=? order by ymd desc limit ?', (stock_code, 100, ))
db_result = cursor.fetchall()
cursor.close()
conn.close()
# 이동평균, RSI, MACD, 일목균형, 볼린저밴드 상/하단을 계산한다.
#data_5 = self.buySellChecker.analyze(result_5)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
#data_5.drop(data_5.index[:len(data_5) - analyzed_day], inplace=True)
match = False
LIMIT_PRICE = []
for i, rows in enumerate(db_result):
if rows[0].replace('.', '') == ymd:
match = True
if match:
LIMIT_PRICE.append(rows[2])
#data_30 = self.buySellChecker.analyze(result_30)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
#data_30.drop(data_30.index[:len(data_30) - analyzed_day], inplace=True)
return {'LIMIT_PRICE': sum(LIMIT_PRICE[:20])/len(LIMIT_PRICE[:20])}
# 사야 할 시점과 팔아야 할 시점을 체크한다.
#bsLine = self.buySellChecker.checkTransaction(stock_code, data, data_5, data_30, isRealTime=False)
def simulate(self, stock, analyzed_day=1000):
stock_code = stock['code']
for ymd in stock['ymd']:
LAST_DATA = self.stock2Vector.getLastData(stock_code, ymd)
# 1분봉
result = self.stock2Vector.getRealTime(stock_code, ymd, LAST_DATA)
# 5분봉
#result = self.makeTickData(result, mins=5)
# 30분봉
#result = self.makeTickData(result, mins=30)
# 어제 데이터는 지운다.
#data = data.loc[pd.DatetimeIndex(data.index).day == int(given_day[6:])]
bsLine = self.buySellChecker.checkTransaction(stock_code, data, None, None, isRealTime=False)
data = self.buySellChecker.analyze(result)
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
# 그래프를 그린다.
self.draw(stock_code, given_day, data, bsLine)
# 이동평균, RSI, MACD, 일목균형, 볼린저밴드 상/하단을 계산한다.
#data_5 = self.buySellChecker.analyze(result_5)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
#data_5.drop(data_5.index[:len(data_5) - analyzed_day], inplace=True)
#data_30 = self.buySellChecker.analyze(result_30)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
#data_30.drop(data_30.index[:len(data_30) - analyzed_day], inplace=True)
# 사야 할 시점과 팔아야 할 시점을 체크한다.
#bsLine = self.buySellChecker.checkTransaction(stock_code, data, data_5, data_30, isRealTime=False)
INFO = self.getLIMITInfo(stock_code, ymd)
# 어제 데이터는 지운다.
#data = data.loc[pd.DatetimeIndex(data.index).day == int(given_day[6:])]
bsLine = self.buySellChecker.checkTransaction(stock_code, data, INFO, isRealTime=False)
# 그래프를 그린다.
self.draw(stock_code, ymd, data, bsLine)
return
if __name__ == "__main__":
@@ -269,17 +302,23 @@ if __name__ == "__main__":
PROJECT_HOME = os.getcwd()
RESOURCE_PATH = os.path.join(PROJECT_HOME, "resources")
simulation = Simulation(RESOURCE_PATH)
day_list = ['20231101']
day_list = ['20231025']
# to check bying
stock_codes = {
"233740": day_list,
"252670": day_list,
"251340": day_list,
"122630": day_list
}
#simulation.simulate(stock_codes)
simulation.simulate(stock_codes)
stock = {'code': '233740', 'name': 'KODEX 200선물인버스2X', 'ymd': day_list}
simulation = Simulation(RESOURCE_PATH, stock['code'])
simulation.simulate(stock)
#stock = {'code': '233740', 'name': 'KODEX 200선물인버스2X', 'ymd': day_list}
#simulation = Simulation(RESOURCE_PATH, stock['code'])
#simulation.simulate(stock)
#stock = {'code': '233740', 'name': 'KODEX 200선물인버스2X', 'ymd': day_list}
#simulation = Simulation(RESOURCE_PATH, stock['code'])
#simulation.simulate(stock)
#stock = {'code': '233740', 'name': 'KODEX 200선물인버스2X', 'ymd': day_list}
#simulation = Simulation(RESOURCE_PATH, stock['code'])
#simulation.simulate(stock)
print ("done...")