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

 
Если советник требует загрузки ДЛЛ, этот флажок сам не ставит? Дело в expertmode, похоже. И интерфейса не вижу. Код или шаблон самому править надо?
 
traveller00:
Если советник требует загрузки ДЛЛ, этот флажок сам не ставит? Дело в expertmode, похоже. И интерфейса не вижу. Код или шаблон самому править надо?

Выше были примеры с DLL.

 

Хотелось бы уточнить семантику кода возврата метода Parameters. Сейчас при ошибке получения строки с шаблоном, метод возвращает 0. Это предполагает, что 0 означает ошибку.

Во всех остальных случаях возврат дает строка:

Res = (int)EXPERT::StringBetween(Str, EXPERT_FLAGS, STRING_END);

то есть туда попадает значение expertmode из шаблона, которое может быть равно 0 совершенно легально. При этом в других проектах, в частности в Tester, EXPERT используется так:

void OnTimerReal()
{
  ...
  if ((this.Symb += BeginTick) && EXPERT::Parameters(0, Params, Names))
  {
    ... открытие рабочего чарта
  }
}

В результате, если метод возвращает 0, то Tester не работает. А почему? Если флаг реальной торговли сброшен, это не значит, что тестирование должно быть запрещено, имхо. Тем более, Tester в этом случае молча ничего не делает.

 
Stanislav Korotky:

Хотелось бы уточнить семантику кода возврата метода Parameters. Сейчас при ошибке получения строки с шаблоном, метод возвращает 0. Это предполагает, что 0 означает ошибку.

Возвращаемое значение менялось после первых публикаций. Поэтому исторически получилось так, что возвращаемое значение ничего не говорит о том, ошибка там или нет.

Во всех остальных случаях возврат дает строка:

то есть туда попадает значение expertmode из шаблона, которое может быть равно 0 совершенно легально. При этом в других проектах, в частности в Tester, EXPERT используется так:

В результате, если метод возвращает 0, то Tester не работает. А почему? Если флаг реальной торговли сброшен, это не значит, что тестирование должно быть запрещено, имхо. Тем более, Tester в этом случае молча ничего не делает.

По коду, что Вы привели, действительно, работать не будет при отключенной автоторговле. При этом не помню уже, это ошибка или сделано специально. Скорее всего, специально, чтобы можно было DLL подключать.


ЗЫ Надо будет обновить библу. Там сильный выкрутас для совместного использования с Sequence. Поскольку такая возможность нужна только мне, то не в приоритете обновление.

 

Единственный раз, когда конструкция обнаружения бесконечных циклов сработала.

ME      3       15:22:12.123    Message Endless loop:
KS      3       15:22:12.123    Message Expert.mqh
IP      3       15:22:12.123    Message 169
DG      3       15:22:12.123    Message bool EXPERT::TemplateApply(const long,const string&,const bool)
FQ      3       15:22:12.123    Message Condition: !::IsStopped()&&::ChartGetInteger(Chart_ID,CHART_COLOR_STOP_LEVEL,0,Value)&&(!(bool)((int)Value>>24))


Произошло это в Expert.mqh в этом месте.

      while (_CS(!::IsStopped() && ::ChartGetInteger(Chart_ID, CHART_COLOR_STOP_LEVEL, 0, Value) && (!(bool)((int)Value >> 24))))
        ::Sleep(1); // https://www.mql5.com/ru/forum/170952/page190#comment_18830346


Каждый день активно использую Expert.mqh, но первый раз нарвался. Видимо, существует какая-то очень редкая ситуация. Имейте в виду.

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

Hi, thank you EXPER.mqh is amazing.

1. How can I activate "Algo trading" for EA opened with EXPERT::Run(....)

2. I am using the 2019 version. Is there a newer version?

 
upinsa #:

1. How can I activate "Algo trading" for EA opened with EXPERT::Run(....)

Read this.

2. I am using the 2019 version. Is there a newer version?

Last version.


 
static bool GetInputNames( MqlParam &Parameters[], string &InputNames[] )
  {
    const int Size = ::ArraySize(Parameters);
    bool Res = (Size > 1);

    if (Res)
    {
      ::ArrayResize(InputNames, Size - 1);

      for (int i = 1; (i < Size) && Res; i++)
      {
        InputNames[i - 1] = EXPERT::GetInputName(Parameters[i]);
        Res &= (InputNames[i - 1] != NULL);
      }
    }

    return(Res);
  }

input group "【label1】";

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

 
hini #:

input group "【label1】";

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

Если есть проблема, прошу дать готовые mq5-файлы для воспроизведения.