Hilfe beim Hinzufügen von MaxTradesPerBar zu EA - Seite 2

 
serpentsnoir:

megamixx,

Wenn du noch da bist, kann ich dir ein paar Änderungen am Code vorschlagen, die genau das bewirken, was du suchst. Lassen Sie mich wissen, wenn Sie noch interessiert sind.

Dann kompilieren Sie neu, um sicherzustellen, dass es ohne Fehler ist. Sagen Sie mir Bescheid, wenn Sie dies getan haben, und ich werde die nächste Änderung einfügen.

Got it und erfolgreich kompiliert danke sn.
 
megamixx:

Ich habe es bekommen und erfolgreich kompiliert, danke sn.


Okay, gut.

Als Nächstes gibt es einen Codeblock wie diesen

int openPositions()
{
//... blah...
}

Kopieren Sie den gesamten Block, fügen Sie ihn direkt danach ein und benennen Sie ihn in OpenTradesOnThisCandle um

Dann kompilieren Sie erneut, um sicherzustellen, dass es keine Fehler gibt.

Ich gehe jetzt zur Arbeit, Sie werden also erst später von mir hören. Poste die Änderungen, wenn du nicht weiterkommst.

 

Diesen Block kopiert und umbenannt, jetzt sieht er wie folgt aus:

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i--) // alle Aufträge und Positionen scannen...
{
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
{
if ( OrderType() == OP_BUY ) op++;
if ( OrderType() == OP_SELL ) op++;
}
}
return(op);
}

Ich hoffe, ich habe es richtig gemacht. Ich habe kompiliert und keine Fehler erhalten, aber eine Warnung:

Funktion "OpenTradesOnThisCandle" ist nicht referenziert und wird aus der exp-Datei entfernt
0 Fehler, 1 Warnung

 

Das ist gut. Die Meldung ist nur eine Warnung und wird bald verschwinden.

Ändern Sie nun die Zeile, in der MODE_TRADES steht, in MODE_HISTORY in dem neuen Unterprogramm, das Sie erstellt haben.

Ersetzen Sie nun die beiden if-Anweisungen mit OrderType() wie folgt

if (OrderOpenTime() > Time[0]) op++;

Wenn Sie das getan haben (und Sie werden die gleiche Warnung erhalten), kompilieren Sie es, um sicherzustellen, dass es fehlerfrei ist.

 
OrderSelect(i, SELECT_BY_POS, MODE_TRADES);
if (OrderMagicNumber() != MagicNumber) continue;
if ( OrderSymbol()==Symbol() )
  1. Was sind Funktionsrückgabewerte? Wie verwende ich sie? - MQL4-Forum
  2. Wenn es irgendwelche Serveraufrufe in der Schleife gibt, müssen Sie abwärts zählen UND die Rückgabewerte überprüfen Schleifen und Schließen oder Löschen von Aufträgen - MQL4 forum
 

So sieht der Block jetzt aus:

int OpenTradesOnThisCandle( )
{ int op =0;
for(int i=OrdersTotal()-1;i>=0;i--) // alle Aufträge und Positionen scannen...
{
OrderSelect(i, SELECT_BY_POS, MODE_HISTORY);
if (OrderMagicNumber() != MagicNumber) weiter;
if ( OrderSymbol()==Symbol() )
{
wenn (OrderOpenTime() > Time[0]) op++;
wenn (OrderOpenTime() > Time[0]) op++;
}
}
return(op);
}

Kompiliert, 0 Fehler, 1 Warnung

 

Hallo megamix,

ich lese den Thread zwar nicht von Anfang an, aber ...

1. Benutze die SRC-Taste, wenn du den Code postest

2. Die Rückgabe von OrderSelect() ist entweder true oder false, also ist dies die korrekte Art, OrderSelect() zu schreiben,

int OpenTradesOnThisCandle( )
  { 
  int op =0;
  for(int i = OrdersTotal() - 1;i >= 0; i-- ) // scan all orders and positions...
    {
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) == true   // if order select is true ...
        && OrderMagicNumber() != MagicNumber                  // ... and magic number is our magic number ...
        && OrderSymbol()      == Symbol() )                   // ... and symbol is chart symbol
        { 
        if (OrderOpenTime() > Time[0]) op++;             
        if (OrderOpenTime() > Time[0]) op++; 
        }
    } 
    return(op);
  }

:D

 
onewithzachy:

Hallo megamix,

ich lese den Thread zwar nicht von Anfang an, aber ...

1. Benutze die SRC-Taste, wenn du den Code postest

2. Die Rückgabe von OrderSelect() ist entweder true oder false, also ist dies die korrekte Art, OrderSelect() zu schreiben,

:D


Danke für den Tipp, den Code zu posten. Macht Sinn. Was Punkt #2 angeht, werde ich mich an sn wenden, da er mich durch die Schritte führt und ich seinen Prozess nicht durcheinander bringen möchte. Vielen Dank!

 
megamixx:


Danke für den Tipp, den Code zu posten. Macht Sinn. Was Punkt #2 betrifft, werde ich mich an sn wenden, da er mich durch die Schritte führt und ich seinen Prozess nicht durcheinander bringen möchte. Vielen Dank!


Wir werden es vorerst einfach halten. onewithzacky hat Recht, dass es eine gute Angewohnheit ist, Rückgabecodes zu überprüfen.

if (OrderOpenTime() > Time[0]) op++; <<== Dies muss nur einmal vorhanden sein. Also nimm eins raus.

Als Nächstes müssen Sie diesen Code finden und ihn direkt darunter duplizieren.

     if(TradesInThisSymbol > 0) 
     {
      return(0);
     }

Dann ändern Sie

(TradesInThisSymbol > 0)

in

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Kompilieren Sie dann - der Fehler sollte verschwinden.

 
serpentsnoir:


Wir werden es vorerst einfach halten. onewithzacky hat Recht, dass es eine gute Angewohnheit ist, Returncodes zu überprüfen.

if (OrderOpenTime() > Time[0]) op++; <<== Dies muss nur einmal vorhanden sein. Also nimm eins raus.

Als Nächstes müssen Sie diesen Code finden und ihn direkt darunter duplizieren.

Dann ändern Sie

(HandelInDiesemSymbol > 0)

in

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Kompilieren Sie dann - der Fehler sollte verschwinden.


Erledigt.

Gelöschtes Duplikat if (OrderOpenTime() > Time[0]) op++;

und gefunden und geändert

(TradesInThisSymbol > 0)

in

(OpenTradesOnThisCandle() > MaxTradesPerCandle)

Vielen Dank für Ihre hilfreiche Unterstützung in dieser Sache.

Grund der Beschwerde: