init
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user