Библиотеки: Expert - страница 11 1...45678910111213 Новый комментарий fxsaber 2020.09.22 19:12 #101 Если знаете названия входных, то лучше второй вариант. Он позволяет не думать о порядке входных в советнике. И технически лучше реализован. #include <fxsaber\Expert.mqh> void OnStart() { MqlParam Params[2]; // Путь к советнику Params[0].string_value = "Experts\\Test6.ex5"; Params[0].string_value += "\nexpertmode=5"; Params[1].type = TYPE_INT; Params[1].integer_value = 123423; EXPERT::AddInputName(Params[1], "inpFirst"); EXPERT::Run(0, Params); } Несмотря на то, что по порядку inpFirst второй, его можно задать любым (в данном случае задан первым и единственным). Что не заданы - будут по-умолчанию. Изменить таймфрейм графика 5 EA на одном Тестируем графический СОВЕТНИК. fxsaber 2020.09.29 18:51 #102 Для экспериментов понадобилось клонировать робота на несколько чартов. Делал через такую функцию. #include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003 // Копирует запущенный советник с текущими настройками с одного чарта на другой bool ExpertFromTo( const long ChartSource, const long ChartTarget ) { bool Res = false; MqlParam Params[]; string Names[]; const int ExpertMode = EXPERT::Parameters(ChartSource, Params, Names); const int Size = ArraySize(Params); if (Size) { Params[0].string_value += "\nexpertmode=" + (string)ExpertMode; for (int i = 1; i < Size; i++) EXPERT::AddInputName(Params[i], (Names[i - 1] == NULL) ? " " : Names[i - 1]); Res = EXPERT::Run(ChartTarget, Params); } return(Res); } Применял так. #property script_show_inputs input int inAmount = 5; // Сколько клонов void OnStart() { const int Size = SymbolsTotal(true); if (Size > inAmount) for (int i = 0, Count = 0; i < Size; i++) { const string Symb = SymbolName(i, true); if (Symb != _Symbol) { ExpertFromTo(0, ChartOpen(Symb, PERIOD_CURRENT)); // Текущий советник запускаем на новых чартах-символах. Count++; if (Count == inAmount) break; } } } fxsaber 2020.10.09 04:55 #103 Возникает задача перезапустить десяток разных советников далеко не на одном Терминале. В общем, большая рутина. Например, подправили что-то. Далее пакетная компиляция в ME и перезапуск. Для него использую такой скрипт. // Перезагружает советники на всех чартах. input int inInterval = 5; // Интервал в секундах между перезапусками чартов bool ReloadChart( const long Chart ) { return (ChartSaveTemplate(Chart, "\\Files\\" + __FILE__ + ".tpl") && ChartApplyTemplate(Chart, "\\Files\\" + __FILE__ + ".tpl") && // Поставили задание в очередь чарта. ChartGetInteger(Chart, CHART_WINDOW_HANDLE)); // Заставляем двигаться очередь. } void OnStart() { const long chartID = ::ChartID(); for (long Chart = ChartFirst(); (Chart != -1) && !IsStopped(); Chart = ChartNext(Chart)) if ((Chart != chartID) && (ChartGetString(Chart, CHART_EXPERT_NAME) != NULL) && (ReloadChart(Chart))) Sleep(inInterval * 1000); } Важное место в коде выделил. Без него применение шаблона не будет до окончания работы скрипта. По аналогии можно решать запуск советников после перегрузки Терминала и т.д. Особенности языка mql5, тонкости Старая идея. Нужен Советник. локализация mql4 input параметров Vladimir Pastushak 2020.10.09 08:57 #104 fxsaber: Возникает задача перезапустить десяток разных советников далеко не на одном Терминале. В общем, большая рутина. Например, подправили что-то. Далее пакетная компиляция в ME и перезапуск. Для него использую такой скрипт. Важное место в коде выделил. Без него применение шаблона не будет до окончания работы скрипта. По аналогии можно решать запуск советников после перегрузки Терминала и т.д. Будет полный комплект если можно будет получить имя советника на указанном чарте. Если Вас не затруднит, допилите. fxsaber 2020.10.09 09:05 #105 Vladimir Pastushak: Будет полный комплект если можно будет получить имя советника на указанном чарте. Если Вас не затруднит, допилите. ChartGetString(Chart, CHART_EXPERT_NAME) Это MT5. Если нужно кроссплатформенно или полный путь к советнику, то через Expert.mqh. Vladimir Pastushak 2020.10.09 09:52 #106 fxsaber: Это MT5. Если нужно кроссплатформенно или полный путь к советнику, то через Expert.mqh. Нужно крос платформено... fxsaber 2020.10.09 10:12 #107 Vladimir Pastushak: Нужно крос платформено... Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий Библиотеки: Expert fxsaber, 2019.09.12 06:17 #include <fxsaber\Expert.mqh> // https://www.mql5.com/ru/code/19003 // Выводит данные запущенного советника string EAToString( const long Chart_ID = 0 ) { string Names[]; MqlParam Params[]; const int Flag = EXPERT::Parameters(Chart_ID, Params, Names); const int Size = ArraySize(Names); string Str = "Expert " + Params[0].string_value + ", expertmode = " + (string)Flag; for (int i = 0; i < Size; i++) Str += "\n" + Names[i] + " = " + Params[i + 1].string_value; return(Str); } fxsaber 2020.10.14 17:07 #108 // Делает файловую input-переменную равной выбранному файлу. bool FileDialogToInput( const string InputName, const long Chart = 0 ) { string FileNames[]; const bool Res = (FileSelectDialog(MQLInfoString(MQL_PROGRAM_NAME) + " " + _Symbol + " " + EnumToString(_Period) + ": input string " + InputName + " = ", NULL, NULL, FSD_FILE_MUST_EXIST, FileNames, NULL) > 0); if (Res) { MqlParam Params[]; string Names[]; const int ExpertMode = EXPERT::Parameters(Chart, Params, Names); const int Size = ArraySize(Params); if (Size) { Params[0].string_value += "\nexpertmode=" + (string)ExpertMode; for (int i = 1; i < Size; i++) { if (Names[i - 1] == InputName) Params[i].string_value = FileNames[0]; EXPERT::AddInputName(Params[i], (Names[i - 1] == NULL) ? " " : Names[i - 1]); } EXPERT::Run(Chart, Params); } } return(Res); } Эта функция позволяет выбрать файл в качестве входной переменной. Такая реализация. input string inFileName = NULL; // Выбранный файл #define TOSTRING(A) #A int OnInit() { if (!FileIsExist(inFileName)) return(FileDialogToInput(TOSTRING(inFileName)) || INIT_FAILED); // Код, если задан корректный файл в input-переменной. return(INIT_SUCCEEDED); } Запуск. Жмем OK и выбираем. Жмем Открыть и смотрим свойства (F7) запущенного советника. ЗЫ Аналогично будет пахать с любым количеством файлов. input string inFileName1 = NULL; // Выбранный файл1 input string inFileName2 = NULL; // Выбранный файл2 #define TOSTRING(A) #A int OnInit() { if (!FileIsExist(inFileName1)) return(FileDialogToInput(TOSTRING(inFileName1)) || INIT_FAILED); if (!FileIsExist(inFileName2)) return(FileDialogToInput(TOSTRING(inFileName2)) || INIT_FAILED); // Код, если задан корректный файл в input-переменной. return(INIT_SUCCEEDED); } traveller00 2020.11.23 17:29 #109 А загрузка параметров из set-файлов пока не поддерживается, как я понимаю? fxsaber 2020.11.23 17:34 #110 traveller00: А загрузка параметров из set-файлов пока не поддерживается, как я понимаю? Не делал. Но там очень просто. 1...45678910111213 Новый комментарий
Несмотря на то, что по порядку inpFirst второй, его можно задать любым (в данном случае задан первым и единственным). Что не заданы - будут по-умолчанию.
Применял так.
Возникает задача перезапустить десяток разных советников далеко не на одном Терминале. В общем, большая рутина.
Например, подправили что-то. Далее пакетная компиляция в ME и перезапуск. Для него использую такой скрипт.
Важное место в коде выделил. Без него применение шаблона не будет до окончания работы скрипта. По аналогии можно решать запуск советников после перегрузки Терминала и т.д.
Возникает задача перезапустить десяток разных советников далеко не на одном Терминале. В общем, большая рутина.
Например, подправили что-то. Далее пакетная компиляция в ME и перезапуск. Для него использую такой скрипт.
Важное место в коде выделил. Без него применение шаблона не будет до окончания работы скрипта. По аналогии можно решать запуск советников после перегрузки Терминала и т.д.
Будет полный комплект если можно будет получить имя советника на указанном чарте. Если Вас не затруднит, допилите.
Будет полный комплект если можно будет получить имя советника на указанном чарте. Если Вас не затруднит, допилите.
Это MT5. Если нужно кроссплатформенно или полный путь к советнику, то через Expert.mqh.
Это MT5. Если нужно кроссплатформенно или полный путь к советнику, то через Expert.mqh.
Нужно крос платформено...
Нужно крос платформено...
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: Expert
fxsaber, 2019.09.12 06:17
Эта функция позволяет выбрать файл в качестве входной переменной. Такая реализация.
Запуск.
Жмем OK и выбираем.
Жмем Открыть и смотрим свойства (F7) запущенного советника.
ЗЫ Аналогично будет пахать с любым количеством файлов.
А загрузка параметров из set-файлов пока не поддерживается, как я понимаю?
Не делал. Но там очень просто.