Speed von GetPositionProperties() - Seite 3

 
Chris70:

Beispiel (nicht getestet):

int total=PositionsTotal();
Print ("Anzahl PositionsTotal: ",total);

for (int p=0;p<total;p++)
  {
   PositionSelectByTicket(PositionGetTicket(p));
   GetPositionProperties();
   Print("Position Nr. ",p,", pos_oprice: ",DoubleToString(pos_oprice,5));
   Print("Position Nr. ",p,", pos_cprice: ",DoubleToString(pos_cprice,5));
   // usw.      
  }

Chris kleiner Tipp: Es ist sicherer, sich zu Gewohnheit zu machen, solche Schleifen immer abwärts zu zählen! Wenn dann mal eine offene Position oder ein bestehendes Objekt gelöscht wird kommt beim Aufwärtsdurchlauf der Index durcheinander!

Also einfach so:

int total=PositionsTotal();
Print ("Anzahl PositionsTotal: ",total);

for (int p=total-1;p>=0;p--)
// ich verwende standardmäßig einfach
// int p = PositionsTotal()-1;
// while(p-->0) {
  {
   PositionSelectByTicket(PositionGetTicket(p));
   GetPositionProperties();
   Print("Position Nr. ",p,", pos_oprice: ",DoubleToString(pos_oprice,5));
   Print("Position Nr. ",p,", pos_cprice: ",DoubleToString(pos_cprice,5));
   // usw.      
  }
 
lindomatic:

danke für den Link, Christian.. muss ich denn wohl nochmal durch.. 

Yes :-) .....

Konnte wohl sehen, dass du den Code aus dem Artikel hast.

Probiere es noch mal, an der Geschwindigkeit liegt es mit sehr großer Wahrscheinlichkeit nicht !

Versuche mit dem Debugger den Fehler selbst zu finden.

Oder "Wir" suchen für dich, mit deinem Code dann aber.


Auf gehts.....

Gruß

 
Carl Schreiber:

Chris kleiner Tipp: Es ist sicherer, sich zu Gewohnheit zu machen, solche Schleifen immer abwärts zu zählen! Wenn dann mal eine offene Position oder ein bestehendes Objekt gelöscht wird kommt beim Aufwärtsdurchlauf der Index durcheinander!


Geschmacksache Carl


Der gute Programmierer prüft, ob der Index gültig ist.

int total=PositionsTotal();
Print ("Anzahl PositionsTotal: ",total);

for (int p=0; p<total; p++ )
  {
   if (PositionSelectByTicket(PositionGetTicket(p)))
    {
      GetPositionProperties();
      Print("Position Nr. ",p,", pos_oprice: ",DoubleToString(pos_oprice,5));
      Print("Position Nr. ",p,", pos_cprice: ",DoubleToString(pos_cprice,5));
      // usw.    
    }
    else
     {
        Print("PositionSelectByTicket Index Error ");    
     }
    
  }

Und eine While-Schleife ohne Save-Exit birgt auch Gefahren.

Das sich der Index ändert, wenn nur Eigenschaften abgefragt werden ist nahezu 0.

 
Christian:

Yes :-) .....

Konnte wohl sehen, dass du den Code aus dem Artikel hast.

Probiere es noch mal, an der Geschwindigkeit liegt es mit sehr großer Wahrscheinlichkeit nicht !

Versuche mit dem Debugger den Fehler selbst zu finden.

Oder "Wir" suchen für dich, mit deinem Code dann aber.


Auf gehts.....

Gruß

Hi, also das ist mir mit dem PositionSelect doch schon ziemlich klar, soviel kann ich da eigentlich nicht mehr falsch machen.

Zum Debugger. Ich setze eine Variable, wenn ein Trade gelaufen ist, damit kein weiterer geöffnet wird. Der Debugger vergisst die leider nicht, wie kann ich den resetten? Muss ich da den Server neu zu booten? =)

Dank & VG

 
Christian:

Geschmacksache Carl


Der gute Programmierer prüft, ob der Index gültig ist.

Und eine While-Schleife ohne Save-Exit birgt auch Gefahren.

Das sich der Index ändert, wenn nur Eigenschaften abgefragt werden ist nahezu 0.

Danke für den Tipp, Carls.. wenn man auf das Problem stößt, kann man wohl auch verzweifeln..

 
lindomatic:

Zum Debugger. Ich setze eine Variable, wenn ein Trade gelaufen ist, damit kein weiterer geöffnet wird. Der Debugger vergisst die leider nicht, wie kann ich den resetten? Muss ich da den Server neu zu booten? =)

Zeig wie du den Debugger nutzt.

Mit Bild !

 
Christian:

Zeig wie du den Debugger nutzt.

Mit Bild !

www.linden-it-net.de/Goldesel/debugger.mov

Sorry, sind 220MB.. keine Ahnung, wie ich mov komprimiert bekomme.. am besten spielt's der Browser ab..

In der global Scope setze ich die Variable auf false, hier geht's um glTradeClosed; 

//+------------------------------------------------------------------+
//| global scope                                                     |
//+------------------------------------------------------------------+
bool initialized=false;
bool glBuyPlaced=false;
bool glSellPlaced=false;
bool glTradePlaced=false;
bool glTradeClosed=false;

Sollte ich die Variable ggfs. in OnInit verschieben, dass die beim Neustart des EAs wieder gefalsed wird?

Testen...

VG

 
lindomatic:

www.linden-it-net.de/Goldesel/debugger.mov

Sorry, sind 220MB.. keine Ahnung, wie ich mov komprimiert bekomme.. am besten spielt's der Browser ab..

Gut, war sichtbar.

Das ist nicht der Debugger. Du nutzt nur die Ausgabe Print.

Der Debugger ist viel mächtiger.

Lies dir den Artikel dazu durch.

https://www.mql5.com/de/articles/654

Du wirst merken wie einfach es dann ist Fehler zu finden.

Gruß

Zur Fehlerbehebung von MQL5-Programmen (Debugging)
Zur Fehlerbehebung von MQL5-Programmen (Debugging)
  • www.mql5.com
Dieser Artikel richtet sich primär an Programmierer, die die Sprache zwar bereits gelernt haben, die allerdings noch keine Meister ihres Fachs sind. Dabei geht der Artikel auf die wichtigste Elemente ein, mit denen sich Entwickler auseinandersetzen müssen, wenn sie ein Programm debuggen wollen. Was also verstehen wir unter Fehlerbehebung...
 
Christian:

Gut, war sichtbar.

Das ist nicht der Debugger. Du nutzt nur die Ausgabe Print.

Der Debugger ist viel mächtiger.

Lies dir den Artikel dazu durch.

https://www.mql5.com/de/articles/654

Du wirst merken wie einfach es dann ist Fehler zu finden.

Gruß

Danke auch für diesen Link, beeindruckender Artikel.. ich hatte gedacht und gehofft, dass ich Haltepunkte nie brauchen werden =)
.. scheint aber gar nicht so schlimm zu sein, eigentlich recht logisch. Mir war nicht klar, dass es Haltepunkte gar keinen Sinn macht.

Bestechend ist die Qualität der Übersetzung, wenn er Originalartikel in Russische ist?! Wow!

Was mir für den Zweck meines ersten EAs fehlt, ist es, ihn auch nur eine kleine Zeiteinheit der Vergangenheit laufen zu lassen, eine Minute bspw; funktioniert das?
Man kann ja nur Tage einstellen.. Mein EA ist aufs Scalping ausgelegt.

Ok, ich mach' mich mal ran.. 

VG