バイナリーオプションなら機械学習で勝てるんじゃね?と思った結果。

2019年8月11日

スポンサードリンク
スポンサードリンク

簡単にお金稼げねぇかなぁ!!!!!

今現在、パイソンを使ってFxの自動売買を作成しているのですが、利益は出せているものの元手がそこそこ必要(最低で25万円)なのと、リターンもあまり多くない(週率:1%〜5%ほど)ので、元手を稼ぐ目的も兼ねて、もう少し即効性のある利益を得られるものはないものかと探していたところ、バイナリーオプションにたどり着きました。

 

話がきな臭くなってますが、別に自分は某Twi◯terなどに湧いてるバイオプビジネス厨みたいな変な勧誘とかはないので、安心してご覧ください。

単純に、自分は趣味の一環で研究目的として、バイナリーオプションにおけるHigh or Lowを機械学習で学習できないものかと単純な興味から行い、その結果を報告する趣旨でやってます。

気になる方は読んでいってください。

 

Fxの自動売買に関する記事は以下をどうぞ↓

自動取引BOT活動報告part1:RSIを主軸に置いたBOT.ver1

 

研究環境

今回は、機械学習の中でも深層学習を使用します。

初学者にも優しいkerasという、小難しいtensorflowを簡単に使用できる便利なツールを使います。

機械学習の環境設定に関する記事は別でまとめます。(まだ記事投稿してません、他サイトを調べてね。)

他にも他サイトでもたくさん紹介されているので、調べればすぐにこの環境は整います。今回を機に皆さんも機械学習を始めましょう。

計算機はmacOSを使用しています。確かtensorflowはLinuxかmacしか使えなかったと思うので、WindowsOSの方はすみません。。。

また、学習用のデータとしては、為替情報をたくさん持ってくる必要があるので、一般人でも利用可能なOANDA APIを使用してデータを取ってきます。

OANDA APIの使用方法はこちら↓

PythonでOANDA APIを使って、過去レートを5000件以上取得する方法

 

バイナリーオプションを実際に試す場所:High Low Australiaのクイック・デモ口座

High Low Australiaに関してはクイックデモ口座は、本登録なしでも簡単にバイナリーオプションの練習ができるので、今回はその利点を利用してこちらを使うことにします。

注意ハイローオーストラリアは自動取引の使用を禁止しています!

今回はあくまで営利目的で使用せず研究の一環として検証するために使用します。ここで紹介されてるモデルでハイローオーストラリアで取引するのは控えましょう。(やるなら他業者のバイナリーオプションで・・・

 

以上のような環境で研究をスタートさせました。

 

スポンサードリンク

研究の方針と結果

ごっつ良い加減に説明すると『データを用意する(データの成形)→モデルを組む→学習させる→結果の吟味』以下繰り返しです。

やることは単純なのですが、データの成形やら損失関数等考慮すべき項目が多いので、結構苦戦しました。

研究のゴールとしては、バイナリーオプションは、丁半博打のように今現在の価格から指定した時間後に値上がりするか(High)値下がりするか(Low)を賭けあう金融商品です。

ですので、理論上では適当にHIGHかLOWを選択すれば勝率は50%になるはずです。

なので、学習させた結果50%以上の勝率を上げることができれば、今回は成功とみなします。(統計的な有意性は今回は検証しないことにします。統計学はまだ勉強中ですので・・・)

 

データの取得

それでは為替情報を取得しましょう。

上記のOANDA APIの記事を参照して環境を整えたのち、以下のコードを実行させれば、csvファイルが保存されますので、それを使用していきます。

また、今回の対象通貨ペアはドル円の5分足を使用します。

取得するデータ数は、3万本分のローソク足とします。

 

また、以下のコードを.pyファイルにしても良いですが、もっと手軽に、ターミナルを開いて『python』を打ち込み、インタープリタを使用することで、以下のコードをコピペしてはっつければオッケーです。

コードが汚いのは、ガチ勢じゃないから許せ。

 

csvファイルが二つできますが、実際に使うのは’usdjpy.csv’の方にします。

これで、データの用意ができました。

 

データの成形

データの成形方法として、ローソク足二本分を1セットとして、値段の値動きを割合として成形します。(終値のみを使用する)

つまり、ローソク足のセットとして[100, 120]のとき、成形後は[1, 1.20]となります。計算式として、[100/100, 120/100]となっています。

これらを学習させて、次のローソク足の値動きの割合を予測させます。

では、データの成形を以下の手順で行います。

これもさっきと同様に、Pythonインタープリタを使えば、コピペすればオッケーです。

これで、学習用データとテスト用データの準備ができました。

学習用データとして22,500本分のローソク足の終値、テスト用データとして7,500本分のローソク足の終値を使用します。

モデルの作成→学習

今回は、あまり意味はないですが、時系列データ解析に有効なLSTMモデルを使用します。

ここでいよいよkerasを使いますので、詳しい使い方は本なりサイトなりを参照して勉強してください。一応宣伝も兼ねて、以下に自分が参考にした機械学習の本のアマゾンのリンクをはっつけときます。

 

【理論的な話を知りたい方】

初心者でも取っつきやすく、実際にPythonで機械学習のプログラムを作ることができる名著であるこれがオススメ!!

【実践的な内容を扱いたい方】

サンプルコードが豊富で、kerasなどの深層学習の環境設定の仕方を丁寧に解説しているので、理論的な話は難しそうだけど、とりあえず機械学習がなんたるかを知りたい!という人にオススメです。

解説も丁寧なので、ぜひお買い求めください。

【補助:webスクレイピングの基礎を知りたい方】

APIってなんだ?スクレイピングってなんだ?という方はこちらを購入してください。

また、こちらの本でも機械学習を取り扱っているので、上記で紹介している本の複合版でもあります。実際にweb上にアップされてる牛丼の画像を取り込んでいって、牛丼の種類(ネギ玉牛丼・紅生姜牛丼・普通の牛丼等)を機械学習で学習させて、牛丼画像を読み込ませてなんの牛丼なのか分類できるプログラムを作ることもできます。実践的な内容で難しくもなく面白いですよ。

以上、宣伝失礼しました。

それでは、以上の本をお持ちの方は、以下のコードを理解しながら、読み解いていただいで良いですし、ない方は、先ほどと同様に、コピペして使用してください。

 

これを実行させると、以下の画像のようなものが実行されて学習がスタートします。

機械学習に通じる人がこの画像を見たら、お前これ全然学習できてへんやんけって思われるかもしれません。

当然です。今回のモデルは損失関数として、平均自乗誤差を使用しています。なので、学習結果が教師データに対してぴったり一致しないと正確性(accのところ)が上がっていきません。

実質、このような為替データの次の値をぴったり予測することは非常に難しいことなので、この結果は自明です。

しかし、今回はハイかローを分類できることを目標にしているので、予測データは教師データに近い値であれば、それだけハイローの正確性は上がる(かもしれない)ということです。

結果の吟味

では、この学習させたモデルを使用して、テスト用データを突っ込んで、正確性を見てみましょう。

以下のコードを実行すれば、テスト用データでの学習とハイローの正確性を割合で求めてくれます。コピペにてどうぞ。

これを実行すると、数値はいくらか違うと思いますが、以下のような結果になります。

勝ち回数:3,686回、勝率:3,686/7,500 = 0.4914667

つまり、勝率49%です。

 

 

あかんやないか!!!!!!!

 

もはやハイローオーストラリアでの検証すらする気を無くしてしまいました。。。。。

 

ちなみに、ランダムにハイかローかを選んだ時の勝率も求めてみます。

一応回数は1000回繰り返し行い、平均の勝率を求めます。

結果

平均の勝率:49.1127%

標準偏差:0.58117

なので、中心極限定理を考慮すると、ランダムにハイかローを選択したときの勝率は

47.9503%〜50.2750%の間にある可能性が95%ほどあります。

 

ですから、今回の学習結果は、49.1467%なので、ほぼほぼランダムに選択したときと大差ないということになります。

つまり、統計的に言うと、これって別にランダムに選択しても同じような結果得られるし、このモデルもランダムに選ぶのと同様なんじゃね?ってなります。(で、あってますよね?)

 

なので、逆に、学習させたモデルにおいて標準偏差2σ分下の数値が、50.2750%以上であれば、統計的にそのモデルはランダムに選択したものに対して有意な差があることになります。(で、あってますよね?)

 

なので、それを目標に今後のモデル作成に尽力していこうと思います。

総括

今回は、損失関数を平均自乗誤差でやっているので、自作の損失関数を作成したりして、正解率を上げていこうかなと思います。

簡単な儲け話などないと言うのはよくいったもので、今回のも例にもれずと言う感じでした。。。

 

ではでは、また今度。

報告!!実際に利益の出たプログラムをnoteにて販売中!!

自分が長いこと研究して実際に1週間に3%ほどの利益を上げれている自動取引BOTを下記のリンク先にて公開中です!気になるかたはぜひご覧ください!

FxトレーダーでOANDA使ってる方、Pythonで作ったこの自動売買BOTを試して欲しいです。

また、新しく人工知能の知識を用いた線形回帰をベースとした特殊な強化学習のモデルを作成しました。かなりのパフォーマンスを上げることができたいますので、是非お試しください。

【論文実装編】線形回帰モデルのFx自動売買ー学習パート+取引モデルのパート統合

 

スポンサードリンク