Как получить уникальное число во время тестирования?

 

Пишу робота для тестирования стратегий.

После проведения тестирования автоматически создаётся файл. Так как на каждую итерацию тестирования требуется создать файл с уникальным именем, сперва попробовал решить этот вопрос через глобальную переменную терминала. Оказалось что во время тестирования глобальные переменные терминала не работают (точнее работают, но как локальные переменные). Второй попыткой попытался получить время TimeLocal(), и использовать уникальное число в виде количества секунд, прошедших с 01 января 1970 года. Но при тестировании TimeLocal() возвращает время на момент начала истории тестирования.

Собственно у меня вопрос, как во время тестирования получить гарантированно уникальное число?

 
Francuz:

Пишу робота для тестирования стратегий.

После проведения тестирования автоматически создаётся файл. Так как на каждую итерацию тестирования требуется создать файл с уникальным именем, сперва попробовал решить этот вопрос через глобальную переменную терминала. Оказалось что во время тестирования глобальные переменные терминала не работают (точнее работают, но как локальные переменные). Второй попыткой попытался получить время TimeLocal(), и использовать уникальное число в виде количества секунд, прошедших с 01 января 1970 года. Но при тестировании TimeLocal() возвращает время на момент начала истории тестирования.

Собственно у меня вопрос, как во время тестирования получить гарантированно уникальное число?


Генерируйте GUID.

 

пробовали GetTickCount

 
Vitalii Ananev:

Генерируйте GUID.


Неудобочитаемая вещь. Как быстро ориентироваться в файлах из таких последовательностей 6F9619FF-8B86-D011-B42D-00CF4FC964FF?

 
Alexander Bereznyak:

пробовали GetTickCount


Не будет работать как надо при перезапуске терминала.

 
Francuz:

Пишу робота для тестирования стратегий.

После проведения тестирования автоматически создаётся файл. Так как на каждую итерацию тестирования требуется создать файл с уникальным именем, сперва попробовал решить этот вопрос через глобальную переменную терминала. Оказалось что во время тестирования глобальные переменные терминала не работают (точнее работают, но как локальные переменные). Второй попыткой попытался получить время TimeLocal(), и использовать уникальное число в виде количества секунд, прошедших с 01 января 1970 года. Но при тестировании TimeLocal() возвращает время на момент начала истории тестирования.

Собственно у меня вопрос, как во время тестирования получить гарантированно уникальное число?

создать файл с заранее известным именем а потом переименовать от его времени создания. То есть создаём файл temp-report.csv , считываем его дату-время и переименовываем в 2017.09.27-16.31.csv
 

Для имени файла лучше подойдет порядковый номер итерации, а не случайное число.

 
Francuz:

Не будет работать как надо при перезапуске терминала.

Почему?
 
Maxim Kuznetsov:
создать файл с заранее известным именем а потом переименовать от его времени создания. То есть создаём файл temp-report.csv , считываем его дату-время и переименовываем в 2017.09.27-16.31.csv

Идея конечно хорошая, но https://www.mql5.com/ru/docs/standardlibrary/fileoperations функции работы с файлами не позволяют получить дату создания файла.

Документация по MQL5: Стандартная библиотека / Файлы
Документация по MQL5: Стандартная библиотека / Файлы
  • www.mql5.com
Стандартная библиотека / Файлы - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Slava:
Почему?

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

 
Francuz:

Идея конечно хорошая, но https://www.mql5.com/ru/docs/standardlibrary/fileoperations функции работы с файлами не позволяют получить дату создания файла.

не трогайте каку...:-)

FileGetInteger(fileDescription,FILE_CREATE_DATE)

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