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

 

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

Также хотелось бы знать реальные типы параметров, сейчас везде возвращается "строка". Не знаю, как это обеспечить - способ в лоб: анализировать содержимое строки и её приводимость в числу с плавающей точкой или целому, но если в параметре хранится "0", то его тип не получится идентифицировать.

 
Stanislav Korotky:

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

Да, не очень красиво. Возможно, надо было делать фейковый нулевой элемент для Names[].

Также хотелось бы знать реальные типы параметров, сейчас везде возвращается "строка". Не знаю, как это обеспечить - способ в лоб: анализировать содержимое строки и её приводимость в числу с плавающей точкой или целому, но если в параметре хранится "0", то его тип не получится идентифицировать.

Посчитал это лишним в библиотеке, т.к. бывают еще кастомные ENUM-ы. Более того, не увидел задачи, в которой это могло бы быть нужным.

Свой автооптимизатор делал. Там такое не пригодилось.

 
fxsaber:

Да, не очень красиво. Возможно, надо было делать фейковый нулевой элемент для Names[].

Посчитал это лишним в библиотеке, т.к. бывают еще кастомные ENUM-ы. Более того, не увидел задачи, в которой это могло бы быть нужным.

Свой автооптимизатор делал. Там такое не пригодилось.

Функции ParameterGetRange/ParameterSetRange определены только для типов long и double, соответственно в цикле по параметрам требует анализировать и менять настройки только для чисел.

 
Stanislav Korotky:

Функции ParameterGetRange/ParameterSetRange определены только для типов long и double, соответственно в цикле по параметрам требует анализировать и менять настройки только для чисел.

Целыми типами являются bool, enums.

 
fxsaber:

Целыми типами являются bool, enums.

Это нормально. Ненормально, что сейчас всё представлено строками и нельзя отсеять настоящие строки.

 
Stanislav Korotky:

Это нормально. Ненормально, что сейчас всё представлено строками и нельзя отсеять настоящие строки.

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

 

Привет не могу понять как открыть на эксперт с разрешонной торговлей

такой код открывает нормально с инпутами которые передаю

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
// Первый входной параметр советника
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// На новом чарте запускаем советник
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

если я использую такой код 

   Params[0].string_value = "Experts\\Shared Projects\\luipaulo89\\experts\\PullbackEA_v2.ex5";
   Params[0].string_value += "\nexpertmode=5";
// Первый входной параметр советника
   Params[1].type = TYPE_STRING;
   Params[1].string_value = "Hello World!";
   Params[2].type = TYPE_INT;
   Params[2].integer_value = 0;
// На новом чарте запускаем советник
   if (inpFirst==1) EXPERT::Run(ChartOpen(_Symbol, _Period), Params);

он открывает с разрешонной торговлей но не передает параметры

Задача окрыть тогоже самого эксперта на новом чарте

input group "EA Settings"
input int inpFirst = 1;//first instance;

что бы только первый эксперт мог открывать новые передаю 0  в новые , но к сожалению во втором варианте (когда торговля разрешенна) не передаются параметры (или передаются не правильно)

inpFirst = 0;
 

в tpl файле заголовок создает отлично но почемуто не передает параметр

<expert>
name=PullbackEA_v2
path=Experts\Shared Projects\luipaulo89\experts\PullbackEA_v2.ex5
expertmode=5
<inputs>
inpFirst=1

ожидалось что будет inpFirst=0

   Params[1].type = TYPE_INT;
   Params[1].integer_value = 0;
 
Aleksei Beliakov:

Обновите библиотеку.

Тестовый советник.

input group "EA Settings"
input int inpFirst = 1;//first instance;

void OnInit() {}


Пример1.

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // Путь к советнику
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";

  // input group "EA Settings"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;

  // input int inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;

  EXPERT::Run(ChartOpen(_Symbol, PERIOD_CURRENT), Params); // Не сможет корректно запустить советник на своем же чарте
}


Пример2.

#include <fxsaber\Expert.mqh>

void OnStart()
{
  MqlParam Params[3];

  // Путь к советнику
  Params[0].string_value = "Experts\\Test6.ex5";
  Params[0].string_value += "\nexpertmode=5";
  
  // input group "EA Settings"
  Params[1].type = TYPE_STRING;
  Params[1].string_value = NULL;
  EXPERT::AddInputName(Params[1], " "); // Пробел.

  // input int inpFirst
  Params[2].type = TYPE_INT;
  Params[2].integer_value = 123;
  EXPERT::AddInputName(Params[2], "inpFirst");

  EXPERT::Run(0, Params); // Сможет корректно запустить советник на своем же чарте.
}
 
Спасибо ты как всегда лучший!!!