Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Алексей
169
Алексей  
VladislavVG:

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

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

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

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

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

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

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

Та не за что - удачи.
Алексей
169
Алексей  
VladislavVG:

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

И Вам удачи!
Алексей
169
Алексей  

Подскажите что может быть не правильно в этом коде? Это подобие трейлингстопа, но при тестировании выдаёт ошибку 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);
      }
   }
Vladyslav Goshkov
2148
Vladyslav Goshkov  
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);
      }
   }
?????????
Alexander
2441
Alexander  

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

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

на

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

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

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

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

123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий