スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

昨日の記事、EA等でチャート表示と異なるタイムフレーム...への対処

 昨日の記事でいただいたありがたいコメントに従ってもう少しつっこんで調べてみた結果、
やはり重要な問題と思われるので対処法を決めた。

double dAtr = iATR( NULL, PERIOD_D1, nPeriod, 1 );
int nErr = GetLastError();
if ( nErr == ERR_NO_ERROR )
  OpenPositionRange( nType, dAtr*nSLRatio/100,
  dAtr*nTPRatio/100, true );
else
  Comment( "[ERROR](" + nErr + "): iATR() is Failure, "
  + ErrorDescription( nErr ) );


要点としては、
・データ更新がされておらず、iATR()の取得に失敗する可能性がある。
・最新のデータがロード済みでなくローカルPCに古いデータがある場合、
 戻り値はゼロにならないので、戻り値で判断してはいけない。
・GetLastError()でエラー値を取得し、エラーがあったことが分かれば、
 データ取得できなかった旨のメッセージを表示して、注文は次のティックに先延ばしする。
スポンサーサイト

theme : MT4自動売買
genre : 株式・投資・マネー

tag : MT4EA タイムフレーム マルチタイムフレーム ATR

comment

Secret

No title

はじめまして。

MetaTrader勉強中の者です。

>異なるタイムフレーム

記事、非常に勉強になりました。
ありがとうございました。

間のバーが抜けたときのIndicatorの値

今はネット遮断検出時に無条件に90秒Wait入れていますので、GetLastError()を使うというアイデアいただき!と思い久しぶりにチェックしてみました。

そうしたらこの前私がコメントに書いた、しばらく間が空いてもIndicatorの値は保証されるというのは、間違いだということを思い出しました。(汗)
そうでした。これで予期せぬポジションをとったりして実害が出たのでやむをえず無条件に90秒間のWaitを入れたのでした。(わずか数年前のことなのに..... 若年性アルツハイマ症の疑い?)
間違った情報入れて申し訳ありません。


ついでに調べた結果をご報告すると、ネット遮断時にGetLastError()は機能しないみたいです。残念。
ちなみに、これは表示と異なるタイムフレームに限った話しではありません。

詳しくは下のログを見ていただければわかるかと思います。
ネット遮断後からしばらくの間、EAはバーが抜けた状態で呼ばれますので、この間に計算されたIndicatorの値は少しおかしなものになります。
呼ばれる方のIndicatorも調べましたが、やはり同様にGetLastError()では検知できませんでした。
ログは下からはじまり、上に進んでいきます。ちょっと見づらいですが、ご勘弁願います。

--------------------- Test Code -------------------------------

start()
{
Print( "//////// Bars=", Bars,
" Time[0]=", TimeToStr(Time[0], TIME_MINUTES), " Time[1]=", TimeToStr(Time[1], TIME_MINUTES),
" Time[2]=", TimeToStr(Time[2], TIME_MINUTES), " Error=", GetLastError());

return(0);
}

--------------------- Test Result------------------------------

2010.03.15 22:07:08 !Test-Exp EURJPY,M1: removed
2010.03.15 22:07:08 !Test-Exp EURJPY,M1: uninit reason 1
2010.03.15 22:07:08 !Test-Exp EURJPY,M1: deinitialized
2010.03.15 22:07:06 !Test-Exp EURJPY,M1: //////// Bars=5970 Time[0]=16:07 Time[1]=16:06 Time[2]=16:05 Error=0
2010.03.15 22:07:02 !Test-Exp EURJPY,M1: //////// Bars=5970 Time[0]=16:07 Time[1]=16:06 Time[2]=16:05 Error=0
2010.03.15 22:06:57 !Test-Exp EURJPY,M1: //////// Bars=5969 Time[0]=16:06 Time[1]=16:05 Time[2]=16:04 Error=0
2010.03.15 22:06:48 !Test-Exp EURJPY,M1: //////// Bars=5969 Time[0]=16:06 Time[1]=16:05 Time[2]=16:04 Error=0

ここで 抜けていたバーが補完される。

2010.03.15 22:06:40 !Test-Exp EURJPY,M1: //////// Bars=5967 Time[0]=16:06 Time[1]=16:03 Time[2]=16:02 Error=0
2010.03.15 22:06:38 !Test-Exp EURJPY,M1: //////// Bars=5967 Time[0]=16:06 Time[1]=16:03 Time[2]=16:02 Error=0
2010.03.15 22:06:38 !Test-Exp EURJPY,M1: //////// Bars=5967 Time[0]=16:06 Time[1]=16:03 Time[2]=16:02 Error=0
2010.03.15 22:06:31 !Test-Exp EURJPY,M1: //////// Bars=5967 Time[0]=16:06 Time[1]=16:03 Time[2]=16:02 Error=0

3分間ネット遮断 --> 最新のバーが1本追加されているが、間は抜けている。 GetLastError()には変化無し。

2010.03.15 22:03:37 !Test-Exp EURJPY,M1: //////// Bars=5966 Time[0]=16:03 Time[1]=16:02 Time[2]=16:01 Error=0
2010.03.15 22:03:35 !Test-Exp EURJPY,M1: //////// Bars=5966 Time[0]=16:03 Time[1]=16:02 Time[2]=16:01 Error=0
2010.03.15 22:03:34 !Test-Exp EURJPY,M1: //////// Bars=5966 Time[0]=16:03 Time[1]=16:02 Time[2]=16:01 Error=0
2010.03.15 22:03:33 !Test-Exp EURJPY,M1: //////// Bars=5966 Time[0]=16:03 Time[1]=16:02 Time[2]=16:01 Error=0
2010.03.15 22:03:32 !Test-Exp EURJPY,M1: //////// Bars=5966 Time[0]=16:03 Time[1]=16:02 Time[2]=16:01 Error=0
2010.03.15 22:03:30 !Test-Exp EURJPY,M1: //////// Bars=5966 Time[0]=16:03 Time[1]=16:02 Time[2]=16:01 Error=0
2010.03.15 22:03:28 !Test-Exp EURJPY,M1: initialized
2010.03.15 22:03:26 !Test-Exp EURJPY,M1: loaded successfully


ネット遮断後のTime[0],Time[1]に注目!
最新のバーが1本追加されただけの状態なので、この状態で計算されたIndicatorの値はおかしくなります。

Re: No title

saru999さん、はじめまして。
コメントありがとうございます!

何かのお役に立てたようで幸いです。
この件に関しては、全てのケースについて検証しきれていない部分もありますので、
ご自分の方でも検証していただくか、EAでしたら、きりりさんのコメントにあるように
フェイル・セーフを厳重にするなどしていただくことをお奨めします。

Re: 間のバーが抜けたときのIndicatorの値

きりりさん、こんばんわ。
コメントと貴重な検証結果、ありがとうございます!

遮断からの復帰後、しばらくしてからのバーの補完とBarsの変化は
とても興味深いことだと思いました。
勝手ながら記事として取り上げさせていただきました。

すでにご存知のことだったかも知れませんが、
記事の方で時系列配列を関数に変えた場合について、
補足させていただきました。
今後ともよろしくお願いします。。。

☆当ブログとFX取引に関するご注意☆

もし、当ブログを閲覧、参考にしていただいた上で、FXまたはその他取引に関心を持たれた方は、以下の点にご注意して下さい。

・FX取引(外国為替証拠金取引)は元本や利益が保証された商品ではなく、市場環境の変化や相場の変動により損失が発生する場合があること。

・FXおよびその他取引をする場合は、各種のリスクを理解し、十分に検討し、かつ慎重に行う必要があること。

・当ブログで掲載、紹介している情報は、FXおよびその他取引、投資に関する勧誘、助言等ではないこと。

・当ブログで掲載、紹介している取引手法、ソース・プログラム等を用いた結果、いかなる損害が生じても当方は一切の責任を負わないこと。

投資、取引をされる場合は、必ずご自身の責任で行って下さい。
よろしくお願いいたします。
プロフィール

Dr.ヘパ


Author:Dr.ヘパ

カテゴリ&検索
最新記事
最新コメント
最新トラックバック
RSSリンクの表示
月別アーカイブ
カレンダー
07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -
つぶやき
★DailyImpact(有償版)★
リアル口座で運用できる有償版
販売開始しました!

ご購入、お申し込み等の詳細については、下記リンク先のブログ右上にショッピング・カート「ブーボーのトレーディングキット工房」へのリンクがありますので、お手数ですがそちらをご参照下さい。

ブーボーの
トレーディングキット

Ⅰ.経済指標トレード向けEA、DailyImpactは、経済指標発表による突発的な値動きを捉えることで、利益を得ることを目指したセミオートEAです。

Ⅱ.経済指標トレードは、「指標トレード」「News Trading(ニューストレード)」とも呼ばれ、最近注目されている手法です。

Ⅲ.経済指標発表によるトレードは、いつ大きく動く可能性があるかわかっているので有利です。

Ⅳ.一方、瞬時に大きな値動きが発生するので、手動での仕掛け、手仕舞いは難しいことが多いです。

Ⅴ.高速に計算・発注可能なEAであるDailyImpactにより、手動よりも素早く、同時に多くの通貨ペアで、しかもその場にいなくても経済指標トレードができます。
★DailyImpact(DL版)★
ダウンロード版
期間限定で試用できます!!

ダウンロード、使用方法の詳細は
以下のブログを参照して下さい。



DailyImpact(ダウンロード版):ブーボーのトレーディングキット

   ☆ブーボーの
トレーディングキット

↓↓↓アンケートにご協力お願いします。↓↓↓
ブログ・ランキング
リンク&ブロとも申請
アクセス・カウンタ
QRコード
QR
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。