init
This commit is contained in:
3
.gitignore
vendored
3
.gitignore
vendored
@@ -39,7 +39,8 @@ wheels/
|
||||
|
||||
# Installer logs
|
||||
pip-log.txt
|
||||
pip-delete-this-directory.txt
|
||||
pip-
|
||||
delete-this-directory.txt
|
||||
|
||||
# Unit test / coverage reports
|
||||
htmlcov/
|
||||
|
||||
@@ -474,7 +474,7 @@ class AnalyzerSqlite:
|
||||
return False
|
||||
|
||||
# 후보 찾기
|
||||
def findCandidate(self, outPath):
|
||||
def findCandidate(self, outPath):
|
||||
self.makeDirectory(outPath)
|
||||
|
||||
stockTableName = 'stock'
|
||||
@@ -839,7 +839,7 @@ class AnalyzerSqlite:
|
||||
stockAnalysisTableName = 'stock_analysis_' + type
|
||||
|
||||
# 테이블 생성
|
||||
cursor.execute("CREATE TABLE IF NOT EXISTS " + stockAnalysisTableName + " (CODE text, NAME text, ymd text, avg5 REAL, avg10 REAL, avg20 REAL, avg60 REAL, avg120 REAL, avg200 REAL, avg240 REAL, bolingerband_upper REAL, bolingerband_lower REAL, bolingerband_middle REAL, ichimokucloud_changeLine REAL, ichimokucloud_baseLine REAL, ichimokucloud_leadingSpan1 REAL, ichimokucloud_leadingSpan2 REAL, stochastic_fast_k REAL, stochastic_slow_k REAL, stochastic_slow_d REAL)")
|
||||
cursor.execute("CREATE TABLE IF NOT EXISTS " + stockAnalysisTableName + " (CODE text, NAME text, ymd text, close REAL, diff REAL, open REAL, high REAL, low REAL, volume REAL, avg5 REAL, avg10 REAL, avg20 REAL, avg60 REAL, avg120 REAL, avg200 REAL, avg240 REAL, bolingerband_upper REAL, bolingerband_lower REAL, bolingerband_middle REAL, ichimokucloud_changeLine REAL, ichimokucloud_baseLine REAL, ichimokucloud_leadingSpan1 REAL, ichimokucloud_leadingSpan2 REAL, stochastic_fast_k REAL, stochastic_slow_k REAL, stochastic_slow_d REAL)")
|
||||
|
||||
# 키 생성
|
||||
create_key = "CREATE INDEX IF NOT EXISTS " + stockAnalysisTableName + "_idx on " + stockAnalysisTableName + " (CODE, ymd) "
|
||||
@@ -858,20 +858,33 @@ class AnalyzerSqlite:
|
||||
cursor.execute('SELECT * FROM ' + stockAnalysisTableName + ' WHERE CODE=? and ymd=?', (stock['CODE'], price['ymd'],))
|
||||
result = cursor.fetchone()
|
||||
if result == None:
|
||||
sql = "INSERT INTO " + stockAnalysisTableName + "(CODE, NAME, ymd, avg5, avg10, avg20, avg60, avg120, avg200, avg240, "
|
||||
sql = "INSERT INTO " + stockAnalysisTableName + "(CODE, NAME, ymd, close, diff, open, high, low, volume, avg5, avg10, avg20, avg60, avg120, avg200, avg240, "
|
||||
sql += " bolingerband_upper, bolingerband_lower, bolingerband_middle, "
|
||||
sql += " ichimokucloud_changeLine, ichimokucloud_baseLine, ichimokucloud_leadingSpan1, ichimokucloud_leadingSpan2, "
|
||||
sql += " stochastic_fast_k, stochastic_slow_k, stochastic_slow_d) "
|
||||
sql += " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
sql += " VALUES(?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"
|
||||
|
||||
cursor.execute(sql, (
|
||||
stock["CODE"], stock["NAME"], price['ymd'], price['avg5'], price['avg10'], price['avg20'],
|
||||
price['avg60'], price['avg120'], price['avg200'], price['avg240'],
|
||||
stock["CODE"], stock["NAME"], price['ymd'], price['close'], price['diff'], price['open'], price['high'], price['low'], price['volume'],
|
||||
price['avg5'], price['avg10'], price['avg20'], price['avg60'], price['avg120'], price['avg200'], price['avg240'],
|
||||
price['bolingerband_upper'], price['bolingerband_lower'], price['bolingerband_middle'],
|
||||
price['ichimokucloud_changeLine'], price['ichimokucloud_baseLine'], price['ichimokucloud_leadingSpan1'],
|
||||
price['ichimokucloud_leadingSpan2'],
|
||||
price['stochastic_fast_k'], price['stochastic_slow_k'], price['stochastic_slow_d'],))
|
||||
|
||||
else:
|
||||
sql = "UPDATE " + stockAnalysisTableName + " SET avg5=?, avg10=?, avg20=?, avg60=?, avg120=?, avg200=?, avg240=?,"
|
||||
sql += " bolingerband_upper=?, bolingerband_lower=?, bolingerband_middle=?, "
|
||||
sql += " ichimokucloud_changeLine=?, ichimokucloud_baseLine=?, ichimokucloud_leadingSpan1=?, ichimokucloud_leadingSpan2=?, "
|
||||
sql += " stochastic_fast_k=?, stochastic_slow_k=?, stochastic_slow_d=? "
|
||||
sql += " WHERE CODE=? and ymd=?"
|
||||
|
||||
cursor.execute(sql,
|
||||
(price['avg5'], price['avg10'], price['avg20'], price['avg60'], price['avg120'], price['avg200'], price['avg240'],
|
||||
price['bolingerband_upper'], price['bolingerband_lower'], price['bolingerband_middle'], price['ichimokucloud_changeLine'], price['ichimokucloud_baseLine'],
|
||||
price['ichimokucloud_leadingSpan1'], price['ichimokucloud_leadingSpan2'],
|
||||
price['stochastic_fast_k'], price['stochastic_slow_k'], price['stochastic_slow_d'],
|
||||
stock["CODE"], price['ymd'],))
|
||||
break
|
||||
|
||||
return
|
||||
@@ -885,10 +898,7 @@ class AnalyzerSqlite:
|
||||
cursor.execute('SELECT distinct code, name FROM ' + stockTableName + ' order by code')
|
||||
items = cursor.fetchall()
|
||||
|
||||
stocks = []
|
||||
for rowid, item in enumerate(items):
|
||||
conn = sqlite3.connect(self.stockFileName)
|
||||
cursor = conn.cursor()
|
||||
|
||||
stock = {"CODE": item[0], "NAME": item[1], "PRICE":[]}
|
||||
print("Daily # :", rowid, ", CODE: ", stock['CODE'], ", NAME: ", stock['NAME'])
|
||||
@@ -927,23 +937,59 @@ class AnalyzerSqlite:
|
||||
"stochastic_slow_k": -1,
|
||||
"stochastic_slow_d": -1})
|
||||
|
||||
stocks.append(stock)
|
||||
self.analyzeAdditionalInfo(stock, cursor)
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return stocks
|
||||
return
|
||||
|
||||
def analyzeWeekly(self, stocks):
|
||||
stocks_weekly = copy.deepcopy(stocks)
|
||||
|
||||
def analyzeGrouping(self, type):
|
||||
stockTableName = 'stock'
|
||||
|
||||
conn = sqlite3.connect(self.stockFileName)
|
||||
cursor = conn.cursor()
|
||||
|
||||
for rowid, stock in enumerate(stocks_weekly):
|
||||
print("Weekly # :", rowid, ", CODE: ", stock['CODE'], ", NAME: ", stock['NAME'])
|
||||
cursor.execute('SELECT distinct code, name FROM ' + stockTableName + ' order by code')
|
||||
items = cursor.fetchall()
|
||||
|
||||
for rowid, item in enumerate(items):
|
||||
stock = {"CODE": item[0], "NAME": item[1], "PRICE": []}
|
||||
print(type, "# :", rowid, ", CODE: ", stock['CODE'], ", NAME: ", stock['NAME'])
|
||||
|
||||
sql = 'SELECT ymd, close, diff, open, high, low, volume FROM ' + stockTableName + ' where CODE=? order by ymd desc '
|
||||
cursor.execute(sql, (stock['CODE'],))
|
||||
items = cursor.fetchall()
|
||||
|
||||
items_reverse = reversed(items)
|
||||
for item in items_reverse:
|
||||
stock['PRICE'].append(
|
||||
{"ymd": item[0],
|
||||
"close": item[1],
|
||||
"diff": item[2],
|
||||
"open": item[3],
|
||||
"high": item[4],
|
||||
"low": item[5],
|
||||
"volume": item[6],
|
||||
"avg5": -1,
|
||||
"avg10": -1,
|
||||
"avg20": -1,
|
||||
"avg60": -1,
|
||||
"avg120": -1,
|
||||
"avg200": -1,
|
||||
"avg240": -1,
|
||||
"bolingerband_upper": -1,
|
||||
"bolingerband_lower": -1,
|
||||
"bolingerband_middle": -1,
|
||||
"ichimokucloud_changeLine": -1,
|
||||
"ichimokucloud_baseLine": -1,
|
||||
"ichimokucloud_leadingSpan1": -1,
|
||||
"ichimokucloud_leadingSpan2": -1,
|
||||
"stochastic_fast_k": -1,
|
||||
"stochastic_slow_k": -1,
|
||||
"stochastic_slow_d": -1})
|
||||
|
||||
agg_dict = {'open': 'first',
|
||||
'high': 'max',
|
||||
@@ -955,12 +1001,16 @@ class AnalyzerSqlite:
|
||||
df['ymd'] = pd.to_datetime(df['ymd'])
|
||||
df.set_index('ymd', inplace=True)
|
||||
|
||||
df_week = df.resample('W-Mon').agg(agg_dict)
|
||||
df_week = df_week.dropna()
|
||||
df_week.merge(df, )
|
||||
stock['PRICE'] = self.convertFormat(df_week.to_dict())
|
||||
if type == "weekly":
|
||||
condition="W"
|
||||
else:
|
||||
condition='M'
|
||||
df_group = df.resample(condition).agg(agg_dict)
|
||||
df_group = df_group.dropna()
|
||||
df_group.merge(df, )
|
||||
stock['PRICE'] = self.convertFormat(df_group.to_dict())
|
||||
|
||||
self.analyzeAdditionalInfo(stock, cursor, "weekly")
|
||||
self.analyzeAdditionalInfo(stock, cursor, type)
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
@@ -968,38 +1018,6 @@ class AnalyzerSqlite:
|
||||
|
||||
return
|
||||
|
||||
def analyzeMonthly(self, stocks):
|
||||
stocks_monthly = copy.deepcopy(stocks)
|
||||
|
||||
conn = sqlite3.connect(self.stockFileName)
|
||||
cursor = conn.cursor()
|
||||
|
||||
for rowid, stock in enumerate(stocks_monthly):
|
||||
|
||||
print("Monthly # :", rowid, ", CODE: ", stock['CODE'], ", NAME: ", stock['NAME'])
|
||||
|
||||
agg_dict = {'open': 'first',
|
||||
'high': 'max',
|
||||
'low': 'min',
|
||||
'close': 'last',
|
||||
'volume': 'sum'}
|
||||
|
||||
df = pd.DataFrame(stock['PRICE'])
|
||||
df['ymd'] = pd.to_datetime(df['ymd'])
|
||||
df.set_index('ymd', inplace=True)
|
||||
|
||||
df_week = df.resample('M').agg(agg_dict)
|
||||
df_week = df_week.dropna()
|
||||
df_week.merge(df, )
|
||||
stock['PRICE'] = self.convertFormat(df_week.to_dict())
|
||||
|
||||
self.analyzeAdditionalInfo(stock, cursor, "monthly")
|
||||
|
||||
conn.commit()
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
return
|
||||
|
||||
if __name__ == "__main__":
|
||||
|
||||
@@ -1009,10 +1027,11 @@ if __name__ == "__main__":
|
||||
stockFileName = PROJECT_HOME + '/resources/stock.db'
|
||||
analyzer = AnalyzerSqlite(PROJECT_HOME, stockFileName)
|
||||
|
||||
stocks = analyzer.analyzeDaily()
|
||||
analyzer.analyzeWeekly(stocks)
|
||||
analyzer.analyzeMonthly(stocks)
|
||||
analyzer.analyzeDaily()
|
||||
analyzer.analyzeGrouping("weekly")
|
||||
analyzer.analyzeGrouping("monthly")
|
||||
|
||||
"""
|
||||
day = datetime.today().strftime("%Y%m%d")
|
||||
|
||||
# HTML 출력
|
||||
@@ -1022,7 +1041,7 @@ if __name__ == "__main__":
|
||||
os.mkdir(outPath)
|
||||
print("print to Html...")
|
||||
analyzer.findCandidate(outPath)
|
||||
|
||||
"""
|
||||
|
||||
print("time : %6.2f 초" % (time.time() - start))
|
||||
|
||||
|
||||
@@ -52,9 +52,9 @@ print("\n[종목 분석]")
|
||||
inFileName = PROJECT_HOME + '/resources/stock.db'
|
||||
analyzerSqlite = AnalyzerSqlite(PROJECT_HOME, stockFileName)
|
||||
|
||||
stocks = analyzerSqlite.analyzeDaily()
|
||||
analyzerSqlite.analyzeWeekly(stocks)
|
||||
analyzerSqlite.analyzeMonthly(stocks)
|
||||
analyzerSqlite.analyzeDaily()
|
||||
analyzerSqlite.analyzeGrouping("weekly")
|
||||
analyzerSqlite.analyzeGrouping("monthly")
|
||||
|
||||
analyzerSqlite = AnalyzerSqlite(PROJECT_HOME, stockFileName)
|
||||
print("\n[종목 결정]")
|
||||
|
||||
Reference in New Issue
Block a user