Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1007

 
Alexey Viktorov:

Время минус время разделить на PeriodSeconds()

так может быть неправильная длина при переходе пятница-понедельник (или если в истории пропущены бары)

лучше читать время точек и потом определять бары

datetime time1=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,0);
datetime time2=(datetime)ObjectGetInteger(ExtChartID,name,OBJPROP_TIME,1);

int bar1=iBarShift(_Symbol,_Period,time1);
int bar2=iBarShift(_Symbol,_Period,time2);
 
Taras Slobodyanik:

так может быть неправильная длина при переходе пятница-понедельник (или если в истории пропущены бары)

лучше читать время точек и потом определять бары

Согласен. Не утруждал себя и свой мозг. Тогда лучше взять количество баров между датами.

int  Bars( 
   string           symbol_name,     // имя символа 
   ENUM_TIMEFRAMES  timeframe,       // период 
   datetime         start_time,      // с какой даты 
   datetime         stop_time        // по какую дату 
   );
 
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


В этой части пишет ошибка 



Подскажите, как завести робота


 
Ivan Butko:

В этой части пишет ошибка

Подскажите, как завести робота

Вот здесь переменная объявлена и сразу же она делится:

double spred = spred/Point*(tot-1); 

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

Попробуй объявить ее раньше и присвоить ей значение
 
Yevhenii Levchenko:

Вот здесь переменная объявлена и сразу же она делится:

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

Попробуй объявить ее раньше и присвоить ей значение

Евгений, от души! 
Завелся, спасибо

 

Что делать если на MQL5 ...

if(BarsCalculated(handle) == -1)

... уже в районе минуты прошло, и проблема таже. Почему так долго?


Ошибка 4806 - Запрошенные данные не найдены ... - а как сделать так чтобы советник нашел?

 
Ivan Butko:
int start()
{
  if(Check()==false)
      return;  
      
  int TotalOrders;
  double NewPrice, NewLots, NewTP, NewSL;
  /*****************************************************************************/
  /* Здесь часть кода, которая работает при каждом новом тике                  */ 
  /*****************************************************************************/
  TotalOrders = CountOfOrders(); 
     double sprd = Ask-Bid;
     int tot = CountOfOrders2();
     double spred = spred/Point*(tot-1);

  if(tot > 1)PercCloseDown();


В этой части пишет ошибка 



Подскажите, как завести робота


Строка 61, это какая строка?
 

Как отловить ошибку out of memory?


Отчего вообще такое сообщение может быть?


Написал программу примерно на 20 тыс строк. Очень много разных классов, массивов, структур. 

Примерно раз в два три дня, вылетает сообщение out of memory. 

Не знаю как отловить, в какой функции из за чего утекает память. 

 
Sergey Likho:

Как отловить ошибку out of memory?


Отчего вообще такое сообщение может быть?


Написал программу примерно на 20 тыс строк. Очень много разных классов, массивов, структур. 

Примерно раз в два три дня, вылетает сообщение out of memory. 

Не знаю как отловить, в какой функции из за чего утекает память. 

внимательно смотрите чтобы каждому new обязательно соотв. свой delete

то есть только методом внимательного чтения кода. Чтобы читать было проще и веселее, заодно комментируйте :-)

ещё неплохо писать на каждый класс скрипты test-case и так проверять утечки внутри классов.

 
Maxim Kuznetsov:

внимательно смотрите чтобы каждому new обязательно соотв. свой delete

то есть только методом внимательного чтения кода. Чтобы читать было проще и веселее, заодно комментируйте :-)

ещё неплохо писать на каждый класс скрипты test-case и так проверять утечки внутри классов.

New, delete не использую. Элементы классов объявлены в самом начале  и заново я их не пересоздаю. 

В основном много работы с массивами. 


Что такое скрипты test-case ?

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