機械学習による株価予測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名柄は予測始値で買うことが出来ません
でした。全く予想出来ていません。これからどうするか?
- 機械学習による株価予測をあきらめる。
- ニューラルネットワークを導入しみてみる。
- デイトレは難しいのでスイングトレードを試してみる。
[現在の収支]
今日はそもそも変えてませんので、収支変わらず。
[前日(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% 株価大幅安、各国で警戒広がる】
機械学習による株価予測2日目(2021年2月24日)
皆さん、こんにちわ。
昨日は祝日で非営業日でしたので今日が機械学習によるシステムトレード2日目です。
前回は日経平均の上昇がうまく予測できていなかったのか、安値で買えず±0円となりました。
機械学習で予測した最安値と最高値で「安値で買って高値で売る」という戦略は変えてない
のですが、やはりなかなかピタリと当てることが出来ないため、
予測高値 * 高値係数
予測安値 * 安値係数
として買えやすく売りやすく調整しようとその係数を探ってみました。
やり方としては過去データと機械学習の予測値を比べて平均二乗誤差という誤差を測る手法を
用いて求めてみました。以下のイメージとなります。
少しずつ係数をずらしていって最も誤差が小さくなるポイントを探ります。
ただやっていて思ったのが、
- そもそもこの誤差は教師データから学習する際に解消されフィットするべきもの
- 過去データを元に係数を出しその日の予測に当てはめてもあまり意味がない?
- その日のトレンドのような値を元に算出したら調整できるかも
などなど気づき、いったん取りやめ。過去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万円で買える順番に買っています。緑の背景となっているものです。
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-
- 買いタイミングに改善ポイントがありそう。
- そもそもモデルの精度をもっとあげる必要がある。
*当ブログに掲載している情報はあくまで個人的な株式運用の記録であり、これらの
情報を用いていかなる損失が発生しても責任は負いません。投資は自己責任で。