Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 202
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
=
Das scheint der Fall zu sein, wenn ich das Substitutionsprinzip richtig verstehe.
Zusätzliche Semikolons nach den geschweiften Klammern. Und es ist nicht klar, was sonst noch gemeint ist.
Es ist schade, dass es offenbar keine einfache Möglichkeit gibt, die Makroexpansion zu automatisieren, um zu sehen, was passiert. Es sei denn, ich kann mir ein eigenes Drehbuch ausdenken.
Ich danke Ihnen! Es gibt einen Grund, warum nach while in einem Makro kein Semikolon steht.
Makros sind eine gute Sache, aber die Grenze zwischen Gut und Böse ist in ihrem Fall noch feiner als bei einer Frau))) Man muss sehr, sehr vorsichtig mit ihnen sein. Und ja, in meinem Beispiel, nicht ';', sondern genau else, das sich auf if bezieht, das im Makro steht, nachdem Sie ; entfernt haben.
Ich kann sehr gut mit Makros umgehen, und in einem Fall wie dem Ihren verwende ich sie schon seit etwa 1,5 Jahren nicht mehr, das ist optimal:
Nur kann ich hier nichts über Inline finden.
Und ich kann kein C++.
Guten Tag! Bitte helfen Sie mir!
Es gibt einen recht einfachen Code zum Öffnen und Ändern einer Bestellung. Die Funktionen OrderSend, OrderSelect und OrderModify werden in einer Schleife mit einer kleinen Verzögerung zwischen den Versuchen ausgeführt. Zur Minimierung von Kommunikationsfehlern usw.
Es passiert Folgendes: Der Auftrag wird normal geöffnet, dann wird StopLoss erfolgreich geändert und TakeProfit erfolgreich geändert. Aber wenn ich TP setze, wird StopLoss annulliert. Ich kann den Grund dafür nicht verstehen.
Hier ist dieser Teil des Codes:
send = 5; //maximale Anzahl von Versuchen, einen Auftrag zu erteilen
tick=0;
sendschet=0; //Versuchszähler
while(!tick && sendschet<=send)
{
tick=OrderSend(Symbol(),OP_SELL,NormalizeDouble(lot,2),Bid,150,0.0,0.0,komm,MagNum,0,Yellow);
sendschet++;
Sleep(1000); //Verzögere 1 Sekunde bis zum nächsten Versuch
}
select = 5; //Maximale Anzahl von Versuchen, eine Bestellung auszuwählen
slschet=0; //Versuchszähler für Auftragsauswahl
while(!OrderSelect(tick,SELECT_BY_TICKET) && slschet<=select)
{
slschet++;
Sleep(500); //Verzögere 0,5 Sekunden bis zum nächsten Versuch
}
if(slschet<select) //die Anzahl der Versuche war geringer als die maximale Anzahl, das bedeutet, dass die Bestellung erfolgreich ausgewählt wurde
{
modify = 5; //Maximale Anzahl von Versuchen, die Bestellung zu ändern
mdschet=0;
while(!OrderModify(tick,OrderOpenPrice(),NormalizeDouble(SL,Digits),OrderTakeProfit(),0,Yellow)
&& mdschet<=modify)
{
mdschet++;
Sleep(500); //Verzögere 0,5 Sekunden bis zum nächsten Versuch
}
*Hier ist alles in Ordnung - SL ist eingestellt
mdschet=0; //Zähler vor Änderung des TP zurücksetzen
while(!OrderModify(tick,OrderOpenPrice(),OrderStopLoss(),NormalizeDouble(TP,Digits),0,Yellow)
&& mdschet<=modify)
{
mdschet++;
Schlaf(500);
}
}
*Wo TP normal gesetzt wird, aber SL bereits gleich 0,0 ist. Es stellt sich also heraus, dass OrderStopLoss() gleich 0,0 ist.
Die Auswahl der Aufträge hat sich jedoch nicht geändert.
Wenn wir OrderSelect noch einmal zwischen SL und TP einfügen, scheint alles zu funktionieren. Aber das widerspricht der Logik.
Ich danke Ihnen im Voraus für Ihre Hilfe in dieser Angelegenheit.
Guten Tag!
Bitte helfen Sie mir bei der Änderung der Größe eines dynamischen Arrays.
Nehmen wir an, ich möchte ein Array einrichten:
Dann in der ersten Subroutine in der Schleife, möglicherweise mehrmals (keine Fragen dazu - bisher funktioniert es wie vorgesehen):
Im nächsten Unterprogramm werde ich Elemente in der ersten Dimension der Schleife hinzufügen. Ich weiß nicht, wie viele im Voraus. Ich weiß, dass es langsamer ist, als wenn man die Dimension vorher angibt. Aber ich denke, dass bis zu 500 zusätzliche Einträge pro Jahr keinen Unterschied machen.
Die Frage ist, wie ich die vorhandene Größe des Arrays in diesem Unterprogramm herausfinden kann. Man nimmt sie als Basisgröße und fügt ihr einen neuen Wert hinzu.
ArraySize() nehmen und durch 8 dividieren? Oder gibt es eine andere Funktion, die für mich besser geeignet wäre?
Vielen Dank im Voraus!
Guten Tag!
Bitte helfen Sie mir bei der Änderung der Größe eines dynamischen Arrays.
Nehmen wir an, ich möchte ein Array einrichten:
Dann in der ersten Subroutine in der Schleife, möglicherweise mehrmals (keine Fragen dazu - bisher funktioniert es wie vorgesehen):
Im nächsten Unterprogramm werde ich Elemente in der ersten Dimension der Schleife hinzufügen. Ich weiß nicht, wie viele im Voraus. Ich weiß, dass es langsamer ist, als wenn man die Dimension vorher angibt. Aber ich denke, dass bis zu 500 zusätzliche Einträge pro Jahr keinen Unterschied machen.
Die Frage ist, wie ich die vorhandene Größe des Arrays in diesem Unterprogramm herausfinden kann. Man nimmt sie als Basisgröße und fügt ihr einen neuen Wert hinzu.
ArraySize() nehmen und durch 8 dividieren? Oder gibt es eine andere Funktion, die für mich besser geeignet wäre?
Vielen Dank im Voraus!
ArrayRange()
ArrayRange()
Guten Tag.
Ich habe schon sehr lange nicht mehr mit MT4 gehandelt und habe beschlossen, es wieder zu versuchen. Ich habe zuvor das Skript (im Anhang) verwendet, aber jetzt läuft es nicht mehr, bitte sehen Sie nach, was schief gelaufen ist.
Hallo!
Gibt es eine Möglichkeit, sofort CopyHigh die Anzahl der Elemente eines Arrays in einem beliebigen Zeitraum zu erfahren?
Ich werde sie selbst beantworten, vielleicht stößt jemand über eine Suchmaschine auf die Frage.
Ich werde sie selbst beantworten, vielleicht stößt jemand über eine Suchmaschine auf die Frage.
Auch Bars(), iBars()
Mit Bars() können Sie nicht die Anzahl der Array-Elemente in einem beliebigen Zeitraum ermitteln, sondern nur im aktuellen Diagramm.