自動株式売買プログラム開発を思い立った話。

目次。

 

 

 

巷では(シストレの話)。

プログラムを使って株式を売買することを「シストレ」というらしい。シストレは、「システムトレード」の略。シストレで検索するとFX(通貨を売買して利益を得る)のシストレ情報ばっかり出てくるので、「シストレ 株」なんかで検索すれば、株に関するシストレの情報がたくさん得られる。シストレ用のソフト(「イザナミ」なんかが有名)もたくさん売られていて、どれかを購入してパソコンにインストールすれば、そこのあなたもシストレができる。

シストレ用のソフトは、事前に登録された売買ルールに従って、ユーザーに株の買い時、売り時を教えてくれるという優れもの。例えば、「前日より5%安くなった株は買い。持っている株が前日より10%高くなれば売り」というルールを登録しておけば、そういう株をソフトが探してきてくれる。自分で売買ルールを考えるのがめんどくさければ、お金を出して人が考えたルールを買ってソフトに導入できるらしい。便利。

 

別にシストレの話がしたいわけじゃないので、ここでシストレは終わり。僕が開発したい「自動株式売買プログラム」は、シストレとはちょっと違う。

 

シストレは、ソフトが教えてくれた情報を元に人間が株式売買をする。一方で、僕がやりたいのは、株式の買い注文、売り注文を含めた完全自動化。

 

シストレの売買ルールは、テクニカル分析に用いられる指標を基にして決められる。僕がやりたいのは、それに加えて、機械学習の知見を取り入れたシステムの開発。

 

 

 

 

きっかけ。

思い立ったのは、高校生の頃。前の記事で書いた通り(下記参照)、そのころお金を稼ぐために色々とプログラムを書いていた。そんな中、こういうことを思いつくのは、自然なことだと思う。

blog.sun-ek2.com

 

高校生の頃に考えていたのは、株じゃなくてFX(通貨を売買するやつ)の自動売買。受験勉強をしながらちょこちょことFXの本を読みつつ、大学に入ったら、「遺伝的アルゴリズム」を使って実装しようと思っていた。下の動画は、遺伝的アルゴリズムの具体例。分かりやすくて面白い動画(高校の頃に出会った動画)なのでぜひ。

www.youtube.com

 

大学生になり、証券口座を開設。けれども、開設したっきり特に何もせず。月日が流れ、気づけば、学部4回生。そうこうしているうちに卒論を書く段階に…。

卒論執筆の合間になんか息抜きが欲しい…。ここでやっと自動売買のプログラム開発を始めた。開発言語は、Java。

けれども、大学院生になり、「研究、講義、研究、講義、、、」な生活でプログラム開発を完全放置。そんな中、ブログを開設したことと、新しいパソコンを買ったことがきっかけとなって自動株式売買プログラムの開発を再び始めた。

 

 

 

 

自動株式売買プログラムを開発するわけ。

事前に理由をいくつか考えておかないと人って何もしないと思うので。(無理やり考えた後付けの理由もあるが)もう一つ、とても重要な理由(プログラム開発というより機械学習を学ぶ理由)があったりするけどここでは割愛。

 

 

プログラミングが好き。

これは究極の理由。苦労して書いたコードが目の前で自分の思い通りに動いたときは、ものすごく感動する。それは、独学でプログラミングを始めた高校生の頃も、今もそう。

 

 

機械学習・量子機械学習に興味がある。そして将来、自分の研究に織り込みたい。

大学院生になって機械学習の講義があったので受講した。これが初めての機械学習。ものすごく面白かった。けれども講義が終わった後、機械学習との接点はなくなり、知識もどんどん抜け落ちていった。

「もう一度、機械学習に触れたい…」思っているだけではダメなので、自動株式売買プログラムを通して、機械学習に触れることにした。

ちなみに量子機械学習は、量子コンピュータ上での機械学習。

www.nature.com

 

(量子)機械学習を自分の研究に織り込みたいというのは、かなり広い意味合いがある。新たな機械学習のアルゴリズムを考案してみたいとも思うし、ニューラルネットワーク自体の振る舞いの解明に貢献してみたいという想いもあったりする。(ディープラーニングをはじめとするニューラルネットワークはなぜ上手くはたらくのか、そしてなぜ上手くはたらかないのかはまだ完全には分かっていないそう)

 

そして「生命とは何か」という問いに(量子)機械学習のあらゆるもの(数理最適化、ベイズ理論といった数学的な枠組みとか、色々なモデルの構造や考え方とか)を織り交ぜて挑みたいとも思う。これは、次の話と絡むのだが。

 

 

理論物理学へ。

理論物理学に対しては、尊敬と畏怖の念を持っている。そして、将来飛び込んでみたい分野である。ただ少し足がすくんでいる。

 

でもやっぱり、理論物理学に挑んでみたい。

 

理論物理学と言っても、複雑怪奇な数式を使っているわけではない。どっちかと言うと、現象を説明する画期的なアイデアをシンプルな数式で記述しているイメージがある。大事なのはアイデア。

(これは僕が今まで見てきた範囲ではそうだったという話。場の量子論とか特にそんな気がする。ディラック博士のγ行列とかまさにそう。この話が一般化できるのかは知らない)

 

理論物理学に飛び込んで、ずっと学部の頃から物理学を専攻してきた人たちと正攻法で戦っても多分勝てない。彼らと違う引き出しが必要である。彼らが持っていない引き出しから、彼らが思いつかないアイデアを出すのである。機械学習がその引き出しになるのではないかと思う。

また、違いとは別に機械学習と理論物理学には現象のモデル化や数学的な枠組みといった両者に必要な共通項があると思う。機械学習を通して、理論物理学に必要な素養の一部が身につくのではないか。。。

 

 

 

 

研究室から完全に独立した研究テーマ。

  • 生物系の実験、特に遺伝子組み換え実験は、認可された実験室でしかできない。バイオハザードマーク(☣)がある実験。「場所的な制約」。
  • 研究費は、学生が容易に取ってこれるものではない。そして国からもらえる研究費は、よく分からない色々な制約があったりする。「金銭的な制約」。
  • 僕が使っている実験系は、かなり特殊。他の研究室で同じようなことはできない。そして、この実験系に詳しい方々もかなり限られる。「研究テーマ特有の制約」。

 

今やっている研究は、自分ではどうすることもできない「制約条件」がある。現時点では、場所的・金銭的・そして研究テーマ特有の制約条件が満たされてるので研究が続けられる。しかしこの制約条件が恒等的に満たされるとは限らない。

  • これら制約条件が破れたらどうするのか?
  • これら制約条件に延々、縛られるのは自分にとっていいことなのか?

 

制約条件が破れた例は、目の前で見た。去年あった大阪北部地震である。幸い僕は、一週間後ぐらいには実験が再開できた。しかし、「何かを測る」研究をしている人たちはそうはいかない。彼らの研究の進捗は、「測定装置の状態」に関する強い制約条件が課されている。地震で測定機器が壊れたことによって(制約条件が破れた)、彼らは進捗が出せなくなっていた。実験装置に強依存した研究は怖いと感じた瞬間。

(他の例は、闇が深いので割愛。僕には直接的な影響はない事例だが、本当に何があるか分からない)

 

研究を続けるにあたって必要な制約条件は突然、そして簡単に破れる。何があるか分からない。自然災害で実験室や実験装置がダメになるかもしれないし、研究費が底をつくかもしれないし、ひょっとすると師事していた先生が急にいなくなるかもしれない。

 

制約条件のない(場所がなくても、お金がなくても、先生がいなくても)研究テーマを研究室でやっているテーマと完全に独立して持っておくことが重要ではないかと考え始めた。

  • 自動株式売買プログラム開発の研究は、家でもできる。そして、なんなら病室でもできる。(1月末~2月頭に入院していた。そして病室でプログラミングをしていた)
  • 電気代、書籍代、通信費を払えるだけのお金があれば、研究は行える。
  • プログラミングに関しては、ずっと独学でやってきたし、良質の情報・コードはネット上に沢山あるので、自分一人で研究できる。

そして、自分で問いを見つけ、仮説を立て、方法を考え、問いを解くという一連の過程を遂行する力を鍛えておきたい。

 

ちなみに最近、2018年に出たニューラルネットワークを使った時系列データ解析の論文を読んだけど、僕が個人で持っている計算リソースで多分できそう。

 

 

 

 

お金。

波乱に満ちた家庭で育ったおかげで、他の子があまり考えないことを小さい頃から考えることが多かった。お金のこともそう。将来、生活していくうえで必要なお金が確保できるか、そんなことで不安がるのは、もう癖のようになってしまっている。お金の心配をする少年は、ついに大学生になった。大学に行くとなるとお金がかかる。必要なお金は、日本学生支援機構から借金した。博士課程が終われば、借金の返済が始まる。ちゃんと返済できるのか、不安である。(学部2回生から民間の奨学金団体からご支援いただけるようになったので状況はかなり楽になったが)

しかし不安、不安と言っているだけでは、何も変わらない。問題があるなら解決しなければいけない。

 

なので僕は、好きなこと(プログラミング、機械学習)を使って問題(お金)に挑む。

問題の解決のみならず将来への糧(理論物理学へ、研究室から完全に独立した研究テーマ)になると思う。

 

そして、きっと楽しい。

 

 

計画。

フレームワークの構築(株価等の情報収集、自動注文)。

証券口座にログインするプログラム(以前Javaで書いたけど、今回Pythonで書き直した)と上場企業(4000社くらい)の数年分の株価のデータを収集するプログラムは入院しているときに書いた。

後は、買い注文とか売り注文を行うプログラム、そして自分が保有している株式・口座残高を取得するといった細かいところを埋めていく。

 

売買ロジックの構築(機械学習)。

機械学習の分野でぶっちぎりで有名な本は「パターン認識と機械学習」。

 

実は、この本の原書”Pattern Recognition and Machine Learning”はMicrosoftのwebページで無料公開されている。

 

「将来、機械学習を自分の研究に織り込みたい」と言う以上、ネットから適当にソースコード(プログラム)を漁ってきて、コピペするだけではもちろんダメで、機械学習の原理を知らなければならない。「しなければならない」と言ったが、もっとちゃんと言うと「機械学習の原理を知らなければいけないし、僕自身、機械学習の原理を詳しく知りたい(大学院で講義を取っていたので、一通りは知っているがもっと深めたい)」

 

と言うことで、”Pattern Recognition and Machine Learning”を少しずつ読み始めた。少しずつ読んで、少しずつ知識を得て、その知識使って少しずつプログラムを書いて、、、というサイクルを回そうと思う。逐次、得た知識をコードに実装すれば、知識が定着するし、プログラミング技術も向上するし、一石二鳥かなと。(ついでに言うと、英語力も)

 

今、一章をほぼ読み終えたところ。一章は、ベイズ理論や情報理論など機械学習の根幹となる話。ページ数で言うと60ページぐらい。でも、この本は全部で700ページ以上あるのでまだまだ。

(ちなみに最近、「英辞郎 第十版」を買った。この辞書を使いながら”Pattern Recognition and Machine Learning”を読んでいる。英辞郎のポップアップ機能はすごい。意味の分からん単語の意味が一秒ぐらいで調べられる。パソコンとか、タブレットで英語の文章読む人には、ものすごくおすすめ)

 

読み終えたら、機械学習の論文を漁ったり、自分で新たなアルゴリズムを考案したりする予定。

 

どうせなら、論文になるようなアルゴリズムを開発したいな。

 

ブログランキング・にほんブログ村へ
にほんブログ村