Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Rosh, по-моему, в твоем примере и есть ошибка, в связке:
Первая строка находит "ближайший" день, который на самом деле оказывается следующий за реально искомым, а вторая строка принудительно увеличивает счетчик дней на 1. Но если shift является первой свечой в сутках, то первая же строка находит правильный день, а вторая уже делает его неправильным. В данном примере очень тяжело отследить ошибку, так как данные используются в пользовательском индикаторе.
Для примера могу показать следующий код:
Прицепи на часовки, посмотри лог эксперта, потом исправь "2005.2.24 00:00" на "2005.2.24 00:01" и перекомпилируй. РЕЗУЛЬТАТЫ РАЗНЫЕ. Хотя бар ищем один и тот же.
Если я не прав, поправь.
Нет, этот вариант ,именно, правильный (мне нужно было именно так). Ситуация такая - на дневках имеем ATR за n дней. Это значение мы получаем только при наступлении нового дня и фиксируем его на весь день. То есть, сегодня 24 февраля мне нужно значение ATR на 23 февраля по закрытой свече. И мой индикатор что на часовках, что на 15 минутках будет рисовать дневной ATR на 23 февраля, а сегодняшнее изменение цены на него никак не влияет.
Условие
сделано для правильного отображения на дневках, тогда показания этого индикатора и исходного (MRO1.mq4) будут полностью совпадать.
Согласен, никак не отвыкну.
Тоже хотелось бы сделать предложение.
Многие люди, программирующие на С++, 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
}
В итоге, нам не пришлось бы вручную каждому массиву сообщать переменные.
С уважением.
меня все устраивает.
Просто в начале я бросил фразу,
что несложно и самому написать такую функцию, вот сейчас оправдываюсь/объясняюсь, что имел в виду.
Напомню, там речь шла про поиск бара по времени не совпадающем с хранимым в массиве,
например поиск часового бара в который попадает время 12:01
Мне кажется, что не нужно дергать разработчиков по таким вещам, которые уже можно сделать и самим.
Есть вещи, которые невозможно сделать средствами имеющимися в системе.
Вот на эту тему можно было бы подергать ...
Но даже это мне кажется сейчас лишнее.
Лучше всем сосредоточиться на поиске и вычищении багов - их еще много.
А каждая новая фича плодит новые баги.
Такие вещи (имхо) лучше не в состав МТ включать, а в библиотеки написанные на 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
Т.е. она уже делает то, про что я пытался говорить.
Прошу прощения, зря воду замутил ... :)
if(Period()<PERIOD_D1) bigshift++; Тут я понял, тогда тем более ошибка должна быть.
Да как проверить-то правильность, что он тебе 23 выдает, а не 24 в данном случае? Примерчик мой простенький посмотри. Красноречивый он.