minisoba blog

プログラミングと株式投資

Sublime Text: タブ、サイドバー フォントの変更

通常のフォントサイズの変更は、編集画面のみに適用されるので、タブ、サイドバーの場合、個別に対応する必要があるみたいです。

メニューから、[Preferences]->[Customize Theme]を選択:

// Documentation at https://www.sublimetext.com/docs/themes.html
{
    "variables":
    {
    },
    "rules":
    [
        {
            "class": "tab_label",
            "font.bold": true,
            "font.size": 16
        },
        {
            "class": "sidebar_label",
            "font.bold": false,
            "font.size":16
        }
    ]
}

住宅ローンにまつわるリスクを考える

海外移住をしてかれこれ25年以上が経ち、50代半ばを目前にして「終の住処」って言ったら大袈裟ですが、そろそろ先々のことを考えています。 お互い老後は日本という点で、妻とも考えは一致しています。

海外では(少なくとも、私が働いている業界では)定年というものはないのですが(人事確認済み)、60歳までには日本への帰国を考えています。 これまでずっと賃貸暮らしだったので、この帰国のタイミングでどこかに住宅を購入する予定です。

こういう経緯から、住宅ローンにまつわるリスクついて考えてみました。

金利上昇リスク

言わずと知れた問題ですね。バブル経済崩壊以来、長らく超低金利が続いた日本ですが、ようやく金利のある正常な状態に戻るって感じです。 もちろん、ローンを組む側からしたら低金利でお金が借りられる(金利負担が少ない)ので、より高額な物件を購入することができます。 しかし、お金を預ける側からすると100万円預けて、利息100円ってどういうことってなりますよね。とても異常でアンバランスな状態だと思います。

頭金はなるべく抑えて住宅ローンを組んで、残金を高利回り金融資産で運用したらいいって言うFPもたくさんいますが、それって本当に正しいのでしょうか?

運用リスク

確かに、低金利でお金を借りて、それを株式とかの高利回り金融資産で運用できたらいいですよね。 私も、NTT(9432)や東京三菱UFJ(8306)といった新NISA人気銘柄を保有していて 配当利回りがNTTで3.51%、東京三菱UFJで3.15%(2024年10月15日現在)です。 しかしながら、NTTの平均取得株価が155円ですので、すでに5%以上のマイナスです。 NTTは、直近の高値からすでに25%弱下落しているので高値掴みしたら、そうそうに換金することができませんよね。

どんなに景気が悪くなろうが、株価が下がろうがローン残高は変わりません。株価が右肩上がりだったらいいのですが、株式相場の正確な予想は誰にもできません。 住宅ローンという大きなリスクを背負いながら、株式投資という別のリスクも同時に背負うというのはとても危険な考え方だと思います。

しかしながら、「機会喪失リスク」という言葉通り、投資をしないリスクというのも存在するので、ある程度の余剰資金で比較的安定した銘柄を選ぶのも 一つの手だと思います。あくまで、余剰資金で長期運用がポイントです。

イベントリスク

イベントリスクといったら、金融危機や経済危機といったものを想像しがちですが、子供の大学(国立 or 私立)進学はたまた海外留学といった当初想定していなかった イベントが常に発生します。子供の将来を潰したくないし、できる限りのことはしてあげたいと思うのが親心。また、現在働いている会社を突然クビに なるってことだってありますよね。海外では(特に外資系金融機関)、景気が悪くなるとすぐリストラをします。 どんなときでも、住宅ローンや子供の教育費は重くのしかかってくるのです。

為替リスク

最近、S&P連動型投資信託とかオルカンなんて流行っているようですが、個人的にはあまりオススメしません。もちろん、参入時期によっては全然ありだと思いますが、 株式投資というリスク資産に対して、為替リスクもつける、それプラス住宅ローンってリスクのオンパレードって感じです。

以前、イギリス株に投資していましたが収益を円ベースで考えていたので、株価プラス円換算ってとても面倒になってやめてしまいました。(以前のブログ参照)。 私の場合、お給料がドルベースなので、ドルでの投資はありですし、将来日本に帰国するので円での投資もありだと考えています。実際、1ドル160円のときは、こっちの貯金を ほぼ全額円に換金しました。

外貨で投資、貯金する場合、将来投資している外貨を使うことを前提に考えれば問題ないと思います。

結論

  • 頭金はしっかりためて無理のない住宅ローンを組むべし

  • 機会喪失リスクを避けるため、余剰資金で株式投資をするべし

  • 外貨建て投資信託は、為替リスクが発生するのでエントリーポイントが非常に重要、将来運用通貨を利用できればよし

  • 住宅ローン、株式投資、将来の起こりうること… すべてにリスクが介在する

こんな感じで考えています。せっかく、今まで頑張ってきて人生において一区切りついたのに、老後になってまでお金の苦労はしたくありません。 リスクを予め理解して、しっかりとした無理のない計画を立てたいものですね。

読んでいただきありがとうございました。

Citrix WorkspaceのUbuntuへのインストール手順

リモートワークでCitrix Workspaceを利用していますが、Ubuntu環境へのインストール方法を紹介します。

今回は、最新バーションではなく、動作確認済のicaclient_22.7.0.14_amd64をインストールします。

www.citrix.com

Debianパッケージをダウンロードして以下のコマンドを実行します。

sudo dpkg -i icaclient_22.7.0.14_amd64.deb

なお、App Protection Componentをインストールすると、Chromeが起動できなくなってしまいますので、ここではnoを選択します(Firefoxには問題ありません)。

インストールが終了したら、SSL証明書をシステムで利用しているものに変更します。

cd /opt/Citrix/ICAClient/keystore
sudo ln -s /etc/ssl/certs cacerts

13インチノートPCにインストールしたのですが、Workspaceのモニター解像度の変更がうまくされませんでしたので、リモートPCの方で対応しました。

試していませんが、DPIの変更方法を検索すると色々と出てきますので、ご参考までに。 askubuntu.com

EmacsでJupyter Notebook

Pythonで開発する場合、コードを書いて、バッファをインタプリタに送り込んで動作確認、といった一連の作業の繰り返しをEmacs上でしています。ただ、コード内容を共有するには少々不便なので、EmacsにJupyter Notebook環境を設定してみました。

開発OSは、Ubuntu 22.04を使用していますが、デフォルトのPython環境へのpipインストールはできないため (っていうかOSから苦情がでる)、仮想環境を作成して開発しています。

Emacs IPython Notebook (EIN)に、Python仮想環境のカーネル認識させるために、以下のパッケージをインストールし、カーネルをインストールするとJupyter Notebook画面上に仮想環境が表示されます。

pip install ipykernel
python -m ipykernel install --user --name=portfolio

portfolioという仮想環境が表示されました。

Emacs設定はこちら⬇

(require 'ein)
(require 'ein-notebook)
(setq ein:worksheet-enable-undo t)
(setq ein:output-area-inlined-images t)

(require 'pyvenv)
(pyvenv-mode t)

;; Set correct Python interpreter
(setq pyvenv-post-activate-hooks
      (list (lambda ()
              (setq python-shell-interpreter (concat pyvenv-virtual-env "bin/python3")))))
(setq pyvenv-post-deactivate-hooks
      (list (lambda ()
              (setq python-shell-interpreter "python3"))))

参考: github.com

株式投資ブログ開始!

「プログラミングと株式投資」ってブログタイトルにあるけど、株とは関係ないことばかりって言うか全然更新していませんでした。

株式投資自体は、2022年くらいから本格的にやり始めています。個人的には、日本株だけではなく、外国株へも同様に投資しています。例えば、今は円安なので、外国株で受け取った配当金は、日本円口座に移動し、円高に触れたら逆にポンド、米ドル口座に移動させています。基本、長期的な運用を目指しているので、高配当銘柄を中心に買い、配当金は再投資しています。

僕の場合は、資金を効率よく回転させるためInteractive Brokers (IB)一択です。日本株はもちろんのこと、米国、欧州、香港株など全世界の銘柄を一つの口座で管理することができるのでとても便利です。API取引もサポートしているのでシステムトレードに興味が持っている方には大変おすすめです。全世界に展開しているのでGitHubでIB関連のオープンソースも豊富にあります。

www.interactivebrokers.co.jp

ちなみに、デイトレする訳ではないので、わざわざAPI取引する必要はないのでは、と思われるかもしれませんが、API経由でできることは株式の発注のみならず、ファンダメンタルズデータや時系列株価データなども取り込んで分析することができます。

システムトレードに興味がある方は、こちらのオープンソースも参考にしてみてください。 github.com

EmacsユーザーがSublimeTextを使ってみた (C++設定編)

前回の基本設定編に引き続き、SublimeTextの話題です。

SublimeTextは、基本テキストエディタなので、IDE(Integrated Development Environmentの略)機能では、ちょっと見劣り感があります。というより、目的とするところが違うため一概には比較できないのですが... しかしながら、LSP-clangd(以下詳述)経由で言語サーバーと連携させることにより、IDE並みの開発ツールに変貌するのです。

今回は、SublimeText 4でのC++開発環境の構築方法を紹介したいと思います。 SublimeText歴が1ヶ月と短いので見落としているところ、もしくはもっと良い方法があるかもしれないのでそのときはコメントを頂けるとありがたいです。

ちなみに、SublimeTextの特に気に入っているところ:

などです。

※ ここでは、Linux(Ubuntu 22.04LTS)環境を想定していますので、macOSWindows上での動作確認はしていません。

インストール済パッケージ一覧
おまけ
必須ソフトのインストール

以下のパッケージをインストールします。

$ sudo apt-get update
$ sudo apt install clang clang-format
$ sudo apt install gcc-multilib g++-multilib

※ ちなみに、私の環境ではgcc-11の開発版がインストールされていたのですが直近のclangdでは標準ライブラリがうまく認識されませんでした。gcc/g++-multilibをインストールしたら、バージョン12が追加されうまく動作しました。

maron@minisoba:~$ ls -alrt  /usr/include/x86_64-linux-gnu/c++
total 20
drwxr-xr-x 16 root root 4096 Mar  7 06:35 ..
drwxr-xr-x  6 root root 4096 Apr  8 00:52 11
drwxr-xr-x  5 root root 4096 Apr 10 10:30 .
drwxr-xr-x  4 root root 4096 Apr 10 10:30 12

参考: https://stackoverflow.com/questions/74785927/clangd-doesnt-recognize-standard-headers

clangdとは


https://clangd.llvm.org

clangd understands your C++ code and adds smart features to your editor: code completion, compile errors, go-to-definition and more. clangd is based on the Clang C++ compiler, and is part of the LLVM project.

clangdは、LLVMプロジェクトで開発されたC++コンパイラをベースしたC++コードを動的に解析することを可能にする言語サーバー(Language Server)です。言語サーバープロトコル(以下、LSP)を介してエディタと通信することで、様々なIDE機能を提供することができます。LSPは、デファクトな標準規格なので、多くのエディタ向けにプラグインが開発されています。

  • コード補完機能
  • 動的コンパイルによるエラーチェック
  • コンパイルエラー検出時の回避方法の表示
  • コードナビゲーション
  • シンボル検索

など

図1. 動的コンパイルによるエラーチェック

図2. マウスカーソル上のシンボル情報の表示

clangdの機能詳細についてはここ(英語版)を参照してください。

LSP-clangdの設定方法

clangdをSublimeTextと連携させるためにはちょっとした準備が必要です。

Step 1: エディターのプラグインのインストール

言語サーバープラグイン(以下、LSP)とLSP-clangdのプラグインをパッケージコントロールからインストールします。

Step 2: Clangdの設定

まず、clangdにコード解析をするための基本情報を教えてあげる必要があります。やり方としては、CMakeベースのプロジェクトの場合cmakeファイルからcompile_commands.jsonを自動生成する方法と、予めコンパイラフラッグを定義したcompile_flags.txtを参照する方法があります。

compile_commands.json

# -DCMAKE_EXPORT_COMPILE_COMMANDS=1を追加する
$ cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=1 ..

私の場合は、個人用リポジトリが1つしかないのでcompile_flags.txtをプロジェクトのルートディレクトリにおいています。

gist.github.com ダウンロード

Step 3: LSP/LSP-clangdの設定

clagndの設定が完了したら、最後にSublimeTextの設定です。先述したとおり、LSP-clangdプラグインをインストールすることでSublimeTextをパワフルなIDEに変貌させることができます。 最近のJavaベースのGUI依存IDEよりも、テキスト(コード)編集に特化したSublimeTextに開発補助ツールを連携させるスタイルが、ちょうどいい距離感(なんのこっちゃ)があって非常に満足しています。

能書きはさておき、LSP-clangdプラグインの設定は以下のとおりです。LSP-clangdの設定は、パッケージレベルとプロジェクトレベルで設定することができます。

パッケージレベル(グローバル設定)では、 Preferences > Package Settings > LSP > Servers > LSP-clangd

プロジェクトレベルでは、プロジェクトファイルに直接書き込みます。

gist.github.com ダウンロード

自前でIDE機能を実装するよりも、コンパイラをベースにした独立した解析ツール(コンパイラに勝るコード解析ツールはない訳で)を実装し、標準プロトコルを介してエディタ機能を拡張させる方法はものすごくいいデザインだと思っています。以前でしたら、高度なIDE機能を使いたいがために重たいJavaベースの開発環境一択だったのが、LSPと接続することによりプログラマの好きなエディタでIDEなみのツールを手にすることできるのはとてもありがたいですね。

Tabnine - AIベースコード補完ツール

www.tabnine.com

巷では、ChatGPTが話題になっていますが、プログラミングの分野でもAIベースの開発補助ツールが散見されるようになりました。有名どころとして、GitHubのCopilotとTabnineがあります。Copilotは、GPT-3モデルをベースにしており、よりコンテクストベースなコードが生成できるのに対し、TabnineはGPT-2モデルをベースに学習させておりAIベースのコード補完ツールみたいです。こちらは、YouTubeから拝借したもので、CopilotはSublimeTextのプラグインはオフィシャルで提供されていないので、Tabnineを利用しています。

以下は、コード補完の例ですが、Tabnineが推奨するコードにはTabnineと右端に明記されています。ちなみに、既にあるコードをコメントしてどのようなコードが推奨されるか試したものです。コード補完としては、タイプする量がだいぶ減ったので今のところは満足しています。折を見て、AI開発ツールについても調べて見たいと思います。

参照: eremeev.ca