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

 
fxsaber:

Не понимаю, почему не ясна задача: Если изменился советник - изменить название файла.

Вообще не понимаю проблемы.
Включить как ресурс исходник самого советника .mq5 файл и брать от него хеш.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4, помощь и обсуждение по алгоритмам и кодам".
 
Sergey Dzyublik:

Вообще не понимаю проблемы.
Включить как ресурс исходник самого советника .mq5 файл и брать от него хеш.

Так доступа (байты для вычисления хеша) к включенному EX5 не будет.

 
fxsaber:

Так доступа (байты для вычисления хеша) к включенному EX5 не будет.

Все работает:

#resource "\\Experts\\Advisors\\ExpertMACD.ex5" as uchar ex5_data[];


А при чем тут ex5, если вы говорили про изменение кода, которое лучше ослеживать по .mq5?
Такое впечатление что вы сами не понимаете, что в конечном итоге вам надо.
 
Sergey Dzyublik:

А при чем тут ex5, если вы говорили про изменение кода, которое лучше ослеживать по .mq5?

Такое впечатление что вы сами не понимаете, что в конечном итоге вам надо.

Ну так написал же, куда же подробнее?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2019.04.23 06:15

Есть такой советник

void OnDeinit( const int )
{
  int Array[] = {123};
  
  FileSave((string)MQLInfoInteger(MQL_PROGRAM_HASH), Array);
}


Когда делаю проход, пишется файл с одним и тем же названием. Это правильно.


Затем перекомпилирую, прописав вместо 123 число 456.

После этого каждый проход будет писать соответствующий один и тот же файл, но уже с другим названием.


Вот такой функционал и нужно как-то реализовать. Т.е. если EX5 поменялся, то и создаваемые им названия файлов меняются.


ЗЫ Использование макроса __DATETIME__ не подходит.


Есть mq5, который создает файл с Name1. Меняю какое-нибудь число в mq5. Должен генерироваться Name2. Поменял еще что-нибудь в коде - Name3. И т.д.

 
fxsaber:

Ну так написал же, куда же подробнее?


Есть mq5, который создает файл с Name1. Меняю какое-нибудь число в mq5. Должен генерироваться Name2. Поменял еще что-нибудь в коде - Name3. И т.д.

Подключите исходник в формате .mq5 как ресурс и читайте хеш от содержимого исходника.
Если поменяете исходник, то при компиляции автоматом подтянется новый исходник в качестве ресурса и будет рассчитан новый хеш.
Что тут сложного?

 
Sergey Dzyublik:

Подключите исходник в формате .mq5 как ресурс и читайте хеш от содержимого исходника.
Если поменяете исходник, то при компиляции автоматом подтянется новый исходник в качестве ресурса и будет рассчитан новый хеш.
Что тут сложного?

Если в исходник добавлен комментарий, то от этого логика советника не меняется. Т.е. это один и тот же советник.

Вы и Игорь предлагаете наикостыльнейшие решения. Самое элементарное - дать хэш самого себя. Путь на самого себя дается. Хэш - по какой-то причине зажимается.
 
fxsaber:

Т.е. если EX5 поменялся, то и создаваемые им названия файлов меняются.

EX5 меняется при каждой компиляции. Почему тогда время компиляции не может служить уникальным именем?

 
fxsaber:

 Самое элементарное - дать хэш самого себя. Путь на самого себя дается. Хэш - по какой-то причине зажимается.

Ваша задача похожа на головоломку на форумах "по изучению защит ПО", обычно это звучит "как сделать запись исполняемого файла в другую папку после запуска"

обычно после запуска исполняемого файла операционка блокирует доступ к этому файлу до завершения работы приложения, думаю такая же ситуация и с исполняемым файлом .ex5 - пока он запущен к нему доступ запрещен

ЗЫ: я по другому не умею, меня так учили - дробить задачу на более мелкие, вот и предложил разнести на 2 модуля - один исполняемый, второй для записи в файлы, можно же и 3 модуля (библиотеки) подключить

 
Igor Makanu:

обычно после запуска исполняемого файла операционка блокирует доступ к этому файлу до завершения работы приложения, думаю такая же ситуация и с исполняемым файлом .ex5 - пока он запущен к нему доступ запрещен

Нет, он в памяти. Файл можно даже удалить, работе не навредит.