From b1d8beaf3457737c23e19ccb58e6b6400a56e635 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Sun, 29 Jan 2023 02:16:02 +0900 Subject: [PATCH] init --- HTS_stocks.py | 1 - Simulation.py | 52 +++++++++++++++---- StockCrawler.py | 2 +- .../{DailyStatus.py => StockStatus.py} | 4 +- stock/util/Stock2Vector.py | 3 +- 5 files changed, 45 insertions(+), 17 deletions(-) rename stock/analysis/{DailyStatus.py => StockStatus.py} (99%) diff --git a/HTS_stocks.py b/HTS_stocks.py index cd1785b..5dd8ff6 100644 --- a/HTS_stocks.py +++ b/HTS_stocks.py @@ -3,7 +3,6 @@ import os import sqlite3 from datetime import datetime -from stock.analysis.DailyStatus import DailyStatus from hts.HTS import HTS from hts.OrderType import OrderType diff --git a/Simulation.py b/Simulation.py index 9cc2bec..9c303fe 100644 --- a/Simulation.py +++ b/Simulation.py @@ -8,8 +8,8 @@ from hts.HTS import HTS from stock.util.Stock2Vector import Stock2Vector from stock.util.LabelChecker import LabelChecker from stock.util.StockPredictor import StockPredictor -from stock.analysis.DailyStatus import DailyStatus from hts.BuySellChecker import BuySellChecker +from stock.analysis.StockStatus import StockStatus class Simulation (HTS): stock2Vector = None @@ -163,6 +163,28 @@ class Simulation (HTS): return + def makeTickData(self, data, mins=30): + result = {"check": set(), + "time": [], + "open": [], + "close": [], + "high": [], + "low": [], + "vol": [], + "label": []} + + for i in range(mins, len(data['time'])+1): + result["check"].add(data['time'][i]) + result["time"].append(data['time'][i]) + + result["open"].append(data['open'][i-mins]) + result["close"].append(data['close'][i-1]) + result["high"].append(max(data['high'][i - 30: i])) + result["low"].append(min(data['low'][i - 30: i])) + result["vol"].append(sum(data[i - 30: i])) + + return result + def simulate(self, stock_codes:dict=None): if stock_codes is not None: @@ -170,25 +192,30 @@ class Simulation (HTS): for given_day in stock_codes[stock_code]: LAST_DATA = self.stock2Vector.getLastData(stock_code, given_day) result = self.stock2Vector.getRealTime(stock_code, given_day, LAST_DATA) + result_30 = self.makeTickData(result, min=30) # 이동평균, RSI, MACD, 일목균형, 볼린저밴드 상/하단을 계산한다. - data = self.buySellChecker.analyze(result) - + data1 = self.buySellChecker.analyze(result) # 사야 할 시점과 팔아야 할 시점을 체크한다. - #bsLine, data = self.buySellChecker.checkTransaction(data, stock_code, isRealTime=False) - analyzed_day = 120 - bsLine, data = self.buySellChecker.checkTransactionWithEnvelope(data, stock_code, analyzed_day, isRealTime=False) + bsLine, data = self.buySellChecker.checkTransaction(data, stock_code, isRealTime=False) # 그래프를 그린다. self.draw(stock_code, given_day, data, bsLine) else: - dailyStatus = DailyStatus(self.RESOURCE_PATH) - dailyStatus.checkEnvelope() + stockStatus = StockStatus(self.RESOURCE_PATH) + stockStatus.checkEnvelope() return if __name__ == "__main__": + a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] + for i in range(3, len(a)+1): + print (a[i-3: i]) + print (a[i - 3]) + print (a[i - 1]) + + PROJECT_HOME = os.getcwd() RESOURCE_PATH = os.path.join(PROJECT_HOME, "resources") @@ -197,11 +224,14 @@ if __name__ == "__main__": # to check bying stock_codes = { "252670": [ - '20220901', '20220902', '20220905', '20220906', '20220907', - '20220908','20220913','20220914','20220915','20220916' + '20220901', '20220902', '20220905', '20220906', '20220907', '20220908','20220913','20220914','20220915','20220916' + ], + "122630": [ + '20220901', '20220902', '20220905', '20220906', '20220907', '20220908', '20220913', '20220914', '20220915', + '20220916' ] } #simulation.simulate(stock_codes) - simulation.simulate() + simulation.simulate(stock_codes) print ("done...") diff --git a/StockCrawler.py b/StockCrawler.py index eaa3fec..88b1752 100644 --- a/StockCrawler.py +++ b/StockCrawler.py @@ -7,7 +7,7 @@ from stock.crawler.FnGuideCrawler import FnGuideCrawler from stock.crawler.MetaCrawler import MetaCrawler from stock.crawler.StockCrawler import StockCrawler from stock.analysis.AnalyzerSqlite import AnalyzerSqlite -from stock.analysis.DailyStatus import DailyStatus +from stock.analysis.StockStatus import DailyStatus today = datetime.now().strftime("%Y-%m-%d") diff --git a/stock/analysis/DailyStatus.py b/stock/analysis/StockStatus.py similarity index 99% rename from stock/analysis/DailyStatus.py rename to stock/analysis/StockStatus.py index b80274b..589324d 100644 --- a/stock/analysis/DailyStatus.py +++ b/stock/analysis/StockStatus.py @@ -15,7 +15,7 @@ from hts.HTS import HTS from hts.BuySellChecker import BuySellChecker from stock.analysis.AnalyzerSqlite import AnalyzerSqlite -class DailyStatus (HTS): +class StockStatus (HTS): tableName = None dbFileName = None RESOURCE_PATH = None @@ -637,5 +637,5 @@ 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") - dailyStatus = DailyStatus(RESOURCE_PATH) + dailyStatus = StockStatus(RESOURCE_PATH) dailyStatus.checkEnvelope() \ No newline at end of file diff --git a/stock/util/Stock2Vector.py b/stock/util/Stock2Vector.py index 0c0e180..a9100d5 100644 --- a/stock/util/Stock2Vector.py +++ b/stock/util/Stock2Vector.py @@ -1,10 +1,9 @@ import os -import csv import copy import sqlite3 import numpy as np import pandas as pd -from datetime import datetime, timedelta +from datetime import datetime from hts.BuySellChecker import BuySellChecker from hts.HTS import HTS