Micro-Lot EA

 

Hello,

I've an EA that's based on Multi-lot Scalper and I want to make it trade for micro-lots "0.01"

The problem is that it start the first trade successfully but when it comes to take the second trade, it doesn't respond though it works well for lots "1" and mini-lots "0.1" quantities.

I wish anyone can help me with that, thank you so much in advance.

I'm attaching the complete code for it in a file because it doesn't allow me to put the code here "too long"

Files:
ea.txt  12 kb
 
for(cnt = OrdersTotal(); cnt >= 0; cnt--)
{
  OrderSelect(cnt, SELECT_BY_POS, MODE_TRADES);
   mode = OrderType();
     //----
if(OrderSymbol() == Symbol()) 
       {
            if(mode == OP_BUY) 
                OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), slippage, Blue); 

If you close an order all the higher numbered one are renumbered. Always count DOWN when closing orders. I count down always.

   if(OpenOrders >= MaxTrades) 
	      ContinueOpening = False;
   else 
	      ContinueOpening = True;
Simplify
 ContinueOpening = (OpenOrders < MaxTrades);
Check for errors
OrderSend(Symbol(), OP_SELL, mylotsi, SellPrice, slippage, sl, tp, //...
becomes
ticket  = OrderSend(Symbol(),       operation,      size,   now.open,
                    SlippagePips * pips2points,     0, 0,   // SL,TP
                    order.comment,  MagicNumber + Period.index,
                    NO_EXPIRATION,  clr );
if (ticket < 0) {
    Alert(  "OrderSend(type=",  operation, " (",    operation.text,
            "), lots=",     lots.new,
        ", price=", DoubleToStr( now.open,              Digits     ),
            " (",   DoubleToStr((now.open-Bid)/pips2dbl,Digits.pips),
        "), SL=0, TP=0, '", order.comment, "', ...) failed: ",
                                                        GetLastError());
   //...
I suspect your problem is
  if(MaxTrades > 12) 
      mylotsi = NormalizeDouble(mylotsi*1.5, 1); 
  else 
      mylotsi = NormalizeDouble(mylotsi*2, 1); 
Lots must be a multiple of MarketInfo( Symbol(), MODE_LOTSTEP )
    mylotsi =  MathFloor(  mylotsi / LotStep )*LotStep;        // truncate
    if (mylotsi < MarketInfo( Symbol(), MODE_MINLOT )) { // too small...