Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 1076

 

Wie kann ich eine große Datei in einer Zeile lesen?

FileReadString()

Beim Lesen aus einer bin-Datei muss die Länge der zu lesenden Zeichenkette angegeben werden. Beim Lesen aus einer txt-Datei ist die Länge der Zeichenfolge nicht erforderlich, und die Zeichenfolge wird von der aktuellen Position bis zum Zeilenvorschubzeichen "\r\n" gelesen. Beim Lesen aus einer CSV-Datei ist die Länge der Zeichenkette nicht erforderlich. Die Zeichenkette wird von der aktuellen Position bis zum nächsten Begrenzungszeichen oder bis zum Endzeichen der Zeichenkette gelesen.

Das einzige Flag für die gesamte Datei ist FILE_BIN, aber in MQL5 ist es, anders als in MQL4, auf 4095 Bytes begrenzt. Wie kann ich sonst einen großen Text aus einer Datei in eine Zeile bekommen?
 
Сергей Таболин:

Das ist nicht das, was ich meine.

"Und mit einem logischen NICHT zu lösen - die Bits invertieren, aber ich habe kein Terminal - ich kann mich nicht erinnern, wie man ein bitweises NICHT in MQL macht, und ich will nicht die Online-Hilfe lesen".

Ich meine, entweder du lieferst mir einen Beweis oder du lässt es bleiben ))))

"Jeder kann einen Fehler machen. Nur die Starken können einen Fehler eingestehen!". Wenn es noch niemand geäußert hat, ist das meine Weisheit ))). Wenn es schon jemand gesagt hat - ich habe die Weisheit eines weisen Mannes wiederholt ))))

Ich verstehe Ihre Behauptungen immer noch nicht? Wollen Sie damit sagen, dass ich Ihnen etwas beweisen soll? - Und warum? ))))

Hier habe ich via NOT nachgebaut und alle diskutierten Varianten geprüft:

void OnStart()
  {
//---
   uint TForiginal=OBJ_PERIOD_M1|OBJ_PERIOD_M2|OBJ_PERIOD_M3|OBJ_PERIOD_M4|OBJ_PERIOD_M5|OBJ_PERIOD_M6|OBJ_PERIOD_M10|
                   OBJ_PERIOD_M12|OBJ_PERIOD_M15|OBJ_PERIOD_M20|OBJ_PERIOD_M30|OBJ_PERIOD_H1;

   uint TFwithNOT=(~OBJ_PERIOD_H1&OBJ_PERIOD_H2)-1;
   uint TFwithShift=OBJ_ALL_PERIODS>>9;
   Print("TForiginal = ",TForiginal);
   Print("TFwithNOT = ",TFwithNOT);
   Print("TFwithShift = ",TFwithShift);
  }
//+------------------------------------------------------------------+

Die NOT-Variante funktioniert mit jeder TF, füllt sich aber nach (~TF_ unter der wir anzeigen & TF_eine älter als die gewünschte TF)-1;

 

Guten Tag zusammen! Eine Frage noch...

Es gibt ein MQL5-Programm, es hat eine Einstellung (eine Menge) von "Input-Parameter". Das Programm führt Berechnungen durch und erstellt / löscht und verwaltet grafische Objekte nach Bedarf.

Nach der Änderung von Eingabeparametern aus dem Setup-Fenster wird das EreignisInit erzeugt, was zu einer Programminitialisierung und den Objekten "Neu berechnen" und "Neu zeichnen" führt, was im Prinzip das ist, was benötigt wird, aberdas EreignisInitwird auch erzeugt , wenn die Diagrammperiode geändert wird (und andere), was dazu führt, dass der Prozess jedes Mal wiederholt wird, auch wenn er nicht benötigt wird.

Frage:Wie kann ich die Programminitialisierung beimInit-Ereignis ausschließen, wenn dieEingabeparameter nicht geändert werden, sondern die Initialisierung beim Programm-(Terminal-)Start belassen wird?

Mögliche Variante: die eingestellten Werte zu speichern und sie zu vergleichen, wenn das Ereignis Init eintritt, und wenn sie unterschiedlich sind, die Initialisierung zu erlauben, aber es gibt eine Menge Eingabeparameter...

 
Anzhela Sityaeva:

Guten Tag zusammen! Eine Frage noch...

Es gibt ein MQL5-Programm, es hat eine Einstellung (eine Menge) von "Input-Parameter". Das Programm führt Berechnungen durch und erstellt / löscht und verwaltet grafische Objekte nach Bedarf.

Nach der Änderung von Eingabeparametern aus dem Setup-Fenster wird das EreignisInit erzeugt, was zu einer Programminitialisierung und den Objekten "Neu berechnen" und "Neu zeichnen" führt, was im Prinzip das ist, was benötigt wird, aber das EreignisInit wird auch erzeugt , wenn die Diagrammperiode geändert wird (und andere), was dazu führt, dass der Prozess jedes Mal wiederholt wird, auch wenn er nicht benötigt wird.

Frage:Wie kann ich die Programminitialisierung beimInit-Ereignis ausschließen, wenn die Eingabeparameter nicht geändert werden, sondern die Initialisierung beim Programm-(Terminal-)Start belassen wird?

Mögliche Variante: die eingestellten Werte zu speichern und sie zu vergleichen, wenn das Ereignis Init eintritt, und wenn sie unterschiedlich sind, die Initialisierung zu erlauben, aber es gibt eine Menge Eingabeparameter...

Hier sind einige Tipps für ein anderes, ähnliches Problem

Forum für Handel, automatisierte Handelssysteme und Strategietests

Funktioniert im EA, aber nicht richtig im Indikator, Musik beim Start des Indikators

Ihor Herasko, 2019.06.17 14:12

Ja.

  1. Beim Start des Indikators wird eine globale Terminalvariable erstellt. Wie - ich bin hochgefahren.
  2. Eine Begrüßung wird abgespielt.
  3. Beim Entladen (markiert in OnDeinit) wird die globale Terminalvariable gelöscht.
  4. Wird während des Betriebs die TF geändert oder werden Parameter geändert, so wird beim Beenden in OnInit die globale Variable des Terminals überprüft. Ist dies der Fall, wird die Ansage nicht abgespielt. Wenn nicht, wird die Ansage abgespielt.

Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Es funktioniert in Expert Advisor, aber es ist nicht korrekt in Indikator, Musik auf Indikator Start

Taras Slobodyanik, 2019.06.17 16:25

5. Sie können ein Objekt auch auf dem Diagramm belassen und seinen Anwesenheitsstatus überprüfen, wenn Sie starten.

 
Alexey Viktorov:

Hier sind einige Tipps für ein anderes, ähnliches Problem



Vielen Dank für die Antwort, es sieht so aus, als ob wir in unserem Fall den Status von ein paar Dutzend Match-Änderungen im Auge behalten müssen, indem wir dies durch ein "Leerzeichen" im Graphen beschreiben, um ihre Änderungen zu verfolgen, oder unnötige Initialisierungen in Kauf nehmen, solange es nicht zu viele Objekte gibt...
 
Anzhela Sityaeva:
Danke für die Antwort, es sieht so aus, als ob wir in unserem Fall den Zustand von ein paar Dutzend Änderungen von Korrespondenzen verfolgen müssen , indem wir dies durch ein "Leerzeichen" auf dem Graphen beschreiben, um ihre Änderungen zu verfolgen, oder eine unnötige Initialisierung in Kauf nehmen müssen, solange es nicht so viele Objekte gibt...

Aber die Frage, die Sie gestellt haben, lautete.

Anzhela Sityaeva:

Guten Tag, alle zusammen! Eine Frage noch...

Es gibt ein MQL5-Programm, es hat Einstellungen (eine Menge) "Input-Parameter". Das Programm führt Berechnungen durch und erstellt / löscht und verwaltet grafische Objekte nach Bedarf.

Nach der Änderung von Eingabeparametern aus dem Setup-Fenster wird das EreignisInit erzeugt, was zu einer Programminitialisierung und den Objekten "recalculate" und "redraw" führt, was im Prinzip das ist, was benötigt wird, aber das EreignisInit wird auch erzeugt , wenn die Diagrammperiode (und andere)geändert wird , was dazu führt, dass der Prozess jedes Mal wiederholt wird, auch wenn er nicht benötigt wird.

Frage:Wie kann ich die Programminitialisierung beimInit-Ereignis ausschließen, wenn die Eingabeparameter nicht geändert werden, sondern die Initialisierung beim Programm-(Terminal-)Start belassen wird?

Mögliche Variante: die eingestellten Werte zu speichern und sie zu vergleichen, wenn das Ereignis Init eintritt, und wenn sie unterschiedlich sind, die Initialisierung zu erlauben, aber es gibt eine Menge Eingabeparameter...

Und in Ihrer Situation wird einer dieser Tipps diese unnötigen Neuzeichnungen von Objekten verhindern. Und wenn diese Objekte in OnDeinit() gelöscht werden, sollten Sie auch dort das Löschen verbieten, wenn Sie das Diagramm wechseln.

Dies ist ein Forum für Handel, automatisierte Handelssysteme und Strategietests.

Wie kann ich die globale Variable des Terminals beim Schließen des Diagramms löschen?

Alexey Viktorov, 2019.06.29 08:40

Beachten Sie diese Tabelle

ANLASS_PROGRAMM

0

Experte funktioniert nicht mehr durch Aufruf von ExpertRemove()

REASON_REMOVE

1

Programm aus der Tabelle entfernt

REASON_RECOMPILE

2

Programm neu kompiliert

REASON_CHARTCHANGE

3

Das Diagrammsymbol oder die Periode wurde geändert

REASON_CHARTCLOSE

4

Das Diagramm ist geschlossen

GRUND_PARAMETER

5

Eingabeparameter wurden vom Benutzer geändert

REASON_ACCOUNT

6

Ein anderes Konto wurde aktiviert oder erneut mit dem Handelsserver verbunden, weil die Kontoeinstellungen geändert wurden

GRUND_VORLAGE

7

Eine weitere Diagrammvorlage wurde angewendet

REASON_INITFAILED

8

OnInit()-Handler gab einen Wert ungleich Null zurück

REASON_CLOSE

9

Terminal wurde geschlossen


und in dieser Zeile Ihres Codes

   if(reason==1) GlobalVariableDel("val");

Aber wenn ich mich richtig an den Anfang Ihres Problems erinnere, ist es besser, die Bedingung wie folgt zu formulieren

   if(reason != REASON_CHARTCHANGE) GlobalVariableDel("val");

 
Alexey Viktorov:

Aber in Ihrer Frage war es

In Ihrem Fall wird einer dieser Tipps das unnötige Neuzeichnen von Objekten verhindern. Und wenn diese Objekte in OnDeinit() gelöscht werden, dann sollten Sie auch dort das Löschen verbieten, wenn Sie das Diagramm wechseln.


Die Richtung ist klar, probieren wir es aus... Ich danke Ihnen für Ihre Antwort.
 
Ich habe in der Codebase kein EA-Beispiel gefunden, bei dem eine Schließungsbedingung gesetzt werden kann, nicht nur Standard-SL/TP. Kann mir jemand einen Tipp geben?
 
Sprut112:
Ich habe in der Codebase kein EA-Beispiel gefunden, bei dem eine Schließungsbedingung gesetzt werden kann, nicht nur Standard-SL/TP. Kann mir jemand einen Tipp geben?

Was ist der Unterschied zwischen Öffnungs- und Schließbedingung?

 
Sprut112:
Ich habe in der Codebase kein Beispiel für einen EA gefunden, bei dem man die Schlussbedingung einer Position schreiben kann und nicht nur den Standard-SL/TP. Kann mir das jemand sagen?

Vladimir Karputov hatte solche Bedingungen in seinen Codes, aber Sie müssen selbst lernen, seinen Code zu lesen)

Grund der Beschwerde: