how to check profit from multiple magicnumbers in one EA

 

how to check profit from multiple magicnumbers in one EA?

fex: magicnumber1 +  magicnumber2 +  magicnumber3 >0

i need this function to close all these open orders in profit ...

is there any better way to do this?

bool magic1=false;
bool magic2=false;
bool magic3=false;

        for(int cc1=OrdersTotal() - 1; cc1 >= 0; cc1--)
        {
        if(OrderSelect(cc1,SELECT_BY_POS,MODE_TRADES)==false) break;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber1 && OrderProfit()>0*point)
        {
        magic1 = true;
        }

        for(int cc2=OrdersTotal() - 1; cc2 >= 0; cc2--)
        {
        if(OrderSelect(cc2,SELECT_BY_POS,MODE_TRADES)==false) break;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber2 && OrderProfit()>0*point)
        {
        magic2 = true;
        }

        for(int cc3=OrdersTotal() - 1; cc3 >= 0; cc3--)
        {
        if(OrderSelect(cc3,SELECT_BY_POS,MODE_TRADES)==false) break;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber3 && OrderProfit()>0*point)
        {
        magic2 = true;
        }

orderclose = if(magic1==true && magic2==true && magic3==true);
 
fulltilt:

how to check profit from multiple magicnumbers in one EA?

fex: magicnumber1 +  magicnumber2 +  magicnumber3 >0

i need this function to close all these open orders in profit ...

is there any better way to do this?

Can you explain what this does ?  and why yo are doing it ?

OrderProfit() > 0 * point
 
RaptorUK:

Can you explain what this does ?  and why yo are doing it ?


please ignore ;-)

here the complete part:

bool magic1=false;
bool magic2=false;
bool magic3=false;

        for(int cc01=OrdersTotal() - 1; cc01 >= 0; cc01--)
        {
        if(OrderSelect(cc01,SELECT_BY_POS,MODE_TRADES)==false) break;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderProfit()>0 || OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber && OrderProfit()>0)
        {
        magic1 = true;
        }
        }

        for(int cc02=OrdersTotal() - 1; cc02 >= 0; cc02--)
        {
        if(OrderSelect(cc02,SELECT_BY_POS,MODE_TRADES)==false) break;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber2 && OrderProfit()>0 || OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber2 && OrderProfit()>0)
        {
        magic2 = true;
        }
        }

        for(int cc03=OrdersTotal() - 1; cc03 >= 0; cc03--)
        {
        if(OrderSelect(cc03,SELECT_BY_POS,MODE_TRADES)==false) break;
        if(OrderType()==OP_BUY && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber3 && OrderProfit()>0 || OrderType()==OP_SELL && OrderSymbol()==Symbol() && OrderMagicNumber()==MagicNumber3 && OrderProfit()>0)
        {
        magic3 = true;
        }
        }

if(magic1==true && magic2==true && magic3==true) 
{
                
int totaltp = OrdersTotal();
  for(int ip=totaltp-1;ip>=0;ip--)
  {
    OrderSelect(ip, SELECT_BY_POS);
    int type   = OrderType();

    bool result = false;
    
    switch(type)
    {
      //Close opened long positions
      case OP_BUY       : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
                          break;
      
      //Close opened short positions
      case OP_SELL      : result = OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_ASK), 5, Red );
                          break;

      //Close pending orders
      case OP_BUYLIMIT  :
      case OP_BUYSTOP   :
      case OP_SELLLIMIT :
      case OP_SELLSTOP  : result = OrderDelete( OrderTicket() );
      
    }
    }



}
 
  1. Always simplify where possible
    bool magic1=false, magic2=false, magic3=false;
    for(int cc01=OrdersTotal() - 1; cc01 >= 0; cc01--) if(
        OrderSelect(cc01,SELECT_BY_POS,MODE_TRADES)
    &&  OrderSymbol()==Symbol() 
    &&  OrderProfit() > 0
    ){
        if      (OrderMagicNumber()==MagicNumber)   magic1 = true;
        else if (OrderMagicNumber()==MagicNumber2)  magic2 = true;
        else if (OrderMagicNumber()==MagicNumber3)  magic3 = true;
    }
    

  2. No need to differentiate directions.
    Yours
    case OP_BUY  : OrderClose( OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 5, Red );
    :
    case OP_SELL : ..
    Direction
    Independent
    case OP_BUY       : 
    case OP_SELL      : 
       if (!OrderClose( OrderTicket(), OrderLots(), OrderClosePrice(), 5, Red ) Alert(...


  3. You never would ever write if ( (2+2==4) == true) would you? Then never write if (bool==true) or if(bool==false). if (bool) and if(!bool) are sufficient. Especially if you use self documenting variable names
    Yours
    if(magic1==true && magic2==true && magic3==true)
    Easier, clearer
    if(isMN1InProfit && isMN2InProfit && isMN3InProfit) 

  4. Always test your return codes What are Function return values ? How do I use them ? - MQL4 forum
  5. Adjust for 4/5 digit brokers (tp, sl, AND SLIPPAGE). Adjust for ECN brokers.
 
WHRoeder:


thanks, that looks much better !

I have to practice a lot ... construction of conditions, syntax ...