2016年5月21日土曜日

[雑記]MT4のバックテスト結果は日ごとに異なる・・・とバックテストのバグっぽい動き。

Gewinn7のバックテストを今日実行してみたらPFが2.15になっていました。

・・・・・・・・・・
あ、あれ???

なぜに????

ということで調査してみました。

MT4のバックテストではスワップを自動計算します。
その自動計算されるスワップの値は、その日のスワップを使用しています。(ヒストリカルデータにスワップの情報は含まれていません)

そのため、その日のスワップの状況によって長い時間保持していたポジションの利益値が異なります。

それがバックテストに反映されて、同じタイミングの同じ価格で決済されているのにも関わらず損益結果が変わってきたりします。

■5/20に取得したバックテストと5/11に取得したバックテストの切り抜き


全く同じタイミングで売買したのにも関わらず、利益が1.60と1.64で異なってきています。

最初、MT4のバグじゃね?と思って、一つ一つポジションを調べていっていたのですが、結論からするとスワップポイントの自動計算値による違いでした。

1日おいてバックテストで(*´▽`*)PF上がったーって喜ばないようにしないといけないですね^^;;;;;;;

あと、こちらは本気でMT4のバグじゃないか?と疑っているのですが、同じ期間をバックテストした場合で取引結果が異なっている場合があります。

具体的には2007/1/1~2007/2/1までを一回バックテストした後、2007/1/1~2007/3/1までとひと月伸ばしてバックテストをすると、インジケータの値が変わって本来取引しないところで取引をしたりします。

あれー?とおもってPrint文を入れると、とたんに発生しなくなります・・・
なんでやねん!!!!!!

また、同じ期間をもう一度バックテストすると、元に戻ります・・・・。
C言語のメモリリーク時の症状に似ているのですがMQL言語単体ではポインタ利用なんて限られています。内部配列をりようしているところで発生しやすいような・・・・・・。謎です。謎現象です。

バックテストだけの症状であればよいのですが、フォワードでも発生しているとなると、困ります。

というのも、FX-ONでフォワードテストされているGewinn7とOANDAプロで実行しているGewinn7のフォワード結果が異なりすぎる・・・・・。
たとえば、5/17→5/20の取引ですが、こちらのフォワードでは、売りポジションを二つとっていますが、FX-ONのフォワードでは一つしかとっていません。OANDAのデモ口座でバックテストを流してみましたが、バックテストではデモ口座でも二つ売りポジションを持っています。

うーん。こちらでも再度OANDAデモ口座でフォワードテストを再度開始してFX-ONとの結果の違いを調査中です。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2016年5月20日金曜日

[MT4インジケータ]フラクタルからトレンドラインを計算する。最終版

ちょっと、昨日の記事では、トレード手法を考えてみると書きましたがトレンドラインの方の考え方がまとまったため、先にこちらを説明します。

フラクタルからトレンドラインを計算する方法をあれこれ考えていました。

散布図ということで、回帰直線を描いたものを基本のトレンドラインとするところまではよいのですが、回帰直線は中央値を描くため、どうしてもトレンドの内側にラインが描画されてしまいます。

中央値から外側のフラクタルのみで再描画する方法も考えたのですが、その場合、対象となるフラクタルが不足しておかしな線が描画されることが多いです。サンプル数が不足するため、統計的な精度が下がるのはいやですねー。

うーん。いい方法ないかなー。っていうか!統計といえば標準偏差!(笑) 回帰直線そのものが点に対する中心値を描画するため、よっぽど変な分布じゃない限り、その偏差は正規分布になってしまいます。

回帰直線に対するフラクタルのばらつきを標準偏差として求め、その偏差分だけ回帰直線を平行移動させる手法をとることにしました。

■フラクタルに対する回帰直線と標準偏差の考え方

基本的な考え方はさておきです。

具体的なラインの見方を説明します。

■EURUSD 1時間足 フラクタルトレンドライン


チャートラインの見方です。
まず青線、赤線と黄線です。

青線:フラクタル高値頂点の回帰直線を+1σ分だけ上に平行移動した線
赤線:フラクタル底値頂点の回帰直線を-1σ分だけ下に平行移動した線
黄線:フラクタル高値・底値頂点の回帰直線と、上下±2σの線

となります。
まず青線と赤線の関係です。

青線と赤線が開いている場合、ボラティリティが高まってきています。

青線と赤線が閉じている場合、ボラティリティが低くなっています。三角持ち合いの場合も閉じる形になります。
高値や安値の底値を形成する際、一方のラインが平行気味になり、もう片方のラインに角度が付くような描画がされます。その場合天井底打警戒となります。

■青線赤線イメージ図

黄線がトレンドとなります。MT4の平行線自動描画機能と考えて問題ありません。
黄色の線の角度方向がフラクタルから求まるトレンド方向になります。外側のラインが過去の分散から求められた想定幅です。

この考え方のいいところは、短い時間足でも長い時間足でも、それなりのトレンドラインが描画できるところになります。EURUSD 1分足を例にとってみます。

■EURUSD 1分足 フラクタルトレンドライン


この記事を書いているのがちょうど、9時すぎで、日本時間がオープンしてボラティリティが高まって赤と青の線が広がる形で描画されています。ただしトレンド方向は下のようです。

移動平均系による計算では値動きが小さい時間帯が強い影響を与えてしまいます。値動きが小さいところではフラクタルが形成されません。計算対象をフラクタルに限定することで、Tick値に代わるフィルターとして作用しています。
またフラクタルに限定することで回帰直線と標準偏差による統計計算を利用したラインが描画できました。

トレンドラインの手動描画というのは経験に基づく主観的な描画になりがちです。そこである程度の理由付けがともなう客観的な描画というのはとても役に立つのではないでしょうか?

是非皆様も利用してみてください。

なお相場において、統計がすべてだなんて、大きなことを言うつもりはありません^^;;
ただし、過去データ解析においては統計はかなり大きな重さがあります。採用手法も含めてあれこれ考えていきたいです。

フラクタルバンドにトレンドラインのアップデートは5/23を予定しています。

フラクタルバンド 1680円
頂点位置からレンジ帯を表示する
フラクタルバンド


■フラクタルバンド記事一覧
フラクタルバンドをアップデートしました。
フラクタルで近似直線でトレンドラインで・・(研究中)

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2016年5月19日木曜日

[MT4インジケータ]フラクタルで相関係数を計算してみる。

昨日の続きです。
http://mt4program.blogspot.jp/2016/05/mt4_18.html

■EURUSD1H フラクタル相関係数

とうことで、フラクタル相関係数を取ってみました。
メインチャート:カスタムフラクタル
サブチャート1:カスタムフラクタル相関(個数10)
サブチャート2:カスタムフラクタル相関(個数5)

+0.7以上で強い上昇トレンド
-0.7以下で強い下降トレンド

となります。高値安値位置の相関を取っています。相関というのは単純平均をベースに求めますので、高値安値位置をベースとした移動平均の傾き方向ととらえることもできます。

ということは、移動平均の傾きを表すインジケータをよく似た動きをするように思われますね。実際にDrawSimpleLine(DSL)と比較してみましょう。

■フラクタル相関とDSL

思った通り、よく似た動きをしています。DSLと比較すると相関は1~-1と範囲が決まっているためEA的には使いやすそうです。

ただ、ここは設定にもよりけりですが、フラクタルの相関は、DSLよりは遅めに反応します。これは頂点が実際発生するまでは相関に変化がないのに対して、バー毎の価格に変化があれば移動平均は変わっていくため、DSLのほうが早めに反応します。

トレンドフォローにおける取引タイミングという意味では、DSLのほうが優秀かもしれません。

■レンジ相場におけるフラクタル相関

フラクタルの相関をとると、レンジ相場における周期性がはっきりと表現される場合があります。
周期的に動いているように見えるのはユール・スルツキー効果ですが、過去N個のフラクタルは上昇しているのに、そこから先の価格は反落しているといった場合、最低でも上昇トレンドにはないということがわかります。

このあたりは上昇トレンドの定義次第となりますが、
最低でもフラクタル相関と値動きが一致しない間はトレンドではないという定義が成り立ちそうです。

ということで、次回以降、これを利用したトレード戦略を考えていきたいと思います。

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2016年5月18日水曜日

[MT4インジケータ]フラクタルで近似直線でトレンドラインで・・(研究中)

なんとなく、こうフラクタルを見ていると、散布図っぽいなーとか思わないですか?

フラクタルの矢印だけを描画してみました。
■フラクタルの矢印だけを描画してみた画像


散布図(Wikipediaより)「二つの特性を横軸と縦軸とし,観測値を打点して作るグラフ表示」
となります。
価格チャートの場合、時間軸と価格ですね。

散布図だとすると、点の相関と近似直線が描けそうな気がしてきます。
フラクタルの相関がある一定以上の場合、その近似直線はトレンドラインを示す(かも??)ということで、まず近似直線を描いてみることにします。


■フラクタルからトレンドラインを引いてみた。

青の線が上側フラクタルの近似直線
赤の線が下側フラクタルの近似直線
黄色の線が上下フラクタルの近似直線

ちょうど今下げトレンドですので、わかりやすい下向き直線が出ています。上限下限側もなんとなくそれっぽい位置といえば位置ですが、結構とびぬけています。長期トレンドの短期逆張りといった基準ラインには使いにくそうです。

そこで、上で描いたトレンドラインの外側にあるフラクタルだけで再度トレンドラインを引いてみることにします。

■外側フラクタルだけでトレンドラインを引いてみた。


今のチャートの場合、それっぽく描けてますね。
まとまったら今のフラクタルインジケータに追加したいと思います。

散布図ということは、相関も計算できそうです。次回は相関を計算してみたいと思います。

フラクタルバンド 1680円
頂点位置からレンジ帯を表示する
フラクタルバンド


「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2016年5月17日火曜日

[MQL超入門] その024 バックテストを活用しよう。その3 パラメータの最適化2

さっそくパラメータの最適化を行った結果を見てみましょう。

最適化を行うと、通常のバックテストを行った時とは違う[最適化結果]と[最適化グラフ]のタブがストラテジーテスターに表示されます。

まずは[最適化結果]タブを見てみます。
・図024.01 最適化結果
[損益]が大きい順に並んでいて、[パラメーターの入力]を見るとパラメータがそれぞれどの値をとった結果なのかが分かります。
行をダブルクリックするか、行を右クリックして[パラメータの設定(I)]をクリックすると、その行のパラメータを入力パラメータとして適用することができます。
・図024.02 パラメータの設定

ここで1つ注意点があります。
[最適化結果]タブの中で右クリックすると[マイナスの結果を表示しない(U)]という項目があるので、ここをクリックしてチェックを外しておきましょう。
・図024.03 マイナスの結果を表示しない
デフォルトではこれにチェックが入っていますが、そのままだと損益が0以上になるパラメータの組み合わせしか最適化の結果として表示されなくなります。
最終的には損益がマイナスのEAなんて使わないとは思いますが、たとえマイナスでもどんなパラメータの組み合わせが効率がいいかは確認したいと思いますので、マイナスの結果も表示しておくのがいいと思います。

では次に[最適化グラフ]タブを見てみます。
・図024.04 最適化グラフ
こちらはパラメータの組み合わせパターンを横軸、残高を縦軸としたグラフになっています。
グラフ上の点にマウスのカーソルを当てると、残高とパラメータの組み合わせが表示されます。

ただ、どの組み合わせが一番良い結果かは[最適化結果]タブでも見れますし、並び替えもされるのでそちらのほうが分かりやすいと思います。
これだけでは[最適化グラフ]はあまり意味がなさそうに思えるかもしれませんが、[最適化グラフ]にはもう1つ、[2Dサーフェス]という機能があります。

グラフ内を右クリックして、[2Dサーフェス(2)]をクリックします。
・図024.05 2Dサーフェスの表示
すると、下図のように2つのパラメータを横軸と縦軸にして、結果の良さを色の濃さで表してくれます。色が濃いほうが良い結果になっています。
・図024.06 2Dサーフェス
この例では、横軸が[移動平均の期間]、縦軸が[移動平均線の種類]になっています。
上から2行目と4行目が濃くなっているように見えますので、[移動平均線の種類]は単純移動平均線か平滑移動平均線が良さそうです。また、全体的に右側のほうが色が濃いようですので、[移動平均の期間]は、この範囲であれば長めのほうがよさそうです。
このように、2つのパラメータを2次元の表にして結果を確認できることで、効率のいいパラメータの傾向を見ることができます。

このようにしてパラメータの最適化を行っていきますが、前にも書いたとおり、過剰な最適化(カーブフィッティング)には注意が必要です。
例えば1番良い結果が、2Dサーフェスを見てポツンと1つだけ浮いているような場合、ある条件下でたまたま、という場合もあります。

さて、これでEAの作成から検証まで、一通りができるようになりました。
以前にも書きましたが、プログラムは「習うより慣れよ」が基本です。
頭の中でずっと考えるだけでなく、思いついたらとにかく手を動かして、やってみて結果を見てまた考える、というのも習得の近道です。どんどんチャレンジしましょう!

次の回へ

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。

2016年5月16日月曜日

[フラクタルバンド]フラクタルバンドをアップデートしました。


■フラクタルバンド EURUSD1H

予告通りフラクタルバンドをアップデートしました。
フラクタルバンドとフラクタルの矢印位置をカウントしてオシレータ化したインジケータを追加しました。

オシレータ化したインジケータは、青線が高値矢印の位置、赤線が下値矢印の位置をカウントしたものです。

±7が行き過ぎのラインです。逆張りトレードでは大きなトレンドが出ているときに負けてしまいますが、利食いポイントとしては活用できます。

参考までに、EURUSD 1Hにおいて±7を超えた場合に逆張りした場合のバックテスト結果はこちらです。
トレイリングは行っていませんが、過去240時間以内に±7を超えた場合にのみポジションを持つようにしています。


通貨ペアEURUSD (Euro vs US Dollar)
期間1時間足(H1) 2007.01.02 08:00 - 2016.05.16 04:00 (2007.01.01 - 2016.06.01)
モデルコントロールポイント(おおまかな方法。結果はあまり信頼性はない)
パラメーターMagicNumber=55355651; Lot=0.1; SpreadFilter=5; MaxPosition=1; Slippage=10; TestGmt=2; Threshold=5; TargetProfit=40; MinProfit=2; StopLoss=400; TakeProfit=400; CloseBarCount=240; CloseProfitBarCount=180; ArrowCount=8;
テストバー数58864モデルティック数1438504モデリング品質n/a
不整合チャートエラー9
初期証拠金10000.00スプレッド15
純益1513.83総利益10242.45総損失-8728.62
プロフィットファクタ1.17期待利得14.28
絶対ドローダウン84.18最大ドローダウン1860.75 (13.99%)相対ドローダウン13.99% (1860.75)
総取引数106売りポジション(勝率%)50 (66.00%)買いポジション(勝率%)56 (58.93%)
勝率(%)66 (62.26%)負率 (%)40 (37.74%)
最大勝トレード402.86敗トレード-410.78
平均勝トレード155.19敗トレード-218.22
最大連勝(金額)7 (1374.14)連敗(金額)4 (-746.14)
最大連勝(トレード数)1374.14 (7)連敗(トレード数)-810.34 (2)
平均連勝3連敗2

2014年からの大暴落時での逆張りで痛い目を見ていますね。それまではなんだかんだと+でした。ここ最近のレンジ相場でも好調です。

フラクタルバンド 1680円
頂点位置からレンジ帯を表示する
フラクタルバンド

「MT4でFXを勝ち抜く研究をするブログ」で公開している無料インジケータは、こちらの一覧から。
インジケータ一覧

Twitterもよろしくお願いします。
https://twitter.com/mt4program

ブログランキングにご協力よろしくお願いします。m(._.)m
にほんブログ村 為替ブログ MetaTraderへ
にほんブログ村

お約束ですが、本ブログは、投資に対する利益を約束する物ではありません。最終的には自己責任によるご判断よろしくお願いいたします。