Re: 間のバーが抜けたときのIndicatorの値
とても興味深い内容だったので紹介させていただくと同時に、
この件に関して自分なりに調べた結果をメモがわりに補足(蛇足?)させていただく。
以下きりりさんからいただいたコメントから抜粋。
検証結果ログとコメント詳細はこちら。。。間のバーが抜けたときのIndicatorの値
今はネット遮断検出時に無条件に90秒Wait入れていますので、
GetLastError()を使うというアイデアいただき!と思い久しぶりに
チェックしてみました。
そうしたらこの前私がコメントに書いた、
しばらく間が空いてもIndicatorの値は...(途中省略)
ついでに調べた結果をご報告すると、ネット遮断時にGetLastError()は
機能しないみたいです。残念。
ちなみに、これは表示と異なるタイムフレームに
限った話しではありません。
詳しくは下のログを見ていただければわかるかと思います。 (以降省略)
ネット遮断からの復帰後、しばらくしてからのバーの補完とBarsの変化は興味深い結果だ。
一方、検証していただいた際のMQL4記述に関して、自分が把握不足で疑問なところがあったので、
確認を兼ねてこちらでも検証してみた。
その処理の結果としてセットされるものと認識していた。
そこで湧いた疑問が、
Q1.記述にあるTimeToStr()関数がlast_errorをセットするかどうか?
(NO_ERRORについても)
Q2.Time[]のような定義済み変数の読込アクセスでもlast_errorがセットされるかどうか?
の2点だ。
Q1に関してヘルプの説明を確認したところ、TimeToStr()はlast_errorをセットすることがない
関数グループに入っていたので、 影響がないことがわかった。
Q2に関してはざっとヘルプを確認しても分からなかった。
そこで、問題があればlast_errorをセットするハズの時系列アクセス関数呼び出しに、
のように、きりりさんの記述を変更したEAで検証してみた。Bars -> iBars( NULL, 0 )
Time[n] -> iTime( NULL, 0, n ) // n=0,1,2それぞれに対して
結果1.一分足のチャートにのせた場合、いただいた検証結果と全く同様の結果となった。
遮断前、復帰後もError=0のままだった。その他、バーに関する変化も同様だった。
次に、関数呼び出しのタイムフレーム引数に1を指定、
iTime( NULL, 1, n )のように、タイムフレームの指定を明示的にした。
結果2.当然というべきか、結果1と全く同様だった。
そこで、五分足のチャートに明示的に一分足を指定(マルチタイムフレーム)とした場合のEAを
実行させてみた。
結果3.載せた最初のPrint()関数による出力で、Error=4066となった。
以降はError=0で遮断前、接続後も変わらなかった。
というわけで、きりりさんがおっしゃるとおり、
ネット遮断、復帰直後のGetLastError()の効果は、
時系列アクセス関数を使用しても期待できないようだ。。。
ところで、時系列の定義済み変数の内容に問題があった場合、
そのエラーの内容をGetLastError()取得できるのか?ということが謎のままだ。。。
theme : MT4自動売買
genre : 株式・投資・マネー
tag : MT4 EA Indicator GetLastError() 時系列アクセス ネット遮断 タイムフレーム マルチタイムフレーム