プログラミング言語 | ウツと株とプログラミング

ウツと株とプログラミング

うつ病で引退して、株トレーダーに。銘柄選定プログラムから始めて、現在は自動売買(アルゴリズム取引)システムを開発中(*'▽')/

少しウツが悪化しています。


どうにかならないかなぁ、この脳みそ。


最近は2冊の小説を並行して読むことが増えました。1冊は紙版、図書館から借りたもの。少し前に話題になった本を借りている。


もう1冊はKindle版、寝る時にOASIS(Kindle Paper White)で読んでいる。スマホなどのブルーライトが無くて、眠りに優しい。最近は豆球すら消して部屋を真っ暗にしているんだけど、バックライト付きのPaper Whiteの画面は助かる。こいつはキャンプの夜にも大活躍。


以前は直木賞や芥川賞を気にかけていたんだけど、本屋大賞の方がハズレが少ない。図書館にも蔵書があるんだけど、新本は予約が数百件入っていて、読めるまでに半年以上かかりそう。

僕はパソコンも6台持ってるんだけど、タブレットも5台ある。タブレットは主に読書目的で使い分けているんだけど、新聞のような大紙面をストレス無く読めるものがないので、今日iPad(10.9インチ)を購入した。

最近は電子書籍を読む機会も増えたんだけど、やっぱり紙版の方が僕は好きだ。特に技術書は紙版の方が圧倒的に使い易い。資料として文献内を行ったり来たりする際の感覚的な使い勝手はやはり紙版だ。(ドトールで作業することの多い僕は、持ち歩ける電子版も併せて持っていることも多い)

電子版の強みは小説のような文字オンリーのものだね。ところが最近は小説以外の電子書籍が増えてきて、「レイアウト固定」書籍が多い。

電子版のストレスは画面解像度に負う部分が大きい。iPadはRetinaという高解像度画面なので、Retina大画面ならもっと新聞が読みやすいと思う。


Fire HD10も既に持っていて、値段も安く画面もマズマズなんだけど、新聞を紙面モードで読むには少し厳しい。


断捨離しようとしているのに、機械小物と書籍が増えてる。まぁ、ええわ。「やりたかったこと」を死ぬ前に全部やるのだ。今はプログラミング。

人気のPythonの勉強を今してるんだけど、なんだかモヤモヤしています。僕はアセンブリ言語系の古い人間なので、「こんな(アセンブリならば)簡単なことを、Pythonは何をモタモタしてるんだろう?」とか「メモリの無駄遣いやな(´・ω・`)」とか感じちゃう。

僕がアセンブリを使っていた時代はC言語さえ「素人向けだな」と馬鹿にしてました。そのCが今では最速系だもんね。

僕はいま株投機用の銘柄選定プログラムを作っているんだけど、やってることは
  • Webデータのスクレイピング/クローリング
  • 取り込みデータの処理
  • 処理済みデータからExcelファイルの作成
  • Excelファイルの整形
なんだよね。その中で「取り込みデータの処理」という部分は
  • データの正規化(データ置換)
  • データ検索
  • データ置換
  • 判定/条件分岐
  • 反復/繰り返し
  • データ書込み
程度で、しかもデータの内容はテキストか数値なんですよ。Pythonで処理する意味があるんだろうか?(まぁ、VBAよりかは遥かにマシなんだけと)

そんなモヤモヤと闘っています(^_^;)。今後グラフのような画像化やAI化(機械学習)、統計/科学計算、あるいはAPIコミュニケーションをするようになればPythonの有難みが解るんだろうけど。

もうね、現在の最終形であるExcelファイルを見ていると、「アセンブリ言語ならば16bitマシンでお釣りが来るぞ!(しかも多分3分くらいで完了する)」と思いながら、一部の処理(VBA)では64bitマシンが16スレッドを使って(CPU占有率70%、メモリ使用率50%)30分くらいかけて計算してる。もうVBAはマクロ程度にしか使えないな。(Microsoft Office製品がインストールされているPCにはVBAが標準装備されていて、職場や友人のPCで処理する際には環境設定を変更しなくてもそのまま使えるので、知っていて損はない)

データ置換でPythonはチマチマと変数を用意しないといけない。これは僕のPython練度が低いせいなのかしれないけど、「アセンブリ言語ならば処理用のメモリ数バイト×3個とレジスタ3個あれば処理できるんじゃないか?」と思い始めています。
変数aと変数bを入れ替える処理を
Pythonでやれば
  • c ← a(変数aを読み込んで変数cに書込む)
  • a ← b(変数bを読み込んで変数aに書込む)
  • b ← c(変数cを読み込んで変数bに書込む)
となるみたい。いちいちコピー処理して、しかも変数cの領域(と番地レジスタ)を無駄遣いしている。しかもこの変数cの領域(メモリ)の解放の仕方が見当たらない。僕が初心者だからか?

アセンブリ言語ならば
  • a ← a xor b(変数aとbのxorをaに代入)
  • b ← a xor b(変数aとbのxorをbに代入)
  • a ← a xor b(変数aとbのxorをaに代入)
のステップで良い。わざわざ変数cを用意する必要はない。xor(排他的論理和)はCPUなどのハードウェアに必ず組み込まれている基本的かつ必須の論理回路なので、ほとんど光速に近いくらい超高速だ(←ちょっと言い過ぎだけど、半導体のハードウェアの能力を最大活用できる)。しかもbit単位で処理が可能なので、ブーリーン型の情報(Ttue 1/False 0)ならば64項目の判定情報を(64bitマシンならば)一発で把握/処理出来ます。
  • 単純移動平均:買いシグナル(ゴールデンクロス)
  • 指数移動平均:売りシグナル(デッドクロス)
  • 一目均衡表で雲を上抜け:買いシグナル
  • 一目均衡表で転換線が上抜け:買いシグナル
  • ……
みたいな項目を一気に64個把握できるのよね。その時のレジスタも1個で済む(起点アドレスだけ)。bit操作だから、起点アドレスからの相対アドレスに使うレジスタは(理論的には)不要だ。処理は高速なんてレベルじゃなくて瞬速ですよ。

まぁ、ええわ。もう暫くPythonの勉強します。今のプログラム(一部はVBA処理)を完全Python化してから、その後を考えます。

  • Pythonならば機械学習などの既存ライブラリやモジュールが使えるし、参考資料も豊富。最近はChatGPT AIとの連動方法なども紹介されていて、手軽。ラズベリーパイにもiPad(MacOS)やスマホ(Android)への移植も簡単。スクリプト言語なのでデバッグしやすい。
  • C言語ならば高速でメモリ管理もできる。
  • アセンブリ言語ならばマシン毎に最適最速な動きができる。