Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1266

 
Alexey Viktorov:

Ich weiß es nicht mehr, ich muss es nachsehen, aber ich will es nicht. Vielleicht wurde in mql4 beim Versuch, ein Objekt mit dem Namen eines bereits vorhandenen zu erstellen, ein Fehler zurückgegeben, und in mql5 kein Fehler, sondern eine Änderung der Parameter, wenn die Koordinaten unterschiedlich sind.

Wie Artem schon sagte - prüfen Sie die Existenz des Objekts.

Ja, das ist richtig.

 
Maxim Kuznetsov:

plötzlich (wie üblich) funktioniert ObjectGetInteger(0,objectName,OBJPROP_TYPE) schneller.

ObjectFind ist ein synchroner Befehl, d.h. er wartet auf eine vollständige Aktualisierung (und Verfügbarkeit) der Diagrammobjekte...Die Verwendung ist mit erheblichen Verzögerungen verbunden.

Wenn Sie mit Ihren eigenen Objekten arbeiten (d.h. in Ihrem eigenen Bestand erstellt), dann sollten Sie ObjectFind nicht verwenden - Sie wissen bereits, in welchem Fenster das Objekt erstellt wurde und dass es höchstwahrscheinlich existiert und vom richtigen Typ ist.
Das Schlimmste, was passieren kann, ist, dass der Benutzer das Objekt löscht oder die Eigenschaft ändert.

Ich danke Ihnen. Das ist interessant.

 

Ich wünsche Ihnen allen einen guten Tag.
In Kovalevs Buch steht, dass Indizes von Arrays als Konstanten,Variablen oder Ausdrücke auf Ganzzahlwerte gesetzt werden können.
Wenn ich den Index in mql4 als Variable setze, gibt mir der Compiler nur einen Fehler

So setze ich den Index
intW=1000;

double T_P[W]={0};

void OnTick()

{

Code


Bitte sagen Sie mir, was ich falsch mache.
Ich danke Ihnen.

 
ANDREY:

Ich wünsche Ihnen allen einen guten Tag.
In Kovalevs Buch steht, dass Indizes von Arrays als Konstanten,Variablen oder Ausdrücke auf Ganzzahlwerte gesetzt werden können.
Wenn ich den Index in mql4 als Variable setze, gibt mir der Compiler nur einen Fehler

So setze ich den Index
intW=1000;

double T_P[W]={0};

void OnTick()

{

Code


Bitte sagen Sie mir, was ich falsch mache.
Ich danke Ihnen.

Der Array-Index ist nicht die Größe des Arrays.
 
Alexey Viktorov:
Der Array-Index ist nicht die Größe des Arrays.

Verstanden, danke. Gibt es eine Möglichkeit, die Größe des Arrays mit einer Variablen festzulegen?

 
ANDREY:

Verstanden, danke. Gibt es eine Möglichkeit, die Größe des Arrays mit einer Variablen festzulegen?

Legt eine neue Größe für die erste Array-Dimension fest

intArrayResize(
void&array[],// Array, das durch die Referenz übergeben wird
intnew_size,// neue Array-Größe
intreserve_size=0// Wert reserve_size (redundant)
)

 
Aleksey Vyazmikin:

Setzt die neue Größe in der ersten Array-Dimension

intArrayResize(
void&array[],// Array wird als Referenz übergeben
intnew_size,// neue Array-Größe
intreserve_size=0// reserve_size-Wert (redundant)
);

Vielen Dank für die wertvollen Informationen.

 

Hallo! Bitte helfen Sie mir mit einem einfachen Code.

Ich beschäftige mich gerade mit Mechanismen zum Öffnen und Schließen von Aufträgen und bin auf ein Problem beim Schließen offener Positionen gestoßen.

Der Code ist einfach. Die Idee des Algorithmus ist es, den MA (gleitenden Durchschnitt) mit einer Periode von 100 auf dem Chart zu zeichnen. Wenn die vorherige Kerze [1] oberhalb des MA eröffnet und unterhalb des MA geschlossen hat, eröffnet die nächste Kerze [0] einen VERKAUFsauftrag.

//(Die Kaufbedingungen sind unterschiedlich, ich werde sie nicht beschreiben)

Für die Schließung des Auftrags müssen folgende Bedingungen erfüllt sein: Der aktuelle Kurs ist vom Eröffnungskurs des Auftrags über den festgelegten Wert von Punkten, zum Beispiel 40, gestiegen.

Beispiel: Ein Lot wird bei Bid= 1,20045 eröffnet, es sollte bei Ask= 1,20005 schließen.

Der Code für das Öffnen und Schließen ist in zwei entsprechende Funktionen verpackt - CheckForOpen() und CheckForClose(), die wiederum mit der Funktion OnTick() aufgerufen werden. In der Tat kann der Preis einen bestimmten Wert von Punkten überschreiten (über das Schlussniveau hinausgehen), aber der Auftrag wird nicht geschlossen.

Ich kann nicht herausfinden, was los ist.

p/s// Screenshots und Code im Anhang.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства ордеров
  • www.mql5.com
Приказы на проведение торговых операций оформляются ордерами. Каждый ордер имеет множество свойств для чтения, информацию по ним можно получать с помощью функций Идентификатор позиции, который ставится на ордере при его исполнении. Каждый исполненный ордер порождает сделку, которая открывает новую или изменяет уже существующую позицию...
 
4elovechishe:

Hallo! Bitte helfen Sie mir mit einem einfachen Code.

Ich beschäftige mich gerade mit Mechanismen zum Öffnen und Schließen von Aufträgen und bin auf ein Problem beim Schließen offener Positionen gestoßen.

Der Code ist einfach. Die Idee des Algorithmus ist es, den MA (gleitenden Durchschnitt) mit einer Periode von 100 auf dem Chart zu zeichnen. Wenn die vorherige Kerze [1] oberhalb des MA eröffnet und unterhalb des MA geschlossen hat, eröffnet die nächste Kerze [0] einen VERKAUFsauftrag.

//(Die Kaufbedingungen sind unterschiedlich, ich werde sie nicht beschreiben)

Für die Schließung des Auftrags müssen folgende Bedingungen erfüllt sein: Der aktuelle Kurs ist vom Eröffnungskurs des Auftrags über den festgelegten Wert von Punkten, zum Beispiel 40, gestiegen.

Beispiel: Ein Lot wird bei Bid= 1,20045 eröffnet, es sollte bei Ask= 1,20005 schließen.

Der Code für das Öffnen und Schließen ist in zwei entsprechende Funktionen verpackt - CheckForOpen() und CheckForClose(), die wiederum mit der Funktion OnTick() aufgerufen werden. In der Tat kann der Preis einen bestimmten Wert von Punkten überschreiten (über das Schlussniveau hinausgehen), aber der Auftrag wird nicht geschlossen.

Ich kann nicht herausfinden, was los ist.

p/s// Screenshots und Code im Anhang.

CheckForOpen() sollte nicht direkt in OnTick aufgerufen werden, sondern in einem selbst geschriebenen OnBar (das in OnTick aufgerufen werden sollte) - beim Öffnen des Balkens. Aber das ist trivial

, statt Open[1], Close[1] (die vorherige Kerze hat den MA100 durchbrochen) sollten wir Open[1],Open[0] betrachten (die vorherige Kerze wurde von einer Seite des MA geöffnet, die aktuelle von der anderen). Andernfalls wird eine flache Lücke zwischen den Leuchtern zu sehen sein und die Logik wird verziehen werden.

Der SMA des Medians ändert sich am 0. Balken, d.h. er ist nicht konstant. Sie kann nicht mit ihr verglichen werden. Korrigieren Sie den Algorithmus.

 
Aleksey Vyazmikin:

Setzt die neue Größe in der ersten Array-Dimension

intArrayResize(
void&array[],// Array wird als Referenz übergeben
intnew_size,// neue Array-Größe
intreserve_size=0// reserve_size-Wert (redundant)
);

Nochmals vielen Dank für Ihren Hinweis, aber..... in der Hilfe steht geschrieben, dass diese Funktion nur für dynamische Arrays gilt. Und bei meinem Code handelt es sich NICHT um ein dynamisches Array, sondern um ein gewöhnliches.

Ich wäre Ihnen sehr dankbar, wenn Sie mir sagen (oder besser, zeigen) könnten, wie man die Größe eines regulären Arrays in der ersten Dimension ändern kann.
Nochmals vielen Dank für Ihre Hilfe.

Grund der Beschwerde: