Was RefreshRates() aktualisiert - Seite 4

 
Mikhail Nazarenko:
Okay, danke an alle Entwickler für die Aufmerksamkeit, ich werde Krücken wie NewBar erstellen))) Thema geschlossen.

Sie brauchen sie nicht zu erstellen. Ich habe Ihnen eine voll funktionsfähige Funktion gegeben. Verwenden Sie es.

 

Eine neue Stunde bricht an...


Die Werte sind ein und dasselbe...

 
Mikhail Nazarenko:

Nein, besser _Period. Denn wir werden zwangsweise auf die Nullnotierung von H1 warten, während der aktuelle Zeitraum korrekt aktualisiert wird. Es ist notwendig, die Daten in den ersten Sekunden der Stunde zu erhalten, nicht wenn die Stunde aktualisiert wird.

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);

//...

Ich möchte das Beispiel ergänzen und prüfen


Ich verstehe nicht, warum Sie erwarten, dass derselbe Schlusskurs in völlig unterschiedlichen Bars angezeigt wird.?

Wenn es auf M5 einen neuen Balken gibt, gibt es auch auf M1 einen neuen Balken, aber auf H1 gibt es nur in einem von 12 Fällen einen neuen Balken und in den anderen 11 Fällen gibt es keinen Balken.

 
PapaYozh:

Ich verstehe nicht, warum. Sie erwarten, dass derselbe Schlusskurs auf völlig unterschiedlichen Balken zu sehen ist.?


Das ist mir auch aufgefallen, ich dachte, ich hätte mich geirrt.

 

Offenbar erkläre ich das Problem nicht sehr gut, tut mir leid. Ich habe geschrieben und die versprochenen Krücken ausprobiert. Ich habe es hier geschrieben, weil es in den Code von MQL4 implementiert werden sollte. Wenn Sie daran interessiert sind, nehmen Sie es bitte an. Das Thema ist nun geschlossen.

//Функция отслеживания появления обновленных котировок по таймфрейму, где 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:

Offenbar erkläre ich das Problem nicht sehr gut, tut mir leid. Ich habe die versprochenen Krücken geschrieben und getestet. Ich habe es hier geschrieben, weil es in den Code von MQL4 implementiert werden sollte. Wenn Sie daran interessiert sind, nehmen Sie es bitte an. Das Thema ist nun geschlossen.

1. Vielleicht, ja.

2. Warum sollte man eine Sekunde schlafen, bevor man von einer Funktion zurückkehrt, wenn dies keine Auswirkungen auf das zurückgegebene Ergebnis hat?

 

Damit Candlesticks aus anderen Perioden/Symbolen rechtzeitig generiert werden können, müssen sie ständig "gezogen" werden, sonst aktualisiert der MT sie "wie er muss".
Das ist eine Binsenweisheit, die schon oft im Forum diskutiert wurde.)

ps. Wenn Ihr Code auf einem Timer läuft und nur einmal pro Stunde (oder einmal pro Tag) auf Kurse für andere Zeitrahmen zugreift, dann müssen Sie eine separate Funktion für die Aktualisierung erstellen. Oder warten Sie ein paar Sekunden nach der nächsten Anfrage.

 
PapaYozh:

1. Offensichtlich ja.

2. Warum eine Sekunde schlafen, bevor man von einer Funktion zurückkehrt, wenn das zurückgegebene Ergebnis in keiner Weise beeinflusst wird?

Das ist alles eine Frage der Erfahrung. Wenn Sie mir nicht glauben, machen Sie es nach und schlafen Sie nicht). Das Ganze ist freiwillig.

 

Es ist ***dort in seiner reinsten Form.

Warum in einer Funktion schlafen, wenn man von ihr zurückkommen und etwas Sinnvolles tun kann?

 
PapaYozh:

Es ist ***dort in seiner reinsten Form.

Warum in einer Funktion schlafen, wenn man von ihr zurückkommen und etwas Sinnvolles tun kann?

Das ist schlicht und ergreifend Betrug. Sagen Sie mir, was Sie an meiner vorherigen Antwort nicht verstanden haben? Ein weiteres Mal. Schlafen Sie nicht und tun Sie etwas Sinnvolles.))

Grund der Beschwerde: