This commit is contained in:
dsyoon
2023-05-16 21:25:41 +09:00
parent beb087f7f2
commit 04c0805f6f
3 changed files with 67 additions and 4 deletions

View File

@@ -23,7 +23,7 @@ from stock.analysis.IchimokuCloud import IchimokuCloud
from stock.analysis.RSI import RSI from stock.analysis.RSI import RSI
from stock.analysis.MACD import MACD from stock.analysis.MACD import MACD
from stock.analysis.Envelope import Envelope from stock.analysis.Envelope import Envelope
from stock.crawler.MovingAverage import MovingAverage from stock.analysis.MovingAverage import MovingAverage
from hts.BuySellChecker import BuySellChecker from hts.BuySellChecker import BuySellChecker
@@ -421,7 +421,8 @@ class AnalyzerSqlite:
"ichimokucloud_changeLine": ichimokucloud_changeLine, "ichimokucloud_baseLine": ichimokucloud_baseLine, "ichimokucloud_leadingSpan1": ichimokucloud_leadingSpan1, "ichimokucloud_leadingSpan2": ichimokucloud_leadingSpan2, "ichimokucloud_changeLine": ichimokucloud_changeLine, "ichimokucloud_baseLine": ichimokucloud_baseLine, "ichimokucloud_leadingSpan1": ichimokucloud_leadingSpan1, "ichimokucloud_leadingSpan2": ichimokucloud_leadingSpan2,
"stochastic_fast_k": stochastic_fast_k, "stochastic_slow_k": stochastic_slow_k, "stochastic_slow_d": stochastic_slow_d, "stochastic_fast_k": stochastic_fast_k, "stochastic_slow_k": stochastic_slow_k, "stochastic_slow_d": stochastic_slow_d,
"rsi": rsi, "rsis": rsis, "rsi": rsi, "rsis": rsis,
"macd": macd, "macds": macds, "macdo": macdo "macd": macd, "macds": macds, "macdo": macdo,
"obv5": [], "obv20": [], "obv60": []
} }
return stock return stock
@@ -451,6 +452,7 @@ class AnalyzerSqlite:
self.makeDir("daily_env_상단_volume") self.makeDir("daily_env_상단_volume")
self.makeDir("daily_이전에_없던_거래량") self.makeDir("daily_이전에_없던_거래량")
self.makeDir("daily_이격도") self.makeDir("daily_이격도")
self.makeDir("daily_OBV")
#self.makeDir("daily_EV하단_내려옴") #self.makeDir("daily_EV하단_내려옴")
#self.makeDir("daily_BB하단_내려옴") #self.makeDir("daily_BB하단_내려옴")
@@ -551,7 +553,10 @@ class AnalyzerSqlite:
check = self.common.check_mv_20_60(stock_weekly) check = self.common.check_mv_20_60(stock_weekly)
if check: if check:
dir_name = "weekly_mv_20_60" dir_name = "weekly_mv_20_60"
log = "RSI_" + "{:.2f}".format(stock_monthly['rsi'][0]) if stock_monthly['rsi'][0] is not None:
log = "RSI_" + "{:.2f}".format(stock_monthly['rsi'][0])
else:
log = ""
self.writeFile(dir_name, CODE, NAME, top, stock_monthly, log) self.writeFile(dir_name, CODE, NAME, top, stock_monthly, log)
# 2) daily # 2) daily
@@ -577,6 +582,14 @@ class AnalyzerSqlite:
dir_name = "daily_이격도" dir_name = "daily_이격도"
log = "이격도_" + str(top) log = "이격도_" + str(top)
self.writeFile(dir_name, CODE, NAME, top, stock_daily, log) self.writeFile(dir_name, CODE, NAME, top, stock_daily, log)
# daily_OBV
obv = self.common.check_obv(stock_daily)
if 0 < obv:
dir_name = "daily_OBV"
log = "OBV_" + str(obv)
self.writeFile(dir_name, CODE, NAME, top, stock_daily, log)
""" """
# daily_EV하단_내려옴 # daily_EV하단_내려옴
check = self.common.check_under_EV_Low(stock_daily) check = self.common.check_under_EV_Low(stock_daily)

View File

@@ -1,4 +1,6 @@
from stock.analysis.MovingAverage import MovingAverage
class Common: class Common:
# 상향 # 상향
@@ -586,4 +588,52 @@ class Common:
for c in range(1, 4): for c in range(1, 4):
if stock['close'][c] < stock['bolingerband_lower'][c]: if stock['close'][c] < stock['bolingerband_lower'][c]:
return True return True
return False return False
# OBV (최저점에서 누적 거래량) 체크
def check_obv(self, stock):
lowest_index = -1
p_price = 99999999999999
size = len(stock['close'])
for i in range(size):
if stock['low'][i] < p_price:
p_price = stock['low'][i]
lowest_index = i
if lowest_index > 600:
lowest_index = 600
obv = 0
obvs = []
for i in range(lowest_index, -1, -1):
if stock['open'][i] < stock['close'][i]:
obv += stock['volume'][i]
elif stock['close'][i] < stock['open'][i]:
obv -= stock['volume'][i]
obvs.append(obv)
q_5 = MovingAverage(5)
q_20 = MovingAverage(20)
q_60 = MovingAverage(60)
if len(obvs) > 60:
for i in range(len(obvs)):
q_5.enqueue(obvs[i])
q_20.enqueue(obvs[i])
q_60.enqueue(obvs[i])
stock['obv5'].append( q_5.avg() )
stock['obv20'].append( q_20.avg() )
stock['obv60'].append( q_60.avg() )
lowest_index -= 1
stock['obv5'] = list(reversed(stock['obv5']))
stock['obv20'] = list(reversed(stock['obv20']))
stock['obv60'] = list(reversed(stock['obv60']))
obvs = list(reversed(obvs))
if len(obvs) > 60 and obv > 0:
return obv
return -1