Скачать MetaTrader 5

Тестируем 'CopyTicks' - страница 23

MetaQuotes
Админ
26089
Renat Fatkhullin  
fxsaber:
80K тиков за пол секунды - медленно! Говорить, что нужно было запрашивать не по 2000 тиков за раз, а больше, конечно, можно. Какое значение запроса оптимально тогда?

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

Если каждый раз делать глубокие запросы с проваливанием к диску, то тут конечно сам виноват.

fxsaber
10947
fxsaber  
Renat Fatkhullin:

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

Если каждый раз делать глубокие запросы с проваливанием к диску, то тут конечно сам виноват.

Можете показать код самого оптимального получения истории тиков за первую неделю сентября?
MetaQuotes
Админ
26089
Renat Fatkhullin  
fxsaber:
Можете показать код самого оптимального получения истории тиков за первую неделю сентября?

Пишите сами, это не сложная задача.

По точным датам сделайте запрос и сохраните в локальном массиве. Никакой оптимальности нет при работе вне кеша. Оптимизация имеет смысл только при докачке последних 4096 тиков из кеша.

fxsaber
10947
fxsaber  
Renat Fatkhullin:

Пишите сами, это не сложная задача.

По точным датам сделайте запрос и сохраните в локальном массиве.

Так нельзя заранее знать, сколько было тиков на требуемом интервале. Параметр count не определить. Вот в чем проблема.

Выкачиваться ВСЮ история с начала сентября, задав count = триллиард - можно, конечно. Затем бинарным поиском найти в массиве конечную дату и обрезать.

Но этот триллиард - это не технический подход совсем. Нужна либо перегрузка функции с from, to. Либо доступ по индексу к базе.

Alexey Kozitsyn
7889
Alexey Kozitsyn  
Renat Fatkhullin:

Оптимизация имеет смысл только при докачке последних 4096 тиков из кеша.

Из справки:

Скорость выдачи: терминал хранит по каждому символу 4096 последних тиков в кеше для быстрого доступа (для символов с запущенным стаканом – 65536 тиков)

А про 65536 тиков (со стаканом) - уже не будет оптимальнее?
MetaQuotes
Админ
26089
Renat Fatkhullin  

Мы подготовим улучшения в работе CopyTicks в ближайшем билде:

  • возможно сделаем быстрые кеши адаптивными с автоматическим расширением до 128к тиков, что позволит писать программы проще (можно не мучиться с докачкой, а часто забирать нужный объем сразу из быстрого кеша)
  • добавим дополнительную версию функции, чтобы можно было брать котировки с точными датами from & to
fxsaber
10947
fxsaber  
Renat Fatkhullin:

Мы подготовим улучшения в работе CopyTicks в ближайшем билде:

  • возможно сделаем быстрые кеши адаптивными с автоматическим расширением до 128к тиков, что позволит писать программы проще (можно не мучиться с докачкой, а часто забирать нужный объем сразу из быстрого кеша)
  • добавим дополнительную версию функции, чтобы можно было брать котировки с точными датами from & to

Спасибо!

О полностью закачанной истории from & to, видимо, будет говорить нулевой GetLastError.

Обратите внимание, что сейчас (и с вводом обозначенных Вами улучшений) крайне сложно заполучить тик, который был перед временем from. Поэтому предлагаю сделать count и отрицательным - запрос тиков не только в будущее (вправо), но и в прошлое (как при from == 0).

Тогда всегда будет удобно и оптимально (Ваша реализация) делать запрос на предшествующую историю.

Alexey Kozitsyn
7889
Alexey Kozitsyn  
fxsaber:

Спасибо!

О полностью закачанной истории from & to, видимо, будет говорить нулевой GetLastError.

Обратите внимание, что сейчас (и с вводом обозначенных Вами улучшений) крайне сложно заполучить тик, который был перед временем from. Поэтому предлагаю сделать count и отрицательным - запрос тиков не только в будущее (вправо), но и в прошлое (как при from == 0).

Тогда всегда будет удобно и оптимально (Ваша реализация) делать запрос на предшествующую историю.

Лучше сразу сделать перегрузки CopyTicks() такими же, как и у других Copy...() функций.
fxsaber
10947
fxsaber  
Alexey Kozitsyn:
Лучше сразу сделать перегрузки CopyTicks() такими же, как и у других Copy...() функций.
Тогда придется отказаться от дефолтных count и from.
Alexey Kozitsyn
7889
Alexey Kozitsyn  
fxsaber:
Тогда придется отказаться от дефолтных count и from.

Почему? На примере CopyBuffer, сейчас имеем вот это:

int  CopyBuffer( 
   int       indicator_handle,     // handle индикатора 
   int       buffer_num,           // номер буфера индикатора 
   datetime  start_time,           // с какой даты 
   int       count,                // сколько копируем 
   double    buffer[]              // массив, куда будут скопированы данные 

   ); 

Есть count и from (start_time).

Вы предлагаете добавить это:

int  CopyBuffer( 
   int       indicator_handle,     // handle индикатора 
   int       buffer_num,           // номер буфера индикатора 
   datetime  start_time,           // с какой даты 
   datetime  stop_time,            // по какую дату 
   double    buffer[]              // массив, куда будут скопированы данные 

   ); 

Чтобы копировать можно было в обе стороны, верно? Только, вместо datetime - ulong (в микросекундах).

Останется, на будущее, для каких-нибудь других целей добавить такую перегрузку:

int  CopyBuffer(
   int       indicator_handle,     // handle индикатора
   int       buffer_num,           // номер буфера индикатора
   int       start_pos,            // откуда начнем 
   int       count,                // сколько копируем
   double    buffer[]              // массив, куда будут скопированы данные
   );

 И все.