Сколько пунктов цена прошла за количество секунд

 

Доброго времени суток всем! Понадобилось для одной работы написать счётчик сколько пунктов прошла цена за определённое кол-во секунд. Решил посмотреть есть ли готовые решения, не нашел. Потому выкладываю сюда, пусть будет. Функция выводит комментарий о кол-ве элементов в массиве и текущем значении.

//+------------------------------------------------------------------+
//| автор: Pozitif                               mail: alex-w-@bk.ru |
//+------------------------------------------------------------------+
//| Версия: 27.02.2018                                               |
//| Описание: Сколько пунктов цена прошла за кол-во секунд           |
//+------------------------------------------------------------------+
int ItemsPerSecond(const int seconds,MqlTick &tick)
{
//---
   static MqlTick rates[];
   datetime time_start;
   int count=0,size;
   bool insert=false;
   double price_start=0;
   long msc=0;
//---
   time_start=TimeCurrent()-seconds;
   
   for(int i=0;i<ArraySize(rates);i++)
   {
      if(rates[i].time>0 && rates[i].time<time_start)
      {
         ZeroMemory(rates[i]);
      }
      else if(!insert && rates[i].time==0)
      {
         rates[i]=tick;
         insert=true;
      }
      if(rates[i].time_msc>0 && (rates[i].time_msc<msc || msc==0))
      {
         price_start=rates[i].bid;
         msc=rates[i].time_msc;
      }
      
   }
   if(!insert)
   {
      size=ArraySize(rates);
      ArrayResize(rates,size+1,300);
      rates[size]=tick;
   }
   if(price_start>0)count=(int)((tick.bid-price_start)/Point);
   
   Comment("size: "+IntegerToString(ArraySize(rates))+"\r\n"+"count: "+IntegerToString(count));
//---
   return(count);   
}
 
Выкладывать отлаженную функцию — это благородно с Вашей стороны.
 
такую функцию лучше делать на таймере, иначе будет большая погрешность на малых интервалах времени
 
Alexander Bereznyak:
такую функцию лучше делать на таймере, иначе будет большая погрешность на малых интервалах времени

Согласен, если сам советник тоже по таймеру работает, а если он по тикам то таймер не нужен, пришел тик, советник запрашивает данные и получает именно то что нужно. Да и у таймера приоритет насколько я понял низкий, во время сильного потока тиков он пропускает вызовы, если курсором водишь и идёт поток событий ChartEvent он тоже пропускает периоды.

 
Alexey Valeev:

Доброго времени суток всем! Понадобилось для одной работы написать счётчик сколько пунктов прошла цена за определённое кол-во секунд. Решил посмотреть есть ли готовые решения, не нашел. Потому выкладываю сюда, пусть будет. Функция выводит комментарий о кол-ве элементов в массиве и текущем значении.

Доброго времени суток, столкнулся с такой же необходимостью подсчёта количества пунктов пройденных за определенное кол-во секунд. Перерыл всё, и чудом наткнулся на вашу функцию. Но я честно говоря, совершенно не знаю что с ней делать) я конечно понимаю что на её основании возможно сконструлить индикатор, либо советник подающий сигнал о прохождении заданного количества пунктов за определенное время, но сам я с такой задачей не справлюсь)

 
Alexey Valeev:

Доброго времени суток всем! Понадобилось для одной работы написать счётчик сколько пунктов прошла цена за определённое кол-во секунд. Решил посмотреть есть ли готовые решения, не нашел. Потому выкладываю сюда, пусть будет. Функция выводит комментарий о кол-ве элементов в массиве и текущем значении.

идея здравая, сам о ней думаю иногда

НО цена двигается в 2х направлениях, поэтому не понятно как именно посчитать ее скорость, т.к. здесь более уместно использовать определение "частота" (тиков за единицу времени)

 
У меня были мысли посчитать пункты за N тиков в одном направлении и таким образом вроде-бы должна получиться скорость. При каждом следующем тике в том-же направлении из массива удаляем самый старый "тик" то-есть пунктов при том тике и добавляем свежий. Таким образом можем иметь среднюю за N тиков. Но понаблюдав глазами за поведением цены пришёл к выводу, что это всё мартышкин труд. Иногда цена после резкого скачка продолжает движение, а иногда отскакивает взад...
 
Igor Yeremenko:

идея здравая, сам о ней думаю иногда

НО цена двигается в 2х направлениях, поэтому не понятно как именно посчитать ее скорость, т.к. здесь более уместно использовать определение "частота" (тиков за единицу времени)

ну как вариант есть даже готовое тех задание, на просторах форума нашел) https://www.mql5.com/ru/job/62043

Фриланс-сервис на MQL5.com: Индикатор Хронометраж
Фриланс-сервис на MQL5.com: Индикатор Хронометраж
  • www.mql5.com
техническое задание "Хронометраж". В момент когда цена начала движение начинается отсчет времени, если цена не прошла дистанцию за указанное время, таймер сбрасывается на 0 и начинается новый отсчет. Если скорость движения цены не достигает 50% данные подсвечены темными тонами зеленого и  красного цвета. (этот параметр настраиваемый, где можно...
 
Сергей Овчинников:

ну как вариант есть даже готовое тех задание, на просторах форума нашел) https://www.mql5.com/ru/job/62043

у меня тоже есть подобные ТЗ и оно скорее всего неправильно, здесь нужно более "научное" определение скорости изменения/движения цены -  по законам физики, статистики или аэро-космической отрасли (работающие с ускорениями).
Причина обращения: