勝率65.83%のバイナリーオプションツールのバックテスト
youtubeを見ていたら私のバックテストと同じような方法を行っている方を見つけました。
エクセルでのバックテスト手法公開【バイナリーオプション】応用編/後編
www.youtube.com
私はエクセルでバックテストをするというよりは集計や各時間帯などエクセルでまとめて集計して確認しているといった感じでの利用ですが。
最終的にやってる事は同じ。
エクセルによるバックテストの検証内容がすごい
この方(タニアキラさん)のバックテストの数がすごい!! 645万通りとの事。
私の場合はMT4でのバックテストがメインなのでさすがにここまで出来ない。。。私の場合はある程度アタリを付けて動かしており結果がよさげな感じの場合はそこから上下にキリの良い数値などでバックテスト。
※FXの場合は最適化などである程度効率化出来るのですがバイナリーの場合は都度テストが必要。
検証項目も大体似ているなーと。
日本時間の時間帯勝率、Highのみの結果、Lowのみの結果など。
私は上記にプラスして曜日、分足勝率、値幅なども取得しています。
サイトを見ると谷さんが提供しているバイナリー用シグナルツールのEAの勝率が65.83%!!
これが本当であれば結構良い数値です。谷さんもサイト内(動画内だったかな)で書いていますが多くのバックテストはほぼ45%-55%程に落ち着く感じ。
60%(40%)を超えてくると期待値が上がります。
"直近一年の勝率 65.83% バイナリーオプションツール"を無料で提供しているので早速利用して検証してみました。
無料でダウンロードできるのですが無料版は機能に制限があります。
USDJPYのみ、通知はアラートのみで推奨は5分足です。
有料だと16通貨。
USDJPY,EURJPY,EURUSD,AUDJPY,AUDUSD,AUDNZD,CADJPY,USDCAD,NZDUSD,CHFJPY,USDCHF,EURAUD,GBPJPY,GBPUSD,EURGBP,GBPAUD
とりま無料で様子をみてみるのがお勧めかもです。
誤解を招くかもしれませんが私はタニアキラさんのツールを推奨している訳では御座いません。
必ず自身でバックテストなりフォワードテストなりして確認してからの方が良いです。
勝率65.83%のバイナリーオプションツールのバックテスト方法
■バックテスト環境
MT4
Ruby
Sqlite3
スプレッドシート
Windows
設定およびEAの設定方法など
谷あきらさんのline登録でEAをダウンロード出来るので、そのダウンロードしたEAをMT4に設定するだけです。
設定するとアラートと矢印が表示されるので、その矢印と同じ方向にエントリーします。
エントリーは矢印が向いている方向にエントリー、エントリーのタイミングは矢印が出た足の次足の頭でエントリーして締めは10分後(矢印で次の次の足で締め)になります。
事前準備とバックテストの方法
まずはストラテジーテスターでダウンロードしたEAを動かします。
動かすと矢印が表示されるのでその時刻を取得します。
矢印が出る時間を取得したらあとはヒストリカルデータでその矢印の次足のOpen価格と次の次のClose価格を比較して勝ったか負けたかを判定するといった感じ。
最初はエクセルで検証しようかとも考えましたが。。。難しいといいますかやり方わかんねーって事でプログラムで。
※PCにエクセルがインストールされていないってのもありますがw
MT4での検証も考えましたが日付やら外部ファイルやらを読み込みする処理は面倒なのでrubyで検証しました。
※アラート取得して検証出来ればMT4で全て解決なのですが誰か方法知りませんか? コメント欲しいです。
検証する為に5分足のヒストリカルデータが必要
MT4の"ツール" => "ヒストリーセンター" => "USDJPY" => "5分足(5M)"を選択してエクスポートを選択。
CSVでダウンロード。
CSVのデータ
CSV to Sqlite by ruby
最初CSVで検証しようかとも考えましたが、ヒストリカルデータ(5分足 2010年から最新まで)の桁数が80万桁になってくるのでちょっとつらいなーと。
って事でヒストリカルデータをデータベース化しました。
データベースはSQlite3を利用します。 sqliteを利用している理由は特にありません。DBだったらどれでもいいかと。
以下Rubyはすでにインストール済みとして話進みます。
Rubyのインストール方法などは過去記事をご参考に。
abitra.hatenablog.com
sqlite3をインストールします。
> gem install sqlite3
gem listでインストール出来たか確認。
問題なければMT4でダウンロードしたCSVをDB化します。
require 'sqlite3' require 'csv' def usdjpy5m_sqlite puts "DB制作開始" db = SQLite3::Database.new 'usdjpy5m.db' puts "テーブル作成" # create table sql = <<-SQL create table historical_data ( id integer primary key, date text, time text, open text, high text, low text, colse text, volume text ); SQL if db.execute("SELECT tbl_name FROM sqlite_master WHERE type == 'table'").flatten.include?("historical_data") == true puts "テーブルはすでにあるので書き込み開始" else db.execute(sql) end csv_file_name = "USDJPY5.csv" csv = "C:/Users/hogehoge(各個人の設定)path" + csv_file_name puts "書き込み開始" CSV.foreach(csv).each_with_index do |row, i| db.execute("insert into historical_data (date, time, open, high, low, colse, volume) values ('#{row[0].to_s}', '#{row[1].to_s}', '#{row[2].to_s}', '#{row[3].to_s}', '#{row[4].to_s}', '#{row[5].to_s}', '#{row[6].to_s}')") end puts "書き込み完了" db.close end usdjpy5m_sqlite
↑を実行するとusdjpy5m.dbが作成されるかと思います。
ここの処理は結構時間が掛かります。(コンビニ行ってコーヒー飲んで帰ってきてもまだ終わっていませんでした。これをそのままCSVで検証していたら結構大変だったかも。ヒストリカルデータはDB化してよかったかな。)
DB化したヒストリカルデータ
EAの矢印発生時刻の取得と精製
矢印の発生時刻などはログから取得しています。
EAを回すとログが保存されるのでそのログを開いてエントリーした行のデータを取得します。
取得したデータをエディタ等で張り付けて不要な部分を削除してCSV化させます。
Visual studio code 等であれば shift + alt で範囲を指定して削除等出来るのでそれらを活用して、日付、時刻、High or Low(upper, lower) にします。
この作業は5分も掛からないかと。
こんな感じでログデータを修正出来ると検証時に凄い楽。
今回はここまで次回エントリーの日時とDB化したヒストリカルデータを使ったバックテストの検証となります。
バックテストデータを少し公開。 2014- 2018年の5年間のデータです。
#############################
追記 2019年7月1日
バックテストの続きを書きました。
rubyでエントリーのCSVデータを読み込んで勝敗などの判定とスプレッドシートで勝率など計算させています。
#############################