# coding: utf-8
import logging
import pandas as pd
from selenium import webdriver
from time import sleep
def auto(stock_number):
print("---- start ----")
#stock_number=5122
driver=webdriver.Chrome(r"C:\driver\chromedriver_win32\chromedriver.exe")
#ウェブドライバを読み込む
# 株式番号を入力して、キー レーションの一覧を表示する
stock_number=stock_number
url=r"https://www.morningstar.com/stocks/XTKS/"+str(stock_number)+r"/quote.html"
driver.get(url)
sleep(4)
#print("ブラウザを開きました")
# 現在の株価を取得する
xpath_price='//*[@id="message-box-price"]'
price=driver.find_element_by_xpath(xpath_price).text
# \ と カンマを削除してfloat化する
#print(price)
price=price.replace(chr(165),"") .replace(".00","").replace(",","")
price=float(price)
#print(price)
#キーレーションタブを押す
xpath_key_rations=r'//*[@id="sal-components-quote"]/div[2]/div/div/div/div[2]/div[1]/div/ul/li[3]/a'
tub_key_rations=driver.find_element_by_xpath(xpath_key_rations)
tub_key_rations.click()
sleep(2)
#print("キーレーション タブを押しました")
#フルキータブを押す
xpath_full_key=r'//*[@id="sal-components-quote"]/div[2]/div/div/div/div[2]/div[2]/div/div[2]/div/a'
tub_full_key_rations=driver.find_element_by_xpath(xpath_full_key)
tub_full_key_rations.click()
sleep(1)
#print("フルキータブを押しました")
# アクティブなURLを切り替える
#print(driver.current_url) # 現在アクティブなURLを確認する
driver.switch_to.window(driver.window_handles[1]) # アクティブなURLを切り替える
sleep(1)
#print(driver.current_url) # URLが切り替わっていることを確認する
# Earnings Per Share を取得
xpath_eps=r'//*[@id="i5"]'
key_eps=driver.find_element_by_xpath(xpath_eps).text
eps=[]
for i in range(1,12):
xpath_eps=r'//*[@id="financials"]/table/tbody/tr[12]/td['+str(i)+']'
eps+=[float(driver.find_element_by_xpath(xpath_eps).text)]
eps={key_eps:eps}
sleep(1)
#print(eps)
# Dividends を取得
xpath_dividends=r'//*[@id="i6"]'
key_dividends=driver.find_element_by_xpath(xpath_dividends).text
dividends=[]
dividends+=[None]
for i in range(2,12):
xpath_dividends=r'//*[@id="financials"]/table/tbody/tr[14]/td['+str(i)+']'
dividends+=[float(driver.find_element_by_xpath(xpath_dividends).text)]
dividends={key_dividends:dividends}
sleep(1)
#print(dividends)
# Book Value Per Share を取得
xpath_book=r'//*[@id="i8"]'
key_book=driver.find_element_by_xpath(xpath_book).text
book=[]
for i in range(1,12):
xpath_book=r'//*[@id="financials"]/table/tbody/tr[20]/td['+str(i)+']'
book+=[float(driver.find_element_by_xpath(xpath_book).text)]
book={key_book:book}
sleep(1)
#print(book)
# Return on Equity % を取得
# Key Rationsタブを Profitability に切り替える
xpath_growth=r'//*[@id="keyStatWrap"]/div/ul/li[1]/a'
tub_growth=driver.find_element_by_xpath(xpath_growth)
tub_growth.click()
#sleep(0.1)
#print("Profitabilityタブへ切り替え完了")
xpath_roe=r'//*[@id="i26"]'
key_roe=driver.find_element_by_xpath(xpath_roe).text
roe=[]
for i in range(1,12):
xpath_roe=r'//*[@id="tab-profitability"]/table[2]/tbody/tr[12]/td['+str(i)+']'
roe+=[driver.find_element_by_xpath(xpath_roe).text]
roe={key_roe:roe}
sleep(1)
#print(roe)
# Key Rationsタブを Growth に切り替える
xpath_growth=r'//*[@id="keyStatWrap"]/div/ul/li[2]/a'
tub_growth=driver.find_element_by_xpath(xpath_growth)
tub_growth.click()
sleep(1)
#print("Growthタブへ切り替え完了")
# EPS % を取得
xpath_eps_pct=r'//*[@id="gr-eps"]'
key_eps_pct=driver.find_element_by_xpath(xpath_eps_pct).text
eps_pct=[]
xpath_eps_pct_yoy=r'//*[@id="tab-growth"]/table/tbody/tr[34]/td[10]'
xpath_eps_pct_3y=r'//*[@id="tab-growth"]/table/tbody/tr[36]/td[10]'
xpath_eps_pct_5y=r'//*[@id="tab-growth"]/table/tbody/tr[38]/td[10]'
xpath_eps_pct_10y=r'//*[@id="tab-growth"]/table/tbody/tr[40]/td[10]'
eps_pct.append(float(driver.find_element_by_xpath(xpath_eps_pct_yoy).text))
eps_pct.append(float(driver.find_element_by_xpath(xpath_eps_pct_3y).text))
eps_pct.append(float(driver.find_element_by_xpath(xpath_eps_pct_5y).text))
eps_pct.append(float(driver.find_element_by_xpath(xpath_eps_pct_10y).text))
eps_pct={key_eps_pct:eps_pct}
sleep(1)
#print(eps_pct)
# データフレームを作成 : pd.concatでどんどんつなげていく。
# 軸を指定して、自動ソートを無効にする。: axis=1
df=pd.concat([pd.DataFrame(eps), pd.DataFrame(dividends), pd.DataFrame(book), pd.DataFrame(roe), pd.DataFrame(eps_pct)], axis=1)
#print(df)
stock_price=3425
as_asset=False
as_dividends=False
as_growths=False
#print("現在の株価 : ",price)
#(1)assets:ずっと持ち続ける資産株として
# 直近のTTMに注目する
book_value_per_share_ttm=book_value_per_share_ttm=df['Book Value Per Share * JPY'][len(df['Book Value Per Share * JPY'])-1]
entry_1=book_value_per_share_ttm*0.8
review_1=book_value_per_share_ttm*1.0
if price<=entry_1:
as_asset=True
#print("資産株として 買い判定:{} エントリー価格 :{:.0f} レビュー価格:{:.0f}".format(as_asset,entry_1,review_1))
#(2)devidents:配当用の株として
# 欲しい利回り日本株6%(米国株7%) 欲しい配当率 Yw 0.0
# Devidents / yield_target
dividends_ttm=df['Dividends JPY'][len(df['Dividends JPY'])-1]
yield_target=0.06 # 固定値
entry_2=dividends_ttm/yield_target
review_2=entry_2*1.5 # 単純に1.5倍
if price<=entry_2:
as_dividends=True
#print("配当株として 買い判定:{} エントリー価格 :{:.0f} レビュー価格:{:.0f}".format(as_dividends,entry_2,review_2))
#(3)growths:成長株として
eps_ttm=df['Earnings Per Share JPY'][len(df['Earnings Per Share JPY'])-1]
eps_pct=df['EPS %'].min()
entry_3=eps_ttm*eps_pct
review_3=entry_3*1.2 # 単純に1.2倍
if price<=entry_3:
as_growths=True
#print("成長株として 買い判定:{} エントリー価格 :{:.0f} レビュー価格:{:.0f}".format(as_growths,entry_3,review_3))
print("証券NO. : ",stock_number)
print("現在の株価 : ",int(price))
print("資産株として 買い判定:{} エントリー価格 :{:.0f} レビュー価格:{:.0f}".format(as_asset,entry_1,review_1))
print("配当株として 買い判定:{} エントリー価格 :{:.0f} レビュー価格:{:.0f}".format(as_dividends,entry_2,review_2))
print("成長株として 買い判定:{} エントリー価格 :{:.0f} レビュー価格:{:.0f}".format(as_growths,entry_3,review_3))
print("---- done ----")
# ------ 以下、プログラム本体 -------------
#自動判別プログラムの対象とする銘柄のディクショナリを用意する
dict_stock={"toei_animation":4816,
"pilot":7846,
"okamoto":5122,
"tokan":5901}
for stock_number in dict_stock.values():
auto(stock_number)
print("---- all finished ----")