Вопросы от "чайника" - страница 7

 
kPVT:

Имеется эксперт с помощью которого пытаюсь разобраться с событиями.

Получаю не соответствующие действиям события.

Точно соответствует клик на графике и нажатие кнопки

Спорное событие id=9 (CHARTEVENT_CUSTOM) которое генерируется например при смещении графика причем потоком примерно 10 одинаковых событий.

Не проверил событие CHARTEVENT_OBJECT_ENDEDIT.

С остальными все не понятно. То ли описание не соответствует номеру события, то ли событие например создания объекта генерируется неправильно при создании объекта в ручную.

В общем прошу помощи. 

Лучше вот так:

//+------------------------------------------------------------------+
//| Expert chart event function                                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,         // идентификатор события  
                  const long& lparam,   // параметр события типа long
                  const double& dparam, // параметр события типа double
                  const string& sparam) // параметр события типа string
  {
   string str_id="";
   switch(id)
     {
      case CHARTEVENT_KEYDOWN:          str_id="KEYDOWN";        break;
      case CHARTEVENT_OBJECT_CREATE:  str_id="OBJECT_CREATE";  break;
      case CHARTEVENT_OBJECT_CHANGE:  str_id="OBJECT_CHANGE";  break;
      case CHARTEVENT_OBJECT_DELETE:  str_id="OBJECT_DELETE";  break;
      case CHARTEVENT_CLICK:            str_id="CLICK";          break;
      case CHARTEVENT_OBJECT_CLICK:      str_id="OBJECT_CLICK";   break;
      case CHARTEVENT_OBJECT_DRAG:       str_id="OBJECT_DRAG";    break;
      case CHARTEVENT_OBJECT_ENDEDIT:    str_id="OBJECT_ENDEDIT"; break;
      case CHARTEVENT_CHART_CHANGE:      str_id="CHART_CHANGE";   break;
      default:
         if(id>CHARTEVENT_CUSTOM)       str_id="CUSTOM+"+IntegerToString(id-CHARTEVENT_CUSTOM);
         else                         str_id="UNKNOWN";
     }
//--- для отладки
   printf("ChartEvent :id=%s, l=%d d=%f s=%s",str_id,lparam,dparam,sparam);
//---
   ExtExpertPrg.ChartEvent(id,lparam,dparam,sparam);
  }
 

Наверняка я делаю, что то не так, но попробую более подробно описать почему у меня возникло непонимание.

AlexSTAL:

Вы изначально присваиваете уже назначенным числовым константам CHARTEVENT_XXXXXXXX свои числовые соответствия...

Где посмотреть какое числовое значение имеют константы  CHARTEVENT_XXXXXXX ?

Я не нашел, поэтому экспериментируя выяснил, что CHARTEVENT_KEYDOWN = 0,  а   CHARTEVENT_CLICK = 4, что соответствует очередности описания данных констант в справке.

Остальным событиям я присвоил номера соответственно, так и получился массив event[10]. 

Rosh:

К сожалению, Ваш вопрос непонятен. Что конкретно работает не так?

 Исходя из моей нумерации событий и используя эксперт из моего предыдущего поста:

Например рисую трендовую линию -> событие CHARTEVENT_OBJECT_CHANGE,

перемещаю эту линию -> событие тоже  CHARTEVENT_OBJECT_CHANGE,

изменяю свойства через меню -> 2 события CHARTEVENT_CHART_CHANGE и CHARTEVENT_CUSTOM, 

удаляю ее нажатием Del -> событие только CHARTEVENT_KEYDOWN, (если нумерация событий неправильная то все равно должно быть 2 события, удаление и нажатие кнопки).

Все это исходя из моей нумерации.  

Далее...

Использую эксперт uncleVic:

Рисую трендовую линию -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

перемещаю эту линию -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716

изменяю свойства через меню -> ChartEvent :id=OBJECT_CHANGE, l=0 d=0.000000 s=H1 Trendline 40716    и  ChartEvent :id=CHART_CHANGE, l=0 d=0.000000 s=

удаляю ее нажатием Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=

Ситуация не прояснилась.

На всякий случай:

МТ5  64х -  билд 458.

Система - W7 64x Домашняя расширенная.

 

Спасибо за отзывчивость ))




Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Типы событий графика - Документация по MQL5
 
kPVT:

Наверняка я делаю, что то не так, но попробую более подробно описать почему у меня возникло непонимание.

Где посмотреть какое числовое значение имеют константы  CHARTEVENT_XXXXXXX ?

Я не нашел, поэтому экспериментируя выяснил, что CHARTEVENT_KEYDOWN = 0,  а   CHARTEVENT_CLICK = 4, что соответствует очередности описания данных констант в справке.

Остальным событиям я присвоил номера соответственно, так и получился массив event[10].

Так нельзя делать ни в коем случае!

Числовые значения присваивает разработчик и может их изменить в любое время.

Можно использовать только символьные константы

--------------

uncleVic привёл Вам пример правильного использования (ну или мой кусок из справки)

--------------

Вы что делаете то? Зачем Вам числовое представление могло понадобится?

 
AlexSTAL:

Так нельзя делать ни в коем случае!

Числовые значения присваивает разработчик и может их изменить в любое время.

Можно использовать только символьные константы

ОК. Я согласен, что так нельзя делать.

Забудем про мои рукоблудия ).

Идем далее.. 

AlexSTAL:

uncleVic привёл Вам пример правильного использования (ну или мой кусок из справки)

 Как написал выше, используя пример uncleVic получаются также не соответствующие действиям события.

 kPVT:

Рисую трендовую линию -> ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=H1 Trendline 40716       Вместо  CHARTEVENT_OBJECT_CREATE.

.....

удаляю ее нажатием Del -> ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=        Вместо CHARTEVENT_OBJECT_DELETE и затем CHARTEVENT_KEYDOWN

 

AlexSTAL:

Вы что делаете то? Зачем Вам числовое представление могло понадобится?

 Долго объяснять, да это и не важно. Давайте забудем про мою нумерацию.

Главное, что я пытаюсь разобраться с событиями, но даже использую пример uncleVic не понимаю не соответствия генерируемых событий производимым действиям.

 
kPVT:

ОК. Я согласен, что так нельзя делать.

Забудем про мои рукоблудия ).

Идем далее.. 

 Как написал выше, используя пример uncleVic получаются также не соответствующие действиям события.

 kPVT:


Добавьте в инициализацию:

   ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
   ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);

Будет у Вас всё тип-топ:

Создание:
DS      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_CREATE, l=0 d=0.000000 s=M30 Horizontal Line 58241
DG      0       _err (EURUSD,M30)       17:13:18        ChartEvent :id=OBJECT_DRAG, l=0 d=0.000000 s=M30 Horizontal Line 58241
Удаление кл. Del:
EH      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=OBJECT_DELETE, l=0 d=0.000000 s=M30 Horizontal Line 58241
QD      0       _err (EURUSD,M30)       17:13:21        ChartEvent :id=KEYDOWN, l=46 d=0.000000 s=
 

Алекс спасибо большое разобрался.

AlexSTAL:

Добавьте в инициализацию:

.... 

 Добавил в эксперт блок

void OnInit()
{
 ChartSetInteger(0, CHART_EVENT_OBJECT_CREATE, true);
 ChartSetInteger(0, CHART_EVENT_OBJECT_DELETE, true);
}

 все встало на свои места.

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

Закомментировал их и тоже все работает.

Оказывается если эксперт/индикатор не имеет блока OnInit даже пустого то с событиями происходит неразбериха.

Наверно так задумано, но тому кто пишет на mql5 надо об этом знать, мало ли.

 
Сгенерировал в визарде эксперта, при этом тестер выдает ошибку Core 1 tester stopped because OnInit critical error, кто-нибудь сталкивался с таким? как это решается? ведь все-таки визард, ладно бы я там что-то накосячил бы...
 
Europa:
Сгенерировал в визарде эксперта, при этом тестер выдает ошибку Core 1 tester stopped because OnInit critical error, кто-нибудь сталкивался с таким? как это решается? ведь все-таки визард, ладно бы я там что-то накосячил бы...
Приложите полученный исходник. И параметры тестирования.
 
uncleVic:
Приложите полученный исходник. И параметры тестирования.
Файлы:
TheFirst.mq5  7 kb
 
Europa:

Не воспроизвелось.

Я просил ещё параметры тестирования. Нужно:

И версия и битность МТ5.

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