LoginSignup
14

More than 5 years have passed since last update.

[TensorFlowで株価予想] 8 - どの銘柄を買うか

Last updated at Posted at 2016-08-13

TensorFlowで株価予想シリーズ

はじめに

前回まではデータ項目数を増やしたり、隠れ層のサイズを調整したり、株価が何%上がると予想したときに買うのが一番結果が良いかを検証してきました。その結果、日経225銘柄の全てで売買した場合でも売買シミュレーションで黒字にできるような値に調整できました。しかし、予算の問題もあり全部の銘柄なんて買ってられません。そして、データを見ていると予測が当たる銘柄もあれば外れる銘柄もあるように見えます。そこで買うべき銘柄を絞りこんでみようと思います。

今までの予測はマグレではないのか?

しかし、もう一つ疑問があります。それは、今までの売買シミュレーションでは直近200日よりも前のデータで予測器を作って、直近200日のデータで売買シミュレーションを行ってきました。それによって儲かる銘柄と儲からない銘柄が分けれる気がします。しかし、それはマグレではないのでしょうか?たまたま「テストデータ」で結果が良い「学習データ」があったというだけではないのでしょか?本当にこれで作った予測器で明日以降の株を買っても良いのでしょうか?

過去何年かの予測が当たっていれば今の予測も当たるはず

そこで「過去何年かの予測が当たっていれば今年の予測も当たるだろう」という仮説を検証してみたいと思います。「1年前、2年前、3年前、4年前の売買シミュレーションの結果が良ければ、きっと今年の結果も良いだろう」という考えです。

前回からのコードの違い

コードはgithubに上げてあります。

前回からの変更点はこちらになります。直近何日かの株価データを除外できるようにしました。これにより1年後、2年後での株価予測を行えるようにしています。実際は200日後、400日後などの200日の倍数にしています。

goognet.py
REMOVE_NEWEST_DAYS = 200 * 1    # 除外する最新のデータ日数
goognet.py
# 最新のデータを除外する
if REMOVE_NEWEST_DAYS:
    training_test_data = training_test_data[:-REMOVE_NEWEST_DAYS]

また、今回の検証とは関係ないのですが、あまりにも処理時間が長くかかるので、いくつか高速化を入れました。

高速化を入れる前は TITAN X でも10日ほど、CPU だと100日くらいかかると思うんですけど、なんと5日で終わります。。。でも長いですねぇ

売買シミュレーション

売買シミュレーションは直近200日よりも前のデータで予測器を作り、売買は直近200日のデータで行います。買いと予測したら当日の始値で購入し終値で売ります。元金は1000万円とし、手数料はGMOクリック証券のものを使います。

同じ銘柄と同じデータで作った予測器でも売買を行った結果のブレがかなりありました。そこで10回予測器を作って、その結果の平均を取ることにします。

過去の売買シミューレションは、200日前、400日前、600日前、800日前の4期間を取ります。

これらの計算を日経225の銘柄で行います。株価データ日数が2000日未満のものは除外したので実際は215銘柄で行います。

215銘柄 x 10回 x 4期間 = 8600回の計算、、、なので凄く時間がかかりました
※実際は5期間してるのでもう少し多い

結果

過去4期(200日前、400日前、600日前、800日前)の過去平均が高い順でソートしてみました。

順位 コード 200日前 400日前 600日前 800日前 過去平均 今期
1位 9501 13,236,176 10,189,855 11,206,372 12,857,355 11,872,440 10,382,269
2位 9503 10,622,372 9,165,977 10,706,464 12,018,935 10,628,437 10,895,548
3位 8354 11,258,174 10,326,286 10,542,657 9,884,058 10,502,794 10,288,487
4位 7270 10,249,210 10,000,000 11,009,887 10,064,866 10,330,991 9,829,349
5位 9064 10,147,030 10,000,000 11,135,282 10,000,000 10,320,578 10,447,982
6位 8628 10,080,358 9,414,992 11,555,517 10,190,270 10,310,284 10,123,759
7位 8804 10,000,000 10,051,893 11,025,573 10,038,685 10,279,038 10,261,250
8位 6762 9,892,138 10,000,000 10,000,000 11,173,654 10,266,448 10,158,491
9位 2282 10,740,998 10,000,000 10,178,852 9,975,078 10,223,732 9,677,328
10位 8316 9,988,294 9,930,837 10,965,068 10,000,000 10,221,050 9,855,435
11位 6701 9,916,700 10,000,000 10,244,565 10,651,423 10,203,172 10,041,070
12位 6305 10,124,122 10,000,000 10,795,665 9,858,144 10,194,483 10,622,213
13位 8304 9,972,819 10,040,739 9,549,783 11,173,009 10,184,088 10,183,232
14位 7205 10,000,000 10,000,000 10,733,394 10,000,000 10,183,349 10,306,141
15位 6703 10,039,016 9,998,200 10,468,641 10,212,056 10,179,478 10,829,367
16位 5631 10,000,000 10,000,000 10,364,357 10,324,014 10,172,093 10,000,000
17位 6902 10,237,315 10,043,422 10,378,513 10,000,000 10,164,813 10,290,123
18位 9020 10,263,033 10,122,231 10,261,937 10,000,000 10,161,800 10,438,586
19位 6752 10,000,000 10,000,000 10,015,329 10,616,381 10,157,928 10,484,708
20位 7211 10,000,000 10,000,000 10,623,240 10,000,000 10,155,810 9,781,904
21位 1803 10,234,688 10,000,000 10,203,478 10,184,073 10,155,560 10,062,507
22位 5214 10,000,000 9,979,647 9,731,806 10,909,612 10,155,266 10,539,237
23位 4568 10,000,000 9,899,362 10,181,208 10,510,263 10,147,708 9,865,446
24位 3865 10,000,000 10,068,954 10,518,001 10,000,000 10,146,739 10,172,274
25位 1925 10,000,000 10,000,000 10,586,564 10,000,000 10,146,641 9,962,757
26位 8252 10,226,797 10,038,418 10,262,574 10,054,677 10,145,617 9,758,519
27位 8802 9,566,611 10,014,219 10,996,050 10,000,000 10,144,220 9,663,384
28位 2871 10,097,209 10,000,000 10,476,164 10,000,000 10,143,343 10,994,989
29位 4519 10,292,881 10,000,000 10,231,844 10,033,116 10,139,460 9,944,584
30位 4502 10,135,005 9,985,573 10,427,788 10,000,000 10,137,092 10,000,000

これだとイマイチ良いのか悪いのか分からないですね。過去の成績が良いほうが今期の結果も良いのか、それとも関係ないのか?を分かりやすくするために、1位〜10位までの今期の平均、1位〜20位までの今期の平均と、10位間隔で平均を出してみます。

順位 平均
1〜10位 10,191,990
1〜20位 10,244,862
1〜30位 10,195,365
1〜40位 10,133,095
1〜50位 10,112,535
1〜60位 10,090,702
1〜70位 10,093,744
1〜80位 10,079,340
1〜90位 10,090,340
1〜100位 10,077,959
1〜110位 10,080,998
1〜120位 10,072,952
1〜130位 10,060,293
1〜140位 10,038,517
1〜150位 10,046,266
1〜160位 10,043,150
1〜170位 10,056,072
1〜180位 10,052,065
1〜190位 10,053,752
1〜200位 10,057,925
1〜210位 10,043,934
1〜215 10,038,364

過去売買ラインキング上位10位による今期売買の平均は10,191,990円です。上位20位だと10,244,862円になります。上位30位だと10,195,365円だけど、そこから下になるとだんだん下がっていきます。最終的に日経225(今回は215)での平均は10,038,364円でした。

順位が高いほうが売買平均も高いので、これは過去成績が良かった銘柄は今期も成績が良いと思ってよいのではないでしょうか。

今後

今回の「どの銘柄を買うか」で上位30位くらいがよい成績を出しているので、この銘柄を使って実践的な売買シミュレーションを行おうと思います。今までは1つの銘柄を一定期間の200日で売買していただけでした。それだと実際に購入できる日は200日もあるのに実際に買うと予測する日は10日とかそれくらいしかありません。しかし複数の銘柄で売買を行うのであれば、買うと予測する日はもっと増えると思います。それにより売買シミュレーション後の残高はもっと増えるでしょう(もしくは減るでしょう)

そして、次で内容的には一段落しそうなので「TensorFlowで株価予想シリーズ」としては一区切りです。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14