Download MetaTrader 5
To add comments, please log in or register
Share your knowledge. Become a well-known developer!
turtle1000
130
turtle1000 2015.11.26 14:10 

 Hi...for the order send below,OrderType() == OP_BUY && OrderMagicNumber() == 9000  wont close the order,

but  OrderType() == OP_BUY closes it, any ideas appreciated.

OrderSend(Symbol(),OP_BUY,1,Ask,3,Hlo1+((Hhi-Hlo1)*0.2), Hhi,"BX128.37vavg.80",9000,0,Green);

        //---- if a BUY position is opened,

       if ( OrderType() == OP_BUY )

        {

            //---- if the MACD has met the zero line top-down,

          if (  OrderType() == OP_BUY && OrderMagicNumber() == 9000   ) //Doesnt close open buy orders for 9000 or "9000"

         //if ( OrderType() == OP_BUY ) //Closes open buy orders

           {

                //---- close the position

                if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )

                {

                    _GetLastError = GetLastError();

                    Alert( "Error OrderClose # ", _GetLastError );

                    return(-1);

                }

            }

            //---- if the alert has not been changed, quit: it is too early to open a new position

            else return(0);

        }


   

Marco vd Heijden
Moderator
4504
Marco vd Heijden 2015.11.26 14:32  

need to use

OrderSelect(...


to select order before looking for
OP_BUY and OP_SELL

turtle1000
130
turtle1000 2015.11.26 15:29  

Yes ...this is the order select i was using...but the problem remains...

 

...

    int _GetLastError = 0, _OrdersTotal = OrdersTotal();

    //---- search in all open positions

    for ( int z = _OrdersTotal - 1; z >= 0; z -- )

    {

        //---- if an error occurs when searching for a position, go to the next one

        if ( !OrderSelect( z, SELECT_BY_POS ) )

        {

            _GetLastError = GetLastError();

            Print( "OrderSelect( ", z, ", SELECT_BY_POS ) - Error #", _GetLastError );

            continue;

        }

 

        //---- if a position is opened not for the current symbol, skip it

        if ( OrderSymbol() != Symbol() ) continue;

 

        //---- if the MagicNumber is not equal to _MagicNumber, skip this position

       // if ( OrderMagicNumber() != _MagicNumber ) continue;

 

        //---- if a BUY position is opened,

        if ( OrderType() == OP_BUY )

        {

            //---- if the MACD has met the zero line top-down,

          if (  OrderType() == OP_BUY && OrderMagicNumber() == 9000   ) //DoesntWork

  //if ( OrderType() == OP_BUY ) //Closes in1milisecEaOpenBuy If Or Not ExpertIdAtLine300

           {

                //---- close the position

                if ( !OrderClose( OrderTicket(), OrderLots(), Bid, 5, Green ) )

                {

                    _GetLastError = GetLastError();

                    Alert( "Error OrderClose # ", _GetLastError );

                    return(-1);

                }

            }

            //---- if the alert has not been changed, quit: it is too early to open a new position

            else return(0);

        }

        //---- if a SELL position is opened,

        if ( OrderType() == OP_SELL )

        {

            //---- if the MACD has met the zero line bottom-up,

            if ( NormalizeDouble( MACD_1, Digits + 1 ) >  1111111110.0 && 

                  NormalizeDouble( MACD_2, Digits + 1 ) <= 0.0    )

            {

                //---- close the position

                if ( !OrderClose( OrderTicket(), OrderLots(), Ask, 5, Red ) )

                {

                    _GetLastError = GetLastError();

                    Alert( "?????? OrderClose ? ", _GetLastError );

                    return(-1);

                }

            }

            //---- if the alert has not changed, quit: it is too early to open a new position

            else return(0);

        }

    }

 
Siti Latifah
6331
Siti Latifah 2015.11.26 15:36  

you can use function like below


if ( bla..bla...) CloseBuy();



void CloseBuy()
{  
   
   int ticket;
   int  total = OrdersTotal();
   for (int y=OrdersTotal()-1; y>=0; y--)  
   {
      if (OrderSelect(y, SELECT_BY_POS, MODE_TRADES))
      if (OrderSymbol() == Symbol() && OrderType()==OP_BUY && OrderMagicNumber()== MagicNumber) 
      {
                ticket=OrderClose(OrderTicket(),OrderLots(),OrderClosePrice(),Slippage,CLR_NONE);
      }
   }
   
}
turtle1000
130
turtle1000 2015.11.27 01:18  
Siti Latifah:

you can use function like below


Thank you Siti ..... ....i will try it out....it sure clears the mess i was in.....
/
To add comments, please log in or register