FORTS Bitte helfen Sie - Seite 9

 
komposter:

Was ist der Unterschied zwischen "nicht" und "nicht bereit" für das Programm (und den Programmierer)?

Wenn die Daten nicht bereit sind, tritt ein Fehler auf.

Vielleicht ist diese Information aber auch nicht sofort verfügbar und wird deshalb nicht angezeigt.

Und um zu vermeiden, dass man in den Server "eindringt".

Außerdem sind Sie unser "Leser"... Frage:

Warum wird die Zeitreihe erstellt, wenn die Daten fertig sind ( CopyTime(Symbol,Zeitraum,erstes Datum+PeriodSeconds(Zeitraum),1,Zeiten) )?

Если мы успешно прошли все проверки, то сделаем последнюю попытку обойтись без обращения к торговому серверу. Сначала узнаем начальную дату, для которой доступны минутные данные в формате HCC.
Запросим это значение функцией SeriesInfoInteger() с модификатором SERIES_TERMINAL_FIRSTDATE и опять сравним со значением параметра start_date.

   if(SeriesInfoInteger(symbol,PERIOD_M1,SERIES_TERMINAL_FIRSTDATE,first_date))
     {
      //--- there is loaded data to build timeseries
      if(first_date>0)
        {
         //--- force timeseries build                                            
         CopyTime(symbol,period,first_date+PeriodSeconds(period),1,times);
         //--- check date
         if(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date))
            if(first_date>0 && first_date<=start_date) return(2);
        }
     }
 
 
MigVRN:
Das ist richtig - es lädt und bereitet auf, was da ist. Aber aufgrund der Tatsache, dass jede Verzögerung im Indikator den Chat mit allem, was daran hängt, verlangsamt, haben wir es so gemacht, dass in Indikatoren, wenn die Serie zum Zeitpunkt des Aufrufs nicht bereit ist, die Funktion einen Fehler zurückgibt und die Datenaufbereitung INITIALISIERT. Nach einiger Zeit wird keine Fehlermeldung mehr angezeigt. Dies ist der Fall in Ihren Protokollen.

MigVRN!

Chukcha hat die Hilfe erneut gelesen und muss Ihnen NICHT zustimmen.

"Das ist richtig - eslädt und bereitet auf, was da ist."

Dies ist Ihre Spekulation....

Die Referenz besagt jedoch, dass die Funktion SeriesInfoInteger mit dem BezeichnerSERIES_TERMINAL_FIRSTDATE

Sollte zurückkehren:

SERIEN_TERMINAL_ERSTDATUM

Erstes Datum in der Historie nach Symbol im Client-Terminal, unabhängig vom Zeitraum

Sie darf nichts vorbereiten!

Es gibt Daten in der Terminal-Historie - holen Sie sich das Datum.

Nein - es wird "0" zurückgegeben.

 
Ein neuer Tag und wieder eine neue Runde.
 
barabashkakvn:
Ein neuer Tag und wieder eine neue Runde.
Zeigen Sie in der Referenz, etwas ANDERES
 
papaklass:
Bereiten Sie die Daten vor und arbeiten Sie mit ihnen. Sie können 150 Mal sagen, dass etwas nicht in Ordnung ist, und 150 Antworten erhalten, was zu tun ist. Es ist Ihr Job, also passen Sie auf sich auf!

Danke, aber Sie wissen sehr gut, dass ALLES bewiesen werden muss.

SD ist der Meinung, dass die Rückgabe von 0, wenn die Daten vorhanden sind, kein Fehler in ihrer Funktion ist.

Wenn dies der Fall ist, MUSS es in der Dokumentation erwähnt werden!

 

Mikalas:

Sollte, sollte nicht - das ist alles, worüber wir reden. Nun, Sie können selbst sehen, wie es funktioniert :)

Das Einzige, dem ich zustimmen kann, ist, dass nicht ganz klar ist, welche Daten SOFORT bereitstehen (jederzeit verfügbar sind) und welche Daten das Terminal vorbereitet, wenn Sie darauf zugreifen.

Ich(!) verstehe, dass beim Zugriff auf alle Zeitreihendaten (Zeit und Preis, Anzahl der Balken,ENUM_SERIES_INFO_INTEGER Aufzählung, oder vielleicht habe ich etwas anderes vergessen), die Daten nicht sofort bereit sind.

Um solche Situationen zu vermeiden, ist dies in der Hilfe vermerkt:

Da das mql5-Programm auf die Daten eines beliebigen Symbols und Zeitrahmens zugreifen kann, besteht die Möglichkeit, dass die Daten eines benötigten Zeitrahmens noch nicht im Terminal generiert wurden oder die benötigten Kursdaten nicht mit dem Handelsserver synchronisiert sind. In diesem Fall ist die Wartezeit für die Datenbereitstellung schwer vorhersehbar.

Algorithmen, die zyklisch auf die Bereitstellung von Daten warten, sind nicht die beste Lösung. Die einzige Ausnahme in diesem Fall - Skripte, weil sie keine andere Wahl des Algorithmus haben, aufgrund des Fehlens der Ereignisverarbeitung. Für benutzerdefinierte Indikatoren werden solche Algorithmen sowie alle anderen Warteschleifen nicht empfohlen, da sie dazu führen, dass die Berechnung aller Indikatoren und andere Preisdatenverarbeitung für dieses Symbol gestoppt wird.

Für Expert Advisors und benutzerdefinierte Indikatoren ist es besser,das ereignisbasierte Verarbeitungsmodell zu verwenden. Wenn die Verarbeitung der Ereignisse OnTick() oder OnCalculate() es nicht geschafft hat, alle erforderlichen Daten der gewünschten Zeitreihe zu erhalten, sollten Sie den Event-Handler verlassen, in der Erwartung, dass Sie beim nächsten Aufruf des Handlers Zugriff auf die Daten haben.

 
MigVRN:

Sollte, sollte nicht - das ist alles, worüber wir reden. Nun, Sie können selbst sehen, wie es funktioniert :)

Das Einzige, dem ich zustimmen kann, ist, dass nicht ganz klar ist, welche Daten SOFORT bereitstehen (jederzeit verfügbar sind) und welche Daten das Terminal vorbereitet, wenn Sie darauf zugreifen.

Ich(!) verstehe, dass beim Zugriff auf alle Zeitreihendaten (Zeit und Preis, Anzahl der Balken,ENUM_SERIES_INFO_INTEGER Aufzählung, oder vielleicht habe ich etwas anderes vergessen), die Daten nicht sofort bereit sind.

Um solche Situationen zu vermeiden, ist dies in der Hilfe vermerkt:

Da das mql5-Programm auf die Daten eines beliebigen Symbols und Zeitrahmens zugreifen kann, besteht die Möglichkeit, dass die Daten eines benötigten Zeitrahmens noch nicht im Terminal generiert wurden oder die benötigten Kursdaten nicht mit dem Handelsserver synchronisiert sind. In diesem Fall ist die Wartezeit für die Datenbereitstellung schwer vorhersehbar.

Algorithmen, die zyklisch auf die Verfügbarkeit von Daten warten, sind nicht die beste Lösung. Die einzige Ausnahme in diesem Fall - Skripte, weil sie keine andere Wahl des Algorithmus haben, aufgrund des Fehlens der Ereignisverarbeitung. Für benutzerdefinierte Indikatoren werden solche Algorithmen sowie alle anderen Warteschleifen nicht empfohlen, da sie dazu führen, dass die Berechnung aller Indikatoren und andere Preisdatenverarbeitung für dieses Symbol gestoppt wird.

Für Expert Advisors und benutzerdefinierte Indikatoren ist es besser,das ereignisbasierte Verarbeitungsmodell zu verwenden. Wenn Sie während der Verarbeitung der Ereignisse OnTick() oder OnCalculate() nicht alle erforderlichen Daten der gewünschten Zeitreihe erhalten haben, sollten Sie den Event-Handler verlassen und erwarten, dass Sie beim nächsten Aufruf des Handlers Zugriff auf die Daten haben.

Andrew!

Ich weiß nicht, wie es Ihnen geht, aber ich beschäftige mich seit vielen Jahren mit Dokumentation.

Sehen Sie, aus der Dokumentation geht hervor, wie ich(!) es verstanden habe.

1. Prüfen wir, ob es für das Symbol im Terminal historische Daten gibt (SeriesInfoInteger mit der KennungSERIES_TERMINAL_FIRSTDATE)

Vielleicht, ich streite nicht darüber, baut und initialisiert es etwas.

2. Keine Daten (gibt ein leeres Startdatum der Historie zurück) - geht zum Server, um Daten zu erhalten.

Wenn ein Datum vorhanden ist, wird der angegebene Zeitrahmen mit der FunktionCopyTime(symbol,period,first_date+PeriodSeconds(period),1,times) konstruiert;

4. Wir prüfen den Beginn der Zeitreihe mit dem angegebenen Datum(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date).

Das steht in der Dokumentation.

Aber wenn ich(!) im Terminal nach Verlaufsdaten nach Symbolen(nicht nach Zeitserien!!!!) frage, die EXAKT da sind

Funktion gibt "0" zurück.

Glauben Sie, dass dies RICHTIG ist?

 
Mikalas:

ABER, wenn ich(!) im Terminal nach Verlaufsdaten nach Symbolen(nicht nach Zeitserien!!!!) frage, die EXAKT dort sind

gibt die Funktion "0" zurück.

Glauben Sie, dass dies RICHTIG ist?

Die Daten (nicht vorbereitet) befinden sich auf der Festplatte. Die Daten (aufbereitet) können auf dem nebenstehenden Chat sein. Aber es gibt keine vorbereiteten Daten auf dem Chat, der die Umleitung durchführt. Daher liegt ein Fehler vor. Das ist richtig. Aber es ist nicht bequem :)

Auch wenn ich selbst solche Fragen nicht mag - ist es für Sie entscheidend, die Daten aus dem Indikator für die angrenzenden Zeichen abzufragen? (unter Berücksichtigung dessen, was in der Hilfe und in meinem Beispiel geschrieben steht - wie ein Indikator die Ausführung von Expert Advisor und Chat verlangsamen kann). Sie können all diese Schwierigkeiten umgehen...

 
papaklass:

Sie fragen nach "FIRSDDATE", nicht nach Daten. Das Datum ist wahrscheinlich vorhanden, aber die Daten können aus wirtschaftlichen Gründen fehlen. Warum sollte man die Daten für alle Zeichen aufpumpen, wenn sie im Moment nicht verwendet werden? Die Entwickler haben den vernünftigen Weg eingeschlagen, die Daten nur dann aufzupumpen, wenn der Benutzer auf diese Daten zugreift. Dies ist der normale Ansatz. Sie, die Sie mit dem Terminal arbeiten, sollten dies wissen und entsprechend handeln.

Anstatt Ihre Zeit mit dem Handel zu verschwenden, beschäftigen Sie sich mit elementaren Dingen und vergeuden Ihre Zeit. Schonen Sie Ihre Zeit. :)

Die Roboter handeln für mich, ich bin im Moment nicht zu Hause...

Und ich brauche Indikatoren, um meinen Handel zu verbessern :)

 
Mikalas:

Andrej!

Ich weiß nicht, wie es Ihnen geht, aber ich beschäftige mich seit vielen Jahren mit Dokumentation.

Sehen Sie, aus der Dokumentation geht hervor, wie ich(!) es verstehe.

1. Prüfen wir, ob es historische Daten über das Symbol im Terminal gibt (SeriesInfoInteger mit dem BezeichnerSERIES_TERMINAL_FIRSTDATE)

Vielleicht, ich streite nicht darüber, baut und initialisiert es etwas.

2. Keine Daten (gibt ein leeres Startdatum der Historie zurück) - geht zum Server, um Daten zu erhalten.

Wenn ein Datum vorhanden ist, wird der angegebene Zeitrahmen mit der FunktionCopyTime(symbol,period,first_date+PeriodSeconds(period),1,times) konstruiert;

4. Wir prüfen den Beginn der Zeitreihe mit dem angegebenen Datum(SeriesInfoInteger(symbol,period,SERIES_FIRSTDATE,first_date).

Das steht in der Dokumentation.

Aber wenn ich(!) im Terminal nach Verlaufsdaten nach Symbolen(nicht nach Zeitserien!!!!) frage, die EXAKT da sind

Funktion gibt "0" zurück.

Glauben Sie, dass dies RICHTIG ist?

Lesen Sie die Dokumentation sorgfältiger und nicht selektiv. Das Vorhandensein von Verlaufsdaten auf der Festplatte bedeutet für das Terminal nicht "definitiv vorhanden". In diesem Fall (beim Zugriff über den Indikator) arbeiten die Funktionen nur mit dem Zeitreihen-Cache im Speicher. Das bedeutet, dass ein synchroner Speicherzugriff durchgeführt wird, und wenn es dort keine vorbereitete Zeitreihe gibt, wird das Datum SERIES_FIRSTDATE (des ersten Elements des Arrays) nicht zurückgegeben. Aber natürlich löst die Anfrage die Vorbereitung aus - das Laden der Zeitreihen in den Speicher.

Die SERIES_TERMINAL_FIRSTDATE-Anfrage ist mit der Initialisierung der Datenbank und der Synchronisierung mit dem Server verbunden, so dass der erste Aufruf ohnehin nicht sofort funktioniert.

Grundsätzlich wird die Fähigkeit, die erforderliche Historie zu erhalten, mit SERIES_SERVER_FIRSTDATE überprüft. D.h. man kann natürlich mit X Iterationen der Historienabfrage rechnen, aber wenn das Terminal das Vorhandensein der Historie über SERIES_SERVER_FIRSTDATE bestätigt , dann ist die Verfügbarkeit der relevanten Zeitreihendaten nur eine Frage der Zeit (Synchronisation der m1-Datenbank mit dem Server und Generierung der Zeitreihen).

Grund der Beschwerde: