小話)資産管理ツールについて
サブテーマ:YahooFinance,MF,Zaim,スプレッドシートのご紹介
1 初めに
投資を始めたものの複数の証券会社で運用していたり、家族の口座など複数あると、確認していくだけで面倒になります(なりました)。そこで、今回は筆者がたどり着いた結論をご紹介させていただきます。今回の方法は比較的中長期投資家むけの提案となり、短期売買向けではありません。
合わせて、資産形成には支出管理ということで、支出管理方法についても触れて紹介させていただきます。
今回の結論:投資先商品が、
証券会社1社のみ ・・・各証券会社のまとめページ
投資信託のみ(家族名義も含む) ・・・Yahoo Finance
投資信託以外(株、ビットコイン)
同一名義(もしくは1社づつのみ)→MF(マネーフォワード)
同一名義以外(家族も) →グーグル スプレッドシート
*支出管理 MF(マネーフォワード)もしくはZaim
2 豆知識:ツールの紹介
1)Yahoo Finace
Yahoo FinaceはYahooが提供する金融情報に特化した情報を提供していますが、その中でポートフォリオのサービスがあります。ここでポートフォリオを作成しておくと家族名義で保有している資産を含め一元管理が可能です。またスマホアプリ等も対応していますのでスマホで今日現時点の各資産の増減やトータル資産の把握に役立ちます。デメリットは日本株、日本で発売されている投資信託なら良いのですが、米国ETFなど対応していない銘柄があります。
2)マネーフォワード
マネーフォワード(以下MF)は、一部無料の家計管理アプリです。投資資産だけではなく、支出管理ならこのアプリをお勧めします。だだ、純正のMFアプリは連携できる口座数が4個までと少し少ないです。そこでお勧めするのがSBIネット銀行等連携した銀行が提供しているマネーフォワードです。10口座まで無料で使えますので、ご自身が使っている銀行で提供があればぜひ使ってみてください。
3)Zaim
こちらも優秀な家計管理アプリです。無料で連携できる口座数が無制限であることが一番の利点です。無料では手動で価格更新ができないことがデメリットではありますが、そもそも支出管理をメインに考えている人、たまに資産を確認しておきたい人には丁度いいアプリです。
4)グーグルスプレッドシート
Google版EXCLEです。グーグルアカウントがあれば無料でかつ、下記リンクのような手法を用いると投資信託、Bitcoin、米国株も取得できます。また他のGmailなどの連携も可能です。
下記は実際に参考にさせてもらったページです。
3 資産管理
1)単身世帯の資産管理
単身世帯の場合は、MFもしくはZaimで資産管理も、支出管理も実施するとスッキリと管理できます。お金を貯めるにもまずは無理なく支出を抑えてということで、支出管理から始めてみるのはお勧めです。
2)投資信託の資産管理(複数口座)
妻・子供のNISA口座がある方など投資商品のほどんどは投資信託の場合の資産管理にお勧めなのはYahoo Financeです。一度ポートフォリオを各証券会社の保有資産を確認し、保有口数(入力時➗10000が必要)と購入価格をそれぞれ入力することで、以後資産の価値が把握できます。デメリットは入力以降の積立投資分が反映されないことですが、ある程度資産形成が進むと1年で積立される額の割合も減ると思いますので、そこは多めにみて1年に1回更新していけば良いと思います。
3)投資信託以外を含む資産管理(複数口座)
Yahoo Finaceでは国内株は対応できても、海外ETF(VOO等)には対応できません。その場合は、スプレッドシートでまとめ表を作成してみることをお勧めします。スプレッドシートではGoogle Finace関数を使用することで米国株や米国ETFの価格を簡単に取得できます。日本株やBitcoinはスプレイピングの関数を作成し最新価格を自動で取得させるようにするのですが、AppScriptで関数を設定すればすぐ使用できます。
下記に実際にeMAXIS Silm米国株式(S&P500)の価格を取得しているコード部分をスクショしました。この関数で投資信託コードから、そのコードの現在の価格が取得できます。
日本株の場合は下記のような関数です。(参考にさせてもらったサイトは上記参照)こちらも関数をApp Scriptに記入しておくことで現在の価格を表示させることが可能です。
// 日本株を自動で取得するためのGAS
function STOCKPRICEJP(code){
let url = "https://www.google.com/finance/quote/" + code + ":TYO";
let html = UrlFetchApp.fetch(url).getContentText();
let stockPrice = Parser.data(html)
.from("<div class=\"YMlKec fxKbKc\">")
.to("</div>")
.build();
return stockPrice;
}
またこれらの集計価格を例えば週1回などメールで通知させることができます。先ほど紹介したページをアレンジすることで、自分なりの資産区分でそれぞれの増減をアプリを立ち上げなくても自動でメールが送れます。
下記コードは、スプレッドシートで集計したデータを別のシートに貼り付けてそのデータをメールで送信するコードです。筆者の場合、S &P500とNASDAQ100等のグループ分けをし、それぞれでの資産合計、含み益の額、資産の増減、ドル円レートをメールで送信するように設定してみています。
スプレッドシートに興味があれば下記コードを参考に自分なりのレポートの自動送信にチャレンジしてみてください。
const setDataLastRow = () => {
const spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
const tableSheet = spreadsheet.getSheetByName("Table");
if (!tableSheet) {
Logger.log("エラー: 'Table'シートが見つかりません。");
return;
}
const data = tableSheet.getRange("J2:Z2").getValues()[0];
const trendSheet = spreadsheet.getSheetByName("Trend");
if (!trendSheet) {
Logger.log("エラー: 'Trend'シートが見つかりません。");
return;
}
const lastRow = getLastRowInColumn(trendSheet, 1);
const today = new Date();
// 日付をフォーマットしてセルに設定
const formattedDate = Utilities.formatDate(today, Session.getScriptTimeZone(), "yyyy-MM-dd");
trendSheet.getRange(lastRow + 1, 1).setValue(formattedDate);
// 他のデータをセット
trendSheet.getRange(lastRow + 1, 2, 1, data.length).setValues([data]);
// メールで送信する全データとカラム名を取得
const fullRowData = trendSheet.getRange(lastRow + 1, 1, 1, 25).getValues()[0]; // A列からY列まで
const columnNames = trendSheet.getRange("A2:Y2").getValues()[0]; // カラム名
// メール本文を整形
let emailBody = "Here is the latest data row with column names:\n";
fullRowData.forEach((value, index) => {
const columnName = columnNames[index];
const formattedValue = index === 0 ? value : Number(value).toLocaleString(); // A列は日付のためフォーマットを変更しない
emailBody += `${columnName}: ${formattedValue}\n`;
});
// メール送信(メールアドレスと件名は適宜設定)
GmailApp.sendEmail("********@gmail.com", "Updated Data Row", emailBody);
};
function getLastRowInColumn(sheet, column) {
const columnData = sheet.getRange(1, column, sheet.getMaxRows()).getValues();
let lastRow = 0;
for (let i = columnData.length - 1; i >= 0; i--) {
if (columnData[i][0] !== "") {
lastRow = i + 1;
break;
}
}
return lastRow;
}
ご参考)MFサイトからスクレイピング
スクレイピングは各サイトの利用規約に従う必要はありますが、HTMLで保存したファイルを取り込むことで、サイトのあるサーバーに負荷をかけることなく、取り込みすることができます。
下記コードは、あらかじめダウンロードしておいたMFの月々の集計ページ(HTMLファイル)のテーブルをデスクトップにあるEXCLEファイルに新しいシートに移し出して保存するPYTHONコードです。(今回はローカル環境で実行した結果を紹介しています。EXCLE操作はopenpyxlを使用。)
ファイルを読み込んでEXCLEに書き込むだけならこれだけです。EXCLEデータさえあればあとの加工はお好み次第だと思いますので、PYTHONで何ができるのかと思っている方の1stステップとしてチャレンジに最適です。(Chat GPTを頼れば下記のコードはすぐです。実際自分で書くより早くて正確です。)
import pandas as pd
# Path to your HTML file
html_file_path = '/Users/Desktop/MF_MEISAI/202302.html'
# Read HTML file content
with open(html_file_path, 'r', encoding='utf-8') as file:
html_content = file.read()
# Read tables from the HTML content
html_tables = pd.read_html(html_content)
# Table 3 is what we want to extract
table_to_save = html_tables[2] # Index 2 because it's the third table in the list
# Corrected path for the Excel file to be saved on your desktop
excel_file_path = '/Users/Desktop/MF.xlsx'
# Save the table as an Excel file
table_to_save.to_excel(excel_file_path, index=False)
print("Table saved as Excel file successfully.")
4 まとめ
今回は、小話程度に、資産管理ツールについて紹介させていただきました。投資に関わる情報より実際は各個人でどのように資産を管理していくかの方が大事な話なのかもしれません。
このサイトでは引き続き投資に役立つプログラムをお届けできればと考えていますので、ぜひお付き合いください。
以下、過去記事、AI時系列予測等のご紹介
他サイトですがココならで、A I(LSTM)を使った株価予測の販売もやってます。こちらではFREDから、失業率や2年10年金利、銅価格等結果も取得しLSTMモデルで予測するコードとなってますので興味があれば見てみてください。またその他2件も米国株投資とは直接関係はありませんがプログラム入門におすすめですのでみてみてください。
チャンネル紹介:Kota@Python&米国株投資チャンネル
過去の掲載記事:興味があればぜひ読んでください。
グラフ化集計の基礎:S &P500と金や米国債を比較してます。
移動平均を使った時系列予測