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

 
Interesting:

Теперь, в отличие от MT4, период не означает количество секунд в периоде.

Читайте внимательнее, я писал про _Period а не про PeriodSeconds. И не забивайте своими ошибками восприятия страницы пожалуйста.
 
ANG3110:
Количество секунд он никогда не показывал, даже в МТ4 уважаемый... А вот минуты в МТ4 он показывал четко. Что тогда показывает _Period на графике H1? По моему это серьезный баг.
ANG3110:
Читайте внимательнее, я писал про _Period а не про PeriodSeconds. И не забивайте своими ошибками восприятия страницы пожалуйста.
Уже исправил. Общий смысл таков, при помощи PeriodSeconds получаем именно секунды в периоде, а затем делаем с ними все что душе угодно...

Таким образом H1 = 16385 это не ахинея, а числовое представление H1 в ENUM_TIMEFRAMES.


Читаем справку по Period-у

Period

Возвращает значение таймфрейма текущего графика.

ENUM_TIMEFRAMES  Period();

Возвращаемое значение

Содержимое переменной _Period, в которой хранится значение таймфрейма текущего графика. Значение может быть одним из значений перечисления ENUM_TIMEFRAMES.

PS

Таким образом возвращается не количество минут соответствующее периоду (как это было в МТ4), а элемент перечисления ENUM_TIMEFRAMES (или его числовое представление, при необходимости работы с ним)...

 
Interesting:
Уже исправил. Общий смысл таков, при помощи PeriodSeconds получаем именно секунды в периоде, а затем делаем с ними все что душе угодно...

Таким образом H1 = 16385 это не ахинея, а числовое представление H1 в ENUM_TIMEFRAMES.

Блин, ну и наворотили. Раньше было все легко и просто, записал Period()  получил минуты. Теперь получаешь вообще неизвестно какие-то служебные идентификаторы, которые для работы точно не нужны. Ладно сейчас попробую через секунды узнать минуты.
 

Ну а всетаки, если я запрашиваю _Period на H1  получаю эту самую  ENUM_TIMEFRAMES = 16385, то как мне из этого получить минуты?

Хотя конечно поделить PeriodSeconds()/60 ничего не стоит. Но всетаки что это за идентификаторы и как с ними работать. 

 
ANG3110:

Ну а всетаки, если я запрашиваю _Period на H1  получаю эту самую  ENUM_TIMEFRAMES = 16385, то как мне из этого получить минуты?

Уже месяцев 11 использую в соей миграционной библиотеке вот эту функцию, пока все четко было

//Fumction PeriodToMinute
int PeriodToMinute(ENUM_TIMEFRAMES Value)
{
//----------------------------------------------------------------------------//
//Work variables
int Result; //Returned importance
//----------------------------------------------------------------------------//
Result = PeriodSeconds(Value)/60;
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}

ANG3110:

Хотя конечно поделить PeriodSeconds()/60 ничего не стоит. Но всетаки что это за идентификаторы и как с ними работать. 

Этот вопрос можно отнести к основам ООП. Касается он идентификаторов и перечислений (нумераторов). Подробно можно почитать в справке или в нормальных книгах по программированию на C++.

Такое было уже и в MQL4, но не так явно бросалось в глаза.

У каждого идентификатора (в независимости от того прописан он в MQL5 или его создал пользователь) может быть свое "число представление".

Если по простому (объясняю как умею)...

Можете считать, что это для совместимости работы с внешней средой, скажем с DLL или иной другой (не имеющей представления не о MQL не о его идентификаторах).

Таким образом, если вам нужно внутри MQL5 программы работать с периодом, то разумнее всего использовать идентификатор PERIOD_H1 перечисления ENUM_TIMEFRAMES.

Но если скажем требуется сообщить внешней среде (к примеру DLL), что мы работаем с периодом H1, это удобней сделать при помощи числового представления этого идентификатора, в нашем случае это 16385.

 
ANG3110:

Ну а всетаки, если я запрашиваю _Period на H1  получаю эту самую  ENUM_TIMEFRAMES = 16385, то как мне из этого получить минуты?

Хотя конечно поделить PeriodSeconds()/60 ничего не стоит. Но всетаки что это за идентификаторы и как с ними работать. 

примерно так

int minute = PeriodSeconds(_Period)/60;
 
Interesting:

Уже месяцев 11 использую в соей миграционной библиотеке вот эту функцию, пока все четко было

Понял. Спасибо за ответ!
 
sergey1294:

примерно так

Вам тоже спасибо!
 

Разработчикам.

1. При определенных условиях строка OHLC начинает подмигивать. Выявилось при тестировании советника на одноядерном компе (видимо проц перегружен)...

2. Можно будет поместить список классов и их функционал (начинку) в навигатор, подобно тому как это сделано в Delphi (а то не очень удобно работать со списком процедур и функций модуля)?

 
Ashes:

Попытался сохранить отчет тестера в формате Open XML. Минут 20 ожидания (Pentium 4, 3.0GHz), приложение не отвечает, в диспетчере задач бурная активность процесса terminal.exe (примерно 50% процессора) по пожиранию оперативки (примерно до 250Мб), Результат - ничего. MT5 реагирует, только котировки поступать перестали (Индикатор состояние подключения с серым крутящимся кружком). Вторая попытка - аналогично. В окне "Инструменты" в журнале 2 записи "MemoryException 107878464 bytes not available", по времени соответствующие попытке получить отчет в OpenXML.
В формате HTML файл сформировался почти мгновенно (примерно 12 Мб). Открывается долго, но тут уж MT5 не виноват...

Повторюсь. Всё то же, но с билдом 358. Только времени уходит ещё больше. Наблюдается зависимость от размера отчета - короткий обрабатывается без проблем.
Причина обращения: