Как загрузить файл *.set программно? (Входные параметры советника)

 

Доброго дня! 

Честно просидел час в поиске, но так и не нашел решения.

Задача следующая:

Есть несколько графиков разных валют, на всех стоит один и тот же эксперт.

Входные параметры для каждой валюты свои. Соответственно есть набор пресетов, по 1-му на каждую валюту. 

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

Собственно вопрос: есть ли способ программно (MQL5) загрузить файл пресета в соответствии с Symbol() текущего графика?


p.s: видел варианты решения с парсингом текстовых файлов... но этот тот еще гемор. Валют много, настройки постоянно меняются/добавляются. При парсинге неизбежно что-то с чем-то перепутается... 

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

Файлы:
 
pro100lexx:

Доброго дня! 

Честно просидел час в поиске, но так и не нашел решения.

Задача следующая:

Есть несколько графиков разных валют, на всех стоит один и тот же эксперт.

Входные параметры для каждой валюты свои. Соответственно есть набор пресетов, по 1-му на каждую валюту. 

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

Собственно вопрос: есть ли способ программно (MQL5) загрузить файл пресета в соответствии с Symbol() текущего графика?


p.s: видел варианты решения с парсингом текстовых файлов... но этот тот еще гемор. Валют много, настройки постоянно меняются/добавляются. При парсинге неизбежно что-то с чем-то перепутается... 

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

//+------------------------------------------------------------------+
//| Expert Save settings function                                    |
//+------------------------------------------------------------------+
void SaveSettings()
{
  string file_name = Symbol() + ".dat";
  int file_handle;
  file_handle = FileOpen(file_name, FILE_WRITE|FILE_BIN);
  if(file_handle != INVALID_HANDLE)
  {
    if(FileSeek(file_handle, 0, SEEK_CUR) == true)
    {
      FileWriteLong(file_handle, e_high);
      FileWriteLong(file_handle, a_profit);
      FileWriteLong(file_handle, e_low);
      FileWriteLong(file_handle, ord_delta_high);
      FileWriteLong(file_handle, ord_delta_low);
      FileWriteLong(file_handle, order_delta);
      FileWriteLong(file_handle, exit_delta);
    }
    else
      Print(__FUNCTION__, ": Файл ", Symbol(), ".dat Не установлен в начало!");
    FileClose(file_handle);  
  }
  else
    Print(__FUNCTION__, ": Invalid file handle ", Symbol(), ".dat"); 
}
//+------------------------------------------------------------------+
//| Expert Load setings function                                     |
//+------------------------------------------------------------------+
void LoadSettings()
{
  string file_name = Symbol() + ".dat";
  int file_handle;
  if(FileIsExist(file_name, 0) == true)
  {
    file_handle = FileOpen(file_name, FILE_READ|FILE_BIN);
    if(file_handle != INVALID_HANDLE)
    {
      e_high = FileReadLong(file_handle);
      a_profit = FileReadLong(file_handle);
      e_low = FileReadLong( file_handle );
      ord_delta_high = FileReadLong(file_handle);
      ord_delta_low = FileReadLong(file_handle);
      order_delta = FileReadLong(file_handle);
      exit_delta = FileReadLong(file_handle);
      FileClose(file_handle);
    }
    else
      Print(__FUNCTION__, ": Invalid file handle ", Symbol(), ".dat");
  }
  else
    Print(__FUNCTION__, ": Не найден файл ", Symbol(), ".dat");
}
 
Запись и загрузка переменных в файл
Запись и загрузка переменных в файл
  • 2015.09.02
  • www.mql5.com
Как сделать так, чтобы значения переменных сохранялись после перезапуска эксперта?
 

Судя по требованиям, очень похоже на профиль -- https://www.metatrader5.com/ru/terminal/help/charts_advanced/templates_profiles

Настроить один со всеми чартами и экспертами в одной папке, а во всех копиях терминалов создать ссылки на эту папку \MQL5\Profiles\Charts\номерсчета.

Без программирования.

Шаблоны и профили - Дополнительные возможности - Справка по MetaTrader 5
Шаблоны и профили - Дополнительные возможности - Справка по MetaTrader 5
  • www.metatrader5.com
При наложении шаблона на график записанные настройки применяются к инструменту и периоду. Например, можно создать шаблон, который включает индикаторы MACD, RSI и Moving Average, а затем использовать его для других графиков. В этом случае у окон графиков будет один и тот же вид для разных финансовых инструментов и периодов. Чтобы создать шаблон...
 

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

Библиотеки: Expert

fxsaber, 2019.04.21 09:08

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


Предлагаю для Маркет-ТС использовать следующую логику

  • Добавляется один входной параметр
    input string FolderSets = NULL; // Папка с сетами нашей ТС
  • Если эта папка задана пользователем, то советник автоматом подхватывает все сеты из этой папки и запускает свои соответствующие версии.
  • Пользователю нужно только поместить сет-файл в папку и прописать путь к этой папке при запуске советника (вшить этот путь сразу может и автор советника).
  • Если пользователь ошибся и запускает дважды, то можно автоматически не давать этого делать.

Такой подход удобен и для запуска своих ТС одним нажатием.

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


Скорее всего, именно так теперь буду запускать советники. Если кто-то видит изъян в таком методе или вариант улучшения, дайте знать.


ЗЫ Допустим, у пользователя уже крутятся советники с настроенными параметрами. Можно автоматически сохранить сет-файлы всех запущенных советников. И далее использовать вышестоящий подход.


ЗЗЫ На MT5 возможно запускать советник не через сет-файла, а через opt-файлы. Представьте, что запустили штатную оптимизацию советника и видите несколько хороших наборов входных параметров. Хочется именно их использовать одновременно - размазать риски для диверсификации. Для этого можно создать свой opt-файл, в котором будут присутсвовать только избранные проходы. Можно будет автоматически запускать эти проходы на боевом счету. И допольнительно можно будет этот opt-файл открывать в MT5-тестере и прогонять каждый проход штатными средствами. Т.е. opt-файл становится диверсифицированным набором сет-файлов. Но при этом еще и полноценно читается самим Тестером.


Либо прописать универсальный код в советник, либо написать скрипт-загрузчик любых советников.

 

Лично я в экспертах Лиги ТС (а их без малого 700 штук) все настроечные параметры "забиваю" прямо в код. В результате эксперту все равно, на каком символе он открыт и на каком таймфрейме.  Входных параметров у него нет, ценовые данные он запрашивает сам.

В результате - никаких перепутываний не бывает.

 

Спасибо всем за конструктивные подсказки.

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

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

Судя по всему, библиотека предложенная fxsaber ближе всего в к тому что мне нужно... но с ней надо еще разобраться) 

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

 
pro100lexx:

Спасибо всем за конструктивные подсказки.

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

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

Судя по всему, библиотека предложенная fxsaber ближе всего в к тому что мне нужно... но с ней надо еще разобраться) 

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

Чем профиль не подходит? Это стандартная фича для трейдеров, не требующая программирования.