Ошибки, баги, вопросы - страница 2585

 
Nikolai Semko:

А где и в какой момент удалять хэндл индикатора?

Сразу, как перестал быть нужен. И до OnDeinit.

 
fxsaber:

Сразу, как перестал быть нужен. И до OnDeinit.

В том-то и дело, что как-только он перестал нужет, я его удаляю. Как понять программе, что ее удаляют, если OnDeinit не работает?

 
Nikolai Semko:

В том-то и дело, что как-только он перестал нужет, я его удаляю. Как понять программе, что ее удаляют, если OnDeinit не работает?

Реальную задачу озвучьте.

 
fxsaber:

Реальную задачу озвучьте.

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

Total = ChartIndicatorsTotal(0,0);
for (int i=0; i<Total; i++) 
  {
      string name=ChartIndicatorName(0,0,i);
      if (name!=MQLInfoString(MQL_PROGRAM_NAME)) 
         handle[i] = ChartIndicatorGet(0,0,name);
  }

просто думаю: а вдруг будет нужен собственный хэндл...

были такие задачи, но не помню что-то

 
Nikolai Semko:

просто думаю: а вдруг будет нужен собственный хэндл...

были такие задачи, но не помню что-то

В Init_Sync такая необходимость есть.

 

Методом случайного тыка, определил нормальное копирование в mql-овский string, строку типа const wchar_t*
С таким параметром в функции memcpy, в mql стали поступать ровные строки, и без утечек.

memcpy( out, data, wcslen(data) * (sizeof(char)*3) );

То есть вместо 2 байт sizeof(wchar_t), использовал 3 байта.
mql-овский string начал корректно принимать указатель на строку const wchar_t*
Разве это нормально?

Но что интересно самописная литеральная строка, корректно передаётся с  sizeof(wchar_t).
 
Roman:

Методом случайного тыка, определил нормальное копирование в mql-овский string, строку типа const wchar_t*
С таким параметром в функции memcpy, в mql стали поступать ровные строки, и без утечек.

То есть вместо 2 байт sizeof(wchar_t), использовал 3 байта.
mql-овский string начал корректно принимать указатель на строку const wchar_t*
Разве это нормально?

Но что интересно самописная литеральная строка, корректно передаётся с  sizeof(wchar_t).

Почему используется memcpy, вместо нормального wcscpy ?

 
Ilyas:

Почему используется memcpy, вместо нормального wcscpy ?

memcpy использовался как показано в примере статьи Рената.
Используя другие функции копирования, вызывают так же проблемы.
Поведение с этими функциями описаны в этом посте  и в этом
Уже перепробованы все возможные функции копирования.

 
В тестере не могу считать CopyTime() 100000 бар М15 EURUSD с произвольной даты (сервер метаквот демо хедж)


void OnInit()
  {
    datetime first_date;
   SeriesInfoInteger(_Symbol,_Period,SERIES_FIRSTDATE,first_date);
   int bars=Bars(_Symbol,_Period);
   Print("First date ",first_date," - ",bars," bars");
   
   datetime time[];
   CopyTime(_Symbol,PERIOD_M15,D'2015.01.01',100000,time);
   Print("rows=",100000," =? ",ArraySize(time));
   Print("Load data from ",D'2015.01.01'," =? ",time[0]," to ",time[ArraySize(time)-1],", rows=",100000," =? ",ArraySize(time));
//---

  }
 
void OnTick(){


}

считывает около 37 тыс бар. При запуске в терминале считывает все 100000 бар.


Попробовал добавить код подкачки данных с сервера по  https://www.mql5.com/ru/docs/series/timeseries_access#synchronized

Но ничего не изменилось.

Как в тестере считать эти 100000 бар?

Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
Документация по MQL5: Доступ к таймсериям и индикаторам / Организация доступа к данным
  • www.mql5.com
Прежде чем ценовые данные будут доступны в терминале MetaTrader 5, их необходимо получить и обработать. Для получения данных требуется подключение к торговому серверу MetaTrader 5. Данные поступают с сервера по запросу терминала в виде экономно упакованных блоков минутных баров. Механизм обращения к серверу за данными не зависит от того, каким...
 
elibrarius:

Как считать эти 100000 бар?

Для начала прочитайте статью https://www.mql5.com/ru/articles/239

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
Причина обращения: