This commit is contained in:
dsyoon
2023-11-16 01:26:52 +09:00
parent 076bcb1dfa
commit 7006be45fa
6 changed files with 164 additions and 1275 deletions

View File

@@ -9,29 +9,18 @@ from hts.HTS import HTS
from stock.util.Stock2Vector import Stock2Vector
from stock.util.LabelChecker import LabelChecker
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
from hts.BuySellChecker import BuySellChecker
class Simulation (HTS):
stock2Vector = None
buySellChecker = None
def __init__(self, RESOURCE_PATH, stock_code):
def __init__(self, RESOURCE_PATH):
super().__init__(RESOURCE_PATH)
self.RESOURCE_PATH = RESOURCE_PATH
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()
self.buySellChecker = BuySellChecker()
try:
self.stock2Vector = Stock2Vector(RESOURCE_PATH)
@@ -230,25 +219,6 @@ class Simulation (HTS):
return result
def getLIMITInfo(self, stock_code, ymd, dbfile_name="stock.db"):
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, dbfile_name))
cursor = conn.cursor()
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()
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])
return {'LIMIT_PRICE': sum(LIMIT_PRICE[:20])/len(LIMIT_PRICE[:20])}
def simulate(self, stock, analyzed_day=1000):
stock_code = stock['code']
for ymd in stock['ymd']:
@@ -275,11 +245,9 @@ class Simulation (HTS):
# 사야 할 시점과 팔아야 할 시점을 체크한다.
#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)
bsLine = self.buySellChecker.checkTransaction(data, isRealTime=False)
# 그래프를 그린다.
self.draw(stock_code, ymd, data, bsLine)
@@ -291,23 +259,15 @@ if __name__ == "__main__":
RESOURCE_PATH = os.path.join(PROJECT_HOME, "resources")
#day_list = ['20231016', '20231017', '20231018', '20231019', '20231020', '20231023', '20231024', '20231025', '20231026', '20231027', '20231030', '20231031', '20231101', '20231102']
day_list = ['20231102']
# to check bying
stock = {'code': '252670', 'name': 'KODEX 200선물인버스2X', 'ymd': day_list}
simulation = Simulation(RESOURCE_PATH, stock['code'])
simulation.simulate(stock)
#stock = {'code': '122630', 'name': 'KODEX 레버리지', 'ymd': day_list}
#simulation = Simulation(RESOURCE_PATH, stock['code'])
#simulation.simulate(stock)
#stock = {'code': '233740', 'name': 'KODEX 코스닥150레버리지', 'ymd': day_list}
#simulation = Simulation(RESOURCE_PATH, stock['code'])
#simulation.simulate(stock)
#stock = {'code': '251340', 'name': 'KODEX 코스닥150선물인버스', 'ymd': day_list}
#simulation = Simulation(RESOURCE_PATH, stock['code'])
#simulation.simulate(stock)
day_list = ['20231113']
stocks = [
{'code': '252670', 'name': 'KODEX 200선물인버스2X', 'ymd': day_list},
{'code': '122630', 'name': 'KODEX 레버리지', 'ymd': day_list},
{'code': '233740', 'name': 'KODEX 코스닥150레버리지', 'ymd': day_list},
{'code': '251340', 'name': 'KODEX 코스닥150선물인버스', 'ymd': day_list}
]
for stock in stocks:
simulation = Simulation(RESOURCE_PATH)
simulation.simulate(stock)
print ("done...")