Скачать MetaTrader 5

Зачем нужен параметра в TimeLocal() ?

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

Я написал функцию:

// 8.1 Возвращает значение заданного времени в локальном часовом поясе. ============================================================================================================
datetime getTimeInLocalTimeZone(datetime date){
  MqlDateTime dt;
  TimeToStruct(date, dt);
  return TimeLocal(dt);
}

Думал, что так буду возвращать дату с временем в локальном часовом поясе. Но что не передаю через параметр, всё-равно возвращается время, которое на данный момент, а не то, которое я передаю, даже если это сколько-нибудь дней назад. По сему возник вопрос. Этот параметра вообще для чего нужен?

Я думал, что TimeLocal() т.е. без параметров возвращает текущее время локальное, а с параметрами  TimeLocal(dt) возвращает время на дату dt. Если нет, то какой смысл в этом параметре?

Alexey Viktorov
23964
Alexey Viktorov  
hoz:

Я написал функцию:

Думал, что так буду возвращать дату с временем в локальном часовом поясе. Но что не передаю через параметр, всё-равно возвращается время, которое на данный момент, а не то, которое я передаю, даже если это сколько-нибудь дней назад. По сему возник вопрос. Этот параметра вообще для чего нужен?

Я думал, что TimeLocal() т.е. без параметров возвращает текущее время локальное, а с параметрами  TimeLocal(dt) возвращает время на дату dt. Если нет, то какой смысл в этом параметре?

Потому, что TimeLocal(dt) не возвращает дату, а записывает её в структуру dt.

Примечание

Если в качестве параметра была передана переменная типа структуры MqlDateTime, то она заполняется соответствующим образом.


Она это структура...

hoz
2621
hoz  
Alexey Viktorov:

Потому, что TimeLocal(dt) не возвращает дату, а записывает её в структуру dt.

Она это структура...

С чего бы это вдруг? Читаем..

Параметры

dt_struct

[out]  Переменная типа структуры MqlDateTime.

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

Значение типа datetime


Возвращаемое значение datetime. Тип функции datetime. Как может функция ничего не возвращать?
Документация по MQL5: Дата и время / TimeLocal
Документация по MQL5: Дата и время / TimeLocal
  • www.mql5.com
Дата и время / TimeLocal - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
Taras Slobodyanik
25473
Taras Slobodyanik  

Примечание

Если в качестве параметра была передана переменная типа структуры MqlDateTime, то она заполняется соответствующим образом.

Alexey Viktorov
23964
Alexey Viktorov  
hoz:

С чего бы это вдруг? Читаем..

Возвращаемое значение datetime. Тип функции datetime. Как может функция ничего не возвращать?

Запусти такой скрипт

/********************Script program start function*******************/
void OnStart()
{
  MqlDateTime mqlDateTime;
  TimeToStruct(D'2017.10.12 16:00', mqlDateTime);
  Print(mqlDateTime.day, ".", mqlDateTime.mon, ".", mqlDateTime.year);
  TimeLocal(mqlDateTime);
  Print(mqlDateTime.day, ".", mqlDateTime.mon, ".", mqlDateTime.year);
}/*******************************************************************/

Прочти что распечатает

2018.04.16 20:53:46.744 00 (EURUSD,H1)  12.10.2017
2018.04.16 20:53:46.744 00 (EURUSD,H1)  16.4.2018
и потом повтори что написано в документации.
hoz
2621
hoz  
Alexey Viktorov:

Запусти такой скрипт

Прочти что распечатает

и потом повтори что написано в документации.

Спасибо. Я уже понял. Это ущербность мкл в целом, в плане, не возможности возвращать массивы нормально, а только через параметры функции. Я привык работать писать с удобствами, а здесь вот такие моменты присутствуют. Кроме того, та жу функция TimeLocal() сама по себе всё-таки void. А то что возвращается через параметры это уже как-бы не относится к этому. Это первое, что может запутать. У меня хватает функций. которые сами по себе void, но возвращаются что-то через параметры. Поэтому я даже не заморачивался когда читал справку.

Dmitiry Ananiev
9585
Dmitiry Ananiev  
hoz:

Спасибо. Я уже понял. Это ущербность мкл в целом, в плане, не возможности возвращать массивы нормально, а только через параметры функции. Я привык работать писать с удобствами, а здесь вот такие моменты присутствуют. Кроме того, та жу функция TimeLocal() сама по себе всё-таки void. А то что возвращается через параметры это уже как-бы не относится к этому. Это первое, что может запутать. У меня хватает функций. которые сами по себе void, но возвращаются что-то через параметры. Поэтому я даже не заморачивался когда читал справку.

Простите за мое невежество, а в каком языке функция возвращает целый массив? Насколько я знаю в Си возвращается указатель на массив. В MQL указатель вернуть нельзя. Безопасность. Потому как тогда можно залезть в системную память и чего нибудь там наделать. (тут я возможно тоже не совсем прав). 

Georgiy Merts
6159
Georgiy Merts  
Dmitiry Ananiev:

Простите за мое невежество, а в каком языке функция возвращает целый массив? Насколько я знаю в Си возвращается указатель на массив. В MQL указатель вернуть нельзя. Безопасность. Потому как тогда можно залезть в системную память и чего нибудь там наделать. (тут я возможно тоже не совсем прав). 

Да лааадно... Используем стандартный наследник CArray - и возвращай себе указатели.

Единственная проблема с указателями на массивы в MLQ - это стандартные массивы таймсерий, передаваемые в индикаторы. Взять указатель непосредственно нельзя, приходится копировать. Но это - единственный случай. Во всех остальных - используем класс-наследник CArray, и все проблемы с указателями на массивы исчезают.

hoz
2621
hoz  
Dmitiry Ananiev:

Простите за мое невежество, а в каком языке функция возвращает целый массив? Насколько я знаю в Си возвращается указатель на массив. В MQL указатель вернуть нельзя. Безопасность. Потому как тогда можно залезть в системную память и чего нибудь там наделать. (тут я возможно тоже не совсем прав). 

В Java я так всегда работал. В C# тоже думаю должно такое быть. Слишком они похожу. Разве что в Java делегатов нет..

Alexey Volchanskiy
26051
Alexey Volchanskiy  
Georgiy Merts:

Да лааадно... Используем стандартный наследник CArray - и возвращай себе указатели.

Единственная проблема с указателями на массивы в MLQ - это стандартные массивы таймсерий, передаваемые в индикаторы. Взять указатель непосредственно нельзя, приходится копировать. Но это - единственный случай. Во всех остальных - используем класс-наследник CArray, и все проблемы с указателями на массивы исчезают.

Жорж, ты говоришь с ТС на инопланетном языке )))) Веселый форум, скоро надо будет вызывать Петросяна.

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