HILFE, WER KANN!!!

 

Festgefahren in einem Problem

for(int i = 0; i < OrdersTotal(); i++)
  {
    
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;


Der Selektor findet einen Auftrag, wenn es eine offene Position gibt, aber wenn es keine offenen Positionen gibt, wie kann ich ihn finden? der Selektor zeigt immer noch die letzte geschlossene Position an...
 
sllawa3:

Festgefahren in einem Problem


Der Selektor findet einen Auftrag, wenn er offen ist, aber wenn es keine offenen Positionen gibt, wie kann ich ihn dann finden? Der Selektor zeigt immer noch die letzte geschlossene Position an...
mit dem Flag
MODE_TRADES
zeigt der "Selector" keine geschlossenen Positionen an, sondern nur offene. Wenn es keine offenen Positionen gibt, wird die Schleife nicht einmal gestartet, da die Bedingung falsch ist.
 
Techno:
mit der Flagge
Der "Selektor" zeigt keine geschlossenen Positionen an, sondern nur offene Positionen. Wenn es keine offenen Positionen gibt, wird die Schleife gar nicht erst gestartet, da die Bedingung falsch ist.

Ich weiß, dass er nicht startet und die letzte bereits geschlossene Position speichert... das ist es, was ich geschrieben habe... Sie können geöffnete Positionen mit einem Select-Auftrag überprüfen, aber wie soll ich das Fehlen von Positionen überprüfen?
 
sllawa3:

Genau, er startet nicht und speichert die letzte bereits geschlossene Pose... das sagt er...
Ich verstehe nicht, was dort steht. Was meinen Sie auch jetzt noch mit "eine geschlossene Position retten"? Wenn es sich um die Berechnung von Positionen handelt, was ich nur vermuten kann, müssen alle Variablen (zur Speicherung der Anzahl der Aufträge) zu Beginn der Startfunktion auf Null gesetzt werden. D.h. vor der Schleife. Wenn sie nach der Schleife leer bleiben, bedeutet dies, dass es keine Positionen gibt.
 
ein Stück Code am Anfang des Themas... wenn es keine Position gibt, dann bleibt DS =1 bis ein neuer Auftrag erscheint... auch wenn die Bestellung abgeschlossen ist... nur Auswahl und nicht starten... was nicht zu verstehen ist...
 
Techno:
etwas nicht klar geschrieben ist. Was bedeutet es schon jetzt, "die Position geschlossen zu halten"? Wenn es sich um die Berechnung von Positionen handelt, was ich nur vermuten kann, dann müssen alle Variablen (zur Speicherung der Anzahl der Aufträge) zu Beginn der Startfunktion auf Null gesetzt werden. D.h. vor der Schleife. Wenn sie nach der Schleife leer bleiben, bedeutet dies, dass es keine Positionen gibt.

DS wird vor der Schleife zunächst als int = 0 geschrieben
 
Techno:


so dass er nicht zurückgesetzt wird, wenn der Zyklus nicht beginnt, und er wird nicht beginnen, wenn es keine Posen gibt
 
sllawa3:

DS ist vor dem Zyklus zunächst als int = 0 vorgeschrieben
Ah, nun, wenn es vorgeschrieben ist und 0 zugewiesen wird, dann kann es kein Problem sein, warum sollte es sonst gleich eins sein? Ist sie in der Startfunktion oder darüber mit Null belegt?
 
über
 
Es gibt vielleicht kein Problem, aber es gibt eins... probieren Sie es aus und überzeugen Sie sich selbst
 
Wie wäre es damit?
DS=0;
for(int i = 0; i < OrdersTotal(); i++)
  {
    if (DS==0) DS=-1;
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
    if(OrderSymbol() != Symbol()) continue;
    if(OrderMagicNumber() != MAGA) continue; 
    if(OrderType() == OP_BUY)DS=1;
}
if (DS==0) // поз никаких нет
if (DS==-1) // позы есть, но нету БАЙ
if (DS==1) // есть БАЙ