Предложение по улучшению.

 
3. Нужна функция которая по времени будет давать номер бара.
 
3. Нужна функция которая по времени будет давать номер бара.


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

4. Возможность создавать свои граф инструменты, люди не будут к вам цепляться с просьбами реальзовать все новые и новые.
Фактически все уже есть нужно только создать новый класс объектов наряду с индикаторами, экспертами и скриптами - инструменты. Инструмент получает на вход массив с координатами кликов и количество кликов в этом массиве и можем задать нужное количество входных переменных как в индикаторах, цвета и значения, и еще параметр нужно ли вызывать с каждым тиком функцию старт . Если есть вызов старт то можно будет писать торгующие, как эксперты, инструменты.
Например, можно будет написать линию тренда, которая автоматически купит, если ее пробьет цена, или туже спираль Фибоначи, или нормальный измеритель, типа такого ...


Выйти на уровень Borland на уровне продуктов для трейдинга!
Давно хотел сказать, но думал что отдельно не стоит - нельзя ли сделать так чтобы панель состояния не отключалась при переходе в полноэкранный режим, а то меню остается (впрочем как и заголовок окна, что после настройки графиков почти не нужно), а статустная строка проподает.
 

3. Нужна функция которая по времени будет давать номер бара.


Такая возможность есть, смотри функции по работе с массивами
int ArrayBsearch( double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND)

Дополнительно сделай поиск по этой функции на данном форуме.
Если знаешь о такой возможности, но нужна просто тупая функция типа Function(Time)=номер бара, можешь сам сделать. Если встроенная нужна - не могу пока представить ситуацию, когда подойдет только встроенная.
 

3. Нужна функция которая по времени будет давать номер бара.


Такая возможность есть, смотри функции по работе с массивами
int ArrayBsearch( double array[], double value, int count=WHOLE_ARRAY, int start=0, int direction=MODE_ASCEND)

Дополнительно сделай поиск по этой функции на данном форуме.
Если знаешь о такой возможности, но нужна просто тупая функция типа Function(Time)=номер бара, можешь сам сделать. Если встроенная нужна - не могу пока представить ситуацию, когда подойдет только встроенная.


Спасибо, нашел.
Но все же, мне все же кажется, что если бы была такая функция и она была бы описана в разделе функций работы со временем было бы лучше. Вопросов на форуме было бы меньше. :-)
Могу поспорить, что этот вопрос будет задаваться еще не раз. Всегда проблему легче упредить. Особенно тяжело понять какое отношение функция двоичного поиска имеет к преобразованию времени в номер бара начинающим программистам (трейдерам которые захотели разобраться в MQL4).
 
За помощь не благодари, просто в следующий раз на этот вопрос, который опять вылезет - обещай что ты ответишь :)
 
ArrayBsearch не подходит для этой задачи, точнее очень плохо подходит. Приходится слишком много извращаться, чтобы научить ArrayBsearch выдавать правильный ответ. Конечно, слово "правильный" в контексте данной задачи. Этой функции нужно для поиска предоставлять точное значение. То есть, если я в массиве четырехчасовок ищу значение, соответствующее времени "2005.2.24 00:00", то ArrayBsearch выдаст номер сегодняшней первой свечи. Если я задам для поиска время "2005.2.24 00:01", а такого значения в массиве четырехчасовок не хранится, то функция выдаст "ближайшее" значение, как написано в англоязычной справке. Но вот ближайшим значением оказывается почему-то вторая свеча. Вот и приходится искуственно приводить интересующее время ко времени начала формирования свечи. Либо еще как-то изголяться.
 
Такую функцию несложно написать самому.
 
У меня уже написана. И именно через ArrayBsearch. Работает. Поэтому и пишу, что далеко не оптимальный вариант. По-моему, старым способом через последовательный перебор баров и сравнением их time надежнее. А еще надежнее, если разработчики сделают ее встроенную, не один ведь человек просит.
 
Вот пример использования ArrayBSearch, закомментированные участки специально не убирал, чтобы было видно как менялся код.
//+------------------------------------------------------------------+
//|                                                         Test.mq4 |
//|                      Copyright © 2005, MetaQuotes Software Corp. |
//|                                        https://www.metaquotes.net |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2005, MetaQuotes Software Corp."
#property link      "https://www.metaquotes.net"

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Red
//---- input parameters
extern int       PeriodMin=1440;
//---- buffers
double ExtMapBuffer1[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,ExtMapBuffer1);
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- TODO: add your code here
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
   datetime daytimes[];
   int bigshift;
   int shift;
   int    counted_bars=IndicatorCounted();
//---- TODO: add your code here
   ArrayCopySeries(daytimes,MODE_TIME,Symbol(),PeriodMin);
  
 
   for (shift=Bars;shift>=0;shift--)
      {
   if(Time[shift]>=daytimes[0]) bigshift=0;
   else
     {
      bigshift = ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
      if(Period()<PERIOD_D1) bigshift++;
     }
 
 
//      bigshift=MathFloor(shift*Period()/PeriodMin);
//      ExtMapBuffer1[shift]=iCustom(NULL,PeriodMin,"GATO",22,300,120,50,6,0,bigshift);
      ExtMapBuffer1[shift]=iCustom(NULL,PeriodMin,"MRO1",10,0,bigshift);
      
      };
//----
   return(0);
  }



История появления этого простого индикатора здесь - "Мультифреймовость - вот она есть, а вот ее нет"

 
У меня уже написана. И именно через ArrayBsearch.

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

ArrayBsearch - это как я понял обычный бинарный поиск.
В упорядоченном массиве работает очень быстро,
скорость пропорциональна Log2(N).
 
to Mak
Объясни на пальцах, что ты имеешь ввиду про точное равенство, и что тебя не устраивает. Не могу понять.
Причина обращения: