Bitcoin 裁定取引と自動取引 abitra.netのブログ

Bitcoinの自動売買のあれこれ

MT4 1分足のモデリング品質を25%=>99.9%にする方法

ぶせな氏の1分足のスキャルピングのEAのバックテストをしていて初めて知ったのですが、MT4の1分足のバックテストは通常は25%以下にしかならない様です。

"MT4の1分足テストで起こる致命的な現象"
https://fxantenna.com/post-5419/


簡単に理解するとMT4のティックはランダムで動いており、なおかつ1分足はMT4の最小単位なので、その1分足を前提としたスキャルピングのバックテストは当てにならないよーって感じ。
MT5だと多少はマシになっている感じとの事ですが、MT5でもランダムで動いているとか何とか。。。


実際バックテストを動かしてみて1分足の場合はスキャルピングモデリング品質は25%以上にはなりません。

f:id:hogehoge_kato:20190528154100p:plain


なのである程度バックテストして動作に問題なければデモ口座などでフォワードテストして様子をみるしかないかーって考えてました。

そんな時に知ったのが
"Tick Data Suite"

先日のブログでコメントを頂き、調べた所かなり良い感じ!!1分足にも使えそう。って事で早速ダウンロード。
14日は無料で使えるとの事なので、使ってみて問題なければフルライセンス購入。

現在日本語版リリースキャンペーンを行っている+以下URLから申し込むと10%OFF。

"Tick Data Suite 日本語版発売キャンペーン!【期間限定】"
https://www.eaika.tokyo/entry/2019/05/23/222922


現在私も14日無料で利用中。利用してみた感想はかなり良いのでLifetime package(買取型)を購入予定。

とりま今回は無料で出来る方法をご案内。

●まずはサイトにアクセスしてアプリをダウンロード

https://eareview.net/downloads
V2.2.29 beta
Released: 23.05.2019

f:id:hogehoge_kato:20190528154324p:plain

が良いと考えます。(日本語化対応したのは新しいのかと思いますので。)


●アプリを開いて14日無料申請をします。すると登録したメールにlicense keyが届くのでそのライセンスキーをアプリに登録

f:id:hogehoge_kato:20190528154343p:plain


f:id:hogehoge_kato:20190528154400p:plain


●各通貨の三角を押すとヒストリカルデータをダウンロードします。

f:id:hogehoge_kato:20190528154417p:plain

●ダウンロード完了後にMT4を開くと以下の様な表示になっているかと思います。
"ティックデータを使う" が追加されているのでチェックをつけて、いつも通りバックテストを行います。

f:id:hogehoge_kato:20190528154435p:plain


以上です。

結果ですがTick Data Suiteを利用した1分足のモデリング品質は99.9%になっているかと思います。

●通常のMT4のみの結果(モデリング品質 25.0%)

f:id:hogehoge_kato:20190528154518p:plain

f:id:hogehoge_kato:20190528154542p:plain




●Tick Data Suiteを利用した結果(モデリング品質 99.9%)

f:id:hogehoge_kato:20190528154456p:plain


f:id:hogehoge_kato:20190528154505p:plain



うーん。結果が全然違う。


正直このテストをするまではぶせな氏やべー利益がめっちゃ出ると内心浮かれていたのですが色々考えないと。。。頑張ります。

高スペックPCに変えたらMT4のバックテストが爆速でワロタ

新しいPCに変えたらMT4のバックテストの世界が変わった!!

本当に何となくですがYoutube投稿及び動画編集したいなーって考えてましてPCを新しくしました。
※別に何の動画とかは考えてませんw絵本の読み聞かせかFXの自動売買の投稿なんてのもいいかなーと。


今までメインのPC1台とサブ3台(リモートデスクトップ)で運用など行っていました。
メインでプログラムを作成と確認をして、サブでバックテスト、フォワード、実弾。 

サブPCは4-5年前のちょい高性能ノートパソコンを中古で購入。(秋葉原でモニターやキーボード破損のを格安にて。リモートするのでモニターもキーボードも割れててもOK)

メインはsurface goって低スペックPC。プログラム構築及び通常の取引等は全く問題ないのですがバックテストが遅い。
バックテストを回している間は他の作業が全く出来ない!! ブラウザ操作ももたつく。

酷いとテキスト入力が1秒遅れたり動かないでイライラマックス!!(バックテストの時)

※なのでバックテストはすべてサブPCにお任せ。


でメモリ、ビデオカード及びSSDも安くなってきたのでBTOでデスクトップを購入。(core i7 9700K メモリ32gb gtx1660)
10年以上ぶりのデスクトップ。

高スペックPCだとバックテストの速度も変わる事は知っていましたがここまで変わるのかと。。。

体感だと10倍位違うw 実際どの程度違うのか検証してみました。

■期間は2018年の一年間で自作EA。
※本当は2004年から行おうとも考えたのですがsurface goだと時間が掛かりすぎて断念。面倒になって一年だけ。

****************************

今までsurface go
Intel Pentium 4415Y @ 1.60GHz
Average CPU Mark 2226
メモリ8GB

f:id:hogehoge_kato:20190528044659j:plain

f:id:hogehoge_kato:20190528044708j:plain

実際の完了までの時間
4分17秒

****************************

新しいデスクトップ
Intel Core i7-9700K @ 3.60GHz
Average CPU Mark 17190
メモリ32GB

f:id:hogehoge_kato:20190528044719j:plain

f:id:hogehoge_kato:20190528044728j:plain

実際の完了までの時間
1分11秒

****************************

■結果 約4倍程新しいPCのバックテストは早い。
ほかのEAなどでもテストしてみましたが約4-7倍ほど早いデス!!数年掛かるテストになるほどテスト結果が早くなります。


surface goはひどい時は3日掛かったバックテストもありましたが、今あのテストをnewPCでするとどれぐらいで終わるんだろう。。。

FX ドテン君 フォワードテスト 約一か月状況報告

自分用メモ
FXのドテン君運用初めて約一か月以上経って結果報告。
基本ほぼ放置です。

約月利20%ほどになります。(四時間足のみ)
一時間足の場合は微妙にマイナスです。
※正確な数値はノウハウにもなってきますので言えませんがざっくり数値にて。

****************************

■運用内容
特定の期間でブレイクしたタイミングでドテンを繰り返していくトレンドフォロー型の自動売買
期間は各通貨ペア、各時間足で異なりバックテスト最適と思われる期間を設定している感じ


■設定状況など
運用の時間足は一時間、四時間。
※短時間(15分とか5分とか)もバックテストしたけどあまり良い成果が出なかったので行っていません。


■感想など
約一か月なのでさほど期待もしていませんが途中経過を見てる限りではなかなかよさげーな印象。
今月はトランプさん発言などもあったりしてトレンドが発生したのが大きかった。

最大で一時期月利50-70%いったタイミングもありました。

フォワードテスト中なのでは基本裁量による利確損切は行いませんが、実運用だとライントレードと組み合わせて利確のポイントを予め決めると良いかもと考えました。

ドテン君のエントリーのタイミングは良かったのですが利確のタイミングがウーンといった感じ。

ただライントレードによる利確ポイントを探る行為はさらに利益が出るタイミングを自身の裁量で逃がすことにも繋がる行為。
自身のロジックとプログラムをどこまで信じられるかにもよるw 余裕があれば2口座でドテンのみと、ドテン+裁量の組み合わせで運用してみると良いのかも。


■今後
とりま夏までは様子をみる。

現状のポジションはマイナスですw
プラスの通貨ペアもあるけどねーレンジだと辛いかなー
f:id:hogehoge_kato:20190528014927p:plain

MQL4(MT4) 夏時間、冬時間をバックテストで反映させる。プログラムである程度自動だけど計算方式は手動。

バイナリーオプションの自動売買でバックテストで集計していて重要になってくるのが時間帯。
FXの場合も時間帯である程度特徴が表れると考えられるがバイナリーオプションはさらに顕著かなーと。

バイナリーはエントリーはいつでも出来るけど締めが決まっているので時間帯の勝率計算は重要。

ただ今までは正直夏、冬のどちらか一方で諦めてましたw 時差7時間に統一して集計していた感じ。
本当はあかんのでしょうけど勝率100%ってのは絶対ないし、ある程度勝率が高ければOKでしょ。1時間のズレやし。って感じ。

ですが先日バイナリーオプションの師匠から日本時間の特定のある足の勝率はどう?って感じの事を言われたので検証してみました。

ある時間のある足は1日に一回しかないので夏時間、冬時間を計算してやる必要があります。

バックテストで夏時間冬時間を反映させる方法を検索しても中々見つからない中で力ずくで夏時間を判定している方がおり参考にさせて頂きました。
"MT4のEAバックテストでサマータイムを正確に計算する"
https://auto-ts.net/archives/1926

力ずくと書いていますが個人的に好きな方法です。一発で何やってるか分かるし他に方法なさそうやんし、しゃーないやんw
(でも他に良い方法あればこっそり教えて下さいw)

datetime time_x = 25200; // 7*60*60 7時間後(冬)の設定,  21600 6*60*60 時間後(夏)の設定


bool IsSummerTime(){
   //3月第2日曜日午前2時〜11月第1日曜日午前2時
   switch(Year()){
      case 2005: if(StringToTime("2005.3.13")<= Time[0] && Time[0] <=StringToTime("2005.11.6"))time_x = 21600; break;
      case 2006: if(StringToTime("2006.3.12")<= Time[0] && Time[0] <=StringToTime("2006.11.5"))time_x = 21600; break;
      case 2007: if(StringToTime("2007.3.11")<= Time[0] && Time[0] <=StringToTime("2007.11.4"))time_x = 21600; break;
      case 2008: if(StringToTime("2008.3.9") <= Time[0] && Time[0] <=StringToTime("2008.11.2"))time_x = 21600; break;
      case 2009: if(StringToTime("2009.3.8") <= Time[0] && Time[0] <=StringToTime("2009.11.1"))time_x = 21600; break;
      case 2010: if(StringToTime("2010.3.14")<= Time[0] && Time[0] <=StringToTime("2010.11.7"))time_x = 21600; break;
      case 2011: if(StringToTime("2011.3.13")<= Time[0] && Time[0] <=StringToTime("2011.11.6"))time_x = 21600; break;
      case 2012: if(StringToTime("2012.3.11")<= Time[0] && Time[0] <=StringToTime("2012.11.4"))time_x = 21600; break;
      case 2013: if(StringToTime("2013.3.10")<= Time[0] && Time[0] <=StringToTime("2013.11.3"))time_x = 21600; break;
      case 2014: if(StringToTime("2014.3.9") <= Time[0] && Time[0] <=StringToTime("2014.11.2"))time_x = 21600; break;
      case 2015: if(StringToTime("2015.3.8") <= Time[0] && Time[0] <=StringToTime("2015.11.1"))time_x = 21600; break;
      case 2016: if(StringToTime("2016.3.13")<= Time[0] && Time[0] <=StringToTime("2016.11.6"))time_x = 21600; break;
      case 2017: if(StringToTime("2017.3.12")<= Time[0] && Time[0] <=StringToTime("2017.11.5"))time_x = 21600; break;
      case 2018: if(StringToTime("2018.3.11")<= Time[0] && Time[0] <=StringToTime("2018.11.4"))time_x = 21600; break;
      case 2019: if(StringToTime("2019.3.10")<= Time[0] && Time[0] <=StringToTime("2019.11.3"))time_x = 21600; break;
      case 2020: if(StringToTime("2020.3.8") <= Time[0] && Time[0] <=StringToTime("2020.11.1"))time_x = 21600; break;
      case 2021: if(StringToTime("2021.3.14")<= Time[0] && Time[0] <=StringToTime("2021.11.7"))time_x = 21600; break;
      case 2022: if(StringToTime("2022.3.13")<= Time[0] && Time[0] <=StringToTime("2022.11.6"))time_x = 21600; break;
      case 2023: if(StringToTime("2023.3.12")<= Time[0] && Time[0] <=StringToTime("2023.11.5"))time_x = 21600; break;
      case 2024: if(StringToTime("2024.3.10")<= Time[0] && Time[0] <=StringToTime("2024.11.3"))time_x = 21600; break;
      case 2025: if(StringToTime("2025.3.9") <= Time[0] && Time[0] <=StringToTime("2025.11.2"))time_x = 21600; break;
      case 2026: if(StringToTime("2026.3.8") <= Time[0] && Time[0] <=StringToTime("2026.11.1"))time_x = 21600; break;
      case 2027: if(StringToTime("2027.3.14")<= Time[0] && Time[0] <=StringToTime("2027.11.7"))time_x = 21600; break;
      case 2028: if(StringToTime("2028.3.12")<= Time[0] && Time[0] <=StringToTime("2028.11.5"))time_x = 21600; break;
      case 2029: if(StringToTime("2029.3.11")<= Time[0] && Time[0] <=StringToTime("2029.11.4"))time_x = 21600; break;
      case 2030: if(StringToTime("2030.3.10")<= Time[0] && Time[0] <=StringToTime("2030.11.3"))time_x = 21600; break;
      case 2031: if(StringToTime("2031.3.9") <= Time[0] && Time[0] <=StringToTime("2031.11.2"))time_x = 21600; break;
      case 2032: if(StringToTime("2032.3.14")<= Time[0] && Time[0] <=StringToTime("2032.11.7"))time_x = 21600; break;
      case 2033: if(StringToTime("2033.3.13")<= Time[0] && Time[0] <=StringToTime("2033.11.6"))time_x = 21600; break;
      case 2034: if(StringToTime("2034.3.12")<= Time[0] && Time[0] <=StringToTime("2034.11.5"))time_x = 21600; break;
      case 2035: if(StringToTime("2035.3.11")<= Time[0] && Time[0] <=StringToTime("2035.11.4"))time_x = 21600; break;
      case 2036: if(StringToTime("2036.3.9") <= Time[0] && Time[0] <=StringToTime("2036.11.2"))time_x = 21600; break;
      case 2037: if(StringToTime("2037.3.8") <= Time[0] && Time[0] <=StringToTime("2037.11.1"))time_x = 21600; break;
      case 2038: if(StringToTime("2038.3.14")<= Time[0] && Time[0] <=StringToTime("2038.11.7"))time_x = 21600; break;
   }
   return false;
}

やってることは単純。
ベースに7時間設定して特定の期間(夏時間)は6時間を返しているだけw
※時間を返しているのはCSVに日本時間を書き込んだり色々するため。単純な判断であれば0,1でOKかな。

ほぼブログ記事のコピーです。
記事を有難う。

MT4 Dukascopy 時間がズレる? ヒストリカルデータのダウンロード、取得方法 注意点

自分用メモ。
現在私はDukascopyを利用してMT4のヒストリカルデータの取得を行っています。
で今まであまり気にしなかったのですが実はデータのタイムゾーンが違っていたみたいで色々試して解決出来たので共有です。

■私の検証環境

バイナリーオプションの検証
MT4 Titan
ヒストリカルデータ FXDD
FXの検証
MT4 FXCM
ヒストリカルデータ Dukascopy

を前提としています。

なぜ利用しているヒストリカルデータデータが違うのか?
MT4を利用し始めた昨年はFXDDを利用していましたが2016年の夏辺り(6月か8月辺り、うろ覚えですが)でデータが抜けていたのでFXでは使いにくいなーって事でDukascopyを利用しています。

MT4を分けているのは単純に一緒のMT4だと検証中に、どっちの検証しているのか分からなくなるのを防ぐため。
あとFXCMは手数料など高いのでFXCMで利益出るのであれば他のFX会社でも利益出るでしょって発想。


で今回間違えてFXCMでバイナリーオプション検証してヒストリーセンターのタイムゾーンのアレコレに気が付いた感じ。

要約するとDukascopyのタイムゾーンはズレている可能性があるから気を付けてね。って感じです。
何も設定せずにDukascopyからヒストリカルデータをダウンロードした場合、数時間ズレています。
正確にはズレていないのですが私の利用しているMT4の多くが標準時+2時間(GMT+2)の物が多いので、それに合わせたヒストリカルデータが必要になります。

FXの場合は時間は関係ない手法で自動売買を行っていたので気が付いていませんでした。
逆にバイナリーオプションは時間を気にしないといけないのですが、バイナリーオプションはFXDDのヒストリカルデータを利用して検証していたので今まで偶然で助けられていました。

でDukascopyのデータでバイナリーを検証したら、あれっ?となり気が付いた感じです。
バイナリは時間的な意味も加味する必要が多いのである程度正確なヒストリカルデータが必要かと考えます。
FXも必要っちゃ必要なんですが売り時も自分で決めれるのである程度柔軟に対応出来るので。。。


前提としてDukascopyでhst方式でヒストリカルデータをダウンロードすると標準時間でしかダウンロード出来ません。


■以下最初から時間をズラしてヒストリカルデータをダウンロードする方法。
Dukascopyのアプリには既にダウンロードしている前提ですのでご了承下さいませ。
※ダウンロードはデモアカウント作成するとアプリがダウンロード出来たかと。
https://www.dukascopy.jp/forex/demo_fx_account/?hp#main-nav-block

まずDukascopyのチャートアプリを立ち上げます。

設定=>オプション設定=>一般

f:id:hogehoge_kato:20190524154514p:plain

プラットフォームの時間 UTC +2時間に変更

f:id:hogehoge_kato:20190524154536p:plain

チャート=>フラット期間のチャート表示 =>全てフラット

f:id:hogehoge_kato:20190524154551p:plain

表示=>ヒストリカルデータの取得

f:id:hogehoge_kato:20190524154614p:plain

設定=> 形式 CSV ここ重要です。 hst形式だとなぜかUTC+2時間が反映されません。 CSVだけ。

f:id:hogehoge_kato:20190524154636p:plain

後は時間範囲=>カスタム(期間を選択)=>取得したい通貨ペア選択 => ビッドとアスクは ビッドだけでいいと思います。

f:id:hogehoge_kato:20190524154648p:plain

以上になります。
Dukascopyを利用してヒストリカルデータの取得やダウンロードを行った人は気を付けて下さいませ。



ここまで書いて思いましたがCSVでダウンロードした場合MT4側の標準機能で時間をズラしてインストール出来るっぽいのでそれを利用してもいけるかもです。
ただhst形式だと時間をズラしてのインストール出来ないのでCSV形式でダウンロードになるかな。

ぶせな 最強のFX 1分足スキャルピング の自動売買 EA バックテスト

バイナリーオプションの検証がある程度終わったのでFXの検証を行ってみました。

結論から言うと本に書かれている内容でプログラム(EA)を組んで自動売買すると勝てる。(かもしれない。)
※バックテストのみでしかもタイミングが良かった可能性もあるのでご了承下さい。

テスト詳細
通貨ペア:USDJPY
ローソク足:一分足
期間:2018/1/1-2019/5 一年ちょいですね。


本の詳細を語れないので分かりにくいかもしれませんがぶせな氏のMT4の推奨設定で大丈夫です。
ただ本の中でもライントレードの裁量を組み合わせている事を考えると単純にエンベロープの判定だけでは爆勝ちは難しいかもです。

ぶせな 最強のFX 1分足スキャルピング


爆勝ち出来ない要因としてはエンベロープ0.1%での勝率が低いのが原因でジワジワと資産を減らしていく感じです。
ラインタッチでエントリーは行っておりません。本にも書かれていますがある条件でエントリーを行います。その条件はテスターでは再現は出来ていないのでその影響もあるかもしれません。

■バックテスト詳細結果
テストバー数 519060
モデルティック数 44126893
モデリング品質 24.94%
不整合チャートエラー 0
初期証拠金 10000.00
スプレッド 現在値 (12)
純益 252.15
総利益 4061.56
総損失 -3809.41
プロフィットファクタ 1.07
期待利得 0.09
絶対ドローダウン 166.16
最大ドローダウン 231.69 (2.30%)
相対ドローダウン 2.30% (231.69)
総取引数 2704
売りポジション(勝率%) 1221 (37.35%)
買いポジション(勝率%) 1483 (44.44%)
勝率(%) 1115 (41.24%)
負率 (%) 1589 (58.76%)
最大
勝トレード 39.28
敗トレード -27.80
平均
勝トレード 3.64
敗トレード -2.40
最大
連勝(金額) 10 (75.56)
連敗(金額) 16 (-28.88)
最大
連勝(トレード数) 106.58 (7)
連敗(トレード数) -56.40 (3)
平均
連勝 2
連敗 3

スキャルピングなのに勝率が悪い気がする。

f:id:hogehoge_kato:20190522034609p:plain

f:id:hogehoge_kato:20190522034805p:plain


f:id:hogehoge_kato:20190522034738p:plain


本にも書かれていましたが筆者もMT4では運用していない様なのでMT4と相性が悪いのかもしれません。

また時期の問題等も考えられます。
私が行ったのはUSDJPYのみで2018年と2019年直近でバックテストをしています。


文句ばっかり言っても仕方ないので勝てる様に調整するとしたら

1) エンベロープの0.15以上で行う。 エントリー回数が少なくなるが勝率は高くなると考えられる。
2) エントリーの次足でエントリーしてみる。
特に大きな反発ポイントの時ほど次足でエントリーする方が良い様な気がする。 (いくつかの場面によるので、きちんとバックテストを行う必要あり)
3) ラインタッチでエントリー
↑これは勝てるかどうか分かりませんが検証してみるのは有りかと考えます。逆行したらぶせな氏のエントリー条件で追従していけばいいのかなーとも。ナンピンロジックになる気もするので微妙ですが。。。

もしぶせな氏の最強FXの本を読んで自動売買(EA)組んだ方いれば情報交換してくれると嬉しいです。



■追加編集■
調整1(エンベロープ0.15)をバックテストしましたので共有。
これはいけそうw
条件は同じ USDJPY、1分足、2018/1/1-2019/5

テストバー数 519060
モデルティック数 44126893
モデリング品質 24.94%
不整合チャートエラー 0
初期証拠金 10000.00
スプレッド 現在値 (12)
純益 1334.52
総利益 2480.16
総損失 -1145.64
プロフィットファクタ 2.16
期待利得 3.48
絶対ドローダウン 4.87
最大ドローダウン 76.59 (0.73%)
相対ドローダウン 0.73% (76.59)
総取引数 383
売りポジション(勝率%) 177 (57.06%)
買いポジション(勝率%) 206 (72.33%)
勝率(%) 250 (65.27%)
負率 (%) 133 (34.73%)
最大
勝トレード 39.28
敗トレード -27.80
平均
勝トレード 9.92
敗トレード -8.61
最大
連勝(金額) 11 (91.41)
連敗(金額) 4 (-27.41)
最大
連勝(トレード数) 104.77 (6)
連敗(トレード数) -56.40 (3)
平均
連勝 3
連敗 1

f:id:hogehoge_kato:20190522041728p:plain

"ぶせな" 最強のFX 15分足デイトレード の本を買いました。

自分用メモ。
"ぶせな" 氏の新刊情報を全く知らなかったのですが、本ブログにて前日の記事にコメントを頂いたので即購入。

最強のFX 15分足デイトレード 単行本(ソフトカバー) – 2019/5/18


まだ予約受付中との事でいつ届くのかは分かりませんが楽しみです。
最近のぶせな氏はデイトレードに移ってるんですかねー本を読む前に調べてみたいと思います。

本のレビュー及びプログラム構築は後日。


買った事を報告してもあれなんでプチノウハウ。
今回amazonで本を購入したのですが、もしamazonで少しでも安く買いたいとの事でしたらAmazonギフト券がお勧めです。
Amazonギフト券は金券ショップ的なの所でも買えたかと思いますが、私がお勧めするのは"アマテン amaten"です。
ネット完結で1割近く安くギフト券を買うことが出来るので、アマテンでアマギフを買って決済する感じです。
https://amaten.com/exhibitions/amazon
f:id:hogehoge_kato:20190518034216p:plain

クレカ決済が使えないので多少手間ですが、楽天銀行を持っている方であれば即入金で送金手数料掛からずにアマギフ買えます。
年間数万以上Amazonで買い物している方であればお勧めです。

↓こんな感じでAmazonギフト券を持っていると自動的にギフト券優先で決済されます。
アマテンで購入してアカウントにデポジットする手間がありますが数カ月毎に大量購入してデポジットしておけばそこまで手間ではありません。

f:id:hogehoge_kato:20190518034242p:plain


ってもアマテンはいつでも一割引きでアマギフ買えるわけではないのでご注意を。
※高い時は95%位でしか買えません。

Amazonギフト券以外も買える様なのですが殆ど出品されていないので実質Amazonのみかなーとw


最強のFX 15分足デイトレード 単行本(ソフトカバー) – 2019/5/18