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.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)
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user