Creating an endless loop - problem?

 
Hi Slawa,

I'm using the while function to create an endless loop.

Problem is that the first order is opening up twice within 1 second. Am I doing this right? here is the code im using: (can you tell me where im making a mistake please -- thank you)

//+------------------------------------------------------------------+
//| |
//| Expert Advisor Sample.MQL4 |
//| Copyright © 2006, Fraser Capital |
//| |
//+------------------------------------------------------------------+



extern double LotsA = 1.00; // trading 1.00 lot with FXDD broker
extern double LotsB = 2.00; // trading 2.00 lots with FXDD broker
extern double LotsC = 3.00; // trading 3.00 lots with FXDD broker



//+------------------------------------------------------------------+
//| |
//+------------------------------------------------------------------+

int start()
{


while(Bars>10) // use while function to create endless loop
{ // // // //


RefreshRates();


// if less than 100 bars on a chart then Exit, as we need at least 100 bars for Expert Advisor code to work properly.
if(Bars<100)
{
Print("bars less than 100");
return(0);
}


//////////////////////////////////////////////////////////////////////////////////////////



// No orders are currently open - i.e. OrdersTotal=0
if(OrdersTotal()==0)
{

// Entry (Open Order) Condition:
// Open a BUY order for LOtsA - this is the first order (((LOtsB is for second order)))
if(Bid>High[1])
{

OrderSend(Symbol(),OP_BUY,LotsA,Ask,0,0,0,"",13,0,Aqua); // name this Order LotsA
Sleep(10000); // SLAWA, DO I NEED THIS SLEEP FUNCTION HERE?
return(0);

}
}


////////////////////////////////////////////////////////////////////////////////////////////


// 1 order (LotsA)is currently open
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrdersTotal()==1 && OrderLots()==LotsA && OrderType()==OP_BUY)
{

// Entry (Open Order) Condition:
// Open a BUY order number 2
if(Bid>High[1])
{
OrderSend(Symbol(),OP_BUY,LotsB,Ask,0,0,0,"",13,0,Aqua); // name this Order LotsB
Sleep(10000);
return(0);

}
}


///////////////////////////////////////////////////////////////////////////////////////////


// 2 orders (LotsA and LotsB)are currently open
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrdersTotal()==2 && OrderLots()==LotsA && OrderType()==OP_BUY)
{
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
if(OrdersTotal()==2 && OrderLots()==LotsB && OrderType()==OP_BUY)
{
// Entry (Open Order) Condition:
// Open a BUY order
if(Bid>High[1])
{
OrderSend(Symbol(),OP_BUY,LotsC,Ask,0,0,0,"",13,0,Aqua); // name this Order LotsC
Sleep(10000);
return(0);

}
}
}


///////////////////////////////////////////////////////////////////////////////////////////


// SELL conditions:
if(OrdersTotal()==0)
{

// Entry (Open Order) Condition:
// Open a BUY order
if(Bid<Low[1])
{

OrderSend(Symbol(),OP_SELL,LotsA,Ask,0,0,0,"",13,0,Yellow); // name this Order LotsA
Sleep(10000);
return(0);

}
}


////////////////////////////////////////////////////////////////////////////////////////////


// 1 order (LotsA)is currently open
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrdersTotal()==1 && OrderLots()==LotsA && OrderType()==OP_SELL)
{

// Entry (Open Order) Condition:
// Open a SELL order
if(Bid<Low[1])
{
OrderSend(Symbol(),OP_SELL,LotsB,Ask,0,0,0,"",13,0,Yellow); // name this Order LotsB
Sleep(10000);
return(0);

}
}


///////////////////////////////////////////////////////////////////////////////////////////


// 2 orders (LotsA and LotsB)are currently open
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrdersTotal()==2 && OrderLots()==LotsA && OrderType()==OP_SELL)
{
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
if(OrdersTotal()==2 && OrderLots()==LotsB && OrderType()==OP_SELL)
{
// Entry (Open Order) Condition:
// Open a SELL order
if(Bid<Low[1])
{
OrderSend(Symbol(),OP_SELL,LotsC,Ask,0,0,0,"",13,0,Yellow); // name this Order LotsC
Sleep(10000);
return(0);

}
}
}



///////////////////////////////////////////////////////////////////////////////////////////



// Exit (Close Order LotsA) Condition:

// There is 1 open order i.e. OrdersTotal=1
if( OrdersTotal()==1 )
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_BUY && OrderLots()==LotsA) // long position was opened
{
// Close Open Order
if(Bid<Low[1])
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet); // close position
Sleep(10000);
return(0); // exit program - return to start of program - line 0
}
}
}



////////////////////////////////////////////////////////////////////////////////////////////



// Exit (Close Order LotsB) Condition:

// There is 2 open orders i.e. OrdersTotal=2
if( OrdersTotal() == 2 )
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderLots()==LotsA)
{
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderLots()==LotsB)
{

// Close Open Order
if(Bid<Low[1])
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet); // close position
Sleep(10000);
return(0); // exit program - return to start of program - line 0
}
}
}
}


////////////////////////////////////////////////////////////////////////////////////////////



// Exit (Close Order LotsB) Condition:

// There is 2 open orders i.e. OrdersTotal=2
if( OrdersTotal() == 3 )
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderLots()==LotsA)
{
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderLots()==LotsB)
{
OrderSelect(2, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_BUY && OrderLots()==LotsC)
{

// Close Open Order
if(Bid<Low[1])
{
OrderClose(OrderTicket(),OrderLots(),Bid,0,Violet); // close position
Sleep(10000);
return(0); // exit program - return to start of program - line 0
}
}
}
}
}


////////////////////////////////////////////////////////////////////////////////////////////



// Exit (Close Order LotsA) Condition:

// There is 1 open order i.e. OrdersTotal=1
if( OrdersTotal()==1 )
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);

if(OrderType()==OP_SELL && OrderLots()==LotsA) // long position was opened
{
// Close Open Order
if(Bid>High[1])
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet); // close position
Sleep(10000);
return(0); // exit program - return to start of program - line 0
}
}
}



////////////////////////////////////////////////////////////////////////////////////////////



// Exit (Close Order LotsB) Condition:

// There is 2 open orders i.e. OrdersTotal=2
if( OrdersTotal() == 2 )
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_SELL && OrderLots()==LotsA)
{
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_SELL && OrderLots()==LotsB)
{

// Close Open Order
if(Bid>High[1])
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet); // close position
Sleep(10000);
return(0); // exit program - return to start of program - line 0
}
}
}
}


////////////////////////////////////////////////////////////////////////////////////////////



// Exit (Close Order LotsB) Condition:

// There is 2 open orders i.e. OrdersTotal=2
if( OrdersTotal() == 3 )
{
OrderSelect(0, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_SELL && OrderLots()==LotsA)
{
OrderSelect(1, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_SELL && OrderLots()==LotsB)
{
OrderSelect(2, SELECT_BY_POS, MODE_TRADES);
if(OrderType()==OP_SELL && OrderLots()==LotsC)
{

// Close Open Order
if(Bid>High[1])
{
OrderClose(OrderTicket(),OrderLots(),Ask,0,Violet); // close position
Sleep(10000);
return(0); // exit program - return to start of program - line 0
}
}
}
}
}

return(0);

}// while

} // start

// the end.
 
Unformatted text is too hard to reading
Reason: