PythonのPの字も知らない素人が株価予想【上げ下げ】するまで
Anacondaをインストール
Anacondaを入れると機械学習系のモジュールがインストールされて手間いらず、またipythonというツールがインストールされるので、ゴニョゴニョ実行しながらコーディングするといい感じ。
株価のデータはどうやって入手するの
ynakayamaさんの株価取得のプログラムを証券コードを数字以外も使えるように改変。実行したらhtml5libがインストールされていないエラーがでたのでインストール。
pip install html5lib
改変したコードはこちら
https://github.com/dokechin/yking
日経平均株価(998407.O),NYダウ(^DJI),DAX(^GDAXI)を取得。
python jstock.py 998407.O 2016-01-01
日経平均は取れたけれど、ダウはYAHOO自体が値を持っていないようだった参りました。
まぁ、いいや、日経平均の前日と前々日の差分および、前々日と前々前日の差分を入力データにしてしまおう。(適当)
そして、当日の上げ下げをラベルデータとして1,-1というデータで作っておく。
株価のデータの読み込はどうするの?
import pandas pandas.read_csv("stock_998407.O.csv",index_col=0, parse_dates=True);
データを解析できるように整形する
ここが一番大変です。Pythonのライブラリは便利な機能が満載なので
なんとかなりました
分析する方法
# coding: utf-8 import pandas import numpy from sklearn import svm from sklearn import cross_validation from sklearn import grid_search df = pandas.read_csv("stock_998407.O.csv",index_col=0,parse_dates=True) df = df.dropna() df = df.shift(-1)-df features = [] # create feature data for i in range(df.shape[0] - 3): features.append([df.ix[i, "Close"],df.ix[i+1, "Close"]]) features = numpy.array(features) vmax = features.max(); vmin = features.min(); features = (features - vmin) / (vmax - vmin) * 100; features = numpy.ceil(features) # create label data labels = df.ix[2:-1, "Close"].as_matrix() labels = numpy.sign(labels) X_train, X_test, y_train, y_test = cross_validation.train_test_split(features, labels, test_size=0.3, random_state=1) clf = svm.SVC() grid = grid_search.GridSearchCV(estimator=clf, param_grid={'kernel': ['rbf','linear']}) grid.fit(X_train, y_train) grid.best_estimator_.score(X_test, y_test)
こんなかんじでコーディング、日経平均のデータから日経平均を予想するといういい加減な感じですが、とりあえず5割は超えた(0.554)なので良しとしよう。
ダウや為替を入れて行けば精度はかなり上がるのではないかな?