Профессионалы, помогите доработать очень интересного робота!

 
Всем добрый день!

Спасибо за то что зашли на эту тему!

Есть одна проблема , для кого то она очень легко решается, но для меня она уже становится ночным кошмаром!

На просторах этого великого сайта нашел один советник, не помню где, т.к. было давно, но огромное спасибо тому человеку который его выложил !!!

Имя этого советника Неваляшка...

много раз прогонял  его на разных инструментах и при разных настройках и на разные периоды и он очень хорош!

Вот, сама проблема заключается в том, что он работает только один.... в паре с другими советниками или ручными ордерами он начинает путаться... т.к.  он открывает ордера только когда OrdersTotal == 0....

Прошу тех, кто сможет помочь посмотреть код и настроить его так чтобы он ориентировался только по своим ордерам и не брал в расчет чужие...

Перепробовал много способов и вариантов, но из за недостатка опыта ни чего не вышло...

Самого эксперта прикладываю...

Еще раз повторю что именно хотелось бы... Сейчас он полностью работает, но если поставить его же с другим символом то начинается ерунда... так как он ориентируется на тотал... Если его перенастроить на тикеты или еще как, чтобы он был полностью автономный и не брал в расчет чужие ордера, то ему бы не было цены!

Тот кто это сможет, сделает хорошее дело и для меня и для себя, т.к.  робот действительно хорош!
Файлы:
k1pr9p59u.mq4  13 kb
 

Вот так должно быть все ок.

Вместо ордерс тотал используется ф-я CountOrders(), которая смотрит наличие ордеров по магику и только по текущему символу 





extern double  StartLot=0.02; //лот (N)
extern double  K_lot=1.5; //лот, на который увеличиться при получении минуса (M) либо это множитель коэф
extern int     takeprofit     = 2500, //Профит
               moveprofit     = 250,  //Шаг трала
               stoploss       = 1500;  // Стоп лосс
extern double  maxlot=0.08;
extern int     magic =1;              

int tip;//Тип ордера (Селл, Бай)
//Сохраненное значение эквити
double OpenPrice=0;//Цена открытия ордера

double Lot; //лот (N)

int CountOrders()
  {
   int result=0;
   for(int k=0; k<OrdersTotal(); k++)
     {
      if(OrderSelect(k,SELECT_BY_POS,MODE_TRADES)==true)
        {
         if(OrderMagicNumber()==magic && OrderSymbol()==_Symbol)
           {result++;}
         else
           {}
           }
        }
      return(result);
     }
//+-------

//--------------------------------------------------------------------
int init()
{
    //Запоминаем эквити
   Lot=StartLot;       //Лот ордеров равен начальному
   if (OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits),
                NormalizeDouble(Bid - takeprofit*Point,Digits)," ",magic,Blue)!=-1) //В начале открываем селл.tip=1
       {
       tip=1;
       OpenPrice=Bid;
       }
}
//--------------------------------------------------------------------
int start()
{

   bool result;

   if (CountOrders()==0) //Закрылся ордер
      {  
      if (history() > 0) //Текущее эквити больше сохраненного,т.е. закрылись в плюс
         {
        
         Lot=StartLot;//Объем лота сбрасывает до начального
         if (tip==0) // Закрылся бай
            {
            if (OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid-stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",magic,Blue)!=-1) OpenPrice=Ask;// Открываем ордер в том направлении и запоминаем цену открытия
            }
         if (tip==1) // Закрылся селл
            {
            if (OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",magic,Blue)!=-1) OpenPrice=Bid;
            }
         }else //Текущее эквити меньше сохраненного,т.е. закрылись в минус
         {
         Lot=Lot*K_lot; //увеличили лот
         if(Lot<maxlot)
         {
         if (tip==0) //Закрылся бай
            {
            if (OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",magic,Blue)!=-1) //Открыли селл
               {    
               OpenPrice=Bid;//сохранили цену открытия
               tip=1;//пометили селл
               return;
               }
            }
         if (tip==1)
            {
            if (OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid-stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",magic,Blue)!=-1)
               {
               OpenPrice=Ask;
               tip=0;
               }
            }
         }
        
          else  if(Lot>maxlot)
          
         {
            Lot = StartLot;
            
         if (tip==0) //Закрылся бай
            {
            if (OrderSend(Symbol(),OP_SELL,Lot,Bid,3,NormalizeDouble(Ask+stoploss*Point,Digits),
                                    NormalizeDouble(Bid - takeprofit*Point,Digits)," ",magic,Blue)!=-1) //Открыли селл
               {    
               OpenPrice=Bid;//сохранили цену открытия
               tip=1;//пометили селл
               return;
               }
            }
         if (tip==1)
            {
            if (OrderSend(Symbol(),OP_BUY ,Lot,Ask,3,NormalizeDouble(Bid-stoploss*Point,Digits),
                                    NormalizeDouble(Ask + takeprofit*Point,Digits)," ",magic,Blue)!=-1)
               {
               OpenPrice=Ask;
               tip=0;
               }
            }
         }
        
         }
      }else //Ордер открыт, отслеживаем трал
      {
      if (tip==0)//Бай
         {
         if (Ask-OpenPrice>moveprofit*Point)// Цена ушла выше цены открытия ордера на шаг трала
            {
            if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
               {
               if (OrderMagicNumber() == magic)
               result=OrderModify(OrderTicket(),0,Bid-stoploss*Point,OpenPrice + takeprofit*Point,0,CLR_NONE);//Переносим стоп выше
               if (Lot>StartLot && (Bid-stoploss*Point>OrderOpenPrice())) Lot=StartLot; //Если текущий стоп выше цены открытия, то уменьшаем лот следующего ордера
               OpenPrice=Ask;  //Сохраняем текущую цену. Теперь от нее считаем трал            
               }
            }
         }else
         {
         if (OpenPrice-Bid>moveprofit*Point)
            {
            if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
               {
                if (OrderMagicNumber() == magic)
               result=OrderModify(OrderTicket(),0,Ask+stoploss*Point,OpenPrice - takeprofit*Point,0,CLR_NONE);
               if (Lot>StartLot && (Ask+stoploss*Point<OrderOpenPrice())) Lot=StartLot;
               OpenPrice=Bid;
               }
             }        
         }
      }
   return(0);
}
//-----------------------------------------------------------------
int history(){
int time = 0;double profit = 0;//обьявляем необходимые нам переменные куда мы положим интересующие нас характеристики ордера
for(int i = OrdersHistoryTotal();i>=0;i--){// Перебираем все закрытые ордера
  if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)){//если ордер с таким номером (i) в списке закрытых ордеров есть ( не путать с тикетом)
    if(OrderSymbol() == Symbol() && OrderMagicNumber() == magic){//если выбранный ордер был открыт по нашей валютной паре
      if(time<OrderCloseTime()){//(сравниваем его с хранящимся в пероеменной time)
        time=OrderCloseTime();//если время закрытия ордера больше - ложим его в переменную
        profit=OrderProfit();//и заодно запоминаем прибыль ордера
      }
    }
  }
}
//по окончании этой процедуры в наших переменных будут сидет наибольшее время закрытия, и его профит. Или по нулям если история чистая.
//теперь мы можем выставлять условия в зависимости от результата процедуры
  
            if(profit == 0 &&time == 0)
            {//действия если история чистая}

             }
             if(profit >= 0)
             {//действия если последний ордер был прибыльным, или нулевым}

             }
        if(profit <  0 ){//действия если последний ордер был убыточным}

               }
                  return(profit);
               }
 
Castyell:
Всем добрый день!

Спасибо за то что зашли на эту тему!

Есть одна проблема , для кого то она очень легко решается, но для меня она уже становится ночным кошмаром!

На просторах этого великого сайта нашел один советник, не помню где, т.к. было давно, но огромное спасибо тому человеку который его выложил !!!

Имя этого советника Неваляшка...

много раз прогонял  его на разных инструментах и при разных настройках и на разные периоды и он очень хорош!

Вот, сама проблема заключается в том, что он работает только один.... в паре с другими советниками или ручными ордерами он начинает путаться... т.к.  он открывает ордера только когда OrdersTotal == 0....

Прошу тех, кто сможет помочь посмотреть код и настроить его так чтобы он ориентировался только по своим ордерам и не брал в расчет чужие...

Перепробовал много способов и вариантов, но из за недостатка опыта ни чего не вышло...

Самого эксперта прикладываю...

Еще раз повторю что именно хотелось бы... Сейчас он полностью работает, но если поставить его же с другим символом то начинается ерунда... так как он ориентируется на тотал... Если его перенастроить на тикеты или еще как, чтобы он был полностью автономный и не брал в расчет чужие ордера, то ему бы не было цены!

Тот кто это сможет, сделает хорошее дело и для меня и для себя, т.к.  робот действительно хорош!
держите
Файлы:
k1pr9p59u.mq4  15 kb
 
Всем спасибо огромное!  Мучал мозг с этой задачей несколько недель, а на самом деле все оказалось просто!

Спасибо еще раз!
Причина обращения: