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

 
Mikhail Nazarenko:
さて、注目してくれた開発者の皆さんに感謝しつつ、NewBarのような松葉杖を作成します)))トピックを閉じました。

作成する必要はありません。完全に動作する機能を持たせました。使ってみてください。

 

新しい時間がやってくる...


価値観は一蓮托生...。

 
Mikhail Nazarenko:

いや、もっといい_Period.なぜなら、今期が正しく更新されている間は、H1からのゼロクォートを無理やり待つことになるからです。時間が更新されたときではなく、時間の最初の秒数でデータを取得する必要があります。

if(NewBar(PERIOD_M5))
   {
    close_H1 = iClose(_Symbol, PERIOD_H1, 1);
    close_M1 = iClose(_Symbol, PERIOD_M1, 1);
    close_M5 = Close[1];
    
    
    if(close_H1 != close_M5)
      Print(close_H1, " H1 != M5 ", close_M5);
    if(close_M1 != close_M5)
      Print(close_M1, " M1 != M5 ", close_M5);

//...

例題に追加して確認したい


なぜか 同じ終値を 全く違うバーで見ることになります。?

M5で新しいバーがあると、M1でも新しいバーがあるが、H1では12本中1本だけ新しいバーがあり、残りの11本はバーがないことになる。

 
PapaYozh:

その理由がわからない。 同じバーで同じ終値を 見るとは限らない?


私もそれに気づき、間違っていたのかと思いました。

 

どうも問題の説明がうまくできていないようです、すみません。と書き、お約束の松葉杖をついてみました。MQL4のコードに実装されているはずなので、ここに書きました。興味のある方は、ぜひ受けてみてください。このトピックは終了しました。

//Функция отслеживания появления обновленных котировок по таймфрейму, где max_tf таймфрейм +1 до которого включительно будет требоваться обновление
bool isRefresh(int max_tf = 0,int min_sleep = 1000){
   
   //Массив с таймфреймами
   int tf[9] = {1,5,15,30,60,240,1440,10080,43200};
   
   //Если максимальное 0 то текущее значение
   max_tf = (max_tf <= 0) ? _Period : max_tf;
   
   //Текущее время
   datetime period,tc = TimeCurrent();
   
   for(int i = 0; i < 9; i++){
         
      period = tf[i]*60;
      
      if(iTime(_Symbol,tf[i],1) != (int(tc/period)-1)*period){
         Sleep(min_sleep);
         return false;   
      }
      if(max_tf < tf[i])//Если таймфрейм больше максимального и тоже обновлен то выходим
         break;
   }
   Sleep(min_sleep);
   RefreshRates();
   
   return true;
}
 
Mikhail Nazarenko:

どうも問題の説明がうまくできていないようです、すみません。お約束の松葉杖を書き、テストしました。MQL4のコードに実装されているはずなので、ここに書きました。興味のある方は、ぜひ受けてみてください。このトピックは終了しました。

1.おそらく、そうでしょう。

2.返される結果に影響を与えないのに、なぜ関数から戻る前に1秒スリープさせるのですか?

 

他の期間/シンボルからのローソク足が時間通りに生成されるためには、それらを常に「引く」必要があり、そうでなければMTはそれらを「必要なように」更新する。
掲示板で何度も議論されていることですが、真理です)

ps. あなたのコードがタイマーで動作し、他の時間枠の相場が1時間に1回(または1日に1回)しかアクセスできない場合、更新用に別の関数を作成する必要があります。または、次のリクエストの後、数秒待ちます。

 
PapaYozh:

1.どうやら、そうみたいですね。

2.返された結果が何ら影響を受けないのに、なぜ関数から戻る前に1秒スリープさせるのですか?

これはすべて経験によるものです。信じられなければ、リメイクして寝ないでください)。全体は任意です。

 

純粋に○○○○○があるんです。

機能から戻って何か役に立つことができるのに、なぜ機能の中で眠っているのでしょうか?

 
PapaYozh:

純粋に○○○○○があるんです。

機能から戻って何か役に立つことができるのに、なぜ機能の中で眠っているのでしょうか?

それは、純粋でシンプルな***tです。私の前の返信のどこがわからなかったのか、教えてください。もう1度寝てないで、何か役に立つことをしてください))