Compare commits

...

10 Commits

Author SHA1 Message Date
dsyoon
c23a4f8540 init 2024-11-17 17:10:34 +09:00
dsyoon
7741fd2285 init 2024-11-17 16:58:39 +09:00
dsyoon
9e48751560 init 2024-11-17 16:46:59 +09:00
dsyoon
f54c5e70ef init 2024-11-17 16:45:25 +09:00
dsyoon
fd5e705862 init 2024-11-17 16:43:47 +09:00
dsyoon
189301da91 init 2024-11-16 15:15:41 +09:00
dsyoon
97ceb610f7 init 2024-11-16 15:10:01 +09:00
dsyoon
8313c67d11 init 2024-11-16 15:07:39 +09:00
dsyoon
3ffc86e33b init 2024-11-16 15:03:31 +09:00
dsyoon
ec0638f1e0 init 2024-11-16 15:01:16 +09:00
2 changed files with 52 additions and 30 deletions

View File

@@ -191,7 +191,7 @@ class AnalyzerSqlite:
changeLine = go.Scatter(x=ymd, y=ichimokucloud_changeLine, name="changeLine", line_color='#000000')
baseLine = go.Scatter(x=ymd, y=ichimokucloud_baseLine, name="baseLine", line_color='#FF0000')
laggingSpan = go.Scatter(x=ymd, y=ichimokucloud_laggingSpan, name='laggingSpan', line_color='#B50ABB')
leadingSpan1 = go.Scatter(x=ymd, y=ichimokucloud_leadingSpan1, name='leadingSpan1', line_color='black')
leadingSpan1 = go.Scatter(x=ymd, y=ichimokucloud_leadingSpan1, name='leadingSpan1', line_color='#ff5733')
leadingSpan2 = go.Scatter(x=ymd, y=ichimokucloud_leadingSpan2, name='leadingSpan2', line_color='black')
trend = go.Scatter(x=ymd, y=trend, name="trend", line_color='#574e4c')
@@ -482,7 +482,10 @@ class AnalyzerSqlite:
# 후보 찾기
def findCandidates(self, outPath):
result = []
result_3_5 = []
result_5_20 = []
result_ichimok = []
self.makeDirectory(outPath)
stockTableName = 'stock'
@@ -593,7 +596,7 @@ class AnalyzerSqlite:
dir_name = "daily_5_20"
log = str(count) + "_" + dir_name + "_"
self.writeFile(dir_name, CODE, NAME, top, stock_daily, log)
result.append({'ticker_code': CODE, 'ticker_name': NAME,'close': stock_daily['close'][0], 'type': '5~20'})
result_5_20.append({'ticker_code': CODE, 'ticker_name': NAME,'close': stock_daily['close'][0], 'type': '5~20'})
check = self.common.buy_stock_daily_3_5(stock_daily)
if check:
@@ -601,7 +604,7 @@ class AnalyzerSqlite:
dir_name = "daily_3_5"
log = str(count) + "_" + dir_name + "_"
self.writeFile(dir_name, CODE, NAME, top, stock_daily, log)
result.append({'ticker_code': CODE, 'ticker_name': NAME,'close': stock_daily['close'][0], 'type': '3~5'})
result_3_5.append({'ticker_code': CODE, 'ticker_name': NAME,'close': stock_daily['close'][0], 'type': '3~5'})
check = self.common.buy_stock_ichimok(stock_daily)
if check:
@@ -609,19 +612,49 @@ class AnalyzerSqlite:
dir_name = "daily_ichimok"
log = str(count) + "_" + dir_name + "_"
self.writeFile(dir_name, CODE, NAME, top, stock_daily, log)
result.append({'ticker_code': CODE, 'ticker_name': NAME,'close': stock_daily['close'][0], 'type': 'ichimok'})
result_ichimok.append({'ticker_code': CODE, 'ticker_name': NAME,'close': stock_daily['close'][0], 'type': 'ichimok'})
self.sendMsg(result_3_5, result_5_20, result_ichimok)
return
def sendMsg(self, result_3_5, result_5_20, result_ichimok):
pStr = '[Stock Analysis]\n'
self.bot.sendMsg(pStr)
pStr = ''
i = 0
for item in result:
for item in result_3_5:
pStr += " <{}> {} {} ({:.2f})\n".format(item['type'], item['ticker_code'], item['ticker_name'], item['close'])
i += 1
if i==100:
if i == 100:
i = 0
self.bot.sendMsg(pStr)
pStr = ''
if i>0:
if i > 0:
self.bot.sendMsg(pStr)
pStr = ''
i = 0
for item in result_5_20:
pStr += " <{}> {} {} ({:.2f})\n".format(item['type'], item['ticker_code'], item['ticker_name'], item['close'])
i += 1
if i == 100:
i = 0
self.bot.sendMsg(pStr)
pStr = ''
if i > 0:
self.bot.sendMsg(pStr)
pStr = ''
i = 0
for item in result_ichimok:
pStr += " <{}> {} {} ({:.2f})\n".format(item['type'], item['ticker_code'], item['ticker_name'], item['close'])
i += 1
if i == 100:
i = 0
self.bot.sendMsg(pStr)
pStr = ''
if i > 0:
self.bot.sendMsg(pStr)
return

View File

@@ -726,30 +726,19 @@ class Common:
return False
def buy_stock_ichimok(self, stock_daily):
# 어제의 저가는 선행 1과 2 사이에 있었는데, 오늘은 선행 1과 2 위로 올라왔다.
check_buy = False
if stock_daily['close'][0] < stock_daily['open'][0]:
return check_buy
for c in range(0, 4):
if stock_daily['ichimokucloud_leadingSpan1'][c] is None or stock_daily['ichimokucloud_leadingSpan2'][c] is None:
return check_buy
# 체크 1
if (stock_daily['ichimokucloud_leadingSpan1'][1] < stock_daily['close'][1] <= stock_daily['ichimokucloud_leadingSpan2'][1] and
stock_daily['ichimokucloud_leadingSpan1'][0] < stock_daily['ichimokucloud_leadingSpan2'][0] < stock_daily['close'][0]):
check_buy = True
# 체크 2
for c in range(0, 3):
if (
# 선행1 (상승) < 종가 혹은 시가 < 선행2 (하락) 였는데, 오늘은 선행1 (상승) < 선행2 (하락) < 종가 혹은 시가
(stock_daily['close'][(c+1)] <= max(stock_daily['ichimokucloud_leadingSpan1'][(c+1)], stock_daily['ichimokucloud_leadingSpan2'][(c+1)])) and
(max(stock_daily['ichimokucloud_leadingSpan1'][c], stock_daily['ichimokucloud_leadingSpan2'][c]) < stock_daily['close'][(c)])
):
### 주가가 구름대를 상향 돌파함
# 오늘: max(선행 1,2) < 시가 < 종가, 어제 종가 < 오늘 종가
if (max(stock_daily['ichimokucloud_leadingSpan1'][0], stock_daily['ichimokucloud_leadingSpan2'][0]) < stock_daily['open'][0] < stock_daily['close'][0]) and (stock_daily['close'][1] < stock_daily['close'][0]):
# 어제: 시가 < 종가 <= max(스팬1,2) 이거나
# 어제: 시가 < max(스팬1,2) < 종가 이거나
# 어제: 시가 < 종가 < max(스팬1,2) 임
if ((stock_daily['open'][1] < stock_daily['close'][1] <= max(stock_daily['ichimokucloud_leadingSpan1'][1], stock_daily['ichimokucloud_leadingSpan2'][1])) or
(stock_daily['open'][1] < max(stock_daily['ichimokucloud_leadingSpan1'][1], stock_daily['ichimokucloud_leadingSpan2'][1]) < stock_daily['close'][1]) or
(stock_daily['open'][1] < stock_daily['close'][1] < min(stock_daily['ichimokucloud_leadingSpan1'][1], stock_daily['ichimokucloud_leadingSpan2'][1]))):
check_buy = True
break
if stock_daily['close'][(c)] < stock_daily['ichimokucloud_leadingSpan1'][c]:
check_buy = False
break
return check_buy