機械学習の株式投資で10億円を目指す!

機械学習によるデイトレ株式投資(シストレ、システムトレード)で10億円の資産形成を企んでいます。機械学習、データサイエンス、AI(人工知能)のアルゴリズムを駆使したら株式市場(マーケット)に勝つことは出来るのか?

機械学習による株価予測5日目(2021年3月10日)

機械学習による株価予測5日目です。

昨日は機械学習始値を高く予想していたため、買うことが出来ませんでした。
特に機械学習モデルに変更は入れてないのですが、今日も買い予約を入れてみる
こととします。

[本日の買い銘柄]

機械学習が予測し推薦してきた銘柄は以下の4つとなります。

1883.T|2192|2242|2221|前田道路
6753.T|1965|1993|1985|シャープ
7912.T|2183|2216|2200|大日本印刷
8876.T|2221|2254|2224|リログループ

上記、左からティッカー、予測始値、予測高値、予測終値、会社名となります。

[予測結果]

はい、本日も当たりませんでした。上記銘柄中で3名柄は実際に予測始値で買えた
のですが、始値が高値となったままとなる展開に。最悪です。

結果的にその買えた銘柄を14時半くらいまでホールドしたのですが、終値でも更新
できず、負け幅は大きくないものの¥3,900-のマイナスとなりました。手数料が
¥1,330-ですので、合計でマイナス¥5,230-となりました。

[現在の収支]

[前日(2021年3月9日)]
¥985,000-

[本日(2021年3月9日)]
¥979,700-
¥5,230-

少しずつですが資産が減っていきます。今のところ全戦全敗。
ここまで当たらないものか。適当に買った方がまだ当たるでしょうね。

[メモ]

今日はLSTMを用いたニューラルネットワークによる日経平均をやってみたのですが、
こちらも良い精度は出ず。翌日の日経平均が上がるか下がるかの2値分類としたのです
が、まぁ中間的な値しか出力せず。それだけ株価をパターン化することは難しくランダ
ム性が高いということかと思われます。あと気付いたのが、日経平均に寄与度が高い
銘柄、例えばソフトバンクグループやファーストリテイリングなどの上がり下りが
日経平均そのものを変えてしますので、これを学習データに入れているのはいかがな
ものなのかと。とは言ってもまだ解決策は考えれていません。

あともうひとつ試したこととして5日平均線と25日平均線を用いたゴールデンクロス
銘柄の抽出です。既に機械学習とは関係ない話になっていますが、要は勝てればいい
んです!けどこれもあまりうまくいかず。まずゴールデンクロスを形成する時点で
既に株価は上がってしまっている=買い時が遅い。次に売り時をうまく当てられない。
当然、底値で買って一番高い時に売りたいのですが、そこをどう検知するか、出来る
か?ここはもう少し掘り下げてみることとします。

 *当ブログに掲載している情報はあくまで個人的な株式運用の記録であり、これらの
 情報を用いていかなる損失が発生しても責任は負いません。投資は自己責任で。

機械学習による株価予測4日目(2021年3月9日)

機械学習による株価予測4日目です。

100万円を元手に始めましたが、現在のところ1日しか買えておらず、さらにその1日も
マイナスになっている状態です。

[本日開始時点(2021年03月9日)]
¥985,000-

色々と試してバックテストもやっているのですが、なかなか良いモデル、良い理論に
行き当たりません。はっきり言ってまだ当てずっぽうというか、適当というか、
ギャンブルというかの範囲を抜けておらず、機械学習を使う意味は殆どないかなと。
それこそチンパンジーに選んでもらった方がまだ当たるかもしれません。

とは言いましても、一応、2021年2月でバックテストをやったところなんとか収支が
プラスになりそうなモデルを使い、機械学習により本日は4名柄を推薦。

4666.T | 2196 | 2268 | 2231 | パーク24
7012.T | 2481 | 2559 | 2514 | 川崎重工業
8129.T | 1844 | 1905 | 1871 | 東邦ホールディングス
8377.T | 1001 | 1038 | 1022 | ほくほくフィナンシャルG

上記、左からティッカー | 始値 | 高値 | 終値の予測となります。
前日終値と比べ安くなる予想となっているため買えるかどうか怪しいのですが、
言われた通り買うのがシステムトレードの鉄則らしいのでそのまま予約します。

今回の機械学習モデルはLassoとRandom Forestの組み合わせでアンサンブル学習に
近い方法で予測を行なっています。LassoとRandom Forestでどっちも上がるよって
予測した銘柄ということになります。

[予測結果]

結果として本日は機械学習が予測した上記の4名柄は予測始値で買うことが出来ません
でした。全く予想出来ていません。これからどうするか?

  1. 機械学習による株価予測をあきらめる。
  2. ニューラルネットワークを導入しみてみる。
  3. デイトレは難しいのでスイングトレードを試してみる。

[現在の収支]

今日はそもそも変えてませんので、収支変わらず。

[前日(2021年3月8日)]
¥985,000-

[本日(2021年3月9日)]
¥985,000-
±¥0-

*当ブログに掲載している情報はあくまで個人的な株式運用の記録であり、これらの
 情報を用いていかなる損失が発生しても責任は負いません。投資は自己責任で。

機械学習による株式株価予測〜改善ポイント

先月末の営業日から機械学習による株価予測で実際の株は買っていません。
まだまだ機械学習で当てれているかというと到底当てれておらず、
もし今のまま機械学習が出した推論に基づき株を購入したとしても単なる半丁博打を
やっているのと変わらず、また株価特有のランダム性から逃れられずギャンブルみたい
なもんになります。

では、完全に諦めたのかというとそういうわけでもなく、いくつかのアイデアを実装
してみたりしています。

機械学習による株式株価予測〜改善ポイント

クラスタリングによる教師データの選択

よく機械学習エンジニアが「もっとデータがあれば」と言いますが、そのような話を
聞くたびに私はちょっと違うかなと違和感を感じます。「もっと妥当で良いデータが
あれば」ならもう少し理解しますが、そんな都合の良いデータが機械学習のために
準備してあるかというと大半の場合そんなことありません。そんな時に私はきまって
「じゃぁ、あと何件くらいデータが必要なの?」と聞くと、大体のエンジニアは答え
られません。とりあえず多ければ多いほど良いというだけで、そんなのは割と当たり
前の話だったりします。統計的、確率的に解釈してこういうデータがこのくらい用意
出来たらこのくらいの推論は可能になりそう。としないといけないと思っています。

前置きが長くなりましたが、今まで2017年くらいからの過去データをドンで学習させ
ていたのですが、そもそも日によって値動きのパターンって変わるのではないかと思
い、また前日のアメリカ株との相関が強いことから、それらの値を利用してクラスタ
リングして学習する過去データを選択しようと考えました。

実装としてはscikit-learnのKMeans方を用いてアメリカ株と日経225の伸び率から
4つへクラスタリングを行いました。このクラスタリングされた数値と同じ日のみ
から学習を行います。

結果としてはスコアは上がったっぽいです。「ぽい」というのは後に書くバックテスト
の話にも関わるのですが、正確にトレース出来ていません。ちゃんと差分を管理して
これをやったからこうなったというのを数値で追えないとダメです。

ランダムフォレストによる株価上昇の予測

ランダムフォレストというのは決定木系のアルゴリズムの一種で機械学習系のアルゴ
リズムで特に分類問題で頻繁に使われます。私もランダムフォレスト大好きで大半の
分類問題はランダムフォレストでやっとけば何となく推論できるじゃろ、というノリ
で使っています。

その何となく高精度に分類できるランダムフォレストを用いて翌日の株価が上がるか
下がるかを予測することにしました。始値から終値が上がっているか、下がっている
かの二値分類です。

さらにそこからランダムフォレストが上がると推論したものに対して今まで使って
いたLassoの推論結果と付き合わせてどちらも同じ推論を行なっているかを検証し
同じ推論を行なっていれば買おうという発想です。ランダムフォレストは二値分類
しているので、幾らで買うかというのが無いのでそこをLassoによる回帰で解決する
という目的もあります。

機械学習の推論結果を高めるテクニックとしましてアンサンブル学習というのがあり
まして、通常は複数モデルによるVoting(選挙)を行なって当たりの確率を上げる方法
があるのですが、今回のこの手法もアンサンブル学習の1種になるかなと思っています。

結果なのですが、現在、検証中です。混同行列(Confusion Matrix)という評価手法を
使ってTrue PositiveとFalse Positiveの件数を比較しています。今回の場合は他の
指標はあまり考慮せずTrue Positiveを増やしFalse Positiveを減らす。それだけです。

バックテスト環境の充実化

機械学習による株価予測で実はここが一番重要なのではないかと思っています。

株式投資を行う上で過去データから予測を行うのは人間がやっても機械がやっても
重要なことだと思うのですが、機械がやると過去の試行が容易にどれだけでも出来る
ことになります。

改善アイデア→モデルへの組み込み→バックテスト→評価

このサイクルを回して確率を上げていくことが重要です。

一応、今バックテスト出来るようにして答え合わせを行なっているのですが、
過去データ2021年1月、2021年2月に対して行うだけで数時間のバッチ処理となって
しまいます。またきちんと記録できておらず、行なった改善とスコアをトレースする
仕組みを構築していく必要があると考えています。

上記のような改善を行なっているのですが、過去データに対するシミュレーション
結果としてはマイナスとなってしまいます。クラスタ数やクラスタ化する要素の選択
などはまだチューニングの余地はあると考えています。

やはり機械学習による株価予測は容易ではないです。
心が折れそうですが、もう少しやってみようと思います。

*当ブログに掲載している情報はあくまで個人的な株式運用の記録であり、これらの
 情報を用いていかなる損失が発生しても責任は負いません。投資は自己責任で。

機械学習による株価予測3日目(2021年2月26日)

こんにちわ。

昨日(2021年2月25日)は株を買いませんでした。
機械学習による株価予測を諦めたわけではないのですが、前日のマイナス13,900円を受けて
そもそもモデルがまだまだ予想できていないことに改めて気付き諸々修正を行いました。
そうすると昨日は日経平均全体的に上昇、予測せずとも買ってれば当たったではないかと。
まぁ、株なんて大体そんなもんですよね。

昨日行った主な修正点

  • アメリカ株の指数に連動して翌日の日本株が上がる、または下がるので教師データに
    アメリカ株指数を取り入れ
  • 上記のついでに前回採用しなかった円ドル為替を説明変数に取り入れ
  • アメリカ株を入れるとなると早朝に戻ってくるので予測処理→買い予約(手動)が間に
    合わなくなるため、処理を細分化、効率化、マルチプロセス化

まずアメリカ株の指数取り入れですが、S&P500やNASDAQなどの米株指数を取得し
説明変数に取り入れました。これら米株指数と日経225の相関係数を見てみたのですが、
0.88とかでかなり高い相関を示していました。米ドル為替の相関係数は-0.44程度で
まぁ弱い相関というところでしょうか。
機械学習でもデータ分析でもまずは相関を見てみる。基本ですね。

上記の処理を株式市場の始まりに合わせるには午前9時までに予測から買い予約まで
終わらせないといけません。ここは正確な時間が分かっていないのですが、おそらく
前日の米株指数を取得できるのが午前5時以降なので、午前5時から米株指数を取得
して、それからデータ前処理を終わらせ教師データを生成し予測を行い、かつ手動で
買い予約まで終わらせないといけません。今のままでは到底処理が間に合わなかった
ので処理を細分化し、かつpythonによるマルチプロセス化。pythonでマルチプロセス
初めて使ったのですが、随分簡単でした。
と、書いていて気付いたのですが、そもそも学習処理には当日データは入れなくても
良いかなと思えてきました。運用が回らなくなってきたら前々日までのデータで学習
を行い、予測には当日分のみ利用する。そうするとデータ前処理は前日までに終わら
せておくことが出来そうです。

今日、実際に株式を購入するかは迷ったのですが、なんとなく今日も上がりそうな
気がするので投資しておきたいので(全く理論的ではない理由)、昨日までの理論で
買いフラグの株式銘柄を抽出、購買までやっていこうと思います。

株価予測3日目(2021年2月26日[金])

[本日使用した機械学習モデル]

Lasso, ラッソ回帰
引き続きLassoによる回帰を使用します。

[本日使用した主な説明変数と目的変数]

主な説明変数と目的変数

冒頭にも書きましたが、説明変数にアメリ株価指数と円ドル為替を取り入れ。
あと今まで予測していなかった始値も新たに予測するようにしました。

[本日の対象銘柄]

本日も前回と変わらずTOPIX 500を対象としこの中から買うべき銘柄を抽出します。

[機械学習が示した買いフラグ銘柄]

基本戦略

「安値で買って高値で売る」今までこの戦略を取ろうとしてきたのですが、
仮に予測安値が当たって、予測高値が当たったとしてもそこに時系列の概念がないと
儲けは発生しないため、「始値で買って高値で売る」とした方が良いかなと思えて
きました。本当はここもしっかりとシミュレーションして見極めないといけないの
ですが、今日はとりあえず予測した始値指値予約し高値でセット売り予約します。

機械学習が示した買いフラグ銘柄

Lasso機械学習モデルが予測した本日の買い銘柄と株価は以下となりました。

code prd_翌日始値 prd_翌日高値 prd_翌日高値_adj prd_翌日安値 prd_翌日安値_adj prd_翌日終値 スコア 買いフラグ 前日終値
2413.T 8603 8795 8707 8481 8566 8643 0.9988084925 1 8539
2801.T 7340 7454 7380 7229 7301 7344 0.9936502846 1 7330
3092.T 3510 3583 3547 3462 3497 3532 0.9914969294 1 3475
3659.T 3527 3578 3543 3466 3501 3513 0.9941339245 1 3500
3769.T 14769 15100 14949 14537 14683 14826 0.9973454072 1 14760
4552.T 3535 3629 3592 3472 3506 3530 0.9969356525 1 3520
4911.T 8193 8289 8206 8066 8146 8165 0.9936740813 1 8148
4919.T 6176 6293 6230 6109 6171 6211 0.9931499227 1 6160
5947.T 10949 11110 10999 10786 10894 10960 0.9933422163 1 10940
6586.T 4621 4705 4658 4561 4606 4622 0.98754208 1 4615
6753.T 2052 2103 2082 2016 2036 2066 0.9980328907 1 2040
6758.T 11615 11788 11670 11463 11577 11667 0.9963296356 1 11570
6963.T 10976 11143 11032 10796 10904 10957 0.9877731912 1 10890
6976.T 5601 5736 5679 5513 5568 5653 0.995890461 1 5590
7476.T 13954 14182 14040 13665 13802 13904 0.9976833565 1 13900
7518.T 3372 3442 3408 3321 3354 3390 0.9958921737 1 3340
7735.T 8881 9090 8999 8780 8867 8926 0.9909551891 1 8880
7741.T 12682 12870 12742 12484 12609 12685 0.9974340419 1 12680
7780.T 6486 6615 6549 6380 6444 6485 0.9977977062 1 6480
7974.T 68766 69666 68970 67696 68373 68668 0.9953884667 1 68360
8369.T 6662 6763 6696 6584 6650 6677 0.9910501734 1 6640
9021.T 6713 6800 6732 6594 6660 6676 0.9944441185 1 6667
9062.T 8103 8204 8121 7998 8078 8087 0.9859276201 1 8080

 今回は1株あたりの上昇が大きい順で30万円以内、元手資金残り¥985,000-以内で買って
いくこととします。[prd_翌日始値]で指値予約し[prd_翌日高値_adj]売り予約です。

code prd_翌日始値 prd_翌日高値 prd_翌日高値_adj prd_翌日安値 prd_翌日安値_adj prd_翌日終値 スコア 買いフラグ 前日終値 prof 買値 売値 想定損益 会社名
4552.T 3535 3629 3592 3472 3506 3530 0.9969356525 1 3520 57 353500 359200 5700 JCRファーマ
3092.T 3510 3583 3547 3462 3497 3532 0.9914969294 1 3475 37 351000 354700 3700 ZOZO
6753.T 2052 2103 2082 2016 2036 2066 0.9980328907 1 2040 30 205200 208200 3000 シャープ

こんなやり方では勝てないでしょうね。分かっています。
デイトレを始めたほとんどの人はこうやって資産を溶かしていくのが分かります。
もっと統計的に検証しシミュレーションを行い、答え合わせを行って新たにモデルに
組み込むというサイクルを回していく必要があります。
ただ同時に実際に買ってみるというのも大事なのかなと。シミュレーションだけとは
緊張感が違いますw

[本日の結果と反省]

実際に開場前に予約までしたのですが、以下のニュースを見て取り消し。
今日は乗らずに粛々とモデルを調整しつつ来週に備えるとします。

【米長期金利一時1.61% 株価大幅安、各国で警戒広がる】

f:id:ml-trade:20210226081745p:plain



 

機械学習による株価予測2日目(2021年2月24日)

皆さん、こんにちわ。

昨日は祝日で非営業日でしたので今日が機械学習によるシステムトレード2日目です。
前回は日経平均の上昇がうまく予測できていなかったのか、安値で買えず±0円となりました。
機械学習で予測した最安値と最高値で「安値で買って高値で売る」という戦略は変えてない
のですが、やはりなかなかピタリと当てることが出来ないため、

予測高値 * 高値係数
予測安値 * 安値係数

として買えやすく売りやすく調整しようとその係数を探ってみました。
やり方としては過去データと機械学習の予測値を比べて平均二乗誤差という誤差を測る手法を
用いて求めてみました。以下のイメージとなります。

f:id:ml-trade:20210224072517p:plain

少しずつ係数をずらしていって最も誤差が小さくなるポイントを探ります。
ただやっていて思ったのが、

  • そもそもこの誤差は教師データから学習する際に解消されフィットするべきもの
  • 過去データを元に係数を出しその日の予測に当てはめてもあまり意味がない?
  • その日のトレンドのような値を元に算出したら調整できるかも

などなど気づき、いったん取りやめ。過去5日平均を元に算出しようと思ったのですが、
たぶんこの場合は平均ではないですね。何かしらリアルタイムやトレンドのような概念
が必要かもです。

その他にやってみたこととしては為替と世界株式の指数を取り入れてみました。
ですが、為替を目的変数に加え過去データで予測と実績で試算し、上記同様に平均二乗
誤差でモデルを評価しましたが、むしろ予測精度は下がる結果に。こちらもいったん
採用は見送り。世界株式の指数は取得したデータにNaN値が多いのと、データ型の問題
が発生しうまくLassoに組み込めなかったので、こちらも採用見送り。

ということで、結果として今日はいくつかの細かいバグは修正したものもほぼ前日と
変わらない機械学習モデルで抽出した日本株式に投資していくこととします。

株価予測2日目(2021年2月24日[水])

[本日使用した機械学習モデル]

Lasso, ラッソ回帰
前回から引き続きLasso(ラッソ)回帰を使用します。Lassoのscikit-learnによる実装です。
前回の記事でLightGBMは精度が悪く不採用と書きましたが、結構色々とバグを含んで
いましたので、もう一度、LightGBMを試してみたいと思っています。

[本日使用した主な説明変数と目的変数]

主な説明変数と目的変数

機械学習では当てたい、予測したい値を目的変数yとして設定します。
それを説明するための変数を説明変数Xとして複数設定し過去データから学習を繰り返す
のが機械学習の基本となります。
冒頭でも書きましたように為替データを組み込んでみましたが、予測精度としてはむしろ
下げる結果となりましたので、前回と変わっていません。

[本日の対象銘柄]

本日も前回と変わらずTOPIX 500を対象としこの中から買うべき銘柄を抽出します。

[機械学習が示した買いフラグ銘柄]

基本戦略

「安値で買って高値で売る」という当たり前の理論を元に予測安値で買って予測高値で
売ることを目標にします。ただ冒頭でも申し上げました通り、何かしらの妥当な調整値
で調整しないとピタリといかない限り買えないという現象になります。

他に買いフラグを出す条件として、「予測高値 > 予測安値 == True」、
「予測高値 - 予測安値 >= 40円以上」などです。少なくとも40円くらいはないと
手数料負けしてしまうためざっくり決めたものです。

機械学習が示した買いフラグ銘柄

Lasso機械学習モデルが予測した本日の買い銘柄と株価は以下となりました。

code prd_翌日高値 prd_翌日高値_adj prd_翌日安値 prd_翌日安値_adj prd_翌日終値 act_当日終値 スコア 買いフラグ
2413.T 9024 9024 8681 8681 8863 8800 0.9986250517 1
6920.T 14897 14897 14357 14357 14699 14580 0.9986226806 1
3635.T 6441 6441 6313 6313 6377 6370 0.9982105992 1
4568.T 3315 3315 3233 3233 3270 3261 0.9980236494 1
4684.T 19591 19591 19252 19252 19431 19350 0.9979731154 1
3563.T 4363 4363 4230 4230 4310 4275 0.99787799 1
8304.T 2330 2330 2288 2288 2309 2301 0.997780351 1
6753.T 2195 2195 2107 2107 2159 2140 0.9977265499 1
9697.T 6827 6827 6608 6608 6741 6700 0.9976980312 1
7780.T 6912 6912 6720 6720 6818 6810 0.9974700641 1
6845.T 5106 5106 4937 4937 5035 5010 0.9974241301 1
6857.T 9801 9801 9507 9507 9681 9670 0.9973348464 1
7741.T 13238 13238 12926 12926 13121 13060 0.9971863493 1
8111.T 7508 7508 7335 7335 7448 7380 0.9969833774 1
4307.T 3612 3612 3532 3532 3573 3565 0.9969748945 1
3769.T 16164 16164 15661 15661 15937 15830 0.9969055631 1
6701.T 6364 6364 6228 6228 6302 6290 0.9966913354 1
8035.T 47484 47484 45948 45948 46781 46300 0.9965030654 1
8001.T 3283 3283 3227 3227 3259 3250 0.9964705271 1
7751.T 2375 2375 2326 2326 2354 2338 0.9963819888 1
3064.T 7028 7028 6774 6774 6929 6860 0.9962865738 1
9983.T 106090 106090 103470 103470 104986 104900 0.9962512793 1
2579.T 1855 1855 1807 1807 1833 1832 0.9961773436 1
6367.T 22505 22505 21987 21987 22264 22100 0.9961699703 1
4921.T 4129 4129 4031 4031 4099 4080 0.9961682584 1
7013.T 1920 1920 1844 1844 1903 1899 0.9961163102 1
2412.T 2971 2971 2897 2897 2940 2931 0.9961032907 1
6758.T 12185 12185 11891 11891 12058 11980 0.9960213141 1
6594.T 14829 14829 14494 14494 14673 14650 0.9959185201 1
3141.T 3663 3663 3575 3575 3617 3615 0.9958087354 1
7747.T 3323 3323 3217 3217 3283 3280 0.9957378873 1
7532.T 2582 2582 2525 2525 2560 2550 0.9955535101 1
3626.T 2299 2299 2252 2252 2272 2264 0.9955526511 1
7733.T 2278 2278 2227 2227 2255 2240 0.9955059276 1
4581.T 7012 7012 6853 6853 6944 6920 0.995467078 1
9435.T 21453 21453 20912 20912 21266 21200 0.995407565 1
6976.T 5967 5967 5729 5729 5866 5840 0.9953030265 1
7518.T 3363 3363 3260 3260 3327 3300 0.9952559493 1
5938.T 3065 3065 2976 2976 3028 3025 0.9950252419 1
6988.T 9556 9556 9361 9361 9455 9430 0.9949580936 1
7974.T 68968 68968 67259 67259 68143 68030 0.9946688494 1
6406.T 2583 2583 2518 2518 2548 2536 0.9946605873 1
9533.T 6577 6577 6400 6400 6480 6470 0.9946523896 1
9045.T 4988 4988 4848 4848 4932 4910 0.9945442703 1
5901.T 1381 1381 1333 1333 1362 1361 0.9944534678 1
4543.T 4348 4348 4251 4251 4305 4278 0.9943030937 1
9024.T 1333 1333 1282 1282 1306 1298 0.9942536487 1
4063.T 19023 19023 18566 18566 18796 18740 0.99422366 1
9008.T 8537 8537 8279 8279 8423 8380 0.9939213697 1
7616.T 2044 2044 1975 1975 2020 1994 0.993809521 1
6981.T 10011 10011 9763 9763 9905 9882 0.993662322 1
4118.T 4340 4340 4238 4238 4302 4275 0.993649028 1
2175.T 3750 3750 3636 3636 3706 3700 0.9935342869 1
6723.T 1281 1281 1233 1233 1263 1255 0.9934358448 1
5021.T 2526 2526 2451 2451 2495 2485 0.9934355637 1
4530.T 7180 7180 7003 7003 7103 7070 0.9933668148 1
2492.T 1085 1085 1033 1033 1064 1048 0.9933116433 1
3360.T 5929 5929 5810 5810 5882 5880 0.9932987972 1
6098.T 5546 5546 5421 5421 5482 5475 0.993251397 1
8056.T 3300 3300 3215 3215 3274 3245 0.9931036358 1
6762.T 16516 16516 16120 16120 16310 16260 0.9930950706 1
7270.T 2067 2067 2023 2023 2049 2035 0.9930520245 1
5019.T 2765 2765 2709 2709 2745 2742 0.9929464263 1
4911.T 8310 8310 8118 8118 8212 8150 0.9928683938 1
4403.T 5937 5937 5751 5751 5861 5850 0.9927828838 1
5301.T 1540 1540 1498 1498 1531 1515 0.9927803361 1
6965.T 6917 6917 6769 6769 6839 6820 0.9926575187 1
2801.T 7513 7513 7325 7325 7424 7400 0.9925927732 1
9064.T 2890 2890 2817 2817 2858 2854 0.9923456739 1
7988.T 3852 3852 3727 3727 3803 3795 0.9922633994 1
4919.T 6569 6569 6377 6377 6473 6400 0.9921432783 1
1959.T 3427 3427 3359 3359 3393 3390 0.9919759664 1
8354.T 2061 2061 2006 2006 2034 2028 0.9919647537 1
6417.T 2996 2996 2933 2933 2964 2954 0.9919525274 1
9989.T 4096 4096 4034 4034 4064 4060 0.9918352945 1
6674.T 3417 3417 3320 3320 3380 3370 0.9917409397 1
4185.T 3427 3427 3358 3358 3405 3390 0.9915798698 1
7309.T 25762 25762 25178 25178 25419 25405 0.991572038 1
2371.T 3575 3575 3465 3465 3538 3530 0.9915087769 1
4021.T 6327 6327 6160 6160 6241 6240 0.991437391 1
9101.T 3132 3132 3026 3026 3083 3055 0.9914227547 1
7701.T 4434 4434 4325 4325 4375 4365 0.9913988261 1
3436.T 2574 2574 2487 2487 2530 2520 0.9913362024 1
4151.T 3134 3134 3042 3042 3086 3085 0.991231044 1
9984.T 10759 10759 10461 10461 10618 10530 0.9909177521 1
9005.T 1477 1477 1433 1433 1455 1453 0.9908022089 1
5713.T 5700 5700 5511 5511 5614 5578 0.9907477952 1
4751.T 7081 7081 6887 6887 6993 6990 0.9907165451 1
9065.T 4534 4534 4425 4425 4471 4470 0.9905533035 1
9684.T 6582 6582 6382 6382 6525 6510 0.9905141722 1
4666.T 2274 2274 2202 2202 2235 2234 0.9904434111 1
8473.T 3194 3194 3106 3106 3158 3120 0.9903464109 1
1820.T 2625 2625 2570 2570 2597 2596 0.9903288253 1
7276.T 7874 7874 7664 7664 7772 7750 0.990316573 1
3092.T 3676 3676 3534 3534 3614 3590 0.9901713225 1
9766.T 7577 7577 7371 7371 7492 7460 0.9900564588 1

上のテーブルで

  • 機械学習モデルスコア順にソート
  • 1名柄あたり投資金額が30万円であること
  • 元手資金100万円内に収まるよう上から順に

として買ったところ以下となりました。

あまり業種に偏りや特徴は見られません。前日は空運業が目立ちましたけどね。
投資金額は合計で976,300円となりました。(買いが成立した場合)
楽天証券で開場前に指値で買い、セット売り予約しております。

[本日の結果と反省]

本日は予約注文していた4銘柄中の2名柄を買うことが出来ました。
損益は堂々のマイナス13,900円!売買手数料を合わせるとマイナス15,000円!

code 会社名 買値 売値 1株損益 手数料 税金 1単元損益
8304.T あおぞら銀行
7751.T キヤノン
2412.T ベネフィット・ワン 2881 2758 -123 -550 0 -12300
3626.T TIS 2232 2216 -16 -550 0 -1600
合計 5113 4974 -139 -1100 0 -13900

反省点としては色々あるのですが、今後の改善ポイントとしては以下となります。

  • NASDAQ(ナスダック総合指数)というアメリカの株式指数がマイナスで返ってきた
  • NASDAQに連動するかたちで日経平均(日経225)も落ち込んだ
  • NASDAQやその他世界株式指数を取り込んでいないこの機械学習モデルは
    うまく値動きを推測出来なかった

となります。なので今後の改善ポイントとしては

  • せめてNASDAQは説明変数に入れる。
  • ドルも説明変数に入れることを検討する。

その他の気づきとしては

  • 安値で買って高値で売るのは儲かって当然だが時系列で安値→高値が成立する
    場合のみのため、やはり始値で買って高値、もしくは終値で売る方が良いかも
  • 前日夜間の海外取引に連動することが多いため、営業日の朝にそれを考慮し
    機械学習モデルを再生成、推論し直すことが必要
  • やはり±1%の範囲で機械学習による推論を行うことは難しい

上記で特に3点目なのですが、通常の機械学習モデルによる推論では±1%の範囲で
推論が出来ればそれはかなり上出来な方だと思います。
例えば売り上げ予測において、今日の売り上げを100万円と予測して99万円だった
としたら、それは皆んなパチパチパチパチよくあたりましたねーとなると思います。
ですが、株式株価予測においては±1%ではほぼ役に立たないんですね。しかも符号
が重要になりますので実質1方向となります。

今日の負けでかなり改善しないと使い物にならないことが判明しましたので、
明日挑戦するかは微妙なところです。買ったつもりでシミュレーションするかな。

収支

[前日(2021年02月22日)]
¥1,000,000

[本日(2021年02月24日)]
¥985,000
-¥15,000

 *当ブログに掲載している情報はあくまで個人的な株式運用の記録であり、これらの
 情報を用いていかなる損失が発生しても責任は負いません。投資は自己責任で。

機械学習による株価予測1日目(2021年2月22日)

皆さん、こんにちわ。

今回が当ブログの初投稿となります。
ブログタイトル通り「機械学習株式投資で10億円を目指す!」ことを
目標にデイトレを開始しました。

10億円なんて現実的じゃないだろ!分かっています。
1億円でも良いかなとは思ったのですが、夢は大きくです。
自己資本による100万円が元手資金です。
株式投資歴は5年ほどですが、デイトレシストレは初めての初心者です。
某企業で機械学習エンジニア、AI担当、データ分析等を行っておりますが、
スキルは大したことない自信があります。
皆さんで100万円の元手資金が減っていく様をご覧頂けたらと思います。

株価予測1日目(2021年2月22日)

[本日使用した機械学習モデル]

Lasso, ラッソ回帰
(らっそかいき、least absolute shrinkage and selection operator, Lasso, LASSO)
他にもLightGBMも試したのですが、なんとなくLassoの方が当てはまり具合が
良さそうだったので、まずはLassoで挑戦。
Lasso回帰もLightGBMもscikit-learnを使用し実装。
他考えたこととしてはLSTM(ニューラルネットワーク)や時系列(タイムシリーズ)を
うまく扱うためにFacebookデータサイエンスチームによるアルゴリズムである
Prophetなども検討しましたが、どうも合わない気がしたので一旦不採用。

[本日使用した主な説明変数と目的変数]

株価予測での時系列処理

株価予測で重要な要素としてはやはり時系列なのではないか?ということは
なんとなく分かってはいたものもそれをどうやって機械学習モデルが分かる
ようにデータに表すか?
一旦、大して深く考えず1日前の値を1行(同レコード)に組み込むことにしました。

主な説明変数

上記で書いたように前日の高値、安値、終値、当日の高値、安値、終値
あと日本株全体が上がったらそりゃ大半は上がるよねってことで日経225
も説明変数に取り入れ。あとは7日移動平均、25日移動平均、75日移動平均
今後、増やした方が良いかなと思うのは、世界の主要株価指数や為替データ。

[本日の対象銘柄]

起きている時間にトレードしたいので日本株のみで板の厚さを考えTOPIX500
から抽出を実行。もし機械学習モデルが安定して収益を出せそうだったら
TOPIX500から拡大しトレード機会を増やそうと思います。

[機械学習が示した買いフラグ銘柄]

基本戦略

株の基本としては安値で買って高値で売る。
ということで予測安値で買って予測高値で売ることが理想になります。
んで、前日(前営業日)までの株価データで予測してみましたが、
予測安値が安く出過ぎる、予測高値が高く出過ぎるとなるんですね。
これでは買えないし、売れません。
なので、これを調整するために予測安値と予測高値に係数を掛けると
いう方法で買えるようにしましたが、この係数は適当に決めたので
本当は統計的かシミュレーション結果で算出するようにしないとです。

機械学習が示した買いフラグ銘柄

Lasso機械学習モデルが予測した翌日の株価は以下となりました。
_adjが付いているのは上記で書いた調整済みの価格となります。
機械学習モデルは以下を示したのですが、100単元で考えると元手資金100万円では
全部を買うことは不可能なので、スコア(機械学習モデルの当てはまり具合)が高い順
に並べて100万円で買える順番に買っています。緑の背景となっているものです。

code prd_翌日終値 prd_翌日高値 prd_翌日高値_adj prd_翌日安値 prd_翌日安値_adj
6753.T 2089 2137 2094 2020 2051
9201.T 2253 2316 2269 2207 2240
6920.T 14259 14658 14365 13953 14163
4612.T 8600 8802 8626 8437 8564
9202.T 2388 2451 2402 2346 2381
6383.T 11431 11677 11444 11249 11418
6976.T 5835 5963 5844 5709 5795
5631.T 2734 2791 2735 2684 2724
7747.T 3382 3439 3371 3307 3357
3092.T 3694 3764 3689 3622 3677
7735.T 9090 9280 9094 8933 9067
2492.T 1025 1051 1030 1001 1016
7313.T 3021 3091 3029 2967 3012
7936.T 1770 1804 1768 1731 1757
8136.T 1663 1706 1672 1634 1659
6028.T 8079 8245 8080 7948 8067
9007.T 3216 3291 3226 3158 3206
9706.T 4942 5117 5015 4875 4948

6753.T シャープ
9201.T 日本航空
9202.T ANAホールディングス

を100単元ずつ購入。売買代金は買いが成立した場合、667,200円。
楽天証券で前日のうちに売りをセットで売買予約。楽天証券、便利ですね。

[本日の結果と反省]

 

まだ前場が終わったところでまたあとで更新しようと思うのですが、
今のところの結果としましては買いが成立せず。
原因としましては日経平均自体が先週の金曜からの反発で300円以上の高騰。
特に日本航空ANAなどの空運は5%以上の上昇。ニュースでも注目銘柄として
取り上げられていました。
買いは成立しませんでしたが、このような注目銘柄を当てているということを
考えれば機械学習モデルが何かしらのサインを拾っている可能性があります。
たらればですが、成行で始値買い、成行で終値売りが成立すれば儲かっていた
ことにはなります。
シャープはまだ買えるか分かりませんが、この日経全体の上がりから考えると
難しそうです。またあとで結果を更新することにします。

→本日は結局買うことが出来ず。いくつかバグを見つけたので明日の祝日(天皇誕生日)を使って修正して次営業日の2月24日で再挑戦です。

収支

[前日(2021年02月21日)]
¥1,000,000-

[本日(2021年02月22日)]
¥1,000,000-
±0-

  • 買いタイミングに改善ポイントがありそう。
  • そもそもモデルの精度をもっとあげる必要がある。

*当ブログに掲載している情報はあくまで個人的な株式運用の記録であり、これらの
 情報を用いていかなる損失が発生しても責任は負いません。投資は自己責任で。