init
This commit is contained in:
119
Simulation.py
119
Simulation.py
@@ -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...")
|
||||
|
||||
Reference in New Issue
Block a user