Библиотека и чайник

 

 Добрый день, подскажите кто знает, для работы моего эксперта нужна функция секунд, прошедших с начала бара, таковой в mql5 нет, ...на форуме нашел пример, который работает только через библиотеку. НО Как создать библиотеку с этой функцией и как правильно ей потом юзать, пользоваться функцией в эксперте. С библиотеками никогда дело не имел. Очень нужна эта функция, подскажите пожалуйста.

 

 Вот сама функция, для работы через библиотеку:

//Function Seconds
int Seconds() export
//Возвращает количество секунд, прошедших с начала текущей минуты
//При ошибке функция возвращает -1.
{
//----------------------------------------------------------------------------//
//Служебные переменные
MqlDateTime MqlDate; //Структура в которой хранятся данные по дате

int Result; //Возвращаемое значение
//----------------------------------------------------------------------------//

ResetLastError();

//Записываем переданное значение в структуру
TimeToStruct(TimeCurrent(),MqlDate);
//Определяем количество секунд
Result = MqlDate.sec;

if(GetLastError()!=0)
//При расчетах возникла ошибка, подробно смотрим ее код.
{
Result = -1; //Сообщаем об ошибке
}
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 

Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
Документация по MQL5: Стандартные константы, перечисления и структуры / Структуры данных / Структура даты
  • www.mql5.com
Стандартные константы, перечисления и структуры / Структуры данных / Структура даты - Документация по MQL5
 

оформляте код правильно пожалуйста 

//Function Seconds
int Seconds() export 
//Возвращает количество секунд, прошедших с начала текущей минуты
//При ошибке функция возвращает -1.
{
//----------------------------------------------------------------------------//
//Служебные переменные
MqlDateTime MqlDate; //Структура в которой хранятся данные по дате

int Result; //Возвращаемое значение
//----------------------------------------------------------------------------//

ResetLastError();

//Записываем переданное значение в структуру
TimeToStruct(TimeCurrent(),MqlDate);
//Определяем количество секунд
Result = MqlDate.sec;

if(GetLastError()!=0)
//При расчетах возникла ошибка, подробно смотрим ее код.
{
Result = -1; //Сообщаем об ошибке
}
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 
MQL5.community - Памятка пользователя
MQL5.community - Памятка пользователя
  • 2010.02.23
  • MetaQuotes Software Corp.
  • www.mql5.com
Вы недавно зарегистрировались и у вас возникли вопросы: Как вставить картинку в сообщение на форуме, как красиво оформить исходный код MQL5, где находятся ваши Личные сообщения? В этой статье мы подготовили для вас несколько практических советов, которые помогут быстрее освоиться на сайте MQL5.community и позволят в полной мере воспользоваться доступными функциональными возможностями.
 
ок, только какже быть с библиотекой
 
alvis:

 Добрый день, подскажите кто знает, для работы моего эксперта нужна функция секунд, прошедших с начала бара, таковой в mql5 нет, ...на форуме нашел пример, который работает только через библиотеку. НО Как создать библиотеку с этой функцией и как правильно ей потом юзать, пользоваться функцией в эксперте. С библиотеками никогда дело не имел. Очень нужна эта функция, подскажите пожалуйста.

 

Вот сама функция, для работы через библиотеку:

.....


Ну чувствуется моя библиотека в народ пошла, не плохо было бы еще при вставке кода "SRC" юзать... :)

тока эти функции из "Миграционной библиотеки", предназначавшейся для удобства МИГРАЦИИ с MQL4 на MQL5.


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

1. Получаем текущее текущее серверное время (при помощи TimeCurrent или TimeTradeServer) - RealTime;

2. Получаем время начала бара (можно различными способами, но я предпочитаю из тайм-серии) - BarTime;

3. Рассчитываем количество секунд прошедших с момента формирования текущего бара как RealTime - BarTime.


 
alvis:
ок, только какже быть с библиотекой

Библиотека там к слову пришлась, для решения ВАШЕЙ задачи она не требуется (можете функцию создать и помещать ее куда угодно).


PS

Сами библиотеки процедур и фуункций можно создавать двумя способами:

1. Оформлять их при помощи *.mqh-файлов и размещать тут  \MQL5\Include (подкаталоги приветствуются);

2. Оформлять их в виде *.mq5-файлов и размещать тут MQL5\Libraries (в основном используется при коммерческом распространении библиотек в виде *.ex5 и требует наличие заголовочных *.mqh).

 
Interesting:

Библиотека там к слову пришлась, для решения ВАШЕЙ задачи она не требуется (можете функцию создать и помещать ее куда угодно).


Ок, я так попробовал, вставил в код эксперта вашу функцию секунд, при компеляции пишет ошибку перед скобкой       int Seconds() export             --->         '(' - semicolon is expected g.mq5 80 12
 
Без этой функции компелируеться, но это уже не рабочий эксперт, какже быть
 
alvis:
Ок, я так попробовал, вставил в код эксперта вашу функцию секунд, при компеляции пишет ошибку перед скобкой       int Seconds() export             --->         '(' - semicolon is expected g.mq5 80 12


export - Юзать треба тока если библиотека оформлена в виде mq5 и лежит тут MQL5\Libraries, в любых других случаях ее не нужно юзать...
 
alvis:
Без этой функции компелируеться, но это уже не рабочий эксперт, какже быть

Эта функция Вам не чего не даст, там нужна другая.

Вот шаблон для такой функции (вроде нормально работает):

//Function PassedSeconds
int PassedSeconds(string symbol="",ENUM_TIMEFRAMES period = PERIOD_CURRENT)
//Функция возвращает количество секунд прошедших с начала формирования бара
//В случае ошибки функция возвращает -1
{
//----------------------------------------------------------------------------//
//Служебные переменные
datetime RealTime,BarTime; //Текущее время и время начала формирования бара

datetime ArTime[];//Массив для копирования данных

int Result; //Возвращаемый результат
//----------------------------------------------------------------------------//

ResetLastError();

//Защита от дурака
  if(symbol=="") symbol = Symbol();
//Получаем текущее время
RealTime = TimeTradeServer();
//Копируем данные в массив и получаем время начала формирования бара
  if(CopyTime(symbol,period,0,1,ArTime)!=-1)
  {
  //Получаем время начала формирования бара
  BarTime = ArTime[0];
  }
  else Result = -1;
//Получем количество секунд прошедших с начала формирования бара
  if(Result!=-1)
  {
  Result = (int)(RealTime-BarTime);
  }
//Отлов ошибок выполнения
  if(_LastError!=0)
  //При расчетах возникла ошибка, подробно смотрим ее код.
  {
  Result = -1; //Сообщаем об ошибке
  }
//----------------------------------------------------------------------------//
return(Result);
//----------------------------------------------------------------------------//
}
 

Вот шаблон для той функции (вроде нормально работает):

к сожаленью пишет туже ошибку

'(' - semicolon is expected g.mq5 81 18


придеться както вписать в библиотеку

 

 
Interesting:
export - Юзать треба тока если библиотека оформлена в виде mq5 и лежит тут MQL5\Libraries, в любых других случаях ее не нужно юзать...

А как прописать эту функцию в библиотеку? непросто ведь вставить код функции в новосозданную библиотеку. И как потом ее в эксперте вызывать и юзать?     

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