Unformatted text is too hard to reading
You are missing trading opportunities:
- Free trading apps
- Over 8,000 signals for copying
- Economic news for exploring financial markets
Registration
Log in
You agree to website policy and terms of use
If you do not have an account, please register
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.