RefreshRates()の更新内容 - ページ 7

 
Mikhail Nazarenko:

ありがとうございます、その通りです。iTime経由で更新されていないタイムシリーズにアクセスすると、ターミナルは本当に4066エラーになるのでしょうか?iCloseがゼロではなく、未更新の情報を与えることに遭遇したことがあります。

そこが、あなたのヒッチの原因になっている重要なポイントなんです。

4066エラー - このTFの履歴がない場合、準備ができていませんので、サーバーに連絡する必要があります。

また、すでに持っている場合でも、アクセスしたときだけ更新され、つまり、エラーを出さず、今あるものだけを与え、同時にリクエストで時系列を更新し始めます。

アクセス頻度が少なく、不定期に アクセスすると、たまにジャンクが発生する。必要なTFを定期的に、1回1回のティックまで要求すれば、すべてOKです。

このTFのチャートが開いている 場合、チャート上で定期的に更新されます。ちなみに、EAから必要なTFのチャートを開くことは、アクセスが不定期であれば可能でしょうが、手動でTFを閉じたり変更したりするので、信頼性に欠けます。

 
Evgeniy Chumakov:


なぜ[i + 0]に0を足すのか?

ゼロの代わりに1と2、1か2を代用しました。0、つまり1気圧を残しました。コードのクリーンアップはしていない、ロジックとしては重要でない。

 
Aleksey Mavrin:

そこがポイントです、引っかかる原因になっているのは。

4066エラーは、このTFの履歴がない場合、準備ができていないため、サーバーに問い合わせる必要があります。

また、すでに持っている場合でも、アクセスしたときだけ更新され、つまり、エラーを出さず、今あるものだけを与え、同時にリクエストで時系列を更新し始めます。

アクセス頻度が少なく、不定期に アクセスすると、たまにジャンクが発生する。必要なTFを定期的に、1回1回のティックまで要求すれば、すべてOKです。

このTFのチャートが開いている 場合、チャート上で定期的に更新されます。ちなみに、アクセスが不定期であれば、EAから必要なTFのチャートを開くことは可能でしょうが、手動でTFを閉じたり変更したりできるので、信頼性が低いです。

エラーが出るはずなのに、古いデータを返してくれる、素晴らしい。これは、ブローカーがMT4を愛し、MT5に乗り換えない理由の1つです))。

つまり、4066のエラーが出るまで、tickまたはsleepごとに正しい時間枠を要求する。うまくいったかな?

 
Mikhail Nazarenko:

エラーが出るはずなのに、古いデータを返してくれる、素晴らしい。これは、ブローカーがMT4を好み、MT5への切り替えを行わない理由の一つです))。

つまり、4066のエラーが出るまで、tickまたはsleepごとに正しい時間枠を要求する。うまくいったかな?

ほとんど。ここでは、レディファンクションを紹介します。

bool IsTFDataReady(ENUM_TIMEFRAMES eTF)
{
   ResetLastError();
   iTime(NULL, eTF, 1);
   return GetLastError() == ERR_NO_ERROR;
}
OnTick()に挿入し、trueを返せば、eTFのタイムフレームにアクセスできる、有効なデータである。
 
Mikhail Nazarenko:

エラーが出るはずなのに、古いデータを返してくれる、素晴らしい。これは、ブローカーがMT4を好み、MT5への切り替えを行わない理由の一つです))。

つまり、4066のエラーが出るまで、tickまたはsleep ごとに正しい時間枠を要求する。うまくいったかな?

もちろん、OnInitの中でだけsleepを使う方が良いし、インジケータの中でだけ必要なものです。それ以外の場合は、上記のIgorさんがおっしゃるようにOnTickで十分です。

タスクに応じて、最適な選択肢を操ることができるのです。通常、新しいバーがあるかどうかを確認する場合、iTimeはすでに使用するすべての時間枠のティック ごとにアクセスされており、それだけで最新の状態に保つことができます。

s.w. また、イゴールの関数をすべてのティックではなく、一部のレアな条件で使用すると、ラグも発生します。
Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
В чем различия между тремя режимами тестирования в MetaTrader 5 и на что обратить внимание? Как происходит тестирование эксперта, торгующего одновременно на нескольких инструментах? Когда и как вычисляются значения индикаторов при тестировании и как обрабатываются события? Как синхронизировать бары с разных инструментов при тестировании в режиме "Только цены открытия"? Статья призвана дать ответы на эти и многие другие вопросы.
 
Aleksey Mavrin:

sleepはもちろんOnInitの中でだけ使うのがベターで、インジケーターの中でだけ必要です。そ れ以外の場合は、上記のIgorさんのようにOnTickを使用すれば十分です。

タスクに応じて、最適な選択肢を操ることができるのです。通常、新しいバーがあるかどうかを確認する場合、iTimeは使用するすべての時間枠のために毎ティックで 呼び出されます、それはそれらを最新に保つのに十分です。

s.e. また、Igorの関数がすべてのtickで使用されるのではなく、いくつかの稀な条件で使用される場合、これも同期がとれなくなります。

スリープはインジケータでは機能しない

 
Ihor Herasko:

ほとんど。ここでは、既成の関数を紹介します。

OnTick()に挿入し、trueを返せば、eTFのタイムフレームにアクセスでき、データは有効である。

見事にシンプルです。ありがとうございます。iClose機能などの マニュアルに記載すればいいのに。あるいは、陰謀論が生まれないように、MT4の気配値更新のロジックを 修正すればいいのに。

 
Mikhail Nazarenko:

エラーが出るはずなのに、古いデータを返してくれる、素晴らしい。これは、ブローカーがMT4を好み、MT5への切り替えを行わない理由の一つです))。

つまり、4066のエラーが出るまで、tickまたはsleepごとに正しい時間枠を要求する。うまくいったかな?

MT5ではもっと難しいです。

F4では、2分ごとに使用するすべてのTFにiTimeを 要求すれば、すべてのデータが実測されます。

 
Mikhail Nazarenko:

すべてが見事にシンプルです。ありがとうございます。開発者はなぜiClose機能などの マニュアルに記載しないのでしょうか。あるいは 陰謀論を生まないようにMT4の気配値更新のロジックを修正 する。

なぜなら、ほとんどすべてのEAは、ティックごとに正しい条件のチェックを行い、すべてが勝手に更新されるからです。

 
Vitaly Muzichenko:

スリープはインジケータでは機能しない

本当に必要なら効きますよ :)

void SleepA(int msec)
 {
   uint now=GetTickCount();
   while (GetTickCount()<(now+msec))
      {
      for(int i=0;i<10000;i++)
         {
          double f=1;
          f*=f;
          f+=f;
         }
       }
   return;
 }  
Andrey Khatimlianskii:

MT5ではもっと複雑です。

4では、2分ごとに使用するすべてのTFにiTimeを 要求すればよく、すべてのデータが実測されることになる。

その通り