TimeCurrent()およびiTime()の不具合・問題点 - ページ 2

 
RaptorUK:
この問題は、Indicatorに対して最初にstart()が呼ばれたとき、新しいティックの結果ではない可能性があることだと思います ... その場合、TimeCurrent()は間違った時刻を報告します。 私はこれを検証していません ... ...

この場合、私は単に最初のティックを無視して ... 2ティック以降を通常通り続けます。

はい、そういうことです。
 
インジケータなんだから、TimeCurrentがどうとか気にする必要はないでしょう。forインジケータをループさせて、バーに描画してください。TimeCurrentを見ず、Bidを見ず。
 
GMTに一致する特定の時間をチャート上にプロットしているので、MT4サーバー 時間とGMTのオフセットを取得しようとするときに非常に重要です。
削除済み  

Paul_B:
I'm plotting certain times on a chart which match to GMT, so it matters a great deal when trying to get the offset between MT4 server time and GMT.

<g> あなたはまだこのフォーラムの文化についていけてないようですね。モデレータや他の長期的なフォーラムのユーザーからの一連の応答は、常に「あなたは何か間違ったことをしています」であり、あなたが間違ったことをしていないことが判明したときには「なぜそんなことをしたいのですか?

もし私があなただったら、IsConnected()がfalseなら、start()の呼び出しから抜けるようにします。あるいは、ティックカウントを静的変数に保持し、ティック#1を無視することもできますが、そうすると通常の状況下で起動が不必要に遅くなってしまいます。

 
ご意見ありがとうございました。IsConnected()をもう少し研究してみます。
 
Paul_B: GMTに一致する特定の時間をチャート上にプロットしているので、MT4サーバー時間とGMTの間のオフセットを取得しようとすると、それは非常に重要です。
これで、その理由がわかりました。(なぜOPで説明しなかったのですか?)私のコードと 全く同じです。
      nextAutoUpdate = timeSrv + HR2400;
      if(Srvr_To_UTC_Auto) if(
         IsDllsAllowed()){                            // Complained @ init
         int      srvrToUTC         = LocalTimeToUTC() - TimeCurrent();
         double   nearestHalfHour   = MathRound(srvrToUTC / 1800.);
         Srvr_To_UTC_Hours          = nearestHalfHour / 2.; // Update external
      }

RaptorUKの提案に賛成です。最初のティックを無視し、2回目にすべてのバーを更新するインジケータを提案します。

また、これは完全に予想外というわけではありません。インディケータはスリープできないので、EAがiCustom経由でインディケータをinitでロードした場合、インディケータがinitとstartを実行するまで、呼び出しはバッファの値を返すことができないのです。

削除済み  
Paul_B:
ご意見ありがとうございました!現在動作していますが、私が持っているものは理想的なソリューションではなく、特に堅牢でもないようです。IsConnected()をもう少し詳しく調べてみます。

選択肢はあまりないように思います。MT4は、オフラインのチャートにインジケータを表示させるためにstart()のダミーコールを生成します。また、より一般的には、接続の確立を待たずに、MT4をロードするとすぐにチャートにインジケータを(再)表示させたいからです。

適切に確立された接続と有効なTimeCurrent()があることの確実性を高めたい場合は、AccountNumber() != 0およびAccountBalance() > 0を探すこともできます。または、流動性の薄いシンボルで数秒の遅延を犠牲にして、2番目のティックを待つことも可能です。

 

ありがとうございます。2回目のティックが受信されるまで待つようにインジケータをプログラムしてみます。

ちなみに、IsConnected()の可能性を探りましたが、IsConnected()がtrueと報告しても、まだ「間違った」TimeCurrent()を得ていました。

 
cyclops993:

<g> あなたはまだこのフォーラムの文化についていけてないようですね。モデレータや他の長期的なフォーラムのユーザーからの一連の応答は、常に「あなたは何か間違ったことをしています」であり、あなたが間違ったことをしていないことが判明したときには「なぜそんなことをしたいのですか」です。

もし私があなただったら、IsConnected()がfalseなら、start()の呼び出しから抜けるようにします。あるいは、ティックカウントを静的変数に保持し、ティック#1を無視することもできますが、そうすると通常の状況下で起動が不必要に遅くなってしまいます。

もしユーザーが問題を実証するためのテストコードを提供しない場合、具体的な手助けをするのは少し難しく、多くの場合、コードにエラーがあるというのが最善の仮定となります。あなたが引き継いで、すべての質問とヘルプのリクエスト に答えるべきです。 そうすれば、ただ助けようとしている人たちを揶揄する必要もなくなるでしょうし。. .
削除済み  
RaptorUK:
もし、ユーザーが問題を実証するためのテストコードを提供しない場合、[...]。

OPには何も問題や欠落はありませんでした。Paul_Bは、MT4のドキュメントから完全に合理的に、start()は新しいティックに応答してのみ呼び出されると仮定していたことは明らかです。(なぜ 彼がTimeCurrent()をチェック したかったのかは、違いがなく、実際私たちには関係ありません)。

あなたの回答は、マニュアルがこの分野で明らかに欠けているという事実にもかかわらず、基本的にRTFMの良いバージョンでした(これは珍しいことで、MT4のドキュメントの質はかなり良いのですが...)。Angevoyageurの反応は、これを大騒ぎと表現した。これは、MT4に対するいかなる批判に対しても、それがどんなに軽いものであっても、病的に敏感に反応するパターンの一部であるように思われる。WHRoederは、"you don't want to do that "と言い、Paul_BがすでにGMTオフセットの計算方法を知っていたため、明らかに無関係なコードをコピー&ペーストしている。