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

 

Всем привет!

ни для кого ни секрет, что в тестере не работает функция OnChartEvent() 

поэтому приходится пользоваться такой конструкцией:

   if(((id==CHARTEVENT_OBJECT_CLICK && (sparam=="SAMPLE"))
      || ObjectGetInteger(0,"SAMPLE",OBJPROP_STATE)==true))


Первая строка для реального графика, а вторая для тестера! 

НО есть большое но! 

Для того, чтобы интерфейс "не страдал", приходится читать состояние кнопок каждый тик.

Это влияет на скорость работы панели в тестере! 


Есть ли какой-то способ выйти из этих тормозов? может я чего-то пропустил? 

 
Vladislav Andruschenko:

Всем привет!

ни для кого ни секрет, что в тестере не работает функция OnChartEvent() 

поэтому приходится пользоваться такой конструкцией:


Первая строка для реального графика, а вторая для тестера! 

НО есть большое но! 

Для того, чтобы интерфейс "не страдал", приходится читать состояние кнопок каждый тик.

Это влияет на скорость работы панели в тестере! 


Есть ли какой-то способ выйти из этих тормозов? может я чего-то пропустил? 

Именно так и есть, нужно смотреть состояние кнопки каждый тик. В принципе, это не критично, если это торговая панель, там и не нужна супер-скорость теста, не будешь успевать совершать сделки.

 
Vitaly Muzichenko:

Именно так и есть, нужно смотреть состояние кнопки каждый тик. В принципе, это не критично, если это торговая панель, там и не нужна супер-скорость теста, не будешь успевать совершать сделки.

так то да. но если это просто информационная панель :-) но и хочется, чтобы она тоже в тестере была функциональна, но не "жрала" время.

по профилированию она жрет почти 40 % времени

 

вторую строку сделайте отдельной функцией + проверка IsVisualMode
плюс проверяйте не каждый тик, а например через тик, или через 10 тиков
будет в 10 раз быстрее

 
Vladislav Andruschenko:

так то да. но если это просто информационная панель :-) но и хочется, чтобы она тоже в тестере была функциональна, но не "жрала" время.

по профилированию она жрет почти 40 % времени

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

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

void VisualTesterMode()
{}

void UsualMode()
{}

int OnInit()
{
   TickFunc = UsualMode;
   if (IsTesting() && IsVisualMode())
   {
      TickFunc = VisualTesterMode;
   }
   
   return(INIT_SUCCEEDED);
}

void OnTick()
{
   TickFunc();
}
Так получается проверка на тестер только в ините и специфичный код изолирован и не требует рантайм проверки каждый раз.
 
Vladislav Andruschenko:

Всем привет!

ни для кого ни секрет, что в тестере не работает функция OnChartEvent() 

поэтому приходится пользоваться такой конструкцией:


Первая строка для реального графика, а вторая для тестера! 

НО есть большое но! 

Для того, чтобы интерфейс "не страдал", приходится читать состояние кнопок каждый тик.

Это влияет на скорость работы панели в тестере! 


Есть ли какой-то способ выйти из этих тормозов? может я чего-то пропустил? 

А в каком месте размещён этот кусок кода?

Если в OnChartEvent() то непонятно как выполняется

   ObjectGetInteger(0,"SAMPLE",OBJPROP_STATE)

Если-же в OnTick() то как выполняется

   if((id==CHARTEVENT_OBJECT_CLICK && (sparam=="SAMPLE")))

Я-бы завернул выполнение в тестере в if((MQLInfoInteger(MQL_TESTER))

 

Ребята. 

Вы немного не поняли:

Естественно стоит проверка на то: тестер это или нет! 

Этот код только для тестера стратегий в визуальном режиме. В остальных режимах отключена.

Тормоза именно при визуальном тестировании, и они очевидны.

Taras Slobodyanik:

вторую строку сделайте отдельной функцией + проверка IsVisualMode
плюс проверяйте не каждый тик, а например через тик, или через 10 тиков
будет в 10 раз быстрее

:-) Но это же совсем неправильно. смысл? мне нужно, чтобы панелька работала идеально четко на любом графике. 

Alexey Viktorov:

Я-бы завернул выполнение в тестере в if((MQLInfoInteger(MQL_TESTER))

:-) Тогда смысл темы теряется :-) 

 
Vladislav Andruschenko:

:-) Тогда смысл темы теряется :-) 

А на уточняющие вопросы не принято отвечать? И какой тогда смысл потеряется?

 
Alexey Viktorov:

А на уточняющие вопросы не принято отвечать? И какой тогда смысл потеряется?

Функция находится в OnTick для тестера потому, что в тестере стратегий OnChartEvent - не работает. 

Если бы он работал - то я бы не опрашивал бы каждый тик состояние нажатия кнопки. 

Каждый тик нужно опрашивать потому, чтобы работа панели была такая же как на реальном графике. Например панель для тестера стратегий. 
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
Тестирование стратегий - Алгоритмический трейдинг, торговые роботы - MetaTrader 5
  • www.metatrader5.com
Тестер стратегий позволяет тестировать и оптимизировать торговые стратегии (советники) перед началом использования их в реальной торговле. При тестировании советника происходит его однократная прогонка с начальными параметрами на исторических данных. При оптимизации торговая стратегия прогоняется несколько раз с различным набором параметров...
 
Vladislav Andruschenko:

Тормоза именно при визуальном тестировании, и они очевидны.

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

 
Vladislav Andruschenko:

так то да. но если это просто информационная панель :-) но и хочется, чтобы она тоже в тестере была функциональна, но не "жрала" время.

по профилированию она жрет почти 40 % времени

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

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