Wie kann ich checken ob eine Order Modifiziert wurde?? (multi-dimensional-arrays)

 

Hallo zusammen,

ich will dass meine Orders genau einmal durch eine bestimmte modifizierende Funktion laufen, genannt Trail()

dazu würde ich gerne das ticket in ein array speichern und dazu eine zweite dimension, die eine Zahl erhält, wie Oft der Take Profit modifiziert wurde (soll insgesamt nur einmal modifiziert werden).

In meiner Funktion checke ich bereits das Ticket auf folgende Weise:

int total =PositionsTotal();
                    
    for(int i=0;i<total;i++)
        {ulong ticket=PositionGetTicket(i);
        
         //--- erhalten wir Orderticket in Bezug auf seine Position in der Liste 
         if(ticket>0)
           { 
           if(Trail(ticket)){}
           
           }
         }

Wie kann ich nun das ein array hinzufügen, das in der ersten Dimension das Positionsticket und in der zweiten dimension einen Counter für die anzahl der Modifizierungen enthällt?

Und wie kann ich diese daten in dieses array speichern? Mit der deklaration & definition von multidimensionalen arrays kriege ich leider nur Fehler im kompiler...



Natürlich nur wenn sich Multi-dim. arrays auch dazu eignen

thank you

 

Das kann man mit einer Hashmap machen. CHashMap<ulong,int>

https://www.mql5.com/en/docs/standardlibrary/generic/chashmap

Documentation on MQL5: Standard Library / Generic Data Collections / CHashMap
Documentation on MQL5: Standard Library / Generic Data Collections / CHashMap
  • www.mql5.com
The CHashMap class is an implementation of the dynamic hash table, the data of which are stored in the form of unordered key/value pairs taking into account the key uniqueness...
 

Einfacher wäre wahrscheinlich 2-dim ulong Array (ungetestet):

ulong TrailSteps[][2];
...
int OnInit() {
...
   ArrayResize(TrailSteps,MaxNoPos);
   ArrayInitialize(TrailSteps,0); // not needed yet: ArraySort(MagArr);
...
}

Damit können die Funktionen von MQL verwendet werden ArraySort() und ArrayBsearch():

// Order send => newTicket = ...
int i = ArrayBsearch(TrailSteps,0); //empty item
// error if i<0 ...
TrailSteps[i][0] = newTicket;
TrailSteps[i][1] = 0;         // not moved yet
ArraySort(TrailSteps);

Jetzt braucht es nur ab und zu einen Robosauger:

int clean( const ulong search=0){
   int i = ArrayRange(TrailSteps,0);  // arr.size of 1st dim
   while(i-->0) {
      if ( TrailSteps[i][τTicket] == 0 ) continue; // ok
      if ( !PositionSelectByTicket(TrailSteps[i][τTicket])) { // does not exist any more?
         TrailSteps[i][0] = TrailSteps[i][1] = 0;             // reset
      }      
   }
   ArraySort(TrailSteps);
   i = ArrayBsearch(TcktSteps,search);
   if ( TcktSteps[i][0] != search ) return(-1); // error do something ..!
   return(i);
}

UNGETESTS!!