Download MetaTrader 5

enum or switch? - switching orders for closing? - page 3

To add comments, please log in or register
Carl Schreiber
Carl Schreiber 2014.10.02 20:40  

For me it is really hard to understand what you want.

You only have 2 options:

int Ticket;

void OnTick(){
  Ticket = OrderSend(..);
  OderClose( Ticket, ..);


for(int b=OrdersTotal()-1; b>=0; b--) {
     if( !OrderSelect(b, SELECT_BY_POS ) )      continue; // NOT Ticket! Read the reference!!
     if(  OrderMagicNumber() != MagicNumber1  ) continue;
     if(  OrderSymbol() != Symbol())            continue;
     OrderClose( OrderTicket(), OrderLots(),... );
darksideofthemoon 2014.10.03 07:34  
I am wanting a way that when I select externally the order ticket number, in that code above, it will use that ticket number within the function and close just that ticket number? Hope that makes sense?

1. If you place orders manually then you do not have the order ticket , nor can you assign a magic number. Therefore you need a code that will get the order ticket(s) and then you can map the ordinal number (this is what you select) to the order ticket to close the order.

2. And if you place orders through code (i.e. OrderSend()) then you have the order ticket and you could store it in a simple array at position corresponding to the number of the order (its ordinal number, i.e. 1 .. 4) and therefore retrieve it later on by position (ordinal number = what you select), to close the order.


In example:

You entered 4 pending orders manually.

Then your code has to scan the order queue and get the order tickets into an array of a capacity of 4, in the right order.

Then, when you later on select an order number (its ordinal number 1 .. 4) for closure, your code simply looks up the order's ticket at that position form the array and closes the order.

Here a (incomplete) code sample how this could look like:

#property strict

input int selector = -1;
int tickets[4] = {-1, -1, -1, -1};

int OnInit()
        /* scan order queue for pending orders and retrieve tickets */

void OnTick()
        if(selector > -1) {
                if(OrderSelect(tickets[selector], SELECT_BY_TICKET)) {
                        if(OrderClose(OrderTicket(), ...)) {
                                tickets[selector] = -1;
To add comments, please log in or register