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

Bitcoinの自動売買のあれこれ

バイナリーオプション キリ番エントリー手法 バックテスト 勝率57%前後

私がバイナリーオプションで師匠から教わった手法で一番最初に教わったのがキリ番エントリー手法でした。
一番簡単で説明もしやすいので初めてバイナリーオプション又はFXをする人にはお勧め出来る手法の一つかと。

そもそもキリ番ってなんぞや?


簡単に説明するとキリの良い単位の値です。

具体的には0銭、10銭、20銭、30銭、40銭、50銭、60銭、70銭、80銭、90銭になります。
USDJPY通貨ペアの場合 108.40、 110.90、 113.00といった値になります。

f:id:hogehoge_kato:20191118125711p:plain


0銭はダブルオーと言ったりもします。 109.00 ← 0銭は00と表現されるからね。

何でキリ番を意識されるの?


端的に答えるとキリがいいからw

トレーダー心理としてキリ番で利確、損切を行うからと考えています。


もしあなたが含み益(含み損)を持っているとした時にどこで利確(損切)を行いますか?
指値(逆指値)を入力する場合でも価格をどの様に入力しますか?


人の心理としてキリ番で決済を行うと考えます。


buyの場合、109.98で利確するよりも110.00又は109.90までいったら利確しようと考えます。
sellの場合でも 109.44で損切するよりも109.40又は109.50で一旦損切しようと考えると思います。


指値、逆指値キリ番辺りで設定すると考えます。


人が行うトレードである限り中途半端な数値で利確損切は意識しにくい(行いにくい)ですよね。


バイナリーオプションでのキリ番の考え方


ここからが本題。


上記でキリ番を説明した通り、キリ番では利確と損切両方入りますので値動きが激しくなります。
利確で足が伸びて損切で足が戻されるのでヒゲが出来る事が多いです。
エントリーはその伸びたタイミングで逆張りエントリーです。


こんな感じ

f:id:hogehoge_kato:20191118125822p:plain


キリ番に反発して戻った場合は何度かそのキリ番にタッチなどしてどちらか一方のパワーがなくなった時にそのパワー方向に延びたりします。


なので何度かタッチしたキリ番バイナリーオプションでエントリーは禁止。
何度もタッチしたキリ番は足が伸びたっきり返ってこない可能性があります。
狙うは最初の一発目のキリ番タッチした足のみです。


f:id:hogehoge_kato:20191118125833p:plain


上記以外にも色々注意点などはありますが、そこら辺はノウハウにもなってくるので気が向いたら書くかもw


キリ番にも逆張りが効きやすい価格と効きにくい価格がある

全てのキリ番でエントリーしたらいいのか?


ダメ。
逆張りが効きやすいキリ番と効きにくいキリ番があります。
バックテストして確かめました。

キリ番逆張りエントリーのバックテスト結果


■バックテスト環境
通貨ペア : USDJPY
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程
5分足


■エントリー条件
逆張り
キリ番タッチ即エントリー + とある条件(秘密)

キリ番 win回数 lose回数 勝率
00銭 294 221 57.09%
10銭 235 273 46.26%
20銭 265 273 49.26%
30銭 267 243 52.35%
40銭 224 288 43.75%
50銭 284 272 51.08%
60銭 262 272 49.06%
70銭 273 258 51.41%
80銭 271 257 51.33%
90銭 256 244 51.20%

5年で5232回エントリーしています。


ある程度予想はしていましたが00銭の逆張りは強いです。
40銭の逆張りエントリーはダメですね。順張りの方がいいかもです。

f:id:hogehoge_kato:20191118134653g:plain


上記結果は即エントリーした場合の結果ですが、次足頭エントリーの場合は?10分満期の場合は?などバックテストしてみると面白い結果になります。


ヒントになりますがキリ番エントリーは即エントリーよりも次足や10分満期の方が成果が良いです。
是非バックテストして勝率確かめてみて下さい。


キリ番のエントリーの使い方


キリ番だけでエントリーするのは止めた方がいいです。
他のエントリーと重なった場合のエントリー根拠の一つして利用するのが良いと考えます。


一応00銭のみはキリ番エントリーはありかもしれませんが基本は他のキリ番と同様にエントリー根拠の一つして利用するのが良いと考えます。

未来予測でFXの自動売買(Miraiyosoku_navi)

本記事はFX取引の自動売買の記事です。


最近機械学習等々のプログラムでFXの取引又はバイナリーオプション取引出来ないか考えています。
聖杯探しですねーw
そんな邪な考えで色々検索していた時に見つけたインジが未来予測ナビ(Miraiyosoku_Navi.ex4)です。


詳細は以下URLから確認して下さいませ。


www.fxnav.net


引用

現在から過去へチャートをさかのぼり、近似しているパターンを見つけ出します。最大3つまで似ているパターンを探し出し、それらがどう動いたのかを黄色のラインで表示します。ラインの種類により一致率が異なります。




実際チャートに表示させるとこんな感じです。


f:id:hogehoge_kato:20191118012209p:plainf:id:hogehoge_kato:20191118012212p:plain


過去のチャートから直近のチャートと近しいのを表示してくれています。
必ず表示される訳ではなく近しいチャートパターンが無い場合は何も表示されません。


また近しいのが1つ2つしかない場合でも未来予測可能です。

未来予測(Miraiyosoku_navi)でエントリーしてみたらどうなるのか?


ここから本題。

この未来予測(Miraiyosoku_navi)を利用してFXでエントリーした場合勝てるのかって事。


検証は5分足と1時間足で行ってみました。


エントリーする根拠


1. 少し先の価格が現在の価格より低いか高いかの判断

2. 第一近似、第二近似、第三近似が表れた時のみエントリーする
(第一のみでもエントリーしてもいいのですが一応第三近似まで表示された時のみの安牌仕様)

未来予測(Miraiyosoku_navi)の可視化


f:id:hogehoge_kato:20191118012307g:plain

少し先の動きをラインで表示させてみました。
チャート見直した時に未来予測(Miraiyosoku_navi)が良い感じなっているのか確認しています。


未来予測と合ってる場合もあるのですが殆どの場合は外れていますw
たまたま目視で見ていた所が外れているだけの可能性もあるので何とも言えませんが正直この時点で、うーんって感じでしょうかw


未来予測(Miraiyosoku_navi)の自動売買


少し先の価格が高い場合はbuyで低い場合はsellで自動売買組んでみました。

トレール注文でもよかったのですが、とりまどの程度効くのか見てみたいって事もあり指値指値で注文しました。


注文の様子

f:id:hogehoge_kato:20191118012606g:plain

未来予測(Miraiyosoku_navi)の結果


一応最適化させて複数設定で試しましたが何やっても利益出ませんでした。

細かく書くとあれですがプロフィットファクターは0.8前後になります。


未来予測(Miraiyosoku_navi)の使い方


実際動かしてみると分かると思いますが未来予測(Miraiyosoku_navi)だけでエントリーはしない方がいいです。
参考にはなりそうです。


ただ個人的に今後利用はしないかなー


まとめ


過去チャートと類似するパターンを未来表示させるってのは方向性としては間違っていないと思うのですがねー


何か思ってるのと表示が違う気がします。具体的には未来予測させるデータ量が少ない様な気がします。
直近のデータのみでの判断だけではなく過去のチャートパターンを予めインプットしておいた方がいいかなーと。
また下位足のチャートもどうするのかなどの検討が必要かな。


やはりこの辺りはpythonで検証するなりしないと難しいかも。

RD-ComboでFX検証 バックテストでその実力を確認してみた

皆大好きRD_COMBO。


先日のバイナリーオプション検証した結果を案内した影響なのかRD_COMBOを利用したバイナリーオプションのバックテスト検証をいくつか頂いています。


もしバイナリーオプションのバックテスト希望でしたらお気軽にご連絡下さいませ。
hogehogekatoジーメールまで。


過去の検証依頼など
abitra.hatenablog.com



意外と皆さんRD-Comboを知ってるんですねー
正直私は全く知らなかったインジなので。。。
RD-Comboの中身を知らない人に簡単に説明すると中身としてはMA、RVI、ADXCCIを組み合わせたものになります。
その組み合わせ方といいますか計算方法が少し独特な感じ。初見ではさっぱり意味が分かりませんでしたw

バイナリーオプションのRD-Comboの検証依頼


バイナリーオプションのバックテスト検証依頼内容としては
例えばボリンジャーバンドとRD-Comboをエントリーとして使えないか?○○のインジと組み合わせたエントリーなどなどの勝率確認。


結果からいえば何かしら他のインジと組み合わせるとRD-Combo単体よりも勝率は高くなりますがエントリー回数が下がるので利益で見るとRD-Combo単体の方が良かったりします。
いくつかのインジを組み合わせてみましたが勝率は60%を超えないですねー
※USDJPYのみ測定しています。


元々RD-Combo単体でも勝率は56-57%程になります。
例えばボリバンを組み合わせて検証しても勝率は57%前後で1%も変わりません。
その組み合わせた分エントリー回数が少なくなるので結果利益計算した場合は単体よりも低い場合があります。
※通貨ペアや色々な条件があるので一概には言えませんがねー



それでもRD-Comboと組み合わせをお勧めしているサイトなどは結構あります。
例えば以下ブログではRD-ComboとボリンジャーバンドとRSIを組み合わせたなんちゃらーって書いていますがダマされたらダメですよw

http://krm-fx.site/3266krm-fx.site


バックテストしてみたら分かりますが勝率60%行きません。
時間帯をしぼれば60%を超える時間帯もありますが、上記サイトで書かれている様な8割は超えません。
※ド短期でたまたま連続して勝った時間帯などを抽出すれば8割とかはあるかもしれませんが、そんなの意味ないです。
長期のバックテスト結果で判断する必要があります。



前置きが長くなりましたが今回はFXの話。

RD-ComboでFXエントリーしたらどうなるのか?


今回はバイナリーオプションではなくFXのエントリーでRD-Comboを利用してエントリーしてみたらどうなるのか検証してみたいと考えます。


エントリー条件は二本連続した次足エントリーで逆張りです。

バイナリーオプションのエントリーと同じですね。


参考コードは以下です。
iCustomで呼び出して使っています。

extern bool rdcombo_set1= false;
extern bool rdcombo_set2= false;
extern int rdcombo_set3= 1000;
extern int rdcombo_set4= 5;
extern bool rdcombo_set5= false;
extern bool rdcombo_set6= false;


    double icustom_test0 = iCustom(Symbol(), 0, "rd-combo-indicator", rdcombo_set1, rdcombo_set2, rdcombo_set3, rdcombo_set4, rdcombo_set5, rdcombo_set6, 1, 1);
    double icustom_test1 = iCustom(Symbol(), 0, "rd-combo-indicator", rdcombo_set1, rdcombo_set2, rdcombo_set3, rdcombo_set4, rdcombo_set5, rdcombo_set6, 1, 2);
    double icustom_test2 = iCustom(Symbol(), 0, "rd-combo-indicator", rdcombo_set1, rdcombo_set2, rdcombo_set3, rdcombo_set4, rdcombo_set5, rdcombo_set6, 2, 1); 
    double icustom_test3 = iCustom(Symbol(), 0, "rd-combo-indicator", rdcombo_set1, rdcombo_set2, rdcombo_set3, rdcombo_set4, rdcombo_set5, rdcombo_set6, 2, 2);
    
    if (icustom_test0 == -5.0 && icustom_test1 == -5.0){ // 買いエントリー
        return(1);
    } else if (icustom_test2 == 5.0 && icustom_test3 == 5.0){ // 売りエントリー
        return(2);
    }
    

私は適当にintで戻して1なら買い、2なら売りで売買を行う様にしています。

エントリーは次足頭でエントリーです。

決裁方法としては逆指値とトレーリングストップがメインになってくるかなーと。


とりま今回は逆指値でどの程度効いているのか確認してから決裁は考えたいと思います。

RD-ComboをFXでエントリーした結果


RD-ComboをFXでエントリーした結果は以下

通貨ペア : USDJPY
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程
一時間足


f:id:hogehoge_kato:20191108124747p:plainf:id:hogehoge_kato:20191108124750p:plainf:id:hogehoge_kato:20191108124753p:plainf:id:hogehoge_kato:20191108124756p:plain


損益 取引総数 プロフィットファクタ 獲得利益 ドローダウン$ ドローダウン% パラメーター
27.16 506 1.02 0.05 154.03 1.52% StopLoss=1000 TakeProfit=500
18.86 506 1.01 0.04 131.23 1.30% StopLoss=900 TakeProfit=500
3.96 506 1.00 0.01 148.68 1.47% StopLoss=900 TakeProfit=600
2.48 506 1.00 0.00 176.66 1.74% StopLoss=1000 TakeProfit=600
-6.70 506 1.00 -0.01 262.10 2.57% StopLoss=1000 TakeProfit=800
-10.90 506 0.99 -0.02 248.11 2.43% StopLoss=900 TakeProfit=800
-16.56 506 0.99 -0.03 124.87 1.24% StopLoss=800 TakeProfit=600
-20.99 506 0.99 -0.04 195.85 1.94% StopLoss=1000 TakeProfit=700
-22.23 506 0.98 -0.04 125.46 1.24% StopLoss=800 TakeProfit=500
-25.19 506 0.92 -0.05 37.91 0.38% StopLoss=100 TakeProfit=200
-26.91 506 0.99 -0.05 218.45 2.15% StopLoss=800 TakeProfit=800
-31.61 506 0.91 -0.06 38.51 0.39% StopLoss=100 TakeProfit=300
-33.62 506 0.92 -0.07 49.76 0.50% StopLoss=100 TakeProfit=100
-37.26 506 0.90 -0.07 42.40 0.42% StopLoss=100 TakeProfit=400
-37.36 506 0.90 -0.07 49.67 0.50% StopLoss=100 TakeProfit=500
-37.47 506 0.98 -0.07 299.63 2.94% StopLoss=1000 TakeProfit=900
-41.74 506 0.98 -0.08 153.73 1.53% StopLoss=900 TakeProfit=700
-46.36 506 0.89 -0.09 63.28 0.63% StopLoss=100 TakeProfit=900
-50.18 506 0.98 -0.10 283.00 2.78% StopLoss=900 TakeProfit=900
-51.04 506 0.96 -0.10 136.02 1.35% StopLoss=900 TakeProfit=400
-55.01 506 0.87 -0.11 68.60 0.69% StopLoss=100 TakeProfit=800
-56.15 506 0.86 -0.11 62.70 0.63% StopLoss=100 TakeProfit=600
-56.98 506 0.97 -0.11 137.87 1.37% StopLoss=800 TakeProfit=700
-58.09 506 0.86 -0.11 68.00 0.68% StopLoss=100 TakeProfit=700
-60.00 506 0.77 -0.12 62.65 0.63% StopLoss=100 TakeProfit=100
-61.63 506 0.96 -0.12 178.50 1.77% StopLoss=600 TakeProfit=800
-61.85 506 0.97 -0.12 248.93 2.45% StopLoss=800 TakeProfit=900
-69.45 506 0.86 -0.14 89.50 0.89% StopLoss=200 TakeProfit=200
-69.99 506 0.95 -0.14 124.93 1.25% StopLoss=600 TakeProfit=600
-71.66 506 0.88 -0.14 95.30 0.95% StopLoss=200 TakeProfit=300
-73.02 506 0.96 -0.14 194.33 1.93% StopLoss=600 TakeProfit=900
-80.69 506 0.95 -0.16 141.73 1.41% StopLoss=700 TakeProfit=600
-81.57 506 0.95 -0.16 221.07 2.19% StopLoss=700 TakeProfit=800
-82.24 506 0.77 -0.16 95.70 0.96% StopLoss=200 TakeProfit=100
-83.59 506 0.94 -0.17 118.65 1.19% StopLoss=600 TakeProfit=700
-88.20 506 0.93 -0.17 204.47 2.03% StopLoss=1000 TakeProfit=400
-92.18 506 0.93 -0.18 142.86 1.43% StopLoss=600 TakeProfit=500
-93.33 506 0.84 -0.18 101.52 1.02% StopLoss=300 TakeProfit=200
-95.57 506 0.77 -0.19 103.03 1.03% StopLoss=300 TakeProfit=100
-96.68 506 0.93 -0.19 161.67 1.61% StopLoss=700 TakeProfit=500
-98.69 506 0.91 -0.20 132.69 1.33% StopLoss=900 TakeProfit=300
-102.10 506 0.86 -0.20 127.62 1.27% StopLoss=600 TakeProfit=200
-104.00 506 0.94 -0.21 251.92 2.49% StopLoss=700 TakeProfit=900
-104.99 506 0.78 -0.21 129.46 1.29% StopLoss=600 TakeProfit=100
-105.41 506 0.85 -0.21 116.52 1.17% StopLoss=500 TakeProfit=200
-105.62 506 0.76 -0.21 108.76 1.09% StopLoss=400 TakeProfit=100
-106.89 506 0.93 -0.21 142.14 1.42% StopLoss=700 TakeProfit=700
-110.04 506 0.84 -0.22 140.35 1.40% StopLoss=200 TakeProfit=500
-113.70 506 0.84 -0.22 137.50 1.37% StopLoss=200 TakeProfit=600
-113.77 506 0.88 -0.22 132.69 1.33% StopLoss=600 TakeProfit=300
-114.41 506 0.77 -0.23 124.06 1.24% StopLoss=1000 TakeProfit=100
-115.28 506 0.91 -0.23 157.03 1.57% StopLoss=800 TakeProfit=400
-116.48 506 0.85 -0.23 175.79 1.75% StopLoss=200 TakeProfit=100
-116.93 506 0.89 -0.23 136.02 1.36% StopLoss=800 TakeProfit=300
-117.77 506 0.83 -0.23 126.71 1.27% StopLoss=400 TakeProfit=200
-119.69 506 0.75 -0.24 120.60 1.21% StopLoss=500 TakeProfit=100
-124.09 506 0.81 -0.25 148.28 1.48% StopLoss=200 TakeProfit=400
-124.66 506 0.84 -0.25 177.00 1.77% StopLoss=200 TakeProfit=900
-126.19 506 0.75 -0.25 130.60 1.31% StopLoss=900 TakeProfit=100
-126.45 506 0.75 -0.25 128.57 1.29% StopLoss=800 TakeProfit=100
-126.48 506 0.88 -0.25 194.84 1.94% StopLoss=300 TakeProfit=900
-126.89 506 0.83 -0.25 140.93 1.41% StopLoss=300 TakeProfit=300
-133.26 506 0.90 -0.26 215.22 2.14% StopLoss=400 TakeProfit=900
-134.14 506 0.88 -0.27 173.45 1.73% StopLoss=300 TakeProfit=100
-139.25 506 0.91 -0.28 222.53 2.22% StopLoss=500 TakeProfit=900
-139.98 506 0.85 -0.28 162.34 1.62% StopLoss=500 TakeProfit=300
-141.32 506 0.88 -0.28 166.57 1.67% StopLoss=600 TakeProfit=400
-142.40 506 0.72 -0.28 146.92 1.47% StopLoss=700 TakeProfit=100
-142.57 506 0.92 -0.28 232.71 2.32% StopLoss=600 TakeProfit=100
-142.72 506 0.81 -0.28 184.74 1.85% StopLoss=200 TakeProfit=800
-144.22 506 0.87 -0.29 208.32 2.08% StopLoss=1000 TakeProfit=300
-146.54 506 0.82 -0.29 156.90 1.57% StopLoss=800 TakeProfit=200
-146.66 506 0.83 -0.29 160.71 1.61% StopLoss=400 TakeProfit=300
-148.18 506 0.82 -0.29 158.07 1.58% StopLoss=700 TakeProfit=200
-150.96 506 0.82 -0.30 166.39 1.66% StopLoss=900 TakeProfit=200
-151.91 506 0.88 -0.30 191.82 1.91% StopLoss=700 TakeProfit=400
-152.81 506 0.85 -0.30 200.36 2.00% StopLoss=300 TakeProfit=800
-156.22 506 0.82 -0.31 197.31 1.97% StopLoss=1000 TakeProfit=200
-156.62 506 0.79 -0.31 182.02 1.82% StopLoss=200 TakeProfit=700
-157.87 506 0.88 -0.31 190.26 1.90% StopLoss=500 TakeProfit=600
-158.12 506 0.84 -0.31 180.15 1.80% StopLoss=300 TakeProfit=600
-161.13 506 0.84 -0.32 181.01 1.81% StopLoss=400 TakeProfit=400
-161.16 506 0.81 -0.32 182.16 1.82% StopLoss=300 TakeProfit=400
-163.57 506 0.84 -0.32 178.34 1.78% StopLoss=700 TakeProfit=300
-163.67 506 0.89 -0.32 220.59 2.20% StopLoss=500 TakeProfit=800
-166.54 506 0.85 -0.33 197.48 1.97% StopLoss=500 TakeProfit=400
-166.79 506 0.88 -0.33 200.70 2.01% StopLoss=400 TakeProfit=100
-167.71 506 0.87 -0.33 217.78 2.17% StopLoss=400 TakeProfit=800
-168.14 506 0.82 -0.33 190.83 1.91% StopLoss=300 TakeProfit=500
-173.66 506 0.84 -0.34 196.98 1.97% StopLoss=400 TakeProfit=500
-173.78 506 0.85 -0.34 196.45 1.96% StopLoss=400 TakeProfit=600
-177.40 506 0.85 -0.35 209.77 2.10% StopLoss=500 TakeProfit=500
-178.59 506 0.92 -0.35 291.53 2.90% StopLoss=800 TakeProfit=100
-186.98 506 0.90 -0.37 281.04 2.80% StopLoss=700 TakeProfit=100
-187.52 506 0.92 -0.37 331.67 3.29% StopLoss=900 TakeProfit=100
-192.22 506 0.81 -0.38 212.94 2.13% StopLoss=300 TakeProfit=700
-193.60 506 0.86 -0.38 232.38 2.32% StopLoss=500 TakeProfit=700
-194.58 506 0.84 -0.38 219.00 2.19% StopLoss=400 TakeProfit=700
-205.72 506 0.87 -0.41 266.61 2.67% StopLoss=500 TakeProfit=100
-214.28 506 0.91 -0.42 350.10 3.48% StopLoss=1000 TakeProfit=100




うーん。厳しいかなー

FX 移動平均のクロスオーバー取引 MA(移動平均線)によるFX取引のバックテストレビュー


米国Futures Truth社の『The Ultimate Trading Guide』邦訳『究極のトレーディングガイド』という本によると長らく機能し続ける堅牢なシステムは5つの仕組みが含まれてるそうです。



今回は5つの仕組みの一つ
移動平均のクロスオーバー
を利用したバックテスト。



『究極のトレーディングガイド』



過去記事

abitra.hatenablog.com


移動平均のクロスオーバー取引


先に謝っておきます。本を最後まで読んでないので今回の方法は本に書かれていた方法と違うと思います。
といいますか移動平均のクロスオーバーの所を一切読んでないので本ブログ記事は独自のロジックですw


文章だけで判断していますが移動平均のクロスオーバーって事はMAのゴールデンクロス時に買いでデットクロス時には売りって事なのかと考えます。
FXの教科書的な本をみると必ずのっている手法で一番最初に勉強する事になるのかなーと。

移動平均線を利用した手法の基本!移動平均線クロスオーバー


手法としてはゴールデンクロス時に買い、デットクロス時に売りですが単純な方法では勝つのは難しいと考えます。
ダマし回避の方法として3本の移動平均線を利用するのがベターかな。

方法としては短期、中期、長期の3本の移動平均線を利用する。

エントリーは短期と中期で行うのですが、長期の移動平均線を利用してダマしを回避。
具体的には買いで入る時は短期と中期がゴールデンクロスした時に長期よりも上の場合にエントリーする。

売りで入る時は短期と中期がデットクロスした時に長期がよりも下を確認してエントリーする。


こんな感じ


f:id:hogehoge_kato:20191108025506p:plainf:id:hogehoge_kato:20191108025510p:plain


ダマしとして長期足を判定に入れる事でトレンド方向の時にのみにエントリーする事になり無駄な負けを減らせると考えます。




少し調べてみたら同じ事を書いてるサイトがありました。
内容は殆ど同じですが参考になります。


forex-novice.com


プログラム構築 移動平均線クロスオーバー


仮説が出来たので早速プログラム書いてみました。
移動平均線はMT4の初期から入っておりメソッドもあるのでiMAで簡単に利用できます。
三本必要なので以下の様な感じになります。


参考プログラムコード

extern int ma1_set = 5;
extern int ma2_set = 20;
extern int ma3_set = 40;

extern int modoriashi = 1;

    double ma1 = iMA(NULL,0,ma1_set,0,MODE_SMA,PRICE_CLOSE,modoriashi);
    double ma2 = iMA(NULL,0,ma2_set,0,MODE_SMA,PRICE_CLOSE,modoriashi);
    double ma3 = iMA(NULL,0,ma3_set,0,MODE_SMA,PRICE_CLOSE,modoriashi);
    double ma1_1 = iMA(NULL,0,ma1_set,0,MODE_SMA,PRICE_CLOSE,modoriashi + 1);
    double ma2_1 = iMA(NULL,0,ma2_set,0,MODE_SMA,PRICE_CLOSE,modoriashi + 1);
    double ma3_1 = iMA(NULL,0,ma3_set,0,MODE_SMA,PRICE_CLOSE,modoriashi + 1);
    


こんな感じで後はゴールデンクロスなのかデットクロスなのかを判断してやればOK

FX 移動平均のクロスオーバーのバックテスト結果


結論から言うと利益は出ると思います。


決裁方法としては


1, 逆指値指値決済
2, 反対側のクロスが出た時に決済
3, トレーリングストップ

があるかと考えます。

※全て公開するとのは手間なので今回は1の逆指値指値決済の結果から。

バックテスト期間及び条件


通貨ペア : USDJPY
時間 1H(1時間)
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程
エントリーロットは0.01lot固定

バックテスト結果

純益 337.47 総利益 1235.45 総損失 -897.98
プロフィットファクタ 1.38 期待利得 0.63
絶対ドローダウン 100.21 最大ドローダウン 104.51 (1.04%) 相対ドローダウン 1.04% (104.51)



f:id:hogehoge_kato:20191108031158p:plain


一応綺麗な右肩上がり。


懸念点


MAの期間をどうするか問題。
MAの期間ですが一応ある程度決まった数値はあるのですが殆どの人がこの期間を採用しているとか無い気がします。


以下サイトからの引用になりますが短期派、中期派、長期派と見ている移動平均線の期間は違うのかと。

fx-quicknavi.com

短期派(日足) 「5・10・25」「5・20・40」
中期派(日足) 「5・25・75」「20・40・200」「25・75・200」
長期派(週足) 「13・26・52」


個人的には1時間、4時間足でエントリーを考えいるので短期又は中期の設定になるかと考えています。

この辺りはバックテストなどしてアタリを見つけていくしかないのかもしれません。
その場合は過度な最適化を行うとダメな気がするので、程よく利益が出る期間を調べていくと良いかもしれません。



まとめ


移動平均線による取引は王道中の王道ですかね。
安定して利益がでるかもしれないことを確認出来ました。


上記バックテストの結果は逆指値指値決済だけの結果ですが利益を最大化させるのであれば2, 3の決済方法で行うのが良いかもしれません。特にトレーリングストップなどは相性が良さそう気がします。

バイナリ検証案件 RD-Comboのバイナリーオプション勝率 自動売買EA制作 バイナリーオプションサインツール無料開発案件


とあるバイナリーオプションのEAのバックテスト検証内容ご紹介。


バックテストしたEA名などはお伝え出来ないのですがインジの中身はRD-Comboというインジそのままだったって話。

バイナリーオプション用のインジゲーターのバックテスト検証依頼を頂きまました。


インジゲーターとしてはサインツールで逆張りエントリーのサインが出たら次足エントリー
マーチンは2回までで勝率97%とうたっているもの。




面白い事に頂いたインジゲータのファイルにはEA4とMQ4の両方のファイルが入っています。
通常はEA4だけなので何のインジゲータが使われているのか分かりませんし、設定なども分からないので気にしません。


バックテストしてはiCustomで数値やサインの確認が出来ればバックテスト出来るので気にしないってのが本音でしょうか。
バックテストした結果を確認して成果が良い場合に初めてどんなロジック組み込まれているのか気にし始めますw


まぁ今回はMq4ファイル入っているし直接このMq4ファイル内に検証ロジック書いて、データ取ればいいかーって事で検証しました。
検証ロジック自体は難しくなかったのですが、Mq4ファイルのロジックの書き方が面白いといいますか、よくこんなロジック思いついたーって感じの内容でした。


この時点ではRD-Comboの事は全く知らないので、すげーなーって関心していた感じです。

バックテスト完了 勝率 57%


悪くない数値です。
全てエントリーした場合57%前後に収まるので、時間帯単位でみると特定の時間帯などは61%前後出ているので優秀な部類に入ると考えています。
エントリー回数も結構あったのでねー


依頼頂いた方に諸々報告して終了したのですが、ここ数日このロジックが気にはなっていました。
で本日ソースコードの検索したらヒット。


RD-Comboだった話です。
※RD-Comboの特徴のサブウィンドウの表示は消され、ソースからもその表示は消されていたので全く気が付いていませんでした。

RD-Combo とは

RD-Comboとは、オシレーター系のインジケーターです。
オシレーター系のインジケーターなので、相場の売られすぎ、買われすぎがわかる指標になっています。
RD-Comboは、既存のMT4には入っていないのですが、意外とバイナリーオプションで人気のあるインジケーターです。
オシレーター系のインジケーターなので、主に逆張りトレードに使われます。


binary-inception.com



エントリーロジックも上記ブログで書かれている

緑のヒストグラムが2本連続形成されたら、次の足で「Lowエントリー」をします。
赤のヒストグラムが2本連続形成されたら、次の足で「Highエントリー」をします。


このまんま。

エントリー箇所のキャプチャー


f:id:hogehoge_kato:20191020183037p:plainf:id:hogehoge_kato:20191020183042p:plainf:id:hogehoge_kato:20191020183045p:plain





それ以外のインジは一切入っていませんでした。



詳細を書く事が出来ませんがこれを販売していた方は相当な高額商品で販売していましたので何かほかに入ってないかなーと細かく見てみましたがRD-Comboのみw
バイナリーオプション用に矢印の表記とエントリー結果が分かるような感じにはなっていましたが、エントリー自体には何の工夫もありませんでした。
未検証ですが下手に他のインジを追加するよりもRD-Comboそのままの方が成果が良いのかもしれません。またはエントリー回数が下がる可能性があるのでねー


にしてもRD-Comboそのままのコードをあたかも最強のインジゲータとして売るのはすげーなーと関心するとともにバレる様なファイル構成にして販売していたのかなーと考えるとアホかなーとも思ったり、わけわかんないですw



結論


バイナリーオプションでRD-Comboのバックテストをしたら57%だったて話。


検証環境
USDJPY
5分足
2014-2018年の5年間


もしインジ選びで迷ったらRD-Comboを使えば幸せになれるかもね。

RD-Comboのソースコードはこちら


RD-Comboのコード内容。
面白いコードですよね?

//+------------------------------------------------------------------+
//|                                                     RD.COmbo.mq4 |
//+------------------------------------------------------------------+


#property indicator_separate_window

#property indicator_buffers 4
#property indicator_color1 Gray
#property indicator_color2 OrangeRed
#property indicator_color3 LawnGreen
#property indicator_color4 Gold

#property indicator_maximum 5
#property indicator_minimum -5

#property indicator_level1 4
#property indicator_level2 -4

//---- buffers
extern bool DoAlertForEntry= false;
extern bool DoAlertForExit= false;
extern int HistorySize= 1000;
extern int ColorThreshold= 5;
extern bool DebugLogger= false;
extern bool DebugLoggerData= false;

double LongSignalBuffer[],
       ShortSignalBuffer[],
       NeutralBuffer[],
       SignalBuffer[];

double Osc[], 
       Osct3[];
       

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
{
   SetIndexStyle(0,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexBuffer(0,NeutralBuffer);
   SetIndexEmptyValue(0, 0.0);

   SetIndexStyle(1,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexBuffer(1,ShortSignalBuffer);
   SetIndexEmptyValue(1, 0.0);

   SetIndexStyle(2,DRAW_HISTOGRAM,STYLE_SOLID,2);
   SetIndexBuffer(2,LongSignalBuffer);
   SetIndexEmptyValue(2, 0.0);

   SetIndexStyle(3,DRAW_LINE);
   SetIndexBuffer(3,SignalBuffer);
   // SetIndexEmptyValue(3, 0.0);

   IndicatorShortName("RD-Alert()= ");

   return(0);
}



int start()
{
   static bool didentryalert= false, didexitalert= false;
   int counted_bars= IndicatorCounted(),
         lastbar, result;

   if (Bars<=100) 
      return(0);
      
   if (counted_bars>0)
      counted_bars--;
      
   lastbar= Bars - counted_bars;
   lastbar= MathMin(HistorySize, lastbar);

   // 
   // precalc forecast oscillater array
   //   
   ArrayResize(Osc, Bars);
   ArrayResize(Osct3, Bars);
   ForecastOsc(0, Bars, Osc, Osct3, 15, 3, 0.7);

   // 
   // check for signals
   //   
   Combo(0, lastbar, LongSignalBuffer, ShortSignalBuffer, NeutralBuffer, SignalBuffer, ColorThreshold);
        
        
        
   //
   // do alerting
   //             
   if (DoAlertForEntry>0 && SignalBuffer[0]!=0 && SignalBuffer[1]==0) {
      if (!didentryalert) {
         Alert("RD signals trade entry on ", Symbol(),"/",Period());
         didentryalert= true;
      }
   }
   else {
      didentryalert= false;
   }  

   if (DoAlertForExit>0 && SignalBuffer[0]==0 && SignalBuffer[1]!=0) {
      if (!didexitalert) {
         Alert("RD signals trade exit on ", Symbol(),"/",Period());
         didexitalert= true;
      }
   }
   else {
      didexitalert= false;
   }

   return (0);
}




//+------------------------------------------------------------------+
//| Combo Indicator (All-In-One signal)                              |
//+------------------------------------------------------------------+
int Combo(int offset, int lastbar, double &longsignalbuf[], double &shortsignalbuf[], double &neutralbuffer[], double &signalbuffer[], int colthreshold)
{
   
   int  val, 
        lookupidx= 0,
        signalstate= 0;

   double 
         adxmain,
         adxplus,
         adxminus,
         adxmain2,
         adxplus2,
         adxminus2,
         cci, 
         rvimain,
         rvisignal, 
         ma5, 
         ma20, 
         ma100, 
         ma200,
         fcblue, 
         fcred;
         

   if (lastbar>Bars)
      lastbar= Bars;
  
       
   for (int i= lastbar+5; i>=offset; i--) {
  
      lookupidx= i;

      ma5= iMA(NULL, 0, 5, 0, MODE_LWMA, PRICE_CLOSE, lookupidx);
      ma20= iMA(NULL, 0, 20, 0, MODE_LWMA, PRICE_CLOSE, lookupidx);
      ma100= iMA(NULL, 0, 100, 0, MODE_LWMA, PRICE_CLOSE, lookupidx);
      ma200= iMA(NULL, 0, 200, 0, MODE_LWMA, PRICE_CLOSE, lookupidx);
   
      cci= iCCI(NULL, 0, 5, PRICE_CLOSE, lookupidx);
   
      rvimain= iRVI(NULL, 0, 1, MODE_MAIN, lookupidx);   
      rvisignal= iRVI(NULL, 0, 1, MODE_SIGNAL, lookupidx); 
   
      adxmain= iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MAIN, lookupidx);
      adxplus= iADX(NULL, 0, 14, PRICE_CLOSE, MODE_PLUSDI, lookupidx);
      adxminus= iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MINUSDI, lookupidx);

      adxmain2= iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MAIN, lookupidx+1);
      adxplus2= iADX(NULL, 0, 14, PRICE_CLOSE, MODE_PLUSDI, lookupidx+1);
      adxminus2= iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MINUSDI, lookupidx+1);
   
      fcblue= Osc[lookupidx];   // forecast
      fcred= Osct3[lookupidx];  // forecast

      /*     
         fcblue= iCustom(NULL, 0, "RD-ForecastOsc", 0, lookupidx);
         fcred= iCustom(NULL, 0, "RD-ForecastOsc", 1, lookupidx);
   
      double
         fc2blue= iCustom(NULL, 0, "RD-ForecastOsc", 0, lookupidx);
         fc2red= iCustom(NULL, 0, "RD-ForecastOsc", 1, lookupidx);
      
      if (fc2blue!=fcblue) 
         Print("#", lookupidx, "Blue ", fc2blue, " ", fcblue);
      
      if (fc2red!=fcred) 
         Print("#", lookupidx, "Red ", fc2red, " ", fcred);
      */
      
      
      //
      // calc entry signal
      //

      int maval= 0,
          ccival= 0,
          rvival= 0,
          adxval= 0,
          fcval= 0;
  
  
      if (ma5>ma20)
         maval= 1;
      else
         maval= -1;
         
         
      if (cci>0)
         ccival= 1;
      else
      if (cci<0)
         ccival= -1;
      else
         ccival= 0;

         
      if (fcblue>0 && fcred>0 && fcblue>fcred) 
         fcval= 1;
      else
      if (fcblue<0 && fcred<0 && fcblue<fcred) 
         fcval= -1;
      else
         fcval= 0;
         

      if (rvimain>0 && rvisignal>0 && rvimain>rvisignal)
         rvival= 1;
      else
      if (rvimain<0 && rvisignal<0 && rvimain<rvisignal)
         rvival= -1;
      else
         rvival= 0;

      
      if (adxmain>adxmain2 && adxplus>adxplus2 && adxmain>20 && adxplus>20)
         adxval= 1;
      else
      if (adxmain>adxmain2 && adxminus>adxminus2 && adxmain>20 && adxminus>20)
         adxval= -1;
      else
         adxval= 0;
         
              
      val= maval + ccival + fcval + rvival + adxval;
      
      
      //      
      // exit signal      
      //
      if (signalstate!=0) {

         if (signalstate==1 && (rvimain<0 || rvisignal-rvimain>0.2)) {
             signalstate= 0;
         }

         if (signalstate==-1 && (rvimain>0 || rvimain-rvisignal>0.2)) {
             signalstate= 0;
         }

         if (DebugLogger)
            Print(TimeToStr(Time[i]), " #", i, " rvimain= ", rvimain, ", rvisignal= ", rvisignal, ", diff= ", DoubleToStr(rvimain-rvisignal,2), 
                                               " => signalstate", signalstate);
      }

      
      if (i<=lastbar) {    // ignore the first few loops that were only used to catch previous signal state
      
         if (DebugLogger || DebugLoggerData){
            if (DebugLoggerData) {
               Print(TimeToStr(Time[i]), " # --------------------------------------------------------------------------");
               Print(TimeToStr(Time[i]), " #", i, " MA 5/20/100/200", ma5, "/", ma20, "/", ma100, "/", ma200);
               Print(TimeToStr(Time[i]), " #", i, " CCI ", cci, ", RVI ", rvimain, "/", rvisignal);
               Print(TimeToStr(Time[i]), " #", i, " ADX(now)  main/+DI/-DI ", adxmain, "/", adxplus, "/", adxminus);
               Print(TimeToStr(Time[i]), " #", i, " ADX(prev) main/+DI/-DI ", adxmain2, "/", adxplus2, "/", adxminus2);
               Print(TimeToStr(Time[i]), " #", i, " Forecast blue/red ", fcblue, "/", fcred);
            }
         
            if (DebugLogger || DebugLoggerData)
               Print(TimeToStr(Time[i]), " #", i, " MAtrend(", maval, ") + CCI(", ccival, ") + FC(", fcval, 
                                                  ") + RVItrend( ", rvival, ") + ADXtrend(", adxval, ") => ", val, " # trade state =", signalstate);
         }

 
         longsignalbuf[i]= 0;
         shortsignalbuf[i]= 0;
         neutralbuffer[i]= 0;

         if (val>=colthreshold) {
            longsignalbuf[i]= val;
            signalstate= 1;
         }
         else
         if (val<=-colthreshold) {
            shortsignalbuf[i]= val;
            signalstate= -1;
         }
         else
            neutralbuffer[i]= val;
            
         signalbuffer[i]= 2*signalstate;
      }
   }

   return (signalstate);
}




//+------------------------------------------------------------------+
//| Calc forecast buffers  from lastbar down to offset               |
//+------------------------------------------------------------------+
void ForecastOsc(int offset, int lastbar, double &osc[], double &osct3[], int regress, int t3, double b)
{

   int shift, length;
   double b2,b3,c1,c2,c3,c4,w1,w2,n,WT,
          forecastosc,t3_fosc,sum,
          e1,e2,e3,e4,e5,e6,tmp,tmp2;
          
   lastbar= MathMin(Bars-31-regress, lastbar);   
 
   for (shift= lastbar+30; shift>=offset; shift--)   {

      b2=b*b; 
      b3=b2*b; 
      c1=-b3; 
      c2=(3*(b2+b3)); 
      c3=-3*(2*b2+b+b3); 
      c4=(1+3*b+b3+3*b2); 
      n=t3; 

      if (n<1) n=1; 
      n = 1 + 0.5*(n-1); 
      w1 = 2 / (n + 1); 
      w2 = 1 - w1; 

      length= regress; 
      sum = 0; 
      for (int i = length; i>0; i--) {
         tmp = length+1;
         tmp = tmp/3;
         tmp2 = i;
         tmp = tmp2 - tmp;
         sum = sum + tmp*Close[shift+length-i]; 
      }
      tmp = length;

      WT = sum*6/(tmp*(tmp+1)); 

      forecastosc= (Close[shift]-WT)/WT*100; 

      e1 = w1*forecastosc + w2*e1; 
      e2 = w1*e1 + w2*e2; 
      e3 = w1*e2 + w2*e3; 
      e4 = w1*e3 + w2*e4; 
      e5 = w1*e4 + w2*e5; 
      e6 = w1*e5 + w2*e6; 

      t3_fosc = c1*e6 + c2*e5 + c3*e4 + c4*e3; 

      if (shift<=lastbar) {   // don't put swing in cycle into the signal buffers
         osc[shift] = forecastosc;
         osct3[shift] = t3_fosc;
      }
      
    }
  
   return(0);
}


もしバックテスト検証して欲しいロジックやEAあればお気軽にご連絡下さいませー

詳細はこちら↓↓↓

abitra.hatenablog.com

FX ドテン君 自作EA運用状況 バイナリーオプション運用状況 2019年10月15日の直近状況

自分メモ

自作EA運営状況

1時間足、4時間足共に利益出てます。

f:id:hogehoge_kato:20191015164725p:plain


ブレイクアウト系のエントリーは現状の様な場面では強いですねー

個人的に直近の自作EA制作は短期での売り買いや何かしらのアービトラージを探してしまう傾向があるのですが本来はトレンドに乗っていけるようなEAを作成するのが王道なのかもしれません。


裁量であればいったん現状で利確して様子をみるのですが、どうしようかなーと。


久しぶりのバイナリーオプション報告

10月1日~10月15日まで
エントリー回数273回

勝率


60.44%

~内訳~
win: 165
lose: 108
合計: 273

エントリーキャプチャー


一部抜粋。基本的に全てのエントリーでキャプチャーを保存しています。
将来的にキャプチャー画像を使って画像認識(機械学習)で勝てるチャートパターンとかを見つけ出す様なロジックを構築したいなーと。


f:id:hogehoge_kato:20191015171004p:plainf:id:hogehoge_kato:20191015171014p:plainf:id:hogehoge_kato:20191015171032p:plainf:id:hogehoge_kato:20191015171037p:plainf:id:hogehoge_kato:20191015171040p:plainf:id:hogehoge_kato:20191015171044p:plainf:id:hogehoge_kato:20191015171049p:plainf:id:hogehoge_kato:20191015171053p:plainf:id:hogehoge_kato:20191015171132p:plainf:id:hogehoge_kato:20191015171142p:plainf:id:hogehoge_kato:20191015171146p:plainf:id:hogehoge_kato:20191015171151p:plainf:id:hogehoge_kato:20191015171252p:plainf:id:hogehoge_kato:20191015171255p:plainf:id:hogehoge_kato:20191015171258p:plainf:id:hogehoge_kato:20191015171302p:plainf:id:hogehoge_kato:20191015171307p:plainf:id:hogehoge_kato:20191015171310p:plainf:id:hogehoge_kato:20191015171340p:plainf:id:hogehoge_kato:20191015171345p:plainf:id:hogehoge_kato:20191015171348p:plainf:id:hogehoge_kato:20191015171351p:plainf:id:hogehoge_kato:20191015171355p:plainf:id:hogehoge_kato:20191015171359p:plainf:id:hogehoge_kato:20191015171403p:plainf:id:hogehoge_kato:20191015171407p:plainf:id:hogehoge_kato:20191015171506p:plainf:id:hogehoge_kato:20191015171511p:plainf:id:hogehoge_kato:20191015171514p:plainf:id:hogehoge_kato:20191015171518p:plainf:id:hogehoge_kato:20191015171521p:plainf:id:hogehoge_kato:20191015171524p:plainf:id:hogehoge_kato:20191015171530p:plainf:id:hogehoge_kato:20191015171535p:plainf:id:hogehoge_kato:20191015171539p:plainf:id:hogehoge_kato:20191015171543p:plainf:id:hogehoge_kato:20191015222924p:plainf:id:hogehoge_kato:20191015222928p:plainf:id:hogehoge_kato:20191015222932p:plainf:id:hogehoge_kato:20191015222937p:plainf:id:hogehoge_kato:20191015222942p:plainf:id:hogehoge_kato:20191015222946p:plainf:id:hogehoge_kato:20191015222950p:plainf:id:hogehoge_kato:20191015222953p:plainf:id:hogehoge_kato:20191015222957p:plainf:id:hogehoge_kato:20191015223041p:plainf:id:hogehoge_kato:20191015223045p:plainf:id:hogehoge_kato:20191015223048p:plainf:id:hogehoge_kato:20191015223052p:plainf:id:hogehoge_kato:20191015223056p:plainf:id:hogehoge_kato:20191015223100p:plainf:id:hogehoge_kato:20191015223104p:plainf:id:hogehoge_kato:20191015223107p:plainf:id:hogehoge_kato:20191015223111p:plainf:id:hogehoge_kato:20191015223115p:plainf:id:hogehoge_kato:20191015223119p:plainf:id:hogehoge_kato:20191015223221p:plainf:id:hogehoge_kato:20191015223225p:plainf:id:hogehoge_kato:20191015223229p:plainf:id:hogehoge_kato:20191015223232p:plainf:id:hogehoge_kato:20191015223236p:plainf:id:hogehoge_kato:20191015223239p:plainf:id:hogehoge_kato:20191015223243p:plainf:id:hogehoge_kato:20191015223247p:plainf:id:hogehoge_kato:20191015223250p:plainf:id:hogehoge_kato:20191015223255p:plainf:id:hogehoge_kato:20191015223259p:plainf:id:hogehoge_kato:20191015223303p:plainf:id:hogehoge_kato:20191015223347p:plainf:id:hogehoge_kato:20191015223351p:plainf:id:hogehoge_kato:20191015223355p:plainf:id:hogehoge_kato:20191015223359p:plainf:id:hogehoge_kato:20191015223402p:plainf:id:hogehoge_kato:20191015223407p:plainf:id:hogehoge_kato:20191015223412p:plainf:id:hogehoge_kato:20191015223416p:plainf:id:hogehoge_kato:20191015223420p:plainf:id:hogehoge_kato:20191015223423p:plainf:id:hogehoge_kato:20191015223426p:plainf:id:hogehoge_kato:20191015223430p:plainf:id:hogehoge_kato:20191015223433p:plainf:id:hogehoge_kato:20191015223437p:plainf:id:hogehoge_kato:20191015223441p:plainf:id:hogehoge_kato:20191015223445p:plainf:id:hogehoge_kato:20191015223450p:plainf:id:hogehoge_kato:20191015223453p:plainf:id:hogehoge_kato:20191015223457p:plainf:id:hogehoge_kato:20191015223626p:plainf:id:hogehoge_kato:20191015223631p:plainf:id:hogehoge_kato:20191015223634p:plainf:id:hogehoge_kato:20191015223638p:plainf:id:hogehoge_kato:20191015223643p:plainf:id:hogehoge_kato:20191015223647p:plainf:id:hogehoge_kato:20191015223652p:plainf:id:hogehoge_kato:20191015223658p:plainf:id:hogehoge_kato:20191015223702p:plainf:id:hogehoge_kato:20191015223706p:plainf:id:hogehoge_kato:20191015223710p:plainf:id:hogehoge_kato:20191015223713p:plainf:id:hogehoge_kato:20191015223718p:plainf:id:hogehoge_kato:20191015223722p:plainf:id:hogehoge_kato:20191015223726p:plainf:id:hogehoge_kato:20191015223730p:plainf:id:hogehoge_kato:20191015223734p:plainf:id:hogehoge_kato:20191015223739p:plainf:id:hogehoge_kato:20191015223743p:plainf:id:hogehoge_kato:20191015223746p:plainf:id:hogehoge_kato:20191015223750p:plainf:id:hogehoge_kato:20191015224011p:plainf:id:hogehoge_kato:20191015224015p:plainf:id:hogehoge_kato:20191015224018p:plainf:id:hogehoge_kato:20191015224024p:plainf:id:hogehoge_kato:20191015224030p:plainf:id:hogehoge_kato:20191015224034p:plainf:id:hogehoge_kato:20191015224038p:plainf:id:hogehoge_kato:20191015224043p:plainf:id:hogehoge_kato:20191015224048p:plainf:id:hogehoge_kato:20191015224051p:plainf:id:hogehoge_kato:20191015224055p:plainf:id:hogehoge_kato:20191015224101p:plainf:id:hogehoge_kato:20191015224107p:plainf:id:hogehoge_kato:20191015224111p:plainf:id:hogehoge_kato:20191015224114p:plainf:id:hogehoge_kato:20191015224118p:plainf:id:hogehoge_kato:20191015224122p:plainf:id:hogehoge_kato:20191015224125p:plain

ストキャスティクスと移動平均線を利用したバイナリーオプションの自動売買EA制作 バイナリーオプションサインツール無料開発案件


バイナリーオプションのEA制作依頼を頂いて検証したので内容ご紹介。


バイナリーオプションサインツール作成依頼の詳細はこちら↓をご確認下さいませ。
"EA開発 バイナリーオプション検証 制作(作成)代行 無料で行いますキャンペーン"
abitra.hatenablog.com




今回依頼を頂いた方は最初サインツールのバックテスト検証を依頼頂きました。
そのサインツールのバックテストが完了しましてしばらくしてから別ロジックでの0からの作成のご相談を頂きました。


ロジック提案して頂いた方に本ブログでのロジック案内OKを頂いております。
有難う御座います。


ストキャスティクス移動平均線を利用したバイナリーオプションエントリー


ロジック概要としてはこんな感じ。


5分足でのエントリーロジックになります。

1) ストキャスティクスのメインとシグナルが20以下又は 80以上でデットクロス


2) 移動平均線 9をローソク足が突き抜ける
※ヒゲではなく実態が突き抜ける


3) 突き抜けた時の足を一分足で確認して直近2足が突き抜けた方向の足を確認


4) 突き抜けた次足の頭で突き抜けた方向に順張り


f:id:hogehoge_kato:20191012012152p:plain



Lowエントリー例: 5分足

ストキャスティクスが80以上の時にデットクロス

ローソク足移動平均線9を陰線で抜ける

1分足を確認して抜けた足の1足前と2足前が共に陰線を確認

次足頭でLowでエントリー

Highは上記方法の逆です。


制作にあたってのポイント


平均線の抜けた時に何足以内にストキャスがデットクロスしていたか。
また抜けた足を1分足で見た時に1足前と2足の前の陰線陽線確認などになります。


ストキャスのデットクロスの確認はそこまで難しい処理ではないのですが一分足の確認にすごく悩まされました。


というのもなぜか私の環境ではバックテストで一分足の取得が出来る時と出来ない時があり、そのタイミングが本当に分からない。
いまだに分かりません。


取得出来るときは一分足の価格を取得出来るのですが出来ない時は何処の数値とってんねん!!ってくらい同じ数値の取得しか行われません。
※このブログ記事を書いてても理由は不明です
ですがバックテストの期間が短いとこの現象が起きて期間を長くすると起きにくい気がします。気がするだけなので何の確証もありません。
※プログラムを書いてる時は簡単に確認したいのでテスターの期間を3-4ヶ月とかにして検証するのですが、それだと何やってもダメで5年とかにするとうまく行ったりします。
100%ではないです。

5分足チャートで1分足の価格取得する方法としてはこんな感じ
double open_1	 =    iOpen(Symbol(), 1, 1);
double close_1	 =    iClose(Symbol(), 1, 1);
double open_2	 =    iOpen(Symbol(), 1, 2);    
double close_2	 =    iClose(Symbol(), 1, 2);


バックテスト時はバーの戻る回数(5分足の戻り回数と1分足の戻り回数)を調整しないといけませんがね。


バイナリーオプションのバックテスト用のEAを作成してみた

ストキャスのデットクロスと平均線の確認など上手いこといっています。
若干自身がないのが1分足の確認です。
一応数値を取得しているのを確認は出来ているのですが何となく不安ではあります。5分足のチャートで一分足の確認が出来ないので。。。
リアルタイムであればチャートを簡単に変えれますがバックテストではそれが出来ない。プログラムを信じるしかないです。(まぁ大丈夫やろうけど時々価格取得がバグってるのでw)


f:id:hogehoge_kato:20191012012454p:plain


f:id:hogehoge_kato:20191012012544p:plain


f:id:hogehoge_kato:20191012012924p:plain


f:id:hogehoge_kato:20191012012936p:plain

バックテストの結果は?


ダメでした。
どちらかというと順張りで入るより逆張りの方が成果良いかな。


f:id:hogehoge_kato:20191012013206p:plain


バックテストの環境


通貨ペア : USDJPY
時間 5M (5分足)
ヒストリカルデータ Dukascopy
期間 2014/1/1 - 2018/12/30 5年程


ストキャスティクス移動平均線を利用したバイナリーオプションエントリーの結論


今回依頼頂いたロジックでのバイナリーオプションのエントリーは難しいと考えています。
順張りよりも逆張りの方が良さそうに見えますが個人的な感覚では順張りの方がいいだろうなーとも思います。

個人的にこの辺りに自分なりの矛盾を感じるロジックはあまりよろしいロジックではないのでお勧めは出来ないかなーと。

改善する方法としては


時間帯の調整なども考えたのですが時間帯別などで確認してもあまりパッとしないんですよね。


ご案内

今回のブログの様な感じでロジックのEA化とバックテストを無料で行っています。

無料で行う理由としてはもし利益のでるロジックがあれば私にとってもメリットが大きいので無料でもOKとの考えから。


どこかで手に入れたバイナリーオプションサインツールEAのバックテストでもOKです。


もし興味があるのであればお気軽にご連絡下さいませ。
hogehogekatoジーメールまで。