This commit is contained in:
dsyoon
2023-02-01 11:02:17 +09:00
parent 7f3cadd332
commit 6013cc7155
2 changed files with 38 additions and 104 deletions

View File

@@ -33,9 +33,9 @@ class StockStatus (HTS):
return
def getDBData(self, stock_code, day, result):
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, self.dbFileName))
cursor = conn.cursor()
def getDBData(self, cursor, stock_code, day, result):
if cursor is None:
return
cursor.execute('SELECT ymd, close, open, high, low, envelope_upper, envelope_lower, envelope_middle, rsi, rsis, macd, macds, stochastic_slow_k, stochastic_slow_d FROM ' + self.tableName + ' WHERE CODE=? and ymd=? order by ymd', (stock_code, day,))
db_result = cursor.fetchall()
@@ -72,9 +72,9 @@ class StockStatus (HTS):
return
def isValidYMD(self, stock_code, day):
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, self.dbFileName))
cursor = conn.cursor()
def isValidYMD(self, cursor, stock_code, day):
if cursor is None:
return
cursor.execute('SELECT ymd, count(*) as cnt FROM ' + self.tableName + ' WHERE CODE=? and ymd=?', (stock_code, day,))
db_result = cursor.fetchone()
@@ -82,11 +82,11 @@ class StockStatus (HTS):
return True
return False
def getLastData(self, stock_code, limit=350):
stockTableName = 'stock'
def fetchLastData(self, cursor, stock_code, limit=350):
if cursor is None:
return
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, self.dbFileName))
cursor = conn.cursor()
stockTableName = 'stock'
stock = {"CODE": stock_code, "NAME": "", "PRICE": []}
@@ -147,10 +147,6 @@ class StockStatus (HTS):
}
)
conn.commit()
cursor.close()
conn.close()
return stock
def analyze (self, stock, days=120):
@@ -564,78 +560,3 @@ class StockStatus (HTS):
po.write_html(fig, file=fileName, auto_open=False)
return
def checkEnvelope(self, stock_codes:list=None, isRealTime=False):
if not isRealTime:
n = 200
else:
n = 200
today = datetime.today().strftime('%Y%m%d')
if stock_codes is not None:
for stock_code in stock_codes:
stock = self.getLastData(stock_code, n)
self.getData(today, stock)
analyzed_day = 60
data = self.analyze(stock, analyzed_day)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
# print logs
for i in range(len(data.index)):
print (i, data.index[i], data['macd'][i], data['slow_k'][i], data['gradients_low'][i], data['gradients_avg5'][i], data['gradients_avg20'][i], data['gradients_avg60'][i], data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i], data['disparity'][i], data['disparity_type'][i])
bsLine, data = self.buySellChecker.checkTransactionWithEnvelope(data, stock_code, isRealTime=False)
# 그래프를 그린다.
self.draw(stock_code, today, data, bsLine)
else:
stockTableName = 'stock'
conn = sqlite3.connect(os.path.join(self.RESOURCE_PATH, self.dbFileName))
cursor = conn.cursor()
cursor.execute('SELECT distinct code, name FROM ' + stockTableName + ' order by code')
items = cursor.fetchall()
cursor.close()
conn.close()
if not os.path.exists(os.path.join(self.RESOURCE_PATH, 'analysis', today)):
os.mkdir(os.path.join(self.RESOURCE_PATH, 'analysis', today))
dailyDirName = os.path.join(self.RESOURCE_PATH, 'analysis', today, 'daily')
if os.path.exists(dailyDirName):
shutil.rmtree(dailyDirName)
os.mkdir(dailyDirName)
analyzed_day = 120
for idx, item in enumerate(items):
stock_code = item[0]
stock_name = item[1]
if stock_name.find('스팩') >= 0:
continue
print(idx, stock_code, stock_name, ", CODE: ", stock_code, ", NAME: ", stock_name)
stock = self.getLastData(stock_code, n)
data = self.analyze(stock, analyzed_day)
# 분석일 데이터만 활용한다 (이전 데이터는 제거)
data.drop(data.index[:len(data) - analyzed_day], inplace=True)
# print logs
# for i in range(len(data.index)):
# print (i, data.index[i], data['macd'][i], data['slow_k'][i], data['gradients_low'][i], data['gradients_avg5'][i], data['gradients_avg20'][i], data['gradients_avg60'][i], data['disparity_avg5'][i], data['disparity_avg20'][i], data['disparity_avg60'][i], data['disparity'][i], data['disparity_type'][i])
bsLine, data = self.buySellChecker.checkTransactionWithEnvelope(data, stock_code, 120, isRealTime=False)
# 그래프를 그린다.
if len(data.index) > 10 and bsLine['buy'][len(bsLine['buy'])-1] > 0:
self.writeFile(dailyDirName, stock_code, stock_name, today, data, bsLine)
return
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 = StockStatus(RESOURCE_PATH)
dailyStatus.checkEnvelope()