Предложение по улучшению. - страница 2

 
Mak, конечно можно. Но если функция возвращения бара по времени пользуется спросом у многих, почему бы не сделать стандартной, а то каждый изобретает кто во что горазд.

Rosh, по-моему, в твоем примере и есть ошибка, в связке:
      bigshift = ArrayBsearch(daytimes,Time[shift],WHOLE_ARRAY,0,MODE_DESCEND);
      if(Period()<PERIOD_D1) bigshift++;


Первая строка находит "ближайший" день, который на самом деле оказывается следующий за реально искомым, а вторая строка принудительно увеличивает счетчик дней на 1. Но если shift является первой свечой в сутках, то первая же строка находит правильный день, а вторая уже делает его неправильным. В данном примере очень тяжело отследить ошибку, так как данные используются в пользовательском индикаторе.
Для примера могу показать следующий код:

#property indicator_chart_window
datetime buffer[];
int start()
  {
  ArrayCopySeries(buffer,MODE_TIME);
  Print(ArrayBsearch(buffer,StrToTime("2005.2.24 00:00"),WHOLE_ARRAY,0,MODE_DESCEND));
  return(0);
  }


Прицепи на часовки, посмотри лог эксперта, потом исправь "2005.2.24 00:00" на "2005.2.24 00:01" и перекомпилируй. РЕЗУЛЬТАТЫ РАЗНЫЕ. Хотя бар ищем один и тот же.
Если я не прав, поправь.

 
Rosh, не по теме, по-моему в твоем примере должно быть
  for (shift=Bars-1;shift>=0;shift--)
 
to Роман

Нет, этот вариант ,именно, правильный (мне нужно было именно так). Ситуация такая - на дневках имеем ATR за n дней. Это значение мы получаем только при наступлении нового дня и фиксируем его на весь день. То есть, сегодня 24 февраля мне нужно значение ATR на 23 февраля по закрытой свече. И мой индикатор что на часовках, что на 15 минутках будет рисовать дневной ATR на 23 февраля, а сегодняшнее изменение цены на него никак не влияет.
Условие
if(Period()<PERIOD_D1) bigshift++;

сделано для правильного отображения на дневках, тогда показания этого индикатора и исходного (MRO1.mq4) будут полностью совпадать.

 
Rosh, не по теме, по-моему в твоем примере должно быть
  for (shift=Bars-1;shift>=0;shift--)


Согласен, никак не отвыкну.
 
Приветствую!
Тоже хотелось бы сделать предложение.

Многие люди, программирующие на С++, Java, JavaScript, да и других языках аналогичного синтаксиса знакому функция eval() (вычисляемое значение переменной)

Было бы неплохореализовать её в МТ4 в следующих версиях.
Допустим, у нас есть необходимость создать индикатор, где все 8 линий рисуются формулами, в которых используются переменные с именами b1,b2,...b8 а массивы BArr1,BArr2,...BArr1BArr. Если будет eval() , то возможно следующее:

for (int shift=limit;shift>0;shift--) {
......................

//our code here
for(int x=1;i<=8;I++) {
eval("BArr"+i+"["+shift+"]=b"+i); //это равнозначно BArr1[shift]=b1 при i=1
}
//end of code

}

В итоге, нам не пришлось бы вручную каждому массиву сообщать переменные.
С уважением.
 
Это ты круто замахнулся. Правда, пока не знаю куда это пристроить.
 
Rosh,
меня все устраивает.
Просто в начале я бросил фразу,
что несложно и самому написать такую функцию, вот сейчас оправдываюсь/объясняюсь, что имел в виду.
Напомню, там речь шла про поиск бара по времени не совпадающем с хранимым в массиве,
например поиск часового бара в который попадает время 12:01

Мне кажется, что не нужно дергать разработчиков по таким вещам, которые уже можно сделать и самим.
Есть вещи, которые невозможно сделать средствами имеющимися в системе.
Вот на эту тему можно было бы подергать ...

Но даже это мне кажется сейчас лишнее.
Лучше всем сосредоточиться на поиске и вычищении багов - их еще много.
А каждая новая фича плодит новые баги.

Mak, конечно можно. Но если функция возвращения бара по времени пользуется спросом у многих, почему бы не сделать стандартной, а то каждый изобретает кто во что горазд.

Такие вещи (имхо) лучше не в состав МТ включать, а в библиотеки написанные на MQL.
Можно было бы говорить о включении этой функции в МТ, если бы она была популярна и ее нельзя было эффективно реализовать средствами MQL. Но в данном случае и на MQL будет работать очень быстро.

Первая строка находит "ближайший" день, ...

Сорри, оказывается я был невнимателен ..
ArrayBsearch - Returns a index to the first occurrence of value in the first dimension of specified array if found or nearest if it isn't
Т.е. она уже делает то, про что я пытался говорить.
Прошу прощения, зря воду замутил ... :)
 
Rosh
if(Period()<PERIOD_D1) bigshift++; Тут я понял, тогда тем более ошибка должна быть.
Да как проверить-то правильность, что он тебе 23 выдает, а не 24 в данном случае? Примерчик мой простенький посмотри. Красноречивый он.
 
Так я свой смотрел, и все нормально было. Сейчас твой посмотрю - что там отличается.
 
Так и есть Rosh, упростил твой пример, после bigshift++ он выдает сегодняшний день, а не вчерашний, как ты хочешь.
Причина обращения: