- Bitte gewöhne Dir einen anderen Programmierstil an, so lange Zeilen sind unlesbar, vor allem, wenn man sich nicht auskennt.
- Welche drei Variablen?
- Zeig doch bitte auch den Code der geht, es hilft sicher zum Verstehen.
- Bitte gewöhne Dir einen anderen Programmierstil an, so lange Zeilen sind unlesbar, vor allem, wenn man sich nicht auskennt.
- Welche drei Variablen?
- Zeig doch bitte auch den Code der geht, es hilft sicher zum Verstehen.
Sorry... ich versuche es zukünftig besser anzuordnen...
Anbei der Code für die ture/false Prüfung auf eine vorliegende BUYLIMIT-Order, im unteren Grid-Bereich, aber aufgeteilt auf 2 Variablen.
double Grid_Lower_1_Buylimit_Price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUYLIMIT) Grid_Lower_1_Buylimit_Price = OrderOpenPrice(); }; bool Grid_Lower_1_Buylimit_BOOL = false; if(Grid_Lower_1_Buylimit_Price<GRID_LOWER_1_HIGH() && Grid_Lower_1_Buylimit_Price>GRID_LOWER_1_LOW()) Grid_Lower_1_Buylimit_BOOL = true;
Sorry... ich versuche es zukünftig besser anzuordnen...
Anbei der Code für die ture/false Prüfung auf eine vorliegende BUYLIMIT-Order, im unteren Grid-Bereich, aber aufgeteilt auf 2 Variablen.
- Alles hängt jetzt von den Funktionen GRID_LOWER_1_HIGH() und GRID_LOWER_1_LOW(), die unbekannt sind, ab.
- Du verwendest OrderOpenPrice() - ist da auch eine (die richtige) Order ausgewählt worden?
- Kleiner Tipp: Man kann einer boolschen Variablen einen Vergleich zuweisen:
bool gt = 5 > 8, // => gt ist falsch kl = v > myFunc(); // hängt jetzt vom Wert von v ab und dem Ergebnis des Funk.-Aufrufs
- Alles hängt jetzt von den Funktionen GRID_LOWER_1_HIGH() und GRID_LOWER_1_LOW(), die unbekannt sind, ab.
- Du verwendest OrderOpenPrice() - ist da auch eine (die richtige) Order ausgewählt worden?
- Kleiner Tipp: Man kann einer boolschen Variablen einen Vergleich zuweisen:
1. Ja, die Funktionen bzw. die Werte sind bekannt
2. Ja, die richtige Order ist ausgewählt
3. Verstehe ich leider nicht
Aber grundsätzlich, wenn Punkt 1 und Punkt 2 richtig ist... dann verstehe ich nicht warum die true/false Prüfung bei der einen Version klappt und bei der anderen nicht.
Denn die "aufgeteilte" Prüfung funktioniert, die "zusammenhängende" Prüfung nich --> und beide nutzen die identischen, vorher ermittelten Funktionen.
Nach unterschiedlichen Prüfungen konnte ich eben feststellen, dass der Fehler kommt sobald ich die Funktionen GRID_LOWER_1_HIGH() und GRID_LOWER_1_LOW() mit in die Bedingung aufnehme.
Hier die zusammengefasste Prüfung
bool GRID_LOWER_1_BUYLIMIT() {bool Grid_Lower_1_Buylimit = false; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol()&&OrderMagicNumber()==MagicNumber) if(OrderType()==OP_BUYLIMIT) if(OrderOpenPrice()<GRID_LOWER_1_HIGH() && OrderOpenPrice()>GRID_LOWER_1_LOW()) // das hier stört ihn und bringt den Fehler bei der Ermittlung Grid_Lower_1_Buylimit = true; } return(Grid_Lower_1_Buylimit);};
Hier die aufgeteilte Prüfung
double Grid_Lower_1_Buylimit_Price = 0; for(int i=OrdersTotal()-1; i>=0; i--) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)) if(OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderType()==OP_BUYLIMIT) Grid_Lower_1_Buylimit_Price = OrderOpenPrice(); }; bool Grid_Lower_1_Buylimit_BOOL = false; if(Grid_Lower_1_Buylimit_Price<GRID_LOWER_1_HIGH() && Grid_Lower_1_Buylimit_Price>GRID_LOWER_1_LOW()) Grid_Lower_1_Buylimit_BOOL = true;
Geh die Sequenz von Ifs mit dem Debugger durch.
Warum MT4? Wenn Du eh MQL lernst, warum die letzte Generation der Sprache lernen und nicht die neueste?
Geh die Sequenz von Ifs mit dem Debugger durch.
Warum MT4? Wenn Du eh MQL lernst, warum die letzte Generation der Sprache lernen und nicht die neueste?
Anbei nochmal in einer leserlicheren Schreibweise... hoffe mir kann jemand helfen.
Alles beginnt mit:
1. Schritt: durch eine input Variable wird der Grid_Abstand = zB.: 200 definiert
2. Schritt: Ermittlung vom Preislevel: PREISLEVEL() = OrderOpenPrice() der aktuellen MARKET-Order
3. Schritt: Grid-Bereiche bzw. die Ober-/Untergrenzen der Grid-Bereiche ermitteln
double GRID_LOWER_1_HIGH() { double Grid_Lower_1_High = PREISLEVEL() - (1 * Grid_Abstand * Point) + (Grid_Abstand / 2) * Point; return(Grid_Lower_1_High); } double GRID_LOWER_1_LOW() { double Grid_Lower_1_Low = PREISLEVEL() - (1 * Grid_Abstand * Point) - (Grid_Abstand / 2) * Point; return(Grid_Lower_1_Low); }
In meinem Beispiel der OrderType() = OP_BUYLIMIT, da ich den Grid-Bereich unterhalb der aktuellen Market-Order pr üfe.
Dazu anbei zwei unterschiedliche Vorgehensweisen.
// Beispiel der aufgeteilten Prüfung double Grid_Lower_1_Buylimit_Price = 0; for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { Grid_Lower_1_Buylimit_Price = OrderOpenPrice(); } } }; bool Grid_Lower_1_Buylimit_BOOL = false; { if(Grid_Lower_1_Buylimit_Price < GRID_LOWER_1_HIGH() && Grid_Lower_1_Buylimit_Price > GRID_LOWER_1_LOW()) { Grid_Lower_1_Buylimit_BOOL = true; }
// Beispiel der zusammenhängenden Prüfung bool GRID_LOWER_1_BUYLIMIT() { bool Grid_Lower_1_Buylimit = false; for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUYLIMIT) { if(OrderOpenPrice() < GRID_LOWER_1_HIGH() && OrderOpenPrice() > GRID_LOWER_1_LOW()) { Grid_Lower_1_Buylimit = true; } } } } } return (Grid_Lower_1_Buylimit); }
Wie anfangs erwähnt, funktioniert die Abfrage bei der "aufgeteilten Pr üfung", aber nicht bei der "zusammenhängenden Pr üfung", obwohl ich glaube beides inhaltlich identisch ist
Streu doch diverse Prints ein, um selbst herauszufinden, was das Problem ist (ungetestet):
// Beispiel der zusammenhängenden Prüfung bool GRID_LOWER_1_BUYLIMIT() { bool Grid_Lower_1_Buylimit = false; for(int i = OrdersTotal()-1; i >= 0; i--) { if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) { if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber) { if(OrderType() == OP_BUYLIMIT) { Print(__LINE__," ",OrderOpenPrice()," < ",GRID_LOWER_1_HIGH()," && ",OrderOpenPrice()," > ",GRID_LOWER_1_LOW() ); if(OrderOpenPrice() < GRID_LOWER_1_HIGH() && OrderOpenPrice() > GRID_LOWER_1_LOW()) { Print(__LINE__," ",OrderOpenPrice()," < ",GRID_LOWER_1_HIGH()," && ",OrderOpenPrice()," > ",GRID_LOWER_1_LOW() ); Grid_Lower_1_Buylimit = true; } } } } } return (Grid_Lower_1_Buylimit); }
Streu doch diverse Prints ein, um selbst herauszufinden, was das Problem ist (ungetestet):
ja also es ist tatsächlich so, dass er den OrderOpenPrice() nicht korrekt erkennt bzw. er kennt ihn, nutzt ihn aber nicht bis zum Schluss wenn ich es zusammenhängend mache.
Wenn ich es aufteile, d.h.
...
...
if(OrderType() == OP_BUYLIMIT)
{
OOP_LOWER_1_BUYLIMIT = OrderOpenPrice();
}
und anschließend
if(OOP_LOWER_1_BUYLIMIT > GRID_LOWER_1_LOW() && OOP_LOWER_1_BUYLIMIT < GRID_LOWER_1_HIGH())
mache, klappt es.
Ich verstehe einfach nicht, warum er diesen Zwischenschritt will und es nicht in einem Rutsch durch klappt... Da ist meine Verständnissfrage...
ja also es ist tatsächlich so, dass er den OrderOpenPrice() nicht korrekt erkennt bzw. er kennt ihn, nutzt ihn aber nicht bis zum Schluss wenn ich es zusammenhängend mache.
Wenn ich es aufteile, d.h.
und anschließend
mache, klappt es.
Ich verstehe einfach nicht, warum er diesen Zwischenschritt will und es nicht in einem Rutsch durch klappt... Da ist meine Verständnissfrage...
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo zusammen,
ich hoffe mir kann jemand helfen und mir sagen, wo mein Fehler liegt.
Beschreibung:
Es handelt sich um einen Grid-EA. Zur leicherten Darstellung gehe ich davon aus nur "long" Positionen zu eröffnen.
Der EA soll immer den OrderOpenPrice() der aktuellen/neuesten Market-Orderals Basis für weitere Berechnungen nutzen --> double PREISLEVEL()
Ich definiere mit einer input Variable die Maschenweite des Grids, zB 200 --> double Grid_Abstand
In den hier dargestellten Programmzeilen ermittle ich mithilfe des PREISLEVEL() +/- Grid_Abstand jeweils die Ober-/Untergrenze der Grid-Ebenen:
Im Anschluss daran, prüfe ich mit bool'schen Abfrage, ob in den zuvor berechneten Grid-Ebenen die jeweiligen Order-Artenvorliegen.
Hintergrund: Es soll immer im Grid-Bereich darüber eine BUYSTOP und im Grid-Bereich darunter eine BUYLIMIT Order liegen.
Nun zu meinem Problem: In der bool'schen Prüfung hat der EA Probleme, den Code nach der OrderType()-Prüfung, nämlich der Prüfung ob der OrderType() in dem Grid-Bereich liegt, zu verarbeiten. Konkret stört sich der EA an folgendem Schnipsel:
Ich bin mir nicht sicher wo mein Fehler liegt.
Wenn ich die Variable in drei einzelne Variablen zerlege und nach einander bzw. aufeinander aufbauen nutze, in dem ich zuerst die TicketNummer prüfe, danach mit der gefundenen TicketNummer den OrderOpenPrice ermittle, danach mit dem OrderOpenPrice die bool'sche Abfrage mache.... dann funktioniert das. Aber so wie oben gezeigt in einem Rutsch nicht. :-(
Hoffe ich habe es verständlich erklärt und hoffe noch mehr, mir kann jemand die augen öffnen was ich falsche mache.
Danke vorab
Gruß