2016年7月26日火曜日

[ハーモニック]トレード履歴 久しぶりにUSDJPYに手を出す。バタフライからの買い。飛んで行くか?

■USDJPY H1

今日の下げ局面で、たくさん買いハモが観測されましたが、ようやく、ターゲットライン超えをしたため、買い参入です。

28日の日銀政策までは、一時的な期待値による戻りが期待できるという予想もあり機会を伺っていましたが

・綺麗な買いハモ
・ターゲットライン超え
・RCI8しきい値超え

とやっとこさシグナルが揃いました。
念のためRCI8のしきい値シグナルが出た後、ターゲットライン付近で下げ渋ったのを確認してから参入してみました。
ある程度の時間をかけて価格が大きく動いた時の逆張りは、多少慎重になっても大丈夫なことが多いです。

昨日のEURUSDも様子を見る時間が十分ありましたね。

トレード補助ツールでポジションオープンしたため、本を読んでいる間にブレークイーブン処理が走って損切り位置が移動していました。

ターゲットはDC0.382と浅めにしてあります。

あ、ちなみに9とか8とか出ているのは、PeakyFxさんのTD Sequentialも表示しています。
ハーモニックと同様に逆張り系のインジケータなので、見比べるために使用しています。

ハーモニックは波形形状解析なのですが、TD Sequentialも大きな意味では仲間です。単純化してカウントするというやり方をしています。

チャートの天底を取る!
トム・デマークの傑作、TD Sequential
トム・デマークの傑作、TD Sequential | fx-on.com


ハーモニックパターンを自動検出するインジケータ
ハーモニックパターン検出インジケータ

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

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

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

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

Gewinn7/8を2.03/1.03のアップデートを申請しました。バグフィックスとなります。

Gewinn7/Gewinn8において、M5チャートにてEAを動かしていると、正しく発注処理が行われない業者がある件を対応したバージョンのアップデート申請を行いました。

Gewinn7 2.03
Gewinn8 1.03

Gewinn7/8は、基本的に3時間ごとにポジションをとります。稀に、1時間間隔でもポジションをとりますが一回だけになります。
中期下げトレンド中に、短期トレンドが上げから下げに転じた場合などは、3時間おき制限を無視して1回だけ売りポジションをとります。買いの場合は逆です。

これが、毎回1時間間隔でポジションをとるような場合は、まず下記の作業をお試しください。

1.一度チャートをすべて閉じてください。
2.MT4→ファイル→データフォルダを開く にてデータフォルダを開いてください
4.MT4を終了します。
3.データフォルダ/history/業者名/EURUSDXXX.hstファイルを全て削除します。
4.MT4を起動します。
5.EURUSD D1、H1、M5のチャートを開きます。
6.それぞれのチャートで、チャートのスクロールが止まるまで、一番古いデータを表示させます。
7.EURUSD H1でEAを起動します。

このEAは、M5で動作しますが、基本どの時間足のチャートに挿入してもEURUSDであれば正しく動作するように設計していました。ただ、これが正しく動作しない環境があるかもしれません。

その場合H1が一番重要な足となりますので、H1のチャートに挿入してみてください。

上記の作業とアップデートで改善すると考えていますが、それでも改善しない場合は、メッセージにてご連絡ください。

その際、お使いの業者名も合わせましてご連絡よろしくお願いいたします。

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

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

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

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

2016年7月25日月曜日

[MT4プログラム]EA内でマルチタイムフレームを見る場合、常時取得しないと値がずれる

Gewinn8のコミュニティで、おかしな動き(SELLしかしない)をするという報告がありました。

直接的には、その現象とは関係ないのですが、調査している途中に、不思議な現象を確認しました。

たとえば、5分足でEAを動かしている際、足の期間の違う3つの最新足のClose値を見るとします。

double closeM5 = iClose(NULL, PERIOD_M5, 0);
double closeH1 = iClose(NULL, PERIOD_H1, 0);
double closeD1 = iClose(NULL, PERIOD_D1, 0);

時間足が異なろうが、最新足のクローズ値は基本変わりません。
現在価格が、見る足によって変わったら困りますよね?

・・・・・。この困る現象が発生します(滝汗)

例えば、このプログラムは5分に一回だけ動くEAだとします。M5に新しい足が追加された時だけ動くような形になっている感じです。

その時1時間足、1日足をとると、古い値が帰ってくるのです。

具体的には、次のコードで、if文の中に入ってきてしまいます。
   double closeM5 = iClose(NULL, PERIOD_M5, 0 );
   double closeH1 = iClose(NULL, PERIOD_H1, 0 );
   double closeD1 = iClose(NULL, PERIOD_D1, 0 );
   if( closeM5 != closeH1 || closeM5 != closeD1 )
   {
      PrintFormat("miss match %f %f %f", closeM5, closeH1, closeD1);
   }

ここからは、動作から見た推測になります。
MT4は、価格情報をサーバーから取得しますが、表示していないチャート時間足毎の情報までは構築していません。

iCloseなどの問い合わせがあって、初めて構築します。その際、MT4はいったん古い情報を返した後、改めて内部で構築、サーバーから再取得を行っているようです。

いったん、iCloseがその時間足で呼ばれると、しばらくは取得していますが、ある程度呼び出しがないと再び取得を停止するようです。

そのため、この症状を解消するには、とにかくTickの発生の度にすべての価格情報をいったん読み取る必要がありそうです。

■症状が発生するコード
//------------------------------------------------------------------
// 気配値表示処理   
void OnTick()
{
   //5分に一回だけ動作する
   static datetime lastUpdate = 0 ;
   datetime current = iTime(Symbol(), PERIOD_M5, 0);
   if( lastUpdate == current ) return ;
   lastUpdate = current;

   //ヒストリカルデータは取得する。
   double closeM5 = iClose(NULL, PERIOD_M5, 0 );
   double closeH1 = iClose(NULL, PERIOD_H1, 0 );
   double closeD1 = iClose(NULL, PERIOD_D1, 0 );
   if( closeM5 != closeH1 || closeM5 != closeD1 )
   {
      PrintFormat("miss match %f %f %f", closeM5, closeH1, closeD1);
   }

■症状が発生しないコード
//------------------------------------------------------------------
// 気配値表示処理   
void OnTick()
{
   //ヒストリカルデータは取得する。
   double closeM5 = iClose(NULL, PERIOD_M5, 0 );
   double closeH1 = iClose(NULL, PERIOD_H1, 0 );
   double closeD1 = iClose(NULL, PERIOD_D1, 0 );
   if( closeM5 != closeH1 || closeM5 != closeD1 )
   {
      PrintFormat("miss match %f %f %f", closeM5, closeH1, closeD1);
   }

   //5分に一回だけ動作する
   static datetime lastUpdate = 0 ;
   datetime current = iTime(Symbol(), PERIOD_M5, 0);
   if( lastUpdate == current ) return ;
   lastUpdate = current;



この現象は、マルチタイムフレームだけではなく、多通貨を同時に監視するようなEAにも同じことが言えます。
まとめると下記の通りです。

1.最新値が読めるのは、EAが挿入されているチャートの値のみ。

2.他の通貨や時間は最新値ではない。

3.一回iCloseなどで価格を取りに行くと、そのタイミングで最新値を構築する。
 ただし、その際、iCloseはいったん古いデータを返却する。

4.一度最新値を構築すると、しばらく(1分ぐらい?)は構築し続ける。

ということで、対策は、処理の頭で、使う時間軸と通貨のiCloseを読み込み続けるということになるかと思います。

Gewinn8のように、5分一回しか動作しないし、数秒ずれたところで・・・というEAでは特に問題ないかもしれませんが、スキャル系に1秒を争う場合はちょっと許容しがたい処理遅れになるかしれませんね。このあたりは、処理内容で、価格チェックをする場合と、発注処理をする場合とで切り分けるなど、工夫が必要そうです。

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

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

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

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