Fehler, Irrtümer, Fragen - Seite 624

 
ivandurak:

Fehler beim Laden der Datei in Expert Advisor. 10 Unterschiede finden. Der erste Code bezieht sich auf das Skript, der zweite auf den Expert Advisor, sie sind identisch Ctrl-C Ctrl-V. Der Code funktioniert im Skript, im Expert Advisor funktioniert er nicht.

Um 10 Unterschiede zu finden, müssen Sie sich den Code für das Öffnen von Dateien ansehen. (und fügen Sie zu diesem offenen Code die Ausgabe eines Fehlercodes im Falle eines Fehlers hinzu)

Zweitens, wenn Sie EA mit dieser Datei testen möchten, fügen Sie die Zeile #property tester_file "KitMaRsi.csv" zum EA-Code hinzu

 
Hallo. In MQL4 kann beim Ausführen eines Programms der Fehler ERR_HISTORY_WILL_UPDATED(4066) auftreten. Die Funktion GetLastError() gibt den Fehlercode zurück. Haben Sie einen ähnlichen Fehler in MQL5? Ich habe hierhttps://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes gesucht, aber nichts Ähnliches gefunden.
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
Документация по MQL5: Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения
  • www.mql5.com
Стандартные константы, перечисления и структуры / Коды ошибок и предупреждений / Ошибки времени выполнения - Документация по MQL5
 
Druide:
Hallo. In MQL4 kann beim Ausführen eines Programms der Fehler ERR_HISTORY_WILL_UPDATED(4066) auftreten, dessen Code von der Funktion GetLastError() zurückgegeben wird. Haben Sie einen ähnlichen Fehler in MQL5? Ich habe hierhttps://www.mql5.com/ru/docs/constants/errorswarnings/errorcodes gesucht, aber nichts Ähnliches gefunden.

Ich werde mich zu dem Fehler nicht äußern. Das Terminal selbst sorgt dafür, dass die Daten synchronisiert werden. Sie können die Daten synchronisieren (laden) und prüfen, ob der Verlauf synchronisiert ist oder nicht.

Die Organisation des Datenzugriffs wird hier beschrieben (es gibt ein Beispiel für ein Skript zum Laden der Geschichte).

Funktionen, die möglicherweise benötigt werden: SeriesInfoInteger und SymbolIsSynchronized

 
awkozlov:

Der Wechsel mit Zeichenvariablen scheint nicht zu funktionieren...

Anstelle von:

Typ" - unzulässiger Typ des Schalterausdrucks
Kaufen" - konstanter Ausdruck ist nicht integral


Verwenden Sie Bezeichner statt Text. Was einfacher und logischer wäre...

//Что-то типа такого (или свои идентификаторы). Написать функцию конвертирующую текст в идентификатор и обратно (при необходимости) достаточно просто.
//Да и выглядит это более профессионально в конечном итоге.
  switch(type)
  {
  case ORDER_TYPE_BUY: {direction = type;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case ORDER_TYPE_SELL: {direction = type; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }

  switch(type)
  {
  case OP_BUY: {direction = ORDER_TYPE_BUY;  price = SymbolInfoDouble(zSymbol,SYMBOL_ASK); break;}
  case OP_SELL: {direction = RDER_TYPE_SELL; price = SymbolInfoDouble(zSymbol,SYMBOL_BID); break;}
  default: {return(lot_value);}
  }
 
awkozlov:

Der Wechsel mit Zeichenvariablen scheint nicht zu funktionieren...

Stattdessen:

type" - unzulässiger Typ des Schalterausdrucks
Kaufen" - konstanter Ausdruck ist nicht integral

Ich muss es so zeichnen:

Es ist nicht so klar und es ist schief.

Es funktioniert auch in anderen Sprachen.

Soll ich es anders schreiben?

Ich habe dies getan.

#define  OP_BUY               0
#define  OP_SELL              1
#define  OP_BUYLIMIT          2
 
Interesting:

Ich werde mich zu dem Fehler nicht äußern. Das Terminal selbst sorgt dafür, dass die Daten synchronisiert werden. Sie können die Daten synchronisieren (laden) und prüfen, ob der Verlauf synchronisiert ist oder nicht.

Die Organisation des Zugriffs auf die Daten wird hier beschrieben (es gibt ein Beispiel für ein Skript zum Laden der Geschichte).

Funktionen, die möglicherweise benötigt werden: SeriesInfoInteger und SymbolIsSynchronized

Ich danke Ihnen! Ich hab's.
 

Gibt es Analoga solcher Bibliotheken wie stdlib.mqh, WinUser32.mqh, stderror.mqh in MQL5, insbesondere bin ich in PostMessageA Funktion interessiert?

 

Bei der Optimierung mit mehreren Bearbeitern werden die Ergebnisse im Diagramm in der Reihenfolge der Bearbeitung angezeigt, d.h. abwechselnd. Ist es möglich, die Reihenfolge, in der die Ergebnisse angezeigt werden, von der Auswahl der Parameter abhängig zu machen, wie es in MT4 der Fall war? Das heißt, das spätere Ergebnis würde in der richtigen Reihenfolge eingefügt werden. Ich will damit nur sagen, dass es unpraktisch ist, Trends und Regelmäßigkeiten während der Optimierung zu verfolgen, und dass die Ergebnisse erst analysiert werden können, wenn die Berechnungen abgeschlossen sind.

++: Es geht um Optimierung mit voller roher Gewalt - das macht natürlich keinen Sinn bei der Genetik.

 
Konstantin83:

Beschreibung im Handbuch

In der Tat

bool ObjectCreate(
long chart_id, // Kennung der Karte
string name, // Objektname
ENUM_OBJECT type, // Objekttyp
intn win, // Fensterindex);


Danke, korrigiert.
 
x100intraday schrieb https://www.mql5.com/ru/forum/1111/page610#comment_130250:

Führen wir den iFractals-Beispielcode aus der Hilfe zu M1 aus, der die zweite - vollständige - Form des OnCalculate()-Funktionsaufrufs verwendet. Aber vorher müssen wir innerhalb dieser Funktion noch Folgendes korrigieren

zu

um eine einzelne Zeile mit der Ausgabe nicht aus den Augen zu verlieren (wenn wir es so lassen, wie es ist, wird visuell immer 1 sichtbar sein, weil andere Werte selten sind und sofort durch 1 ersetzt werden, so dass es scheint, dass 1 immer angezeigt wird) Nach der Laufzeit sehen wir, dass Nicht-Einheits-Werte jede Minute auftreten, d.h. bei jedem neuen Balken, was eindeutig zeigt, dass der Indikator jede Minute neu gezeichnet wirdvollständig trotz der Tatsache, dass der Codewirtschaftlicher Algorithmus. Die Zweifler können mehrere Codezeilen hinzufügen, indem sie z. B. vertikale Linien auf jedes Fraktal zeichnen, diese dann nach der ersten Zeichnung wieder entfernen und darauf warten, dass nach einer Minute ein neuer Balken mit denselben Linien erscheint. Alles, was mit der Fertigstellung des letzten Fraktals oder der letzten Linie zu tun hat, kommt aus irgendeinem Grund nicht in Frage.

Ja, der Indikator aus dem Beispiel bei der Funktion iFractals() aktualisiert seine Indikatorpuffer mit Werten aus dem eingebauten Indikator. Die zweite Bedingung in der Zeile (gelb hervorgehoben) ist daran "schuld":

//--- если это первый запуск вычислений нашего индикатора или изменилось количество значений в индикаторе iFractals
//--- или если необходимо рассчитать индикатор для двух или более баров (значит что-то изменилось в истории)
   if(prev_calculated==0 || calculated!=bars_calculated || rates_total>prev_calculated+1)
     {

Erläuterung: Bei jedem Tick werden diese beiden Werte verglichen und am Ende der Funktion erfolgt eine Zuweisung

//--- запомним количество значений в индикаторе Fractals
   bars_calculated=calculated;

Und der Unterschied zwischen ihnen kann im Geist entstehen:

  1. die Historie selbst, auf deren Grundlage der Fraktalindikator berechnet wird, hat sich geändert (Blättern in der Historie durch den Benutzer)
  2. Auftreten eines neuen Bar-Ereignisses

In diesem Fall ist die Trennung der beiden Ereignisse nicht erfolgt, das haben Sie festgestellt. Ich kann noch nicht sagen, ob wir dieses Beispiel so ändern werden, dass solche Fragen nicht mehr auftreten.