目次。
- 目次。
- はじめに。
- 「株式自動売買」と「システムトレード(シストレ)」の違いをもう一度。
- 株式自動売買プログラムを自作するメリット。
- 株式自動売買プログラムを自作するデメリット。
- 信用取引口座の開設。
- プログラム関連の準備。
- 証券会社にお勤めの方へ:株式売買注文発注のためのAPIを作ってください。
- 売買ルール。
- さいごに:なんかよう分からんけど、上手くいかない…。
この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。
【宣伝】ギターも歌も下手だけど、弾き語りをやっているので、よければ聴いてください。
はじめに。
この文章は、1万字以上あるので、ご注意を。
株式自動売買プログラム開発関連の文章は、以下のカテゴリーにまとめているので、興味のある方はどうぞ。
7月に『株式自動売買とディープラーニング(ニューラルネットワーク)の話。』で、「株式自動売買プログラム関連の文章のアクセス数がどんどん上昇している」と書いた。
そこから2か月、アクセス数は、さらに上昇している。ありがたや。
最初に書いた『自動株式売買プログラム開発を思い立った話。』という文章が一番読まれていて、アクセス数はこんな感じ。
2019年2月にこの文章を書いて、それから1年以上、低空飛行していたが、なぜか2020年5月から急にアクセス数が上昇し始めた。このデータは、9月までのもの。10月は、今のままいけば、おそらく9月以上のアクセス数になると思う。
そして最近、よく読まれたいるのは、『【株式自動売買×ディープラーニング】LSTMで日経平均株価予測を行うプログラムを書いてみた話。』。2か月前に書いた文章であるが、もう間もなく、株式自動売買プログラム関連の文章の中で歴代2位のアクセス数になる。
「株式自動売買」と「システムトレード(シストレ)」の違いをもう一度。
『自動株式売買プログラム開発を思い立った話。』で最初に株式自動売買とシストレの違いを書いたが、ここでもう一度、おさらいする。
ここで言う「違い」は、一般に広く知られている違いではない。あくまで、僕の文章内では、「自動売買」と「シストレ」を別のものとして扱っているというだけのことである。ブログ村で「自動売買」と調べてみると、結構、シストレ(イザナミなど)関連のブログが出てくる。
つまり、一般的には「株式自動売買=シストレ」。
システムトレード(システム)というのは、あらかじめ決めておいた売買ルールに従って、専用のソフト(イザナミなど)が買い時・売り時の銘柄を教えてくれるというもの。ちなみにシステムトレードは、和製英語。
売買ルールは自分で考え、過去の株価データを使い、その売買ルールの有効性を検証する。検証の結果、よさそうであれば、それを専用のソフトに登録し、そうでなければ、また考え直すといった感じである。
例えば、「株価が前日より5%下がれば買い、5%上がれば売り」という売買ルールを登録すれば、専用ソフトが株価を監視し、条件に合う銘柄を教えてくれる。
しかし、イザナミといったシストレソフトは、買い時・売り時の銘柄は教えてくれるが、代わりにその銘柄を売買してくれない。シストレソフトに出てくる売買シグナルをもとに僕ら、人間が証券会社のwebサイト、スマホアプリで株式売買の注文を出す。
シストレは、買い時・売り時の銘柄を「自動」で探し出してくれるが、売買注文は「手動」。
…これは、株式「自動」売買?
僕が開発している株式自動売買プログラムは、株式の売買判断も株式の売買注文発注も完全自動化を目指している。
…ここまで文章を書いた後、もう一度、シストレのソフトを調べてみたら、売買注文発注を自動でやってくれるソフトがあった!
株式自動売買プログラムを自作するメリット。
プログラミング技術が身に付く。
言わずもがな。
株式自動売買プログラム開発をしたいのであれば、証券会社のwebサイトへのログイン、株式の売買注文の発注、株価データの取得、データの解析、株価の予測…などなど、プログラミング言語を駆使して、やりたいことをプログラムという形に落とし込まないといけない。
ソースコード(プログラムのコード)の行数は、数千行から数万行に達するであろう。これだけたくさんのコードを試行錯誤して悩みながら書けば、プログラミング技術は、かなり向上すると思う。
(ちなみに僕の株式自動売買プログラムのソースコードの行数は、現時点では数千行レベル)
「オブジェクト指向」…これは、プログラミングの勉強の鬼門の一つ。
クラス?カプセル化?継承?ポリモーフィズム?…なんだそれ?メリットが全然分からん。そんなめんどくさいことをせず、関数を羅列したコードを書けばいいのでは?
…なんてプログラミングの勉強を始めた人は思うだろう。メリットがさっぱり分からないので、「オブジェクト指向」が腑に落ちない。
それはある意味、正しくて、プログラミングの入門書に書かれてあるような数十行のプログラムで「オブジェクト指向」を取り入れるメリットは、あまりない。逆にコードがややこしくなるので、デメリットの方が大きいと思う。
しかし、数千行、数万行のプログラムでは、話が違ってくる。ソースコードが膨大、かつ複雑になっていくほど、「オブジェクト指向」のありがたみを肌で実感できる。
株式自動売買プログラム開発を進めるに従って、鬼門「オブジェクト指向」が腑に落ちるようになると思う。
幅広い知識(ネットワーク関連・機械学習など)が身に付く。
証券会社のサーバーに株式の売買注文を発注するプログラムを組むのであれば、HTTP通信の知識がないといけない。また、株式の売買注文を発注しているときに行われているHTTP通信で送られる各種パラメータがどんな意味を持っているか推測するためには、htmlの知識が必要である。さらに、webサーバーのセッション管理の知識も持っていなければ、きちんと通信することができない。
株価を予測するためには、ネットワーク関連とは異なった「機械学習」に関する知識が要求される。ディープラーニングなどの技術を使って、株価を予測したいのであれば、言うまでもなく、それらの知識がなければならない。
(「ディープラーニング」といった名前で世間に浸透している「ニューラルネットワーク」は、今、急速に発展している機械学習の一分野。その他にも機械学習と言われている分野には、サポートベクターマシン(SVM)、強化学習などが含まれている。シストレソフトの株価の買い時・売り時を判断する売買ロジックも一種の機械学習である)
また、学術論文から最新の研究成果を取り入れたいのであれば、微分積分学・線形代数学などの知識が必要である。また、学術論文は、基本的に英語で書かれているので、英語力も必要。
株式自動売買プログラム開発には、これら幅広い知識が必要。逆に言えば、株式自動売買プログラム開発を行えば、これら知識が実践的に身に付く。
学術論文から最新の研究成果を取り入れることができる。
今、急速に発展している機械学習の分野は、俗にディープラーニングと言われているニューラルネットワークである。しかしながら、この技術を活用した一般向けのシストレソフトは、あまり見たことがない。
一方で、ディープラーニングを使った株式売買の研究結果を発表している学術論文は、山のようにある。
https://scholar.google.com/scholar?hl=ja&as_sdt=0%2C5&q=stock+neural+network&btnG=&oq=stock
「ディープラーニングを使ったら株価予測が上手くいったよ」っていう結果が大量に転がっているのである。
しかし、残念なことに一般の人が最新技術を手軽に使えるようになるまでには、長い時間がかかる。ディープラーニングという技術は、2010年くらいから世間の脚光を浴びるようになったが、そこから10年経っても、一般の人が手軽にディープラーニングで株価を予測することができるシストレソフトは、あまり出回っていない。
そして、そういったシストレソフトが出回るようになって、現在の最新技術が誰でも使えるようになったころには、もうその技術は最新のものではなくなる。
一方で、株式自動売買プログラムを自作しているのであれば、最新の研究成果が載っている論文を読んで、すぐさま研究の成果を自分のプログラムに組み込むことができる。
つまり、自作をしていると最新技術がすぐに使えるのである。
プログラムを自分好みに思いのまま改変できる。
製品化されているシストレソフトを自由にカスタマイズすることは、非常に難しい。
「あのディープラーニングを使って株価を予測する論文、ものすごくよかったから今使っているシストレソフトに導入してみたい!」…なんて言っても無理なのである。
一方、先ほどの話と重なるが、株式自動売買プログラムを自作しているのであれば、「あの論文よかったからプログラムに取り入れたい!」って思い立った瞬間に、取り入れることができる。
その他にも「文字の大きさを変えたい」とか、「〇〇のデータが欲しい」とか、「ここの処理をもっと楽にしたい」とかとか…製品化されているシストレソフトを動かしている際に出てくる不満を運営側が改善するまでには時間がかかるが、自作したプログラムであれば、すぐに解決することができる。
楽しい。
これは人によりけりだと思うが。
僕は、プログラミングをしているときの感覚と小学校の頃にプラモデルを組んでいる時の感覚は似ていると思っている。
子どもがレゴブロックとかで家を作って遊んでいるように、僕はプログラミング言語を使って、株式自動売買プログラムを作って遊んでいるのである。
もちろん、「遊ぶ」というのは、「ふざけている」という意味ではない。
子どもが真剣になって、レゴブロックで家を作っているように、僕も真剣になって、プログラミング言語で株式自動売買プログラムを作っている。
株式自動売買プログラムを自作するデメリット。
膨大な時間がかかる。
全て一から作り上げないといけないので、圧倒的に時間がかかる。製品化されているシストレソフト使うのであれば、売買ロジックのことだけ考えればいいが、自作の場合、そうはいかない。
シストレソフトを使えば、ボタン一つで日経平均株価のチャートが画面に表示されるが、自作の場合、まずは日経平均株価のチャートを画面に表示するプログラムを書かなければならない。
シストレソフトを使えば、データの読み込みや書き出しは、ボダン一つで勝手にやってくれるが、自作の場合、それらの処理を行うコードを全部、自分で書かなければならない。
幅広い知識(ネットワーク関連・機械学習・プログラミングなど)が必要。
株式自動売買グラムを自作すれば、幅広い知識が身に付くと、メリットのところで書いた。
これは、本で読んだ知識を使って、株式自動売買プログラム開発という「実践」をすれば、それら知識が頭に定着するという意味である。数学の本を読んで、問題を解くという「実践」をすれば、よりその内容が頭に残るのと同じである。
逆に言うと、線形代数学の本を一度も読んだことがない人が線形代数学の問題を解くことができないように、機械学習の本を一度も読んだことがない人は、機械学習を使ったプログラムを組むことができない。
あくまで「知識」を持っていることが前提で、その「知識」が「実践」において、より頭に刻み込まれるというだけのことである。
株式自動売買プログラムの自作をするにあたって、前提となる「知識」は、ネットワーク関連、機械学習、プログラミングなどなど多岐にわたる。また、学術論文から得られる知見をプログラムに取り入れるのであれば、数学と英語が必要である。
株式自動売買プログラム開発は、誰でも簡単にできるものではないと思う。しかし、誰でもできるようなことをやっていれば、平凡な結果しか得られないような気がする。
「誰でも簡単にできるものではない」からこそ価値があって、すごい結果が得られる可能性を秘めていて、面白くて、ワクワクすると思うので、株式自動売買プログラムを自作してみてはどうでしょうか?
信用取引口座の開設。
株式自動売買プログラムを開発する傍ら、信用取引口座を開設した。
信用取引とは?
株式の取引には、「現物取引」と「信用取引」の2種類がある。
自分のお金で株式を買ったり、自分のお金で買った株式を売ったりするのが「現物取引」。
証券会社からお金を借りて、借りたお金で株式を買ったり、証券会社から株式を借りて、借りた株式を売ったりするのが「信用取引」。証券会社からお金を借りて株式を買った場合(買建)、期限内にその株式を売って(売埋)、お金を証券会社に返さないといけない。また、証券会社から株式を買って、それを売った場合(売建)、期限内にその株式を買い戻して(買埋)、証券会社に返さないといけない。
現物取引をしたいのであれば、証券会社に口座を開く必要がある。そして、信用取引をしたいのであれば、証券会社に現物取引の口座を開いた後、新たに信用取引口座を開かなければならない。
信用取引は、現物取引に比べて、リスクが大きいので、信用取引口座を開くためには、証券会社が設けている条件をクリアし、審査に通らなければならない。条件は、各証券会社で異なるが、おおむね現物取引の経験が一定以上あることと、資産が〇〇万円以上あることが見られると思う。
今まで僕は、現物取引を行っていたが、今後は、信用取引メインで株式売買をしようと思う。どれもありきたりなものであるが、理由は、3つ。
空売り(売建)ができる。
現物取引では、株式を買って、買った株式を売ることしかできない。つまり「買い」→「売り」しかできない。
一方、信用取引では、証券会社から借りた株式を売って(空売り)、売った株式を買い戻すことができる。つまり「売り」→「買い」ができる。
「買い」→「売り」…株式を買って、売るのであれば、買った時点よりも株価が上がれば上がるほど利益が出る。
「売り」→「買い」…借りた株式を売って、買い戻すのであれば、売った時点よりも株価が下がれば下がるほど利益が出る。
(証券会社から借りた株式を1株100円で売って、1株80円で安く買い戻し、証券会社に返済すれば、20円×借りた株数の利益が出る。手数料とか貸株料は考慮していない)
僕が開発しているディープラーニングを使った株式自動売買プログラムは、翌日以降、株価が上がる銘柄を予測する。そして、もちろん株価が下がる銘柄も予測する。
現物取引だと、「買い」→「売り」しかできないので、「株価が下がる銘柄の情報」には利用価値がほぼない。しかし、信用取引だと株式を証券会社から借りて、空売りできるので「株価が下がる銘柄の情報」を有効に使うことができる。
レバレッジを効かせることができる。
レバレッジは、株よりもFXでなじみのある言葉だと思う。FXのレバレッジは、この文章を書いている時点で、最大25倍。レバレッジが最大25倍ということは、100万円の資金で最大2500万円分の取引ができるということである。
株式売買の信用取引にもレバレッジというものがあって、こちらは最大3.3倍。30万円の資金を委託保証金(いわゆる担保)として証券会社に預けることで、最大100万円分の株式を買うことができる。
現物取引では、レバレッジをかけることができないが、信用取引ではそれができる。レバレッジを3.3倍かけておけば、株式売買の利益がレバレッジをかけていないときに比べて3.3倍になる。(手数料、貸株料、金利等は考慮していない)
しかし、レバレッジを最大までかけている状態で損失を被ってしまうと、それも3.3倍に増幅される。現物取引の場合、30万円の資金が0円になることはあっても、それ以上にマイナスになることはない。一方で、信用取引の場合、30万円の資金で100万円分の株式を買って、それが0円になれば、資金は0円ではなく、-70万円となってしまう(証券会社に70万円借金)。
こういった側面があるので、「信用取引」は危険であると言われるときが時々ある。ちなみに信用取引が危険という話で「ライブドア株の信用二階建て」などがよく取り上げられる。
(現金でライブドア株を買って(現物取引)、それを現金の代わりに担保(代用有価証券)にして証券会社からお金を借りて、そのお金でライブドア株を買う(信用取引)行為。2006年のライブドア・ショックで、信用二階建てをしていた人が悲惨なことになっていた)
ロング・ショート戦略:暴落リスクを回避することができる。
ロングは、英語でlong。「長い」って意味の他に「買い」という意味がある。Longは、ちょっとポジティブな雰囲気を持つ単語。「株価が上がるはずだ」と強気なので株式を買う。
ショートは、英語でshort。「短い」って意味の他に「売り」という意味がある。shortは、ちょっとネガティブな雰囲気を持つ単語(shortcomingとか)。「株価が下がるかもしれない」と弱気なので株式を売る。
ロング・ショート戦略は、成長が見込まれる・割安な銘柄を買い建てしつつ、成長が見込まれない・割高な銘柄を売り建てする戦略のこと。
(信用取引でお金を借りて株式を買うのが買い建て。信用取引で株式を借りて売るのが売り建て)
買建玉と売建玉の両方を同じくらい保有している状態でリーマンショックとかコロナショックのような株価の大暴落が起きたとしても、買建玉(株価が上がるほど得)の損失分を売建玉(株価が下がるほど得)がカバーしてくれる。
理系の人なら分かると思うが、これは「緩衝液」のようなものである。弱酸(もしくは弱塩基)とその塩を混ぜておくと、外部から塩基(もしくは酸)を加えても少量であれば、あまりpHは変わらない。
買建玉(株価が上がるほど得)と売建玉(株価が下がるほど得)を同じくらい保有していれば、株価が大幅に変動しても損失があまり膨らまない。
プログラム関連の準備。
プログラミングの勉強方法。
そもそもプログラミング技術がなくて、とりあえず何か勉強してみたいっていう人は、僕のプログラミング勉強遍歴をまとめた以下の文章がおすすめ。
ニューラルネットワークの改良。
僕が開発しているプログラムは、LSTM(Long Short-Term memory)を使って株価を予測している。LSTMは、時系列データ予測なんかでよく使われるニューラルネットワーク。
詳しくは、以下の文章を参照のこと。
プログラムを書くにあたって読んだ論文は、以下にまとめている。
上の文章を書いた後は、ひたすらハイパーパラメータをいじくりまわしていた。LSTMのウィンドウサイズ、隠れ層のサイズ、全結合層のサイズなど。
やっていたことが結構、地味で細かく、また僕が独自で考えたことも色々あるので、ここでは詳細に立ち入らない。
株式売買注文発注・訂正・取消、保有建玉・委託保証金維持率確認など、株式売買(信用取引)に必要な処理の自動化。
「証券会社に自動で株式売買注文を発注できなければ、「株式自動売買」とは言えないでしょ!」ってことで、株式売買注文を自動で発注するプログラムを書いた。
実は、株式売買注文を自動で発注するプログラムは既に書いてある。ただし現物取引用。
詳しくは、以下の文章を参照のこと。
大まかに言うと、僕は以下のようなことをやっていた。
- 手動で株式売買注文を証券会社に発注する。必要事項(株数、値段とか)を色々と手動で埋めた後に注文発注のボタンを手動でクリックする。
- 注文発注のボタンをクリックする裏側で僕のパソコンと証券会社のwebサーバーがどういった通信(HTTP通信)を行っているか監視する。
- 僕のパソコンから証券会社へ送られるデータに入っている各種パラメータの意味をwebページのhtmlを元に推定する。
- HTTP通信・html解析を元に注文発注のボタンをクリックする裏側で行われていた僕のパソコンとwebサーバー間の通信を模擬するようなプログラムを書く。
当初、僕は、現物取引しかしていなかった。信用取引というものがあるということは知っていたが、詳しいことは、全く知らなかったのである。そのため、現物取引の売買注文の自動化のみならず、現物取引の売買注文の訂正・取消の自動化、保有株式・現金残高を確認するプログラムも先ほどと同様にHTTP通信・html解析を行った後に作成した。
現物取引に必要な処理を全部自動化し終わったころに信用取引について少しだけ知った。どうやら、「売り」から始めることができるらしい。そこから色々、信用取引について調べていくに従って、現物取引ではなく信用取引メインで株式売買した方がいいのではないかと思うようになった(主に「売り」から始めることができるという利点から)。
しかし全自動化した現物取引に必要な処理は、信用取引には使えない…。
仕方がないので、今まで作り上げてきた現物取引用のプログラムを横に置いて、信用取引に必要な処理を全自動化するプログラムの構築を始めた。
信用取引の自動化は、現物取引の自動化に比べて、ちょっと面倒くさい。現物取引は、「買」と「売」の2種類しかないが、信用取引の場合、「買建」、「売建」、「売埋」、「買埋」の4種類(現引・現渡はやらない)。信用取引には、制度信用と一般信用があり、それぞれ取引できる銘柄、できない銘柄があり、それもちゃんと判別しなければならない。
信用取引の自動化は、ただ面倒くさいだけで過程は同じ。HTTP通信・html解析を行い、僕のパソコンと証券会社間で行われている通信を模擬するプログラムを書けばいいだけ。
そこそこ時間がかかったが、信用取引に必要な処理を全自動化するプログラムを無事に組み終えた。
証券会社にお勤めの方へ:株式売買注文発注のためのAPIを作ってください。
APIは、Application Programming Interfaceの略。APIは、webサービス(株式取引とか)とプログラマをつなぐ窓口のこと。APIがあると簡単にwebサービスを利用したプログラムを構築することができる。
TwitterのAPIの話を昔したので、よければどうぞ。
ただ、残念なことにほとんどの証券会社で株式取引用のAPIは提供されていない。そのため、「HTTP通信・html解析→証券会社との通信を模擬するプログラムの作成」という面倒くさい過程を経ないといけない。また、そもそもネットワーク関連の知識は、誰もが持っているわけではないので、自動売買を諦める人も出てくるだろう。
「株 api」で調べてみたら「auカブコム証券株式会社」のwebページが一番上に出てきた。2020年8月時点で、REST APIを提供している証券会社は「auカブコム証券株式会社」以外ないらしい。
https://kabu.com/company/pressrelease/20200819_1.html
もし、この文章を読んでいる証券会社にお勤めの方がいらっしゃったら、お願いします。株式取引用のAPIを用意してください。株式取引用のAPI提供は、色々と証券会社側にも利益があります。
顧客の取引機会が増え、売買手数料収益が増える。
特にサラリーマンだと市場が開場している間に株価を確認して売買を行うのは難しい。仕事が始まる前に注文を発注するぐらいのことしかできないのが現状である。注文を発注する機会は、1日1回ぐらいである。
もし株式売買用のAPIが提供されたら、サラリーマンの人であっても日中に株式の売買注文を発注することができる。また、APIが提供されることで、薄利多売といった手動で行うとしんどい作業が楽になる。
「APIが提供されたから日中に取引するプログラムを書こうかな」、「APIが提供されたから手動では難しかった薄利多売戦法で勝負するプログラムを書こうかな」って思う人が増えれば、顧客全体の取引回数は増加する。
取引回数が増加すれば、もちろん取引手数料収益も増える。
売買手数料を通じて、顧客の専門知識(機械学習とか)から得られる恩恵を間接的に受けられる。
APIを提供し株式自動売買がやりやすくなると、プログラミングの知識を持った人が集まってくる。その中には、ニューラルネットワークといった機械学習の知識を持った人も集まってくるだろう。そんな人たちがニューラルネットワークを使った株式自動売買プログラムを開発し、収益を上げれば、その人たちはもっと大きな取引を頻繁にするようになり、それに伴って証券会社側の取引手数料収益も増えると思う。
少し話が逸れるが、株式自動売買のAPIを整備した後、東大・京大・阪大といった旧帝大や東工大の理系大学院生に向けて証券口座開設の営業をすればいいのではないかと個人的に思う。旧帝大や東工大に行けば、ニューラルネットワーク関係の研究をしている人がたくさんいる。また彼らの生涯年収は、その他の大学に通っている人たちよりも高い。ニューラルネットワークといった株式売買に有用な専門知識を持っていて、生涯年収が高く、証券会社にたくさんお金を落としてくれる可能性の高い人たちを学生のうちに囲っておくのは、いい戦略かもしれない。
僕も修士時代、ニューラルネットワーク関係の研究をしている知り合いがたくさんできた。そういった人たちと過ごす中で「彼らはお金を稼ぐために自分の知識を使うという発想があまりないな」と感じることが多かった。
逆に僕は、お金を稼ぐためにプログラミング技術を使うという発想が強すぎるのだが(稼げてはいない)。
証券会社は、APIの整備・保守を行い、プログラミングがしやすい環境を整え、高いポテンシャルを持っている人たちに「自分たちの知識は株価予測に使える」という発想を与えるだけで十分である。あとは、知識・技術、学術論文から得られる最新の知見を使って、彼らは勝手に株式自動売買プログラムを開発するであろう。そして証券会社は、API整備・保守以外に費用を払うことなく、売買手数料を通じて、顧客の知識・技術、そして顧客が調べてきた学術論文の知見から間接的に恩恵を得ることができる。
売買ルール。
どういった売買ルールで取引するか、まだはっきりとは決まっていない。試行錯誤している段階。メモ書き程度に案を羅列。
買建玉の合計建値と売建玉の合計建値ができる限り同程度になるようにする。ただし日経平均株価の予測値が現在値よりも高ければ(低ければ)、買建玉(売建玉)を多めに持っておく。
これは、予期せぬ暴落が起きたときに被害を最小限にするため。買建玉が暴落した分、売建玉がカバーしてくれる形になっている。
やはり、どうしても予測不可能な暴落がたまにある。最近だと安倍前首相の辞任表明。さすがに株価データから安倍前首相の辞任表明が市場に与える影響を予測することはできない。
レバレッジは、2倍~3倍程度。一つの銘柄に資金を投入することはせず、出来る限り分散投資をする。
レバレッジを高く設定している分、追証発生リスクを抑えるためにできる限り、いろんな銘柄に分散投資している。
最初は、数十種類の銘柄をそれぞれ100株ずつ持っていたが、売買手数料の負担がつらいので、安い株は200株、300株くらい持っている。
(10万円以下の取引の手数料が200円だった場合、1株100円の株を100株ずつ10銘柄、買って売ると、手数料は4000円。一方で1株100円の株を200株ずつ5銘柄、買って売ると、手数料は2000円)
株価が1%以上、上昇(下落)すると予測されれば、買建(売建)する。保有している建玉の価格変動の予想値が1%未満であれば、売埋・買埋を行う。
予測値と真値の差分を前日の真値で割って規格化したものの平均値を取って100を掛けると大体、0.8ぐらいになる。つまり、このモデルの誤差は、平均0.8%ぐらいであると言える。株価が1%以上、上昇(下落)すると予測された銘柄を買建(売建)すば、誤差が発生しても、最悪、0.2%以上、上昇(下落)するだろうと考えている(誤差の分布形状を見ていないので正確ではないが)。
0.8%以上ではなく、1%以上にしているのは、切りがいいから。また1%だと、平均0.8%誤差+「信用取引の手数料」で望んでいる方向と真逆に株価が動いてもギリギリ利益を出すことができる。
買建(売建)する銘柄の優先順位は、1営業日~5営業日後までの株価予測値に加重をかけて足したものの降順(昇順)。
n営業日後の予測値(何%上昇・下落するか)に1/nをかけ、n=1~5まで足し合わせたものを使って、買建(売建)する銘柄の優先順位を決めている。
ただ、この「加重をかけた予測値を足し合わせたもの」を優先順位決めに使うことの有用性は、特に確認していない。
最近、この方法は、あまりよくないなと思うようになってきたので、今は単純に1営業日後の予測値を降順(昇順)に並べて、買建(売建)する銘柄を決めている。
さいごに:なんかよう分からんけど、上手くいかない…。
過去の株価データを使った検証段階では、85%~90%くらいの確率で1営業日後の株価が上がるか・下がるか予想することができる。
しかし実際にこのプログラムを使い、リアルタイムで、1営業日後の株価が上がるか、下がるか予想すると正解確率は50%くらいにまで落ちる。コイントスして、株価の上がり・下がりを決めているのと変わらない。
学習に使っているデータは日経平均株価で、検証に使っているデータは約4000社の上場企業の株価。85%~90%くらいの正解率というのは、この約4000社分の過去の株価データを日経平均株価で学習させたモデルで予測させたときのもの。
原因を探ろうと、検証段階のモデルの出力とリアルタイムで予測しているときのモデルの出力を詳しく調べているが、よく分からない。なんでなんやろう。
検証段階で得られた〇月〇日の予測値の正解率とリアルタイムで予測しているときに使っているプログラムから得られた〇月〇日の予測値の正解率には、大きな差異は見られなかった。ということは、リアルタイム予測用のプログラムと検証用のプログラムの内部が大きく違うってことはなさそうである。
今は、ネットワークが「過学習」しているという疑いを持っていて、その観点から調査を行っている。もちろん、日経平均株価を使って学習させているときは、学習時の損失関数に加え、日経平均株価とは関係ない株価データを使った場合の損失関数の時間変化もチェックし、過学習が起こらないようにしている。(銘柄に対しては過学習を起こしていなさそう)
この可能性があまりないような気がするが…。
検証段階では、〇月〇日までの日経平均株価を学習させたモデルを使い、約4000社の上場企業の〇月〇日までの株価を予測することによってモデルの性能を評価している。一方で、リアルタイムの場合、〇月〇日以降の株価を予測する。〇月〇日までの株価予測の精度が高いが、〇月〇日以降の株価予測の精度が低いということは、日時に対して、過学習を起こしているのではないかと予想される。
という感じで、今のところ、上手くはいっていない。かれこれ1か月ぐらいこの問題に悩まされている。
もうしばらく、原因の究明に時間がかかりそう。。。
この文章を読んで、面白い!役に立った!...と思った分だけ、投げ銭していただけると嬉しいです。