Библиотеки: Expert - страница 7

 
pivomoe:
Не получается запустить советника, в котором используются DLL, с помощью данной библиотеки. В логах DLL loading is not allowed. C этим можно, что-то сделать ?
Params[0].string_value += "\nexpertmode=5"; // Разрешение на использование DLL
 
fxsaber:

Работает. 

 
Проверил работу библиотеки с input group. Все корректно, код менять не понадобилось.
 

Что-то у меня опасение, что принцип использования константы в качестве имени временного шаблона в строке:

#define FILENAME (__FILE__ + ".tpl")

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

По-хорошему нужно генерировать временное имя, желательно вида (было __FILE__, "страйк" в здешнем html не работает)MQL-program-name + timestamp + random.

Также прежние файлы желательно удалять автоматом по таймауту при любом следующем вызове, например, в 1 сутки (за счет анализа части timestamp), чтобы не замусоривали папки.

PS. Дело еще хуже, потому что __FILE__ - это файл исходника и всегда равен Expert.mqh - во всех программах его использующих! Подкорректировал предложение по имени.
 
Stanislav Korotky:

Это было сделано осознанно, взвесив все за и против.

Удалять имеет смысл сразу после создания шаблона, не раз в сутки. Однако, удобно всегда иметь последний сохраненный шаблон, чтобы лучше анализировать происходящее.

 
fxsaber:

Это было сделано осознанно, взвесив все за и против.

Удалять имеет смысл сразу после создания шаблона, не раз в сутки. Однако, удобно всегда иметь последний сохраненный шаблон, чтобы лучше анализировать происходящее.

Что-то не могу привести ни одного "за" для текущего способа. ИМХО, предложил более правильный.

Удалять сразу имеет смысл, если стоит Sync = true (что есть по умолчанию), но оно же сейчас так не реализовано - файл остается.

 
Stanislav Korotky:

Что-то не могу привести ни одного "за" для текущего способа. ИМХО, предложил более правильный.

За - это практическое применение. Запускал Терминал с ранее запущенными советниками, которые при старте сразу лезли в свои шаблоны. Отлично отрабатывали. Уверен, что теоретическую коллизию возможно воспроизвести. Но это далеко от практики в моем случае. Если решитесь городить универсальное решение, поделитесь здесь. Обновлю библу. Сам не готов этим заниматься.

Удалять сразу имеет смысл, если стоит Sync = true (что есть по умолчанию), но оно же сейчас так не реализовано - файл остается.

Да, не удаляю специально.

 
fxsaber:

За - это практическое применение. Запускал Терминал с ранее запущенными советниками, которые при старте сразу лезли в свои шаблоны. Отлично отрабатывали. Уверен, что теоретическую коллизию возможно воспроизвести. Но это далеко от практики в моем случае. Если решитесь городить универсальное решение, поделитесь здесь. Обновлю библу. Сам не готов этим заниматься.

Да, не удаляю специально.

Все равно не понял, чем константное название Expert.mqh.tpl более "практическое" (практичное?), чем шаблоны, названные по имени программы, которые их плодят? Допустим есть программа A.mq5 и B.mq5, использующие библу. Если бы они генерировали шаблоны со своими именами было бы более практично, во-первых, иметь последний "отпечаток" действий _каждой_ программы, а не перезаписывать одно другим. Во-вторых, по имени сразу можно было бы видеть, кто есть генератор (особенно удобно, если программы чужие). Сейчас по файлу Expert.mqh.tpl этого не скажешь, пока внутрь не залезешь. Универсальное решение я привел - брать имя MQL-программы+таймстамп+рандом. И в оставлении файла при sync=true не вижу надобности. Вроде, давно все проверено и отлажено. В случае ошибок и необходимости отладки есть опция sync=false. Тогда файл следует оставлять. По-моему всё логично. И правки простые.

Согласен, что на практике коллизия может возникать редко, если только кто-то не будет использовать библу параллельно в нескольких программах. У меня такого нет, но я просто в код мимоходом глянул, да и за Expert.mqh.tpl глаз в папке Files "зацепился". Всё - сугубое имхо.

 
Stanislav Korotky:

Все равно не понял, чем константное название Expert.mqh.tpl более "практическое" (практичное?), чем шаблоны, названные по имени программы, которые их плодят? Допустим есть программа A.mq5 и B.mq5, использующие библу. Если бы они генерировали шаблоны со своими именами было бы более практично, во-первых, иметь последний "отпечаток" действий _каждой_ программы, а не перезаписывать одно другим. Во-вторых, по имени сразу можно было бы видеть, кто есть генератор (особенно удобно, если программы чужие). Сейчас по файлу Expert.mqh.tpl этого не скажешь, пока внутрь не залезешь. Универсальное решение я привел - брать имя MQL-программы+таймстамп+рандом. И в оставлении файла при sync=true не вижу надобности. Вроде, давно все проверено и отлажено. В случае ошибок и необходимости отладки есть опция sync=false. Тогда файл следует оставлять. По-моему всё логично. И правки простые.

Согласен, что на практике коллизия может возникать редко, если только кто-то не будет использовать библу параллельно в нескольких программах. У меня такого нет, но я просто в код мимоходом глянул, да и за Expert.mqh.tpl глаз в папке Files "зацепился". Всё - сугубое имхо.

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

Совсем не хотел видеть в папке Files зоопарк tpl-файлов. Удалять что-то специально - аналогично. Удалял только здесь.

Возможность вызова DLL в Маркет-продуктах.
Возможность вызова DLL в Маркет-продуктах.
  • 2019.07.20
  • www.mql5.com
Возможно написание EX5 с вызовом DLL, который пройдет все проверки Маркета и будет там опубликован.В прицепе такой EX5-скрипт. Он запускает указанные приложения/документы.В прицепе еще один вариант
 
Vitaly Muzichenko:

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

Имеем скомпилированный советник с названием "Trade.ех4"

Создаём новый советник с названием "Hand.ех4"

Как это совместить, чтобы при запуске "Hand.ех4" полноценно работал "Trade.ех4",   при этом "Trade.ех4" был вшит в "Hand.ех4"

То есть имеем на машине только файл Hand.ех4, а используем в работе Trade.ех4

Спасибо!

Вы нашли решение?

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