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.MACD import MACD
from stock.analysis.Envelope import Envelope
from stock.crawler.MovingAverage import MovingAverage
from stock.analysis.MovingAverage import MovingAverage
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,
"stochastic_fast_k": stochastic_fast_k, "stochastic_slow_k": stochastic_slow_k, "stochastic_slow_d": stochastic_slow_d,
"rsi": rsi, "rsis": rsis,
"macd": macd, "macds": macds, "macdo": macdo
"macd": macd, "macds": macds, "macdo": macdo,
"obv5": [], "obv20": [], "obv60": []
}
return stock
@@ -451,6 +452,7 @@ class AnalyzerSqlite:
self.makeDir("daily_env_상단_volume")
self.makeDir("daily_이전에_없던_거래량")
self.makeDir("daily_이격도")
self.makeDir("daily_OBV")
#self.makeDir("daily_EV하단_내려옴")
#self.makeDir("daily_BB하단_내려옴")
@@ -551,7 +553,10 @@ class AnalyzerSqlite:
check = self.common.check_mv_20_60(stock_weekly)
if check:
dir_name = "weekly_mv_20_60"
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)
# 2) daily
@@ -577,6 +582,14 @@ class AnalyzerSqlite:
dir_name = "daily_이격도"
log = "이격도_" + str(top)
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하단_내려옴
check = self.common.check_under_EV_Low(stock_daily)

View File

@@ -1,4 +1,6 @@
from stock.analysis.MovingAverage import MovingAverage
class Common:
# 상향
@@ -587,3 +589,51 @@ class Common:
if stock['close'][c] < stock['bolingerband_lower'][c]:
return True
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