Помогите новичку! - страница 3

 
VladislavVG:

Судя по ошибке - по тому, что пишет компилятор - нет. Если где-то лишняя скобка хоть фигурная или круглая, то компилятор не будет считать это (то, что показано у топикстартера) окончанием функции - ретурн может ведь стоять в любом месте функции. И еще: такая ошибка, как у топикстартера, выдается в единственном случае.

да я не пихал коды функция в другие функции... я переделывал свой другой советник, сделал просто немного по другому, через переключатель switch и не много опреаторы поменял местами, где добавил, где убавил.. но доверюсь вашему опыту и поищу эти функции, спасибо!
 
Ekburg:

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

Я же не говорю, что Вы это сделали преднамеренно - так считает компилятор и он, компилятор, об этом Вам сообщает. А происходит это только тогда, когда скобок не хватает. Воспользуйтесь любым редактором, который считает скобки автоматом - Notepad++, VS или любой другой - там искать проще
 
VladislavVG:

Я же не говорю, что Вы это сделали преднамеренно - так считает компилятор и он, компилятор, об этом Вам сообщает. А происходит это только тогда, когда скобок не хватает. Воспользуйтесь любым редактором, который считает скобки автоматом - Notepad++, VS или любой другой - там искать проще

ЕЕЕЕЕЕЕЕ, спасибо! нашёл! Нашлсь то место где скобка кудесница спряталась) Спасибо большое! помогла программка посчитать! Тысяча благодарностей!:)
 
Ekburg:

ЕЕЕЕЕЕЕЕ, спасибо! нашёл! Нашлсь то место где скобка кудесница спряталась) Спасибо большое! помогла программка посчитать! Тысяча благодарностей!:)

Та не за что - удачи.
 
VladislavVG:

Та не за что - удачи.

И Вам удачи!
 

Подскажите что может быть не правильно в этом коде? Это подобие трейлингстопа, но при тестировании выдаёт ошибку 1, при модификации. Почему не модифицируется ордер?

При чём когда исправлял эту ошибку (пока неудачно), при компиляции стало возвращать ошибку из основного кода эксперта в функцию print, пишет что не хватает кавычек, при чём всё там поставлено верно, и что бы исправить эту ошибку приходиться убирать и ставить заново кавычку..

 

bool trailingstop()
   {
   if ((OrderMagicNumber()==11111)==true)
      {
      Print("Ведём позицию Buy");
      while(OrderCloseTime()==0)
         {
         if ((Bid-OrderStopLoss())>(StopLevel*Point))
            {
            if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Bid-StopLevel*Point),0,0))
               Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
            else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
            }
         }
      if (OrderCloseTime()>0)
         {
         Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
         return(true);
         }
      }
   else
      {
      if ((OrderMagicNumber()==22222)==true)
         {
         Print("Ведём позицию Sell");
         while(OrderCloseTime()==0)
            {
            if ((OrderStopLoss()-Ask)>(StopLevel*Point))
               {
               if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Ask+StopLevel*Point),0,0))
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
            }
         if (OrderCloseTime()>0)
            {
            Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
            return(true);
            }
         }
      else return(false);
      }
   }
 
Ekburg:

Подскажите что может быть не правильно в этом коде? Это подобие трейлингстопа, но при тестировании выдаёт ошибку 1, при модификации. Почему не модифицируется ордер?

При чём когда исправлял эту ошибку (пока неудачно), при компиляции стало возвращать ошибку из основного кода эксперта в функцию print, пишет что не хватает кавычек, при чём всё там поставлено верно, и что бы исправить эту ошибку приходиться убирать и ставить заново кавычку..

 

bool trailingstop()
   {
   if ((OrderMagicNumber()==11111)==true)
      {
      Print("Ведём позицию Buy");
      while(OrderCloseTime()==0)
         {
         if ((Bid-OrderStopLoss())>(StopLevel*Point))
            {
            if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Bid-StopLevel*Point),0,0))
               Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
            else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
            }
         }
      if (OrderCloseTime()>0)
         {
         Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
         return(true);
         }
      }
   else
      {
      if ((OrderMagicNumber()==22222)==true)
         {
         Print("Ведём позицию Sell");
         while(OrderCloseTime()==0)
            {
            if ((OrderStopLoss()-Ask)>(StopLevel*Point))
               {
               if (OrderModify(OrderTicket(),OrderOpenPrice(),ND(Ask+StopLevel*Point),0,0))
                  Print("Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", успешно изменён на ",OrderStopLoss());
               else Print("Не удалось переместить уровень Stop Loss ордера с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),". Ошибка ",GetLastError());
               }
            }
         if (OrderCloseTime()>0)
            {
            Print("Ордер с номером ", OrderTicket(),", и магическим числом ",OrderMagicNumber(),", закрыт по цене ",OrderClosePrice(),", с прибылью/убытком ",OrderProfit());
            return(true);
            }
         }
      else return(false);
      }
   }
?????????
 

Ошибка 1 при модификации ордера - типичная для тех, кто не нормализует дробные числа при сравнении. Замените

 if ((Bid-OrderStopLoss())>(StopLevel*Point))

на

 if (ND(Bid-OrderStopLoss()-StopLevel*Point)>0)

во втором случае также.

И потом, что значит "ведем позицию"?

Если Вы собираетесь не выходить из цикла до полного закрытия, Вам надо обновлять данные с каждым заходом в цикл, нето он он (советник) будет все время сравнивать старые данные. И паузы надо ставить, а то загрузите свой процессор по самые помидоры. Так вообще-то никто не делает.

Причина обращения: