数年前、とある会合に呼ばれ、親切な方からバフェット流バリュー投資判断の技を教えてもらいました。
そのときのエッセンスをすべて詰め込んだスクリプトがこれです。
しかし、久々に実行してみると動きません。
とはいえ、大事な判断基準はこのスクリプトの中に入っているはずなので、読解してみると有益かもしれません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 |
import logging import pandas as pd from selenium import webdriver from time import sleep def find_stock(stock_number=4816): driver=webdriver.Chrome(r"C:\driver\chromedriver_win32\chromedriver.exe") #ウェブドライバを読み込む # 株式番号を入力して、キー レーションの一覧を表示する url=r"https://www.morningstar.com/stocks/XTKS/"+str(stock_number)+r"/quote.html" driver.get(url) sleep(3) print("ブラウザを開きました") # 現在の株価を取得する xpath_price=r'//*[@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(2) 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.append(float(driver.find_element_by_xpath(xpath_eps).text)) print(float(driver.find_element_by_xpath(xpath_eps).text)) print(type([float(driver.find_element_by_xpath(xpath_eps).text)])) eps.append([float(driver.find_element_by_xpath(xpath_eps).text)]) eps={key_eps:eps} sleep(1) 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 df.keys() """ Index(['Earnings Per Share JPY', 'Dividends JPY', 'Book Value Per Share * JPY', 'Return on Equity %', 'EPS %'], dtype='object') """ 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)) return "完了" |
The following two tabs change content below.
Keita N
最新記事 by Keita N (全て見る)
- 2024/1/13 ビットコインETFの取引開始:新たな時代の幕開け - 2024年1月13日
- 2024/1/5 日本ビジネスにおける変革の必要性とその方向性 - 2024年1月6日
- 2024/1/3 アメリカ債権ETFの見通しと最新動向 - 2024年1月3日