Обсуждение статьи "Универсальный торговый эксперт: индикатор CUnIndicator и работа с отложенными ордерами (часть 9)"

 

Опубликована статья Универсальный торговый эксперт: индикатор CUnIndicator и работа с отложенными ордерами (часть 9):

В статье описана работа с индикаторами через универсальный класс CUnIndicator. Кроме того, рассмотрены новые методы работы с отложенными ордерами. Обратите внимание: с этого момента структура проекта CStrategy существенно изменена. Теперь все его файлы располагаются в единой директории для удобства пользователей.

На скриншоте ниже представлен фрагмент тестирования стратегии CIpmulse 2.0 в тестере стратегий. На нем видны выставленные отложенные ордера и работа с ними:


Рис. 1. Работа с отложенными ордерами в процессе тестирования стратегии Impulse 2.0

Автор: Vasiliy Sokolov

 

просто офигенно! это я про обёртку к индикаторам

в вашем замечательном универсальном эксперте мне лично не хватает только возможности работать на ФОРТС на одном счету множеством разных экспертов, то есть вести учёт позиций по экспертам  по магику, а не стандартными средствами

посему пока обхожусь своими решениями

 
Viktor Vlasenko:

просто офигенно! это я про обёртку к индикаторам

в вашем замечательном универсальном эксперте мне лично не хватает только возможности работать на ФОРТС на одном счету множеством разных экспертов, то есть вести учёт позиций по экспертам  по магику, а не стандартными средствами

посему пока обхожусь своими решениями

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

 
Vasiliy Sokolov:

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

спасибо, почитал про HedgeTerminal - для моих нужд избыточно, да и с чужим закрытым инструментом не хочется работать

и очень понравилось изменение структуры файлов-папок в текущей версии 

 

Под универсальным экспертом вы что понимаете? Кажется, начинали с того, что он и для МТ4, и для МТ5. Но под МТ4 не компилируется и библиотеки там на MQL5 сплошь.

 
void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   for(int i = 0; i < old_size; i++)
      m_params[i+1] = m_params[i];
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name;
}

есть подозрение, что тут весь массив m_params забивается первым поданным на него параметром

 

void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   for(int i = 0; i < old_size; i++)
      m_params[i+1] = m_params[i];
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name;
   m_params_count++;
}

Мне кажется что должно быть так, обратите внимание на m_params_count++; размер массива передаваемых параметров увеличиваем, значит увеличиваем и счетчик передаваемых параметров, по крайней мере при вызове индикатора без параметров сработала именно так. В других случаях похоже последний параметр не воспринимался при запуске индикатора.

 

Да, и в этой же функции:

for(int i = old_size-1; i >= 0; i--)
      m_params[i+1] = m_params[i];

 

Отличная статья.

Когда метод Create в классе CUnIndicator используется для пользовательского индикатора, в коде есть вызов PushName(), который является ошибочной функцией.

При создании пользовательского индикатора первый элемент массива MqlParam parameters_array[] должен содержать имя пользовательского индикатора.

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

Измените следующее:

void CUnIndicator::PushName(string name)
{
   int old_size = ArraySize(m_params);
   int size = ArrayResize(m_params, ArraySize(m_params) + 1);
   //for(int i = 0; i < old_size; i++) m_params[i+1] = m_params[i]; //неправильно писать это так
   for(int i=old_size-1;i>=0;i--) m_params[i+1] = m_params[i]; //Это верно.
   m_params[0].type = TYPE_STRING;
   m_params[0].string_value = name; // Настраиваемое имя индикатора
   m_params_count++;// Количество параметров плюс один 
}
 
Вопрос к автору: Подскажите направление: как сделать индикаторы, вызываемые через CUnIndicat подгружаемыми?
 

Доброго времени.

Вопрос к автору: скачана приложенная к статье последняя версия торгового движка, тестируется приложенная стратегия Impluse 2.0.

1. В тестере стратегий в режиме визуализации должна ли работать панель управления режимами торговли?

2. Должны ли исполняться режимы торговли, заданные через метод  TradeState.SetTradeState ?

При торговле на счете, панель работает и режимы переключаются, а в тестере стратегий нет.