Заставить работать CExpert <Expert\Expert.mqh>

 

В потомке CExpert  (Expert.mqh) пишем, прямо в конструкторе потомка: Все функции от класса CExpert.

CBatExpert::CBatExpert(void)
{ 
Init(Symbol(),Period(),true,3511);
if(!m_on_tick_process)
      {printf("m_on_tick_process", m_on_tick_process );
      return;};
//--- updated quotes and indicators
   if(!Refresh())
      {printf("Refresh", Refresh());
      return;};
//--- expert processing
   Processing();
double a = Low(1); //хотим получить Low(1)

printf("Low = ", a);}; // нету?? И где???

 Получаем

2016.08.14 19:45:02.877 eBat3.1 (EURUSD,M1)     Low = 

 Ошибок нет, специально printf повставлял. А, вроде, судя по документации по CExpert, все должно быть готово к употреблению.

См. Класс CExpert и его базовый класс CExpertBase


 
Yuriy Asaulenko:

Замените printf -> Print

или прочтите документацию про PrintFormat https://www.mql5.com/ru/docs/common/printformat

 
A100:

Замените printf -> Print

или прочтите документацию про printf 

Легче не стало.

2016.08.14 22:08:36.199 eBat3.1 (EURUSD,M1)     Low = 1.797693134862316e+308

 ))

имхо, с нормальным числом и printf бы справился. 

 
A100:
А если просто

Понятно, что не пролезет, но в порядке бреда попробовал.))

2016.08.14 22:51:02.785 eBat3.1 (EURUSD,M1)     Low = 1.797693134862316e+308
 
Yuriy Asaulenko:

Понятно, что не пролезет, но в порядке бреда попробовал.))

Результат не изменился - значит остальные строки были лишними. Скорее всего там нельзя вызывать Low.

 
A100:

Результат не изменился - значит остальные строки были лишними. Скорее всего там нельзя вызывать Low.

1. Не факт.

2. Можно. Класс CExpert уже инициализирован. Другой вопрос, что истории в буфере нет, несмотря на Refresh и пр.

Скоро тики пойдут, посмотрим. Хотя история д.б. уже буфере.

ЗЫ Тики пошли. Тишина. Без перемен. 

Сделал класс CiClose. Работает. CExpert по прежнему нет.

2016.08.15 02:13:11.946 eBat3.1 (EURUSD,M1)     CiClose Close = 1.11589
2016.08.15 02:13:11.946 eBat3.1 (EURUSD,M1)     Low = 1.797693134862316e+308
2016.08.15 02:13:10.901 eBat3.1 (EURUSD,M1)     CiClose Close = 1.1159
2016.08.15 02:13:10.901 eBat3.1 (EURUSD,M1)     Low = 1.797693134862316e+308
2016.08.15 02:13:10.101 eBat3.1 (EURUSD,M1)     CiClose Close = 1.11591

 (

 

Сильно не разбирался, но по-моему, вы неправильно используете конструктор.

Конструктор глобального объекта вызывается на стадии инициализации программы, когда еще никаких данных может и не быть.

А вы в нем - уже и рефреш, и процессинг проводите...

 
George Merts:

Сильно не разбирался, но по-моему, вы неправильно используете конструктор.

Конструктор глобального объекта вызывается на стадии инициализации программы, когда еще никаких данных может и не быть.

А вы в нем - уже и рефреш, и процессинг проводите...

Правильно. Объект готов к употреблению сразу после создания и конфигурации. Рефреш - предназначен для обновления данных. После него должно читаться. Процессинг там действительно ни к чему, но и не мешает.)

Как вы читали, уже и живые тики ничего не дали.

Похоже на форуме никто этот CExpert вообще не применял. )) Я тоже больше на него время  терять не буду. Идея применения готового шаблона для создания собственной стратегии не м.б. реализована из-за отсутствия шаблона.  Знакомство с MQ ООП не состоялось. )

Придется все с нуля. 

 
printf("Low = ", a); // нету?? И где???

Хороший вопрос. Где? Где в выводимой строке обозначено место для вывода переменной?

Вот так как-нибудь:

printf("Low = %f", a);
 
Dmitry Fedoseev:

Хороший вопрос. Где? Где в выводимой строке обозначено место для вывода переменной?

Вот так как-нибудь:

 printf уже неактуально.

Уже сделано Print("Low = ", a); См. 2-3 посты. Результата нет.

С тиками результата тоже нет. См. вывод тиков выше. Хотя повторю,

2016.08.15 02:13:11.946 eBat3.1 (EURUSD,M1)     CiClose Close = 1.11589
2016.08.15 02:13:11.946 eBat3.1 (EURUSD,M1)     Low = 1.797693134862316e+308
2016.08.15 02:13:10.901 eBat3.1 (EURUSD,M1)     CiClose Close = 1.1159
2016.08.15 02:13:10.901 eBat3.1 (EURUSD,M1)     Low = 1.797693134862316e+308
2016.08.15 02:13:10.101 eBat3.1 (EURUSD,M1)     CiClose Close = 1.11591

 Нормальный вывод - класс CiClose.

 

Выводите в принт Low(1), а не переменную 'a' - сейчас не понятно, как она может выводиться на тиках, если определена, судя по показанному исходнику, локально в конструкторе.

Сейчас принт выводит EMPTY_VALUE - похоже, что переменная один раз заполнилась при создании экземпляра (когда данных еще нет) и так и осталась не обновленной.

Причина обращения: