Запуск эксперта из эксперта

 

Добрый день!

Есть советник, который работает с разными настройками на разных инструментах. При каждом обновлении сервера, терминала или новой версии советника мне приходится руками перезапускать все экземпляры, да еще и в нескольких терминалах. Иногда эта рутина ведет к ошибкам. Хочу это автоматизировать, сделать что-то типа мастер-эксперта, который я запускаю,  а он уже запускает всех остальных, скармливает им нужные настройки, проверяет правильность версии и прочее. Короче DevOps :)

Буду благодарен за идеи или опыт решения подобных задач.

 
AlexInRush:

Добрый день!

Есть советник, который работает с разными настройками на разных инструментах. При каждом обновлении сервера, терминала или новой версии советника мне приходится руками перезапускать все экземпляры, да еще и в нескольких терминалах. Иногда эта рутина ведет к ошибкам. Хочу это автоматизировать, сделать что-то типа мастер-эксперта, который я запускаю,  а он уже запускает всех остальных, скармливает им нужные настройки, проверяет правильность версии и прочее. Короче DevOps :)

Буду благодарен за идеи или опыт решения подобных задач.

Самый простой способ - что бы ваш установленный эксперт, после того как он выполнил свою задачу, передал другому эксперту работу .

Функция смена шаблона Графика - перед этим Вам нужно сохранить Эксперта на шаблоне уже с другими настройками.

 
SanAlex:

Самый простой способ - что бы ваш установленный эксперт, после того как он выполнил свою задачу, передал другому эксперту работу .

Функция смена шаблона Графика - перед этим Вам нужно сохранить Эксперта на шаблоне уже с другими настройками.

Спасибо за идею. Я даже не знал, что эксперт на шаблоне сохраняется. Из хорошего: появляется возможность сделать это все заранее,  в удобное время,  а переход произойдет автоматически в нужный момент времени. Но все же, надо руками подготавливать шаблоны, раскладывать их по терминалам. В плане ручного труда ничего не выигрываем.

 
AlexInRush:

Спасибо за идею. Я даже не знал, что эксперт на шаблоне сохраняется. Из хорошего: появляется возможность сделать это все заранее,  в удобное время,  а переход произойдет автоматически в нужный момент времени. Но все же, надо руками подготавливал заранее шаблоны, раскладывал их по терминалам. В плане ручного труда ничего не выигрываем.

Вот сама Функция  - это сработает и сменит только на том, где стоит.

//+------------------------------------------------------------------+
//|                                                          tpl.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---
sinput ENUM_TIMEFRAMES TimeFrame  = PERIOD_CURRENT; // Change TimeFrame - Current = dont changed
sinput string          Template_1 = "Momentum";     // Имя шаблона(without '.tpl')
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   DeleteChart_1();
  }
//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart_1(void)
  {
   long prevChart=0;
   bool errTemplate;
   if(TimeFrame!=PERIOD_CURRENT)
     {
      ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame);
     }
   errTemplate=ChartApplyTemplate(prevChart,Template_1+".tpl");
   if(!errTemplate)
     {
      Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError());
     }
  }
//+------------------------------------------------------------------+
 

если так, сменит все открытые графики 

//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void CSampleExpert::DeleteChart(void)
  {
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   bool errTemplate;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(TimeFrame!=PERIOD_CURRENT)
        {
         ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame);
        }
      errTemplate=ChartApplyTemplate(prevChart,Template+".tpl");
      if(!errTemplate)
        {
         Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError());
        }
      if(currChart<0)
         break;
      Print(i,ChartSymbol(currChart)," ID =",currChart);
      prevChart=currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+
 
SanAlex:

Вот сама Функция  - это сработает и сменит только на том, где стоит.

Спасибо. С этим вариантом все понятно.

 
SanAlex:

если так, сменит все открытые графики 

О! Ты натолкнул меня на мысль. Шаблон ведь обычный текстовый файл. Я могу из эксперта сам его сгенерировать для каждого инструмента, прописать туда все что  я хочу запустить, все настройки и перейти на этот шаблон. Вот это уже будет полная автоматизация.

 
AlexInRush:

Спасибо. С этим вариантом все понятно.

Тут можно выбрать на всех(true) или на текущем (false)

//+------------------------------------------------------------------+
//|                                                          tpl.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property script_show_inputs
//---
sinput ENUM_TIMEFRAMES TimeFrame  = PERIOD_CURRENT; // Change TimeFrame - Current = dont changed
sinput string          Template_1 = "Momentum";     // Имя шаблона(without '.tpl')
sinput bool            fyn        = false;          // Vse --> true
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   if(fyn)
     {
      DeleteChart();
     }
   if(!fyn)
     {
      DeleteChart_1();
     }
  }
//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart_1(void)
  {
   long prevChart=0;
   bool errTemplate;
   if(TimeFrame!=PERIOD_CURRENT)
     {
      ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame);
     }
   errTemplate=ChartApplyTemplate(prevChart,Template_1+".tpl");
   if(!errTemplate)
     {
      Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError());
     }
  }
//+------------------------------------------------------------------+
//| start function                                                   |
//+------------------------------------------------------------------+
void DeleteChart(void)
  {
   long currChart,prevChart=ChartFirst();
   int i=0,limit=100;
   bool errTemplate;
   while(i<limit)
     {
      currChart=ChartNext(prevChart);
      if(TimeFrame!=PERIOD_CURRENT)
        {
         ChartSetSymbolPeriod(prevChart,ChartSymbol(prevChart),TimeFrame);
        }
      errTemplate=ChartApplyTemplate(prevChart,Template_1+".tpl");
      if(!errTemplate)
        {
         Print("Error ",ChartSymbol(prevChart),"-> ",GetLastError());
        }
      if(currChart<0)
         break;
      Print(i,ChartSymbol(currChart)," ID =",currChart);
      prevChart=currChart;
      i++;
     }
  }
//+------------------------------------------------------------------+
 
AlexInRush:

О! Ты натолкнул меня на мысль. Шаблон ведь обычный текстовый файл. Я могу из эксперта сам его сгенерировать для каждого инструмента, прописать туда все что  я хочу запустить, все настройки и перейти на этот шаблон. Вот это уже будет полная автоматизация.

А положить его туда куда нужно сможете без dll? )

 
Alexandr Bryzgalov:

А положить его туда куда нужно сможете без dll? )

Так зачем, всё сохраняется по умолчанию в своих местах. Шаблон с экспертом сохраняете, только нужно перед сохранением, настроить как вам нужно эксперта.

EURUSDM1 шаблон  вот настроили эксперта - и сохранили под именем 1. Шаблон и так можно до бесконечности, настроили задали имя 2.

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

как я его использую - сохранил эксперта с настройками, у меня к примеру открыто 20 графиков - нажал на кнопку, на всех открытых графиках установится эксперт.

или ещё при достижение общей прибыли - сменит шаблон уже с другой настройкой и другой  сумой прибыли. 

 
AlexInRush:

Буду благодарен за идеи или опыт решения подобных задач.

Expert

Expert
Expert
  • www.mql5.com
Библиотека чтения/записи параметров произвольных советников.