思ったことをそのままに

思ったことをそのままに

自分が好きなようにいろんな記事を書きます

とある大学生がFXでお小遣いを稼げるようになるまで 【第3話 初学習でまさかの勝率...】

 

 

これまでのあらすじ

とある工学部情報系の大学に通う大学生,オレオ.

前回は,機械学習に必要不可欠である,大量の過去の取引データを入手するこができた.

 

第2話はこちらからどうぞ

oreohaoleo.hatenablog.com

 

 

 

Google Colab,死す 

とりあえず,ダウンロードしたcsvファイルを取りこめるようにしようと,さっそくGoogle Colabにプログラムを打ち込んだオレオ.

しかしここで解決できない問題が発生してしまう.

エラー文は撮り忘れた..

TypeError:'str' object is not callable

とうエラー文が出たのだが,これがどうやっても解決できなかった.

エラー文で検索してみると,'str'という変数を使うと起こるエラーらしいことはわかったのだが,オレオはそんな変数をどこにも使っていない.

f:id:oreohaoleo:20200911122558p:plain

ちなみにローカルのUbuntu上で実行したところ何も問題が起きなかったため,プログラムは正しいと思われる.(もちろんドライブはマウント済み)

 

一日寝かせて実行してみるとこれが問題なく動く....

 

「は????昨日悩んでた時間返せ!!!!!!!!!!」

 

と,こんな謎事件が起こったため,オレオは今後Google Colabを使うことをやめた.

 

Google Colabしか使える環境にない読者には本当に申し訳ない...

 

 

 

 

モデルをつくりたい!が,先にバックテストとやらをやる

気を取り直して,,,

 

これまでに機械学習に関する記事をたくさん見てきたが,そもそもFXに関しても初心者であるため,予想の立て方が全くわからない.

 

単に「機械学習と言っても,どんな手法を用いて,どんなデータどのぐらい与えればいいのかもわからない.

  

前回,大量の過去データをダウンロードしたときの参考記事の続編があったため,同様に参考にしながら進めていく.

 

前回参考にした記事

qiita.com

 

今回参考に進めていく記事

qiita.com

 

どうやらバックテストとやらを実装していくらしい.

OANDAではデモ環境などを使ってシミュレーションを行う方法が用意されており、アルゴリズムの検証用として非常に信頼がおけますが、実時間と同じテスト時間が必要となる事が難点です。
例えば3ヶ月の期間のテストを実施しようと思ったら本当に3ヶ月の時間がかかってしまいます。

しかし例えば過去36ヵ月分のデータを用意して、最初の33ヵ月を学習用データ、残りの3ヵ月分をバックテスト用データとし、その3ヵ月をあたかも未来のデータかのようにシミュレーションができれば、迅速に繰り返しテストが可能となります。

引用:https://qiita.com/THERE2/items/3cef22f8bf63cc3ed362

 

 

「たしかに,過去データはたくさんあるからすぐに何回でもシミュレーションできるのは賢い」

「リアルタイムでめっちゃ時間かけてテストしてしまうところだったよ..」 

 

今回はBacktesting.pyというものを使うらしく,pipで簡単にインストールできるとのこと.

 

「【pip install backtesting】っと」

f:id:oreohaoleo:20200911121158p:plain

「あれ,見つからない..」


 「もしかして,これもPython3.7以降じゃないと対応してないやつ??」

 

「【python3.7 -m pip install backtesting】っと」

python〇〇 -m と文頭に付け加えることで指定したバージョンのPythonでpip installができるようになる

f:id:oreohaoleo:20200911121256p:plain

「おおおお!いけた!!!」

 

天才的なひらめきによりうまくいったため,思わず自分に惚れたオレオ.

 

「これで下準備はオッケーらしい」

 

 

 

書いてある通りコピペして実行してみる

 実行したソースコードはこちら

import datetime
import pandas as pd
from backtesting import Strategy
from backtesting import Backtest

df=pd.read_csv('./data/USD_JPY_201601-201908_M10.csv', index_col='Datetime')
df.index = pd.to_datetime(df.index)

class myCustomStrategy(Strategy):
def init(self):
pass

def next(self):
self.buy if self.data.Close[-1]> self.data.Open[-1] else self.sell()

bt = Backtest(df[100000:], myCustomStrategy, cash=100000, commission=.00004)
print(bt.run())

(Qiitaみたいな感じにできなくてごめんなさい.Tabキーが効かなかったので,インデントがおかしいです.これは実行しなくてもいいです.) 

 

ちなみに,

書いてある内容は1mmも理解できていません.

 

1から理解するのはめちゃめちゃ時間かかるから,とりあえずどんどん実行してなんとなく理解していこうという精神.

 

実行するとこんな結果が出た.

f:id:oreohaoleo:20200911164019p:plain

参照している記事にそれぞれの項目の解説があります.

 

参考にしてる記事だと,全部数字が出てるみたいなんだけどなぜか「NaN」になってるものがある.

 

csvファイルも同じだし,コードはそのままコピペしてるのになんで結果が違うんだろう..」

 

「まあ動いてるっぽいし,これが本命ではないからとりあえずヨシ!」

 

これは作成したモデルを評価するためのスクリプトだからとりあえずこれでいいだろうという精神.

 

 

 

ようやくモデルの作成に入る

またしても続編の記事を参考にコピペしていく.

qiita.com

 

とりあえずで,書いてあるコードをコピペして実行してみる.

 

コードはこちら(ソースコードを共有するためだけにGoogle Colabを使ってます.Google Colab上では実行できません)

colab.research.google.com

(実行する前に,作成したモデルを保存する「models」というファイルを作成しておくこと)

 

「よし,いけええええ!」

f:id:oreohaoleo:20200915095332p:plain


 「おおおおお!なんか学習してる!」

 

 5分ほどで終わった.(もちろん実行環境によって変わります) 

 

 

 

つくったモデルをバックテストで評価する

参考にしている記事の通りにコピペしてもうまくいかなかったので,学習プログラムの文を追記してあげたら動いた.

 

コードはこちら(ソースコードを共有するためだけにGoogle Colabを使ってます.Google Colab上では実行できません)

colab.research.google.com

 

結果はこちら

f:id:oreohaoleo:20200915101153p:plain

「なんか警告出てるけど,動いてるからいいか..」

 

今回は30エポックで学習して勝率がちょうど50%とのこと.

www.st-hakky-blog.com

資産を10万円でスタートして最後は9万4千円になったらしい.

 

 

 

「負けてんじゃん!!!!!」

 

 

 

はじめての学習では負けてしまったオレオ.

今後は勝率を上げれるように調整しつつ,リアルタイムの為替情報を与えられるように改良していく予定.

 

次回に続く...