Обсуждение статьи "Создаем помощника в ручной торговле" - страница 4

 
Dmitriy Gizlyk:

Добрый день, Евгений.
Нужно в OnDeinit прописать функцию принудительного удаления панели с графика. Дело в том, что не при смене графика МТ4 инициирует закрытие программы и вызов функции OnDeinit. После первой деинициализации в классе CAppDialog в частную переменную m_deinit_reason прописывается причина деинициализации. Но при смене таймфрейма МТ4 не удаляет класс из памяти. И при последующих попытках удалить паенель, класс считывает значение переменной и так как оно не пустое, ничего не делает

Но более простой и, наверно, более правильный вариант будет объявлять класс панели через ссылку на класс с использованием "*". В таком варианте нужно внести небольшие изменения в код

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

С уважением,
Дмитрий.


Дмитрий, спасибо огромное, второй вариант сработал.))))

 

Здравствуйте Дмитрий!

А не подскажете. Как сделать что бы советник работал в тестере?

Заранее благодарю!

 

Да. Програмка замечательная. Но тоже хотелось бы, чтобы адаптировали к тестеру.
В тестере стратегий не работает OnChartEvent(), но программисты приспосабливают события к OnTick().

Я делал вроде этого...
Вместо:

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {
  if(id==CHARTEVENT_OBJECT_CLICK  &&  sparam==buyBtn  &&  ObjectGetInteger(0,buyBtn,OBJPROP_STATE)==true){...

Такое:

void OnTick() {
if (MQLInfoInteger(MQL_TESTER)  &&  ObjectGetInteger(0,buyBtn,OBJPROP_STATE)==true)

Отловить нажатие кнопки в тестере.

 
здавствуйте коллеги, подскажитеа как правильно обработать событие ON_DBL_CLICK?
 
Dmitriy Gizlyk:
Да, в тестовом режиме MT4 и MT5 не генерируют события для запуска функции OnChartEvent. Но если вы хотите использовать несколько psels в тестовом режиме MT4, вы должны создать функцию для проверки состояния кнопок на каждом тике. Но этот метод не работает в MT5.
Лучшие реестры,
Дмитрий.

А можете подсказать, как это сделать?

На демо и реале все работает. Но мне хотелось бы применить эту панель в тестере стратегий

 
Дмитрий Лазарев:

Да. Програмка замечательная. Но тоже хотелось бы, чтобы адаптировали к тестеру.
В тестере стратегий не работает OnChartEvent(), но программисты приспосабливают события к OnTick().

Я делал вроде этого...
Вместо:

void OnChartEvent(const int id, const long &lparam, const double &dparam, const string &sparam) {
  if(id==CHARTEVENT_OBJECT_CLICK  &&  sparam==buyBtn  &&  ObjectGetInteger(0,buyBtn,OBJPROP_STATE)==true){...

Такое:

void OnTick() {
if (MQLInfoInteger(MQL_TESTER)  &&  ObjectGetInteger(0,buyBtn,OBJPROP_STATE)==true)

Отловить нажатие кнопки в тестере.

Как это сделать в MQL4?
 
Vadim Kazakevich:
Как это сделать в MQL4?

Таким образом можно отследить только нажатие кнопок. Но не получиться отслеживать изменение редактируемых полей.

 
Огромное спасибо за статью!
 

Добрый день!

Как можно ограничить перемещение панели за границы графика?

Например, если панель размещена у правого края графика, то при включении панели навигатора, панель "выезжает" за видимую область. Пример на скриншотах:


1    2

 
Dmitriy Tyunin:

Добрый день!

Как можно ограничить перемещение панели за границы графика?

Например, если панель размещена у правого края графика, то при включении панели навигатора, панель "выезжает" за видимую область. Пример на скриншотах:


   

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