Colaboratoryを使用して、投資環境スコアをGoogleスプレッドシートに記入する

当ページのリンクには広告が含まれています。

ども♪真毅です。

↓良ければ応援クリックお願いします!
にほんブログ村 株ブログへ

今回は金利を見れば投資はうまくいくと言う本に投資環境スコアという、面白い考え方があったので投資スコアをpythonを使用し、作ってみたいと思います。

以下はPyhtonで投資環境スコアに必要な値を取得します。

import sys
import time

import pandas as pd
import datetime as dt
import pandas_datareader.data as web
import matplotlib.pyplot as plt
import re

# 認証のためのコード
from google.colab import auth
auth.authenticate_user()

import gspread
from google.auth import default
creds, _ = default()
gc = gspread.authorize(creds)


open = dt.date(1900,1,1)
stop = dt.date.today()

try:

  # 実行時間を測るStart
  start = time.time()
  print ("開始時間:{0}".format(time.strftime('%Y/%m/%d %H:%M:%S')) )

  #アルファベットを数値に変換
  def toAlpha(num):
    if num<=26:
        return chr(64+num)
    elif num%26==0:
        return toAlpha(num//26-1)+chr(90)
    else:
        return toAlpha(num//26)+chr(64+num%26)

  #月末データを取得する
  def endmonth(df):
      dt = df.index
      dtm = pd.date_range(dt.min(), dt.max(), freq='BM') # 範囲内の月末最終営業日のみ
      dtm = dtm.astype(str) # 文字列に
      return df[df.index.isin(dtm)]

  def WriteSheets(df,start_cell,filename,sheetname,Clearflg):
    ## スプレッドシートを開く(名前から)
    ss = gc.open(filename)
    # シートを特定する(シート名で特定)
    st = ss.worksheet(sheetname)

    col_lastnum = len(df.columns) # DataFrameの列数
    row_lastnum = len(df.index)   # DataFrameの行数

    start_cell_col = re.sub(r'[\d]', '', start_cell)
    start_cell_row = int(re.sub(r'[\D]', '', start_cell))

    # アルファベットから数字を返すラムダ式(A列~Z列まで)
    # 例:A→1、Z→26
    alpha2num = lambda c: ord(c) - ord('A') + 1

    # 展開を開始するセルからA1セルの差分
    row_diff = start_cell_row-1
    col_diff = alpha2num(start_cell_col)-alpha2num('A')

    cell_list = st.range(start_cell+':'+toAlpha(col_lastnum+1+col_diff)+str(row_lastnum+1+row_diff))

    for cell in cell_list:
        if cell.col == 1+col_diff and cell.row == 1+row_diff:
            val = ''
        elif cell.col == 1+col_diff:
            val = df.index[cell.row-(2+row_diff)]
        elif cell.row == 1+row_diff:
            val = df.columns[cell.col-(2+col_diff)]
        else:
            val = df.iloc[cell.row-(2+row_diff)][cell.col-(2+col_diff)]

        cell.value = str(val)

    if Clearflg == 1:
        st.clear()

    st.update_cells(cell_list)

  #米国金利データ
  df = web.DataReader(["DGS3MO","DGS6MO","DGS1","DGS2","DGS5","DGS10","DGS20","DGS30"], 'fred', open, stop)
  #欠損値を前のデータで保管
  df = df.fillna(method = 'ffill')
  #スプレッドに記述
  WriteSheets(df,'A1','金利 取得用','米国金利',1)
  #月末のみ
  dtm = endmonth(df)
  WriteSheets(dtm,'K1','金利 取得用','米国金利',0)

  #FFレート
  df = web.DataReader(["FEDFUNDS","DFEDTARU", "DFEDTARL"], 'fred', open, stop)
  #欠損値を前のデータで保管
  df = df.fillna(method = 'ffill')
  #スプレッドに記述
  WriteSheets(df,'A1','金利 取得用','FFレート',1)
  #月末のみ
  dtm = endmonth(df)
  WriteSheets(dtm,'F1','金利 取得用','FFレート',0)

  #社債
  df = web.DataReader(["DBAA","BAA10Y"], 'fred', open, stop)
  #欠損値を前のデータで保管
  df = df.fillna(method = 'ffill')
  #スプレッドに記述
  WriteSheets(df,'A1','金利 取得用','社債',1)
  # 月末のみ
  dtm = endmonth(df)
  WriteSheets(dtm,'E1','金利 取得用','社債',0)

  #米ドル指数
  df = web.DataReader(["TWEXMMTH","TWEXBGSMTH","RTWEXAFEGS","RTWEXBGS"], 'fred', open, stop)
  #欠損値を前のデータで保管
  df = df.fillna(method = 'ffill')
  #スプレッドに記述
  WriteSheets(df,'A1','金利 取得用','米ドル指数',1)


except Exception:

  e = sys.exc_info()[1]
  print("エラー",e.args)

finally:

  # 実行時間を測るEnd
  print ("終了時間:{0}".format(time.strftime('%Y/%m/%d %H:%M:%S')) )
  elapsed_time = time.time() - start
  print ("処理時間:{0}".format(elapsed_time) + "[sec]")

次に、googleスプレッドで投資判定スコアを計算します。

計算の判定基準は書籍によると以下

そして、投資判定スコアとS&P500を照らし合わせた結果が以下

うーん。

法則がありそうで、見つからないですね~

投資の実践で使うにはもう一手間必要そうです。

ただ、参考になった金利を見れば投資はうまくいくの書籍は金利と株価の関係を勉強する上でたいへん参考になりました。

市場間分析って大事だね♪

楽天Kobo電子書籍ストア
¥1,650 (2024/12/07 08:38時点 | 楽天市場調べ)

この記事が気に入ったら
いいね または フォローしてね!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

真毅のアバター 真毅 自由人

趣味はカメラ、ランニング、読書。職業はシステムエンジニア。昔はリサーチハウスで企業調査、産業分析を行っていました。目標は投資で稼いでゆっくり生きる。資格はFP2級、証券アナリスト。投資対象は日本株、米国ETF、金、暗号資産、不動産。金融資産と実物資産の両輪で資産形成。

お知らせ

当サイトはリンクフリーです。リンクを貼る際の許可は必要ありません。

いい記事だと思ったらじゃんじゃんリンクしてください♪

なお、本文の引用・写真の利用は出典元URLを貼っていただければOKです。

コメント

コメントする

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

目次