2025-05-21

OS なんてなんでもいいじゃん

Linux が好きで、自宅のメイン PC の OS はずっと Fedora Linux です。パソコンのハードウェア、ソフトウェア共に高機能になり、OS については Windows、macOS 以外の話題を耳にすることがすっかり少なくなってしまいました。今さら Linux を推奨したいわけではないのですが、それでも Linux 好きの言い分みたいなことをまとめたいと思い、つらつらと書き残しています。

今回は初回なので近況紹介です。😁

脱サラしてトレーダーに

私は半導体工場のエンジニアとして大学卒業後のキャリアをスタートして以来、転職を繰り返しながらもずっと半導体業界に身を置いてきました。

しかし SBI 証券と楽天証券が国内株取引の約定手数料の無料化に踏みきったのを知り [1]、意を決して会社を退職、投資の世界に飛び込みました。あと 1 年ぐらい勤め続ければ 60 歳定年を迎える予定でした。しかし、作ってみたかったデイトレの自動売買システム開発に取り組めるまたとないチャンスが到来したと感じ、今始めなければ必ずや後悔すると思ったのでした。

まあ、そんなにすぐに自動売買システムは完成しないことは重々承知の上、トレーディングをしながら自分が作りたいシステムを好きなようにプログラミングできることを楽しんでいる毎日です。

Windows でなければできないこと

自分のためにトレーディング・システムを作るのだから、これで好きな Linux にどっぷり浸ることができると期待していたのですが…、そんな期待は甘かったのでした。

取引ツール

証券会社が提供している取引ツールは Windows 上で動作します。どうしても Windows を使わなければならない事態に備えて Linux 化しなかった廉価なノート PC [2] に件の取引ツールをインストールしました。使ってみたところ、多機能で大変使いやすいツールだったので感動しました [3]。廉価で買った古い PC 上ですが、問題なく動作しているようです。

この取引ツールは、起動時に最新バージョンを確認して勝手にアップグレードしてしまう優れものです。歴史的に Windows のパッケージ管理機能がイマイチだった結果、アプリがセルフ・アップデートできるように進化したのだろうと感じました。

Microsoft Excel

Windows 上で動作する取引ツールは使いやすいのですが、自動取引についてはインターネットブラウザ (Firefox) で証券会社のサイトにログインして Python / Selenium のアプリで処理を自動化する方針でした。そうすれば Linux 上で開発して運用できると考えたからです。

Python / Selenium でマウスでクリックしたり入力したりする部分の自動化は難なく実現できましたが、デイトレ用に 1 秒間隔で常に株価データをブラウザ上から読み取っているため、複数銘柄への柔軟な対応および安定動作を確保するという課題がすぐに顕在化してしまいました。

この課題解消には時間がかかると考え、ひとまず方針変更をしました。つまり、株価取得および取引のために、証券会社が提供している取引ツールに付随する Excel アドインの機能を利用することにしたのです。

職場で使っていた Excel ですが、個人で購入したことはありませんでした。アマゾンで Excel 2024 永続版 [4] を購入して、アドインの機能を利用するために VBA でアプリの開発を始めました。

2 台目の Windows PC

今更ながら VBA のプログラミングに取り組み、リアルタイム(1 秒間隔)でターゲット銘柄(複数)の株価データを取得できるアプリを作り始めました。ところが、リアルタイムで株価データを収集している VBA アプリに修正などの変更を加えたければ、一旦アプリを止めなければなりません。止めてしまうと、その日の株価データに欠損値が出て、後でシミュレータで評価するのに支障が出ます。一方、ひとつの Excel で複数の VBA アプリを動かすことはできません。

日々、欠損の無いリアルタイムの株価データを収集したいので、開発環境としてもう一台 Windows PC を用意する必要が出てきました。幸い、購入した Excel のライセンスは 2 台分ありました。

現状、ディスプレイ 2 台と Windows ノート PC 本体の画面、ときどき Android タブレット画面を見ながらのトレーディングで、ディスプレイの追加は設置場所に困りました。そこで、追加する Windows PC は Windows 11 Pro を搭載したミニ PC を買うことにして [5]、メインの Linux マシンから Remmina [6] でリモート接続 (RDP) で Windows のデスクトップ画面を表示させて利用することにしました。

活躍する廉価な Windows PC

相変わらず Windows には使わないアプリが満載で、バックグラウンドで動いていてしっかりリソースを食っていたりするので、廉価 PC の非力な CPU が少しでも余裕を持って動作できるように、不要なアプリを見つけてはひたすらアンインストールする作業を続けて、専業 PC に仕立てました。

流行りのゲームで遊ぶのでなければ、廉価な Windows PC でも一手間かければしっかり、しかも低電力で働いてくれます。

納得できる売買アルゴリズムを目指して

自動取引をする環境は整いました。あとは売買アルゴリズムの初期バージョン完成を待つばかりです。

日々、さしあたってターゲットにした 3 銘柄の株価データを VBA アプリがリアルタイム(1 秒間隔)で収集しています。収集したデータに対してシミュレーション用のプログラムで評価して売買アルゴリズムの開発に励んでいますが、まだまだ完成に辿り着けません。あまりゴールを高くせず、そこそこ勝てるアルゴリズムから始めたいのですが、その目先のゴールすら、まだまだ遠いです。

最近ではさらに Python の xlwings パッケージ [7] で Excel のワークシート上に流し込まれた株価データを読み込んで、あれこれ取り組んでいます。結局、慣れている Python の方がいろいろ試しやすいんですよね。

売買アルゴリズムの開発については、サブブログ [8] にまとめています。

きっと多くの人は OS に注目していない

いろんなことに使える高性能な Windows PC がフツーに売られていて、その一方で PC のソフトウェア売り場がすっかり少なくなってしまった現在、前述した使わないアプリが満載な初期状態の Windows PC は当たり前なのかもしれません。使いたいアプリが Microsoft Store にあればインターネット経由で入手できますしね。

買った Windows PC で Linux を起動できると確認できれば、迷わず Linux を上書きインストールしてしまう自分は、はっきり言って異端です。そして、最新の CPU を搭載した PC を、Linux 環境でぶんぶん稼働させたい派でもあります。そんなわけでメインの PC にはそこそこのスペックのものを買い求めますが、そう頻繁には買い替えができません。

そこで、廉価な PC を見つけると衝動買いをして Linux をインストールして遊ぶことが趣味みたいになっています。こういった PC は古くなっても Linux が動くので、不本意ながら、古くなった PC でも Linux をインストールすればまだまだ使えることを実感しています。しかし、だからと言って、古くなった PC に Linux をインストールすることを推奨することは避けたいものです。可能であれば新しい PC を使った方が OS がなんであれ、より多くのことができるからです。それに Windows に慣れ親しんでいるのであれば、わざわざ異なる操作を必要とする他の OS を使うことは、人によってはストレスにしかならない場合もあるでしょう。

一般的な用途であれば Windows PC で十分、いや、おそらく多くの人は OS を選ぼうなんて考えていないでしょうから、OS なんてなんでもいいじゃん でよいと思うのです。

だからこそ Linux を話題に

逆説的ではありますが、Linux 好きの言い分として Linux はこんなところで利用されている、ということをなるべく具体的に紹介していきたいと考えています。テーマを考えて不定期に公開していきます。

参考サイト

  1. SBI証券と楽天証券、国内株式の取引手数料を無料化 - Impress Watch [2023-08-31]
  2. bitWalk's: CHUWI GemiBook Pro を買いました [2022-06-24]
  3. bitWalk's: 【備忘録】マーケットスピード II の文字化け [2023-11-09]
  4. Amazon.co.jp: Microsoft Excel 2024(最新 永続版)|オンラインコード版|Windows11、10/mac対応|PC2台 : PCソフト
  5. bitWalk's: GMKtec NucBox G2 Plus [2025-02-16]
  6. bitWalk's: Remmina を使ってみる [2022-06-05]
  7. xlwings Documentation
  8. 私の株日記: 自動売買への道

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2025-05-20

Matplotlib と QChart

Matplotlib は、Python と NumPy のためのプロットライブラリです。Tkinter、wxPython、Qt、GTK のような汎用 GUI ツールキットを使ったアプリケーションにプロットを埋め込むためのオブジェクト指向 API を提供しています。

Wikipedia より引用、翻訳

最近は、何かにつけて Google Gemini(以下、単に Gemini と呼びます)に相談することが多くなり、Python などのコーディングについても相談しています。便利になったものです。

リアルタイムでデータを取得してトレンドチャートにするニーズに対して、PySide6 の QChart で実装しようとして Gemini にあれこれ相談しています。

Matplotlib についても同じようなリアルタイムなトレンドチャートができるか Gemini に聞いてみたところ、あっさりサンプルを示してくれました。確認したところ、厳密にはデータ追加の度に再描画をしているとのことですが、それでもこのやり方を探していたんだと(Matplotlib でリアルタイムにデータ点を追加することに苦戦していただけに)いままでの自分の調査力の拙さにがっかりしてしまいました。

PySide6 に埋め込んだ Matplotlib によるリアルタイムなトレンドチャート (by Google Gemini)

Gemini が出してくれたコードは、本ブログ記事の下の方 qt_matplotlib_rt.py に示しました。

Matplotlib でもできるのであれば、現在 PySide6 の QChart で実装しようとしているトレンドチャートを Matplotlib でやり直そうか…。結構な量のデータをリアルタイムで扱うことから、リソース消費やパフォーマンスを追求する必要があったので、Gemini に頼んで比較してもらいました。

以下が Gemini が出力してくれた「まとめ」の表に色など少し修飾を加えたものです。

PySide6 QChart と 埋め込んだ Matplotlib の比較 (by Google Gemini)
特徴 PySide6 QChart 埋め込んだ Matplotlib
処理速度 高速 (リアルタイムデータ更新に最適化) 比較的低速 (再描画のオーバーヘッド)
リソース効率 有利 (軽量、メモリ使用量少) 不利 (多機能、メモリ使用量多)
リアルタイム性 高い 比較的低い
汎用性 グラフの種類は Matplotlib より限定的 非常に高い (多様なグラフに対応)
カスタマイズ性 ある程度可能 非常に高い (細部までカスタマイズ可能)
統合性 Qt アプリケーションとの親和性が高い 外部ライブラリの埋め込み

Jupyter Lab 上でのチャートは Matplotlib が便利で、多少リソースを食うからと言っても変える気はありませんが、GUI アプリの特定用途向けのチャートでは GUI ライブラリの機能(この場合は QChart)を使った方が良さそうです。

便利なツールは躊躇せずにどんどん試してみるべきですが、Gemini に限らず、生成 AI は便利すぎて、依存度が高くなってしまっています。😅

qt_matplotlib_rt.py (by Google Gemini)

参考サイト

  1. Google Gemini

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2025-05-15

Red Hat Enterprise Linux 10 のリリース

2025-05-15 公開 / 2025-05-16 更新

Red Hat Enterprise Linux, RHEL は、Red Hat 社が開発しているエンタープライズ市場向けの Linux ディストリビューションです。最近の RHEL のライフサイクルは 10 年で、延長が必要であれば追加サブスクリプション (Extended Lifecycle Support Add-On) も提供されています。

Red Hat Enterprise Linux 10 のデスクトップ画面(Dark スタイル)

参考サイト [1] によると、Red Hat Enterprise Linux 10 が GA(General Availability, 一般公開) になり、

から ISO イメージをダウンロードできるようになったということなので、早速アクセスしてみました。

まだ正式リリース前なのでしょうか、現在 (5/15) のところ、x86_64 のみ公開されているようです。

なお、Red Hat Customer Portal にアクセスする Red Hat account が必要になります(無料で作成できます)。

ダウンロードできるイメージは下記の通りです (v. 10.0 for x86_64) 。

  • Red Hat Enterprise Linux 10.0 Boot ISO
  • Red Hat Enterprise Linux 10.0 Binary DVD
  • Red Hat Enterprise Linux 10.0 KVM Guest Image
  • Red Hat Enterprise Linux 10.0 WSL2 Image
  • Red Hat Enterprise Linux 10.0 Real Time Binary DVD
  • virtio-win 1.9.45 ISO
    • KVM 準仮想化 (virtio) ドライバー

RHEL10 では、x86_64 向けは x86_64-v3 マイクロアーキテクチャを前提としています。Intel のプロセッサであれば Haswell 世代以降の CPU が条件を満たしているそうです。

仮想環境にインストール

上記 ISO イメージのうち Red Hat Enterprise Linux 10.0 Boot ISO (rhel-10.0-x86_64-boot.iso) をダウンロードして、Fedora Linux 42 (Workstation Edition) の GNOME Boxes 上にインストールしてみました。

なお、自分は Red Hat Developer subscription で Red Hat の製品を利用しています。

インストーラは従来通り

インストーラはひょっとすると Anaconda の新しい Web UI が採用されているかもしれないと期待したのですが、Fedora Linux 42 でようやく採用されたばかりなので、RHEL ではさすがに従来通りの Anaconda の UI でした。そもそも RHEL10 ベータ版では従来の Anaconda でしたので、変わるはずもないのですが…。

Red Hat Enterprise Linux 10 のインストール (1)

インストールの詳細は省略します。今回は Firefox もインストールされることを期待して「ワークステーション」でインストールしました。

Red Hat Enterprise Linux 10 のインストール (2)
Red Hat Enterprise Linux 10 のインストール (3)

インストール後、再起動して初めてログインしたときのデスクトップ画面です。

Red Hat Enterprise Linux 10 のデスクトップ画面 (1)
Red Hat Enterprise Linux 10 のデスクトップ画面 (2)

なお、本ブログ記事は、情報を整理して断続的に更新します。

参考サイト

  1. Red Hat Enterprise Linux 10 Reaches GA - Phoronix [2025-05-14]
  2. Red Hat Enterprise Linux 10 starts trickling quietly out • The Register [2025-05-14]
  3. Red Hat Has Unofficially Released RHEL 10 - FOSS Force [2025-05-14]
  4. Already available? RHEL 10 can be downloaded before the announcement | heise online [2025-05-14]
  5. RHEL 10 同梱版主要 OSS のバージョンまとめ | SIOS Tech. Lab [2025-05-14]
  6. Red Hat Summit 2025 Homepage

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2025-04-20

モッチーポップ フォント

今はフリーあるいはオープンソースのフォントが利用できる時代です。いろいろなフォントを紹介しているサイトはありますが、気に入ったデザインのフォントを自分なりのやり方で紹介しています。

今回紹介するフォントは「モッチーポップ」です。

フォント名 モッチーポップ
収録文字
  • 基本 ASCII + Latin-1 文字
  • ひらがな、カタカナ、全角英数、全角記号、縦書き用文字、濁点仮名
  • 漢字のみ SILライセンス の源ノ角ゴシックのものを収録
配布ライセンス SIL Open Font License 1.1
配布サイト (Github)

モッチーポップ フォント (MochiyPopOne-Regular.ttf) の利用例を下記に示しました。

MochiyPopOne-Regular.ttf の利用例

使用したプログラム

スクリーンショット用に使用したプログラムは、本ブログの過去記事 [1] で紹介しています。

参考・関連サイト

  1. bitWalk's: 「ポプらむ☆キウイ」フォント [2024-08-27]
  2. bitWalk's: 「廻想体 ネクスト ユーピー B」フォント [2024-08-29]
  3. bitWalk's: 「源暎ぽっぷる」フォント [2024-09-02]
  4. bitWalk's: 「コーポレート・ロゴ(ラウンド)」フォント [2024-09-08]
  5. bitWalk's: 「ニコ角V2」フォント [2024-09-16]
  6. bitWalk's: Train One フォント [2024-09-28]
  7. bitWalk's: たぬき油性マジック フォント [2025-01-10]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2025-03-25

【備忘録】Pandas で ODS ファイルを読み込む

Pandas は、プログラミング言語 Python において、データ解析を支援する機能を提供するライブラリです。特に、数表および時系列データを操作するためのデータ構造と演算を提供します。Pandas は BSD ライセンスのもとで提供されています。Pandas の 開発により、R 言語における DataFrame が扱える「ベクトル処理」の操作性と同等な機能が導入されました。

Wikipedia より引用、編集

Pandas で Excel ファイルをデータフレームに読み込むには pandas.read_excel() 関数を使いますが [1]、名前の通り Excel ファイルを読み込むためだけの関数だと思い込んでいました。

自分のメイン PC の OS は Linux (Fedora Linux) ですので、普段使いのスプレッドシートは LibreOffice Calc になります。この Calc は Excel ファイルの読み書きができるので、Windows 上で作成した Excel ファイルを Linux 上で読み書きするのには不自由しません。一方、Excel ファイルで Windows とのやりとりを考慮しなくとも良い場合には、Calc デフォルトの ODS 形式(OpenDocument Spreadsheet, 拡張子 .ods)で保存しています。)

この ODS 形式のファイルを Pandas で読み込む方法を調べたところ、Excel の時と同じ pandas.read_excel() 関数にたどり着きました。Pandas で Excel ファイルを扱うために openpyxlxlrd という Excel ファイルを読み書きするパッケージをあらかじめインストールしておく必要があるのと同じように、ODS 形式のファイルを読み込むときには、あらかじめ odfpy [2] というパッケージをインストールしておけば良いことが判りました

判りました」と書いたのは、pandas.read_excel() 関数のマニュアル [3] のパラメータ engine の説明に、

If path_or_buffer is an OpenDocument format (.odf, .ods, .odt), then odf will be used.

とあったので、早速 pip install odfodf パッケージをインストールしたのですが、pandas.read_excel() 関数ではエラーが出て ODF ファイルを読み込めなかったからです。

上記マニュアルページの odf の文字列部分にリンクが張ってあったのでクリックしたところ PyPi の odfpy のページが開きました。ここでインストールするパッケージを間違えたことに気づいたので、odf をアンインストールして、odfpy をインストール。そして ODF 形式のファイルを読み込めることを確認出来ました。

ちょっとハマってしまった間違いだったので備忘録にしました。

参考サイト

  1. pandasでExcelファイル(xlsx, xls)の読み込み(read_excel) | note.nkmk.me
  2. odfpy · PyPI
  3. pandas.read_excel — pandas documentation

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加

2025-03-13

【備忘録】Jupyter Lab で上位階層のライブラリをインポート

Python で GUI アプリを作るとき、自分の場合、プロジェクトのルートにメイン・プログラム app.py などを置き、アプリの処理は、機能別に名前を付けたサブディレクトリ内の Python ファイルに用意して、メイン・プログラムからインポートして利用する、といった構成にしています。IDE はもっぱら PyCharm Community 版を使っています。

GUI のレイアウトは、その都度プログラムを起動して確認する、という効率の悪いやり方で良しとしていますが、GUI とは関係が無い関数の機能をテストする際には、Jupyter Lab で対象の関数をインポートして確認しています。

Jupyter Lab の .ipynb ファイルをメイン・プログラムと同じルートに置けば、メイン・プログラムと同じようにインポートができて都合が良いのですが、ルートに .ipynb ファイルがうじゃうじゃ増えてしまって煩わしいです。そこで、jupyter というディレクトリを作って .ipynb ファイルをまとめて置くようにしています。

そうすると、対象の関数をインポートするために一手間かける必要があります。いろいろ試して、結局、なんてことはないやりかたに落ち着きましたが、もっと良いやり方が見つかるかもしれないので備忘録にしました。

下記の OS 環境で動作確認をしています。

Fedora Linux 41 Workstation x86_64
Python 3.13.2
PyCharm Community Edition 2024.3.4
jupyterlab 4.3.5

説明用に下記のプロジェクトを使います。

メイン・プログラムが app.py、テストする関数が funcs/myfunc.py 内に記載されている myfunc01、この関数を Jupyter Lab を起動して jupyter/myfunc.py でテストするというケースです。以下は、例示用に用意した PyCharm のプロジェクトです。

 

funcs/myfunc.py 内に記載されている myfunc01True を返すだけの関数です。

funcs/myfunc.py
def myfunc01() -> bool:
    return True

Jupyter Lab 上でのテスト

Jupyter Lab を起動してテスト用に使う jupyter/myfunc01_test.ipynb は、テスト対象の関数 myfunc01 をインポートする前に、以下のように一つ上のパスをシステムパスに追加します。

jupyter/myfunc01_test.ipynb
import sys
path_up = '..'
if not path_up in sys.path:
    sys.path.append(path_up)

myfunc01 を実行すると確かに True が返ってきます。

from funcs.myfunc import myfunc01

myfunc01()
True

念のため、システムのパスを確認しました。

sys.path
['/usr/lib64/python313.zip',
 '/usr/lib64/python3.13',
 '/usr/lib64/python3.13/lib-dynload',
 '',
 '/home/bitwalk/PycharmProjects/PythonProject/.venv/lib64/python3.13/site-packages',
 '/home/bitwalk/PycharmProjects/PythonProject/.venv/lib/python3.13/site-packages',
 '..']

結局 .. をシステムパスに追加するだけで用が足りてしまいました。Jupyter Lab 上で何回も実行してしまう可能性がありますので、一応、システムパスに .. が含まれているか確認してはいますが、なんだこれだけか…記事にするほどの内容でなかったかもしれません。

もともと Jupyter Lab では __file__ が定義されていない、ということから始まった調査だったのですが、記事公開直前に迷走してあれこれ調べ直している中で、参考サイト [3] で、__file__'__file__'"__file__" の違いを知りました。結局どれも使わなかったのですが…。

Python について、ちょっとしたことでも知らないことがまだまだありそうです。😅

もっと良さげな方法が見つかれば、その都度、備忘録にします。

参考サイト

  1. Jupyter NoteBookとPythonで上位階層のimportをする方法 - nyatla@hatena blog [2019-04-25]
  2. Pythonの相対インポートで上位ディレクトリ・サブディレクトリを指定 | note.nkmk.me
  3. 絶対パスの取得(まとめなおし) #Python - Qiita [2018-09-08]

 

ブログランキング・にほんブログ村へ bitWalk's - にほんブログ村 にほんブログ村 IT技術ブログ オープンソースへ
にほんブログ村

オープンソース - ブログ村ハッシュタグ
#オープンソース



このエントリーをはてなブックマークに追加