未来予測でFXの自動売買(Miraiyosoku_navi)
本記事はFX取引の自動売買の記事です。
最近機械学習等々のプログラムでFXの取引又はバイナリーオプション取引出来ないか考えています。
聖杯探しですねーw
そんな邪な考えで色々検索していた時に見つけたインジが未来予測ナビ(Miraiyosoku_Navi.ex4)です。
詳細は以下URLから確認して下さいませ。
引用
現在から過去へチャートをさかのぼり、近似しているパターンを見つけ出します。最大3つまで似ているパターンを探し出し、それらがどう動いたのかを黄色のラインで表示します。ラインの種類により一致率が異なります。
実際チャートに表示させるとこんな感じです。
過去のチャートから直近のチャートと近しいのを表示してくれています。
必ず表示される訳ではなく近しいチャートパターンが無い場合は何も表示されません。
また近しいのが1つ2つしかない場合でも未来予測可能です。
未来予測(Miraiyosoku_navi)でエントリーしてみたらどうなるのか?
ここから本題。
この未来予測(Miraiyosoku_navi)を利用してFXでエントリーした場合勝てるのかって事。
検証は5分足と1時間足で行ってみました。
エントリーする根拠
1. 少し先の価格が現在の価格より低いか高いかの判断
2. 第一近似、第二近似、第三近似が表れた時のみエントリーする
(第一のみでもエントリーしてもいいのですが一応第三近似まで表示された時のみの安牌仕様)
未来予測(Miraiyosoku_navi)の可視化
少し先の動きをラインで表示させてみました。
チャート見直した時に未来予測(Miraiyosoku_navi)が良い感じなっているのか確認しています。
未来予測と合ってる場合もあるのですが殆どの場合は外れていますw
たまたま目視で見ていた所が外れているだけの可能性もあるので何とも言えませんが正直この時点で、うーんって感じでしょうかw
未来予測(Miraiyosoku_navi)の自動売買
少し先の価格が高い場合はbuyで低い場合はsellで自動売買組んでみました。
トレール注文でもよかったのですが、とりまどの程度効くのか見てみたいって事もあり指値逆指値で注文しました。
注文の様子
未来予測(Miraiyosoku_navi)の使い方
実際動かしてみると分かると思いますが未来予測(Miraiyosoku_navi)だけでエントリーはしない方がいいです。
参考にはなりそうです。
ただ個人的に今後利用はしないかなー
まとめ
過去チャートと類似するパターンを未来表示させるってのは方向性としては間違っていないと思うのですがねー
何か思ってるのと表示が違う気がします。具体的には未来予測させるデータ量が少ない様な気がします。
直近のデータのみでの判断だけではなく過去のチャートパターンを予めインプットしておいた方がいいかなーと。
また下位足のチャートもどうするのかなどの検討が必要かな。
やはりこの辺りはpythonで検証するなりしないと難しいかも。
RD-ComboでFX検証 バックテストでその実力を確認してみた
皆大好きRD_COMBO。
先日のバイナリーオプション検証した結果を案内した影響なのかRD_COMBOを利用したバイナリーオプションのバックテスト検証をいくつか頂いています。
もしバイナリーオプションのバックテスト希望でしたらお気軽にご連絡下さいませ。
hogehogekatoジーメールまで。
過去の検証依頼など
abitra.hatenablog.com
意外と皆さんRD-Comboを知ってるんですねー
正直私は全く知らなかったインジなので。。。
RD-Comboの中身を知らない人に簡単に説明すると中身としてはMA、RVI、ADX、CCIを組み合わせたものになります。
その組み合わせ方といいますか計算方法が少し独特な感じ。初見ではさっぱり意味が分かりませんでした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年程
一時間足
損益 | 取引総数 | プロフィットファクタ | 獲得利益 | ドローダウン$ | ドローダウン% | パラメーター |
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つの仕組みの一つ
・移動平均のクロスオーバー
を利用したバックテスト。
『究極のトレーディングガイド』
過去記事
移動平均のクロスオーバー取引
先に謝っておきます。本を最後まで読んでないので今回の方法は本に書かれていた方法と違うと思います。
といいますか移動平均のクロスオーバーの所を一切読んでないので本ブログ記事は独自のロジックですw
文章だけで判断していますが移動平均のクロスオーバーって事はMAのゴールデンクロス時に買いでデットクロス時には売りって事なのかと考えます。
FXの教科書的な本をみると必ずのっている手法で一番最初に勉強する事になるのかなーと。
移動平均線を利用した手法の基本!移動平均線クロスオーバー
手法としてはゴールデンクロス時に買い、デットクロス時に売りですが単純な方法では勝つのは難しいと考えます。
ダマし回避の方法として3本の移動平均線を利用するのがベターかな。
方法としては短期、中期、長期の3本の移動平均線を利用する。
エントリーは短期と中期で行うのですが、長期の移動平均線を利用してダマしを回避。
具体的には買いで入る時は短期と中期がゴールデンクロスした時に長期よりも上の場合にエントリーする。
売りで入る時は短期と中期がデットクロスした時に長期がよりも下を確認してエントリーする。
こんな感じ
ダマしとして長期足を判定に入れる事でトレンド方向の時にのみにエントリーする事になり無駄な負けを減らせると考えます。
少し調べてみたら同じ事を書いてるサイトがありました。
内容は殆ど同じですが参考になります。
プログラム構築 移動平均線クロスオーバー
仮説が出来たので早速プログラム書いてみました。
移動平均線は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)
一応綺麗な右肩上がり。
懸念点
MAの期間をどうするか問題。
MAの期間ですが一応ある程度決まった数値はあるのですが殆どの人がこの期間を採用しているとか無い気がします。
以下サイトからの引用になりますが短期派、中期派、長期派と見ている移動平均線の期間は違うのかと。
短期派(日足) 「5・10・25」「5・20・40」
中期派(日足) 「5・25・75」「20・40・200」「25・75・200」
長期派(週足) 「13・26・52」
個人的には1時間、4時間足でエントリーを考えいるので短期又は中期の設定になるかと考えています。
この辺りはバックテストなどしてアタリを見つけていくしかないのかもしれません。
その場合は過度な最適化を行うとダメな気がするので、程よく利益が出る期間を調べていくと良いかもしれません。
バイナリ検証案件 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には入っていないのですが、意外とバイナリーオプションで人気のあるインジケーターです。
オシレーター系のインジケーターなので、主に逆張りトレードに使われます。
エントリーロジックも上記ブログで書かれている
緑のヒストグラムが2本連続形成されたら、次の足で「Lowエントリー」をします。
赤のヒストグラムが2本連続形成されたら、次の足で「Highエントリー」をします。
このまんま。
エントリー箇所のキャプチャー
それ以外のインジは一切入っていませんでした。
詳細を書く事が出来ませんがこれを販売していた方は相当な高額商品で販売していましたので何かほかに入ってないかなーと細かく見てみましたが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あればお気軽にご連絡下さいませー
詳細はこちら↓↓↓
FX ドテン君 自作EA運用状況 バイナリーオプション運用状況 2019年10月15日の直近状況
自分メモ
自作EA運営状況
1時間足、4時間足共に利益出てます。
ブレイクアウト系のエントリーは現状の様な場面では強いですねー
個人的に直近の自作EA制作は短期での売り買いや何かしらのアービトラージを探してしまう傾向があるのですが本来はトレンドに乗っていけるようなEAを作成するのが王道なのかもしれません。
裁量であればいったん現状で利確して様子をみるのですが、どうしようかなーと。
久しぶりのバイナリーオプション報告
10月1日~10月15日まで
エントリー回数273回
勝率
60.44%
~内訳~
win: 165
lose: 108
合計: 273
エントリーキャプチャー
一部抜粋。基本的に全てのエントリーでキャプチャーを保存しています。
将来的にキャプチャー画像を使って画像認識(機械学習)で勝てるチャートパターンとかを見つけ出す様なロジックを構築したいなーと。
ストキャスティクスと移動平均線を利用したバイナリーオプションの自動売買EA制作 バイナリーオプションサインツール無料開発案件
バイナリーオプションのEA制作依頼を頂いて検証したので内容ご紹介。
バイナリーオプションのサインツール作成依頼の詳細はこちら↓をご確認下さいませ。
"EA開発 バイナリーオプション検証 制作(作成)代行 無料で行いますキャンペーン"
abitra.hatenablog.com
今回依頼を頂いた方は最初サインツールのバックテスト検証を依頼頂きました。
そのサインツールのバックテストが完了しましてしばらくしてから別ロジックでの0からの作成のご相談を頂きました。
ロジック提案して頂いた方に本ブログでのロジック案内OKを頂いております。
有難う御座います。
ストキャスティクスと移動平均線を利用したバイナリーオプションエントリー
ロジック概要としてはこんな感じ。
5分足でのエントリーロジックになります。
1) ストキャスティクスのメインとシグナルが20以下又は 80以上でデットクロス
2) 移動平均線 9をローソク足が突き抜ける
※ヒゲではなく実態が突き抜ける
3) 突き抜けた時の足を一分足で確認して直近2足が突き抜けた方向の足を確認
4) 突き抜けた次足の頭で突き抜けた方向に順張り
Lowエントリー例: 5分足
ストキャスティクスが80以上の時にデットクロス
↓
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)
ストキャスティクスと移動平均線を利用したバイナリーオプションエントリーの結論
今回依頼頂いたロジックでのバイナリーオプションのエントリーは難しいと考えています。
順張りよりも逆張りの方が良さそうに見えますが個人的な感覚では順張りの方がいいだろうなーとも思います。
個人的にこの辺りに自分なりの矛盾を感じるロジックはあまりよろしいロジックではないのでお勧めは出来ないかなーと。
改善する方法としては
時間帯の調整なども考えたのですが時間帯別などで確認してもあまりパッとしないんですよね。
ご案内
今回のブログの様な感じでロジックのEA化とバックテストを無料で行っています。
無料で行う理由としてはもし利益のでるロジックがあれば私にとってもメリットが大きいので無料でもOKとの考えから。
どこかで手に入れたバイナリーオプションのサインツールEAのバックテストでもOKです。
もし興味があるのであればお気軽にご連絡下さいませ。
hogehogekatoジーメールまで。
勝率100%!? リスクゼロの両建て戦略 妄想中
半分自分メモ。(この時こんな事考えていたよね的な)
以下海外口座のゼロロスカット戦略。
出来るかどうか分かりません。妄想でのロジックです。
誰か試したよーとか、私も考えたよーって方いればコメントくれると嬉しいです。
リスクゼロの両建て戦略
2つの違う証券口座を使って両建てを行い片方の口座が0ロスカットするまで運用するロジック。
片方がロスカットして損した分、反対側の口座で利益が出るのでその利益がロスカットした分の利益が出れば負けは少ないのかなーと。
例
A証券 100万円
B証券 100万円
Aで買い、Bで売り同時エントリー
B証券ゼロロスカット した時にはA証券は200万円近くになっているのかなーと。
A証券が202万円とかで決裁させて102万円抜いて、その102万円から100万円抜いてB証券へ
利益2万円
繰り返し。
プログラム(EA)構築必要ないかなw
各証券会社のMT4の画面を立ち上げておきマウスで選択して購入するだけでOK
購入するだけなのでマウスの素早く動かしてクリック操作で大丈夫。
またいつでも両建てしても問題ないので特に何かしらプログラム(EA)の制作はいらないと考えています。
今回の手法は正確には勝率100%ではないしリスクもあります。
※タイトル詐欺で申し訳ない。
妄想で考えられるリスクとしてはスプレッド。
一方の口座でゼロカットのラインに達してもスプレッド分がある為もう一方の口座できっちり反対で倍の利益が出てはいないと考えます。
このスプレッドの間で価格が反転した場合、損する可能性があります。
手法へのリスク対応策
利用する証券会社によりますが証券会社によっては入金ボーナスなどがありますので、そのボーナス分でスプレッドをカバー出来れば安全に運用出来る可能性があるのではと考えています。
例として入金金額の10-20%でも入金ボーナス(クレジット)があればリスクは少なく出来るかなーと考えます。
既に誰かやってたりしないのかな?
やってるか分かりませんが検索すると同じような事を考えている方がちらほら見つかります。
"XMは両建てを使えばめちゃくちゃ稼げる!メリットと注意点をまとめてみました"
www.trade4people.org
"FX両建て手法に必勝法あり?負けない両建てテクニックを5つ紹介"
www.toretora.com
"FX両建てで負けない必勝法がある!?"
xn--fx-y73aoca4v.jp
FX仲間の知人にも聞いてみた
知人A
"考えたことはあるけど実際にやった事は無い手法です。
で、きっとやってる人いると思うのでFX会社は対策はしてきているはず。と思います"
知人B
"できるんですかねー?簡単にできちゃうなら有名になってたり、やってる人いそうですよね。何か弊害があるのか・・"
知人C
"考えた事あって調べたんやけど、直ぐにアカウント凍結されるみたいやから手ださんかったわー"
手法うんぬんよりもFXの口座凍結リスクが最大ポイント
たぶんですがFX会社で何かしらの方法で両建ては見抜けると考えています。
といいますかゼロカットを何回も行うユーザは何かしら行っている可能性があるのですぐバレちゃうのかなーと。
アカウントバンされて口座凍結で何もできなくなるリスクを抱えてまでこの手法に魅力があるかどうか。。。
Abookの証券会社であれば大丈夫な気もしますがどうなのかな?
もし誰か実際に行ったよーって方いらっしゃればコメント欲しいです。