Таблица всех сделок. Доступ через MQL5 - страница 2

 
prostotrader:
Нашёл ошибку и оптимизировал работу.

Хороший пример, хотя до оптимальной работы еще очень далеко. Пока главных тормоза три:

1. CopyTiks каждый OnBookEvent копирует все тики начиная с момента запуска:

int copied= CopyTicks(Symbol(),ticks,COPY_TICKS_ALL,start_time,0);

На самом деле это можно оптимизировать, если сделать динамические отсечки.

2. Полный перебор всех полученных тиков в OnBookEvent

for(int i=1; i<copied; i++)
{
   if(( ticks[i].flags  &TICK_FLAG_BUY)==TICK_FLAG_BUY)
   {
      buy_deals++;
   }
   else
   if(( ticks[i].flags  &TICK_FLAG_SELL)==TICK_FLAG_SELL)
   {
      sell_deals++;
   }
}

Это тоже можно пофиксить при желании. 

3. Полный перебор всех баров в OnCalculation:

for(int i=rates_total-1; i>0; i--)
{
   SellBuffer[i]= SellBuffer[i-1];
   BuyBuffer[i] = BuyBuffer[i-1];
}
 
По просьбе форумчан, доработал индикатор
Файлы:
DealsLent.mq5  9 kb
 
Vasiliy Sokolov:

Хороший пример, хотя до оптимальной работы еще очень далеко. Пока главных тормоза два:

1. CopyTiks каждый OnBookEvent копирует все тики начиная с момента запуска:

На самом деле это можно оптимизировать, если сделать динамические отсечки.

2. Полный перебор всех полученных тиков в OnBookEvent

Это тоже можно пофиксить при желании. 

3. Полный перебор всех баров в OnCalculation:

Спасибо, но не везде Вы правы.

1. Не все тики (посмотрите внимательно)

2. А как нужно?

3. Легко сделать 

 

Щас подправим... 

 
Вот, подправил
Файлы:
DealsLent.mq5  9 kb
 
prostotrader:

Спасибо, но не везде Вы правы.

1. Не все тики (посмотрите внимательно)

2. Легко сделать

3. Тожке дегко сделать 

Щас подправим... 

Да, действительно не все тики.

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

Но в целом все гуд. Спасибо за пример. 

 
prostotrader:
Вот, подправил
Спасибо.
 
Vasiliy Sokolov:

Да, действительно не все тики.

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

Но в целом все гуд. Спасибо за пример. 

Действительно, индикатор тиковый, поэтому важны только текущие данные (последние).

Если пользователь хочет забирать из буферов более длительную историю,

ток это очень лего сделать.

Сек... 

 

Вот, пользователь сам может выбрать размер интересующих его данных.

Если ActSize = 0 - то вся доступная история 

Файлы:
DealsLent.mq5  9 kb
 
Последний штрих..
Файлы:
DealsLent.mq5  10 kb
 

Может кто знает в чём ошибка?

Индикатор работает правильно, но отображается больше баров,

чем сделано в настройке.

 

 

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