//+------------------------------------------------------------------+
//| Советник, выставляет 4 ордера по 4м валютам |
//+------------------------------------------------------------------+
#property strict
//+------------------------------------------------------------------+
extern string SYMBOL1 = "EURUSD"; //первый символ, если не указан, то не выставляется
extern string SYMBOL2 = "GBPUSD"; //второй символ, если не указан, то не выставляется
extern string SYMBOL3 = "EURGBP"; //третий символ, если не указан, то не выставляется
extern string SYMBOL4 = "GBPJPY"; //четвертый символ, если не указан, то не выставляется
extern double LOT1 = 0.1; //лот первого инструмента
extern double LOT2 = 0.1; //лот второго инструмента
extern double LOT3 = 0.1; //лот третьего инструмента
extern double LOT4 = 0.1; //лот четвертого инструмента
extern int TYPE1 = OP_BUY; //тип ордера первого инструмента
extern int TYPE2 = OP_SELL; //тип ордера второго инструмента
extern int TYPE3 = OP_BUY; //тип ордера третьего инструмента
extern int TYPE4 = OP_SELL; //тип ордера четвертого инструмента
extern int Slippage = 30; //проскальзывание
extern double obpr = 10; //Общий профит
extern int Magic = 777888;
//============================================================================
void start()
{
double pa1=0, pa2=0;
int i;
int p1=0,p2=0;
for(i=OrdersTotal()-1; i>=0; i--)
{//Проверяем профит
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
{//Подсчитываем общий профит
if(p1<=2 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2)) {pa1=pa1+OrderProfit()+OrderSwap()+OrderCommission(); p1++;}
if(p2<=2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4)) {pa2=pa2+OrderProfit()+OrderSwap()+OrderCommission(); p2++;}
}
}
if(pa1>=obpr) close_orders(1); //Закрываем две пары, если они в сумме >= общему профиту
if(pa2>=obpr) close_orders(2);
int s=0;
for(i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic) s++;
}
if(s>2) return;
int Digit=(int)MarketInfo(SYMBOL1,MODE_DIGITS);
double Poin=MarketInfo(SYMBOL1,MODE_POINT);
double ASK=NormalizeDouble(MarketInfo(SYMBOL1,MODE_ASK),Digit);
double BID=NormalizeDouble(MarketInfo(SYMBOL1,MODE_BID),Digit);
if(SYMBOL1!="")
{
if(TYPE1==OP_BUY)
{
if(OrderSend(SYMBOL1,OP_BUY,LOT1,ASK,Slippage,0,0,"1й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT1," ",SYMBOL1);
else Alert(SYMBOL1," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL1,MODE_ASK)," ",LOT1);
}
if(TYPE1==OP_SELL)
{
if(OrderSend(SYMBOL1,OP_SELL,LOT1,BID,Slippage,0,0,"1й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT1," ",SYMBOL1);
else Alert(SYMBOL1," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL1,MODE_ASK)," ",LOT1);
}
}
if(SYMBOL2!="")
{
Digit=(int)MarketInfo(SYMBOL2,MODE_DIGITS);
Poin=MarketInfo(SYMBOL2,MODE_POINT);
ASK=NormalizeDouble(MarketInfo(SYMBOL2,MODE_ASK),Digit);
BID=NormalizeDouble(MarketInfo(SYMBOL2,MODE_BID),Digit);
if(TYPE2==OP_BUY)
{
if(OrderSend(SYMBOL2,OP_BUY,LOT2,ASK,Slippage,0,0,"2й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT2," ",SYMBOL2);
else Alert(SYMBOL2," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL2,MODE_ASK)," ",LOT2);
}
if(TYPE2==OP_SELL)
{
if(OrderSend(SYMBOL2,OP_SELL,LOT2,BID,Slippage,0,0,"2й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT2," ",SYMBOL2);
else Alert(SYMBOL2," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL2,MODE_ASK)," ",LOT2);
}
}
if(SYMBOL3!="")
{
Digit=(int)MarketInfo(SYMBOL3,MODE_DIGITS);
Poin=MarketInfo(SYMBOL3,MODE_POINT);
ASK=NormalizeDouble(MarketInfo(SYMBOL3,MODE_ASK),Digit);
BID=NormalizeDouble(MarketInfo(SYMBOL3,MODE_BID),Digit);
if(TYPE3==OP_BUY)
{
if(OrderSend(SYMBOL3,OP_BUY,LOT3,ASK,Slippage,0,0,"3й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT3," ",SYMBOL3);
else Alert(SYMBOL3," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL3,MODE_ASK)," ",LOT3);
}
if(TYPE3==OP_SELL)
{
if(OrderSend(SYMBOL3,OP_SELL,LOT3,BID,Slippage,0,0,"3й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT3," ",SYMBOL3);
else Alert(SYMBOL3," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL3,MODE_ASK)," ",LOT3);
}
}
if(SYMBOL4!="")
{
Digit=(int)MarketInfo(SYMBOL4,MODE_DIGITS);
Poin=MarketInfo(SYMBOL4,MODE_POINT);
ASK=NormalizeDouble(MarketInfo(SYMBOL4,MODE_ASK),Digit);
BID=NormalizeDouble(MarketInfo(SYMBOL4,MODE_BID),Digit);
if(TYPE4==OP_BUY)
{
if(OrderSend(SYMBOL4,OP_BUY,LOT4,ASK,Slippage,0,0,"4й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер BUY лот ",LOT4," ",SYMBOL4);
else Alert(SYMBOL4," send order BAY error ",GetLastError()," ",MarketInfo(SYMBOL4,MODE_ASK)," ",LOT4);
}
if(TYPE4==OP_SELL)
{
if(OrderSend(SYMBOL4,OP_SELL,LOT4,BID,Slippage,0,0,"4й_ордер",Magic,0,Blue)!=-1)
Alert("Ордер SELL лот ",LOT4," ",SYMBOL4);
else Alert(SYMBOL4," send order SELL error ",GetLastError()," ",MarketInfo(SYMBOL4,MODE_ASK)," ",LOT4);
}
}
return;
}
//=====================================================================
void close_orders(int para)
{
bool err;
int p1=0, p2=0; //удаляем только два последних ордера
for(int i=OrdersTotal()-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES) && OrderMagicNumber()==Magic)
{
if(p1<=2 && para==1 && (OrderSymbol()==SYMBOL1 || OrderSymbol()==SYMBOL2))
{
if(OrderType()==OP_BUY) err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
p1++;
}
if(p2<=2 && para==2 && (OrderSymbol()==SYMBOL3 || OrderSymbol()==SYMBOL4))
{
if(OrderType()==OP_BUY) err=OrderClose(OrderTicket(),OrderLots(), Bid, 30,clrNONE);
if(OrderType()==OP_SELL) err=OrderClose(OrderTicket(),OrderLots(), Ask, 30,clrNONE);
p2++;
}
}
}
return;
}