OnChartEvent: Взаимоотношение пользователя с графической панелью в тестере стратегий - страница 2

 
Комбинатор:

у вас прямо в ифе выполняется код и для нормального режима и для визуального. может вы немного не поняли?


все верно, 

в реальном графике - вторая строка не выполняется. 

в визуализаторе проходит проверка строки и состояние кнопки.

Зачем выносить в отдельные функции? 

 
fxsaber:

Скорость в визуализаторе может понадобиться только для быстрой прокрутки. В таком случае, сделайте, например, кнопку, нажатие на которую вырубает панель ровно на час. И включит ее раньше только в случае, если произошел OnTrade.

по событию в OnTrade - панель оживает, а вот кнопку - надо подумать

 
Vladislav Andruschenko:

в реальном графике - вторая строка не выполняется. 

выполняется если первая строка false. а в визуализаторе первая выполняется всегда. еще и логика в обычном режиме искажается.

лучше конечно говорить по полноценному рабочему коду.

 
Комбинатор:

выполняется если первая строка false. а в визуализаторе первая выполняется всегда. еще и логика в обычном режиме искажается.

лучше конечно говорить по полноценному рабочему коду.


я уловил Вашу мысль. Это добавит скорости на реальном графике. 

только без вывода отдельных функций, а проверка на тестер в первой строке и второй 


дело не в коде :-) 

Вот Вам весь код:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)

  {
   EAPadPROChartEVENT(id,lparam,dparam,sparam);
  }

void OnTick()
  {
   EAPadPROChartEVENT(0,0,0,"");
  }

EAPadPROChartEVENT(int id,long lparam,double dparam,string sparam)
  {
   if(((id==CHARTEVENT_OBJECT_CLICK && (sparam=="SAMPLE"))
      || ObjectGetInteger(0,"SAMPLE",OBJPROP_STATE)==true))
      Comment("Sample");
  }


при таком исполнении код EAPadPROChartEVENT будет выполнен 99% времени в тестере потому, что нет событий. 


Вашу идею я уловил и сделал так:

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)

  {
   EAPadPROChartEVENT(id,lparam,dparam,sparam);
  }

void OnTick()
  {
   EAPadPROChartEVENT(0,0,0,"");
  }

EAPadPROChartEVENT(int id,long lparam,double dparam,string sparam)
  {
   if(((!IsTesting() && id==CHARTEVENT_OBJECT_CLICK && (sparam=="SAMPLE"))
      || (IsTesting() && ObjectGetInteger(0,"SAMPLE",OBJPROP_STATE)==true)))
      Comment("Sample");
  }
 

Вообще моя идея была сделать так:

typedef void (*RunFunc)(void); 
RunFunc TickFunc;

void VisualTick()
{
   if (ObjectGetInteger(0, "SAMPLE", OBJPROP_STATE))
   {
      OnSampleClick();
   }
   // check other UI events
   // do something
}

void UsualTick()
{
   // do something
}

void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   if(id == CHARTEVENT_OBJECT_CLICK && sparam == "SAMPLE")
   {
      OnSampleClick();
   }
   // check other UI events
}

void OnSampleClick()
{
   Comment("Sample");
}

int OnInit()
{
   TickFunc = UsualTick;
   if (MQLInfoInteger(MQL_TESTER) && MQLInfoInteger(MQL_VISUAL_MODE))
   {
      TickFunc = VisualTick;
   }
   
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   TickFunc();
}
 
Комбинатор:

Вообще моя идея была сделать так:


спасибо попробую 

 
Комбинатор:

Вообще моя идея была сделать так:

Не думаю, что это заметно быстрее такого

void OnTick()
{
  static const bool IsVisual = MQLInfoInteger(MQL_VISUAL_MODE);
  
  if (IsVisual)
    VisualTick();
  else
    UsualTick();
}
 
fxsaber:

Не думаю, что это заметно быстрее такого

думаю доли процента. так...структурней что ли. для меня по крайней мере

 
Комбинатор:

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

ObjectGetInteger кушает очень много, проблема в нем. 
А по другому опросить кнопку не получится. 
Делать две разные функции для тестера и для реала с 99 % совпадение кода - тоже не выход. 
Моя конструкция правильная,  но ObjectGetInteger все тормозит. 

Я думал может есть скрытые функции получения события на графике. 
Например при добавлении объекта можно опросить ObjectsTotal 
 
Vladislav Andruschenko:
ObjectGetInteger кушает очень много, проблема в нем.
настолько что панель тормозит в режиме визуализации? не верю.
Причина обращения: