Написание советников БЕСПЛАТНО!!! - страница 5

 
T926SA:
Кто может помочь доработать советник, добавив в него, чтобы мог закрывать ордера по профиту? за символическую плату

Я могу

 
Maksim Sovenko:

Я могу

Закрытие уже добавил, но не работает...

Нужно чтобы открывались 4 новых ордера после того как из предыдущих 4х ордеров закроются 2 заранее выбранных ордера(SYMBOL1 и SYMBOL2 или SYMBOL3 и SYMBOL4). А 2 этих ордера(SYMBOL1 и SYMBOL2 или SYMBOL3 и SYMBOL4) закрываются при определенной сумме профита(SYMBOL1 + SYMBOL2 или SYMBOL3 + SYMBOL4) соответственно. то есть 4 ордера разделены на 2 пары (SYMBOL1 + SYMBOL2 и SYMBOL3 + SYMBOL4). если какие 2 определенных ордера выходят в профит, то закрываются и открывается новая 4ка ордеров. а которые за следом потом выйдут в профит 2 ордера, они не учитываются для открытия новой 4ки ордеров, а просто закрываются по профиту. и так по новой. начало самого первого открытия 4х ордеров начинается с момента установки советника на график. 

Допустим открыты 4 ордера, это: buy EURUSD(-2$); sell GBPUSD(+12$); buy EURGBP(-6$); sell GBPJPY(-2$). Общий профит стоит 10$. Советник должен закрыть: buy EURUSD(-2$) и sell GBPUSD(+12$) (SYMBOL1 + SYMBOL2=общий профит)(SYMBOL3 + SYMBOL4= убыток. их пока не закрывает а ждет когда в профит выйдут). 

//+------------------------------------------------------------------+
//|         Советник, выставляет 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;
}
Что скажите?
 
Armen1963:
nado chtobi v etom sovetnike stopovie ordera tralilis v rovnie rosstoyaniyax skajem n-niy order n*Фиксированный размер трала chtobi poluchilos setka orderov zaranie spasibo 

 
Подчеркну, это вариант который предлагает яндекс.
 
Подскажите пожалуйста ,,,  у меня немного странный вопрос , как правильно написать код чтобы индикатор делал просчет каждую секунду а не каждый тик если можно на примере допустим индикатор каждую секунду складывает 1+1  
 
gonsharov:
Подскажите пожалуйста ,,,  у меня немного странный вопрос , как правильно написать код чтобы индикатор делал просчет каждую секунду а не каждый тик если можно на примере допустим индикатор каждую секунду складывает 1+1  
datetime DT;

OnInit()
{
DT = 0;
return(INIT_SUCCEEDED); 
}

bool checkTime(int diff)
{
    datetime currentTime = iTime(_Symbol,PERIOD_CURRENT,0);
    if((currentTime - DT)>=diff)
    {
        return true;
        DT = currentTime;
    }
    return false;
}


не дебагил, писал прямо тут, так что возможно нужно будет немного править. 
На наждом тику вызывать функцию checkTime если true - то делать расчеты
 

входной параметр diff - разница между временем в секундах
 
Приветствую помогите найти сову, для открытия виртуальных отложек.
 

всем здрасте.подскажиите как установить робота на мт4 чтоб дил.центр его пропустил к установке.

то есть стоял себе робот а утром бац и больше не устанавливается.в эдиторе есть а на графике где эксперты его нет.

так произошло в ВПС сервере.

на компе устанавливвается.

робот перевертышь личный под заказ.работал исправно.

 
Доброго времени суток, я как и многие все, Я хочу найти программиста который на бесплатной основе напишет мне советника, стратегия ***
 
Andrey Azatskiy:


не дебагил, писал прямо тут, так что возможно нужно будет немного править. 
На наждом тику вызывать функцию checkTime если true - то делать расчеты
 

входной параметр diff - разница между временем в секундах

OnTimer() запускается каждую секунду

 
доброго времени суток, господа программисты. есть интересная идея, нужно реализовать его в коде. есть ли кто может написать его бесплатно? ***
Причина обращения: