Отправлено: 13.07.15 21:41. Заголовок: Новый ZigZag
Появился вопрос касательно статьи. Я пишу класс для работы с зиг-загами. Решил для теста воспользоваться индикатором из данной статьи NeoZigZag_Close. В итоге, почему-то он периодически возвращает не как обычно бывает 0 или "не ноль" т.е. значение, а вот такое значение: 2147483647.0. С чем это связано? Мне теперь приходится проверять не только на "не пустое значение", но и не "не 2147483647.0, что не есть логично.
Вот что пишет в журнале у меня возвращаемое значение данного индикатора:
Отправлено: 01.01.16 14:19. Заголовок: Scriptong пишет: В ..
Scriptong пишет:
цитата:
В этом варианте слишком много ошибок, чтобы можно было обоснованно продолжать разбор проблемы. Так, сразу бросается в глаза, что объявлен массив, который, видимо, должен использоваться в качестве буфера индикатора - ZZTimeBuf. Но, во-первых, этот массив не может быть буфером, т. к. он объявлен как статический.
Как это не может. Ведь, у Вас же тоже буфер экстремумом является статическим т.к. объявлен на глобальном уровне. Тем не менее, он является буфером. Scriptong пишет:
цитата:
А, во-вторых, этот массив так и не стал буфером, т. к. не привязан ни к одному из трех предполагаемых буферов (в IndicatorBuffers указано 3).
Вообще-то, изначально я и реализовал это как буфер, но... оказалось, что метаквоты и тут сделали всё для "удобства" разработки. Оказалось, что буфер не может быть типом datetme, т.к. такой перегрузки и SetIndexBuffer() нет! Пришлось как-то реализовывать посредством обычного массива. Размер я не решил какой ему присвоить, поэтому сделал 10000 для теста. А как иначе? Создавать динамический массив? Я не разу так неделал.. Стоит оно того? Scriptong пишет:
цитата:
Ну а в принципе указанная задача может быть решена без ввода дополнительного буфера. Примерный алгоритм таков: 1. Запоминаем дату/время последнего экстремума ZZ. 2. На каждом новом баре определяем, какой индекс бара соответствует сохраненной дате/времени. 3. Сравниваем полученный индекс с заданной величиной (через сколько баров можно регистрировать экстремум) и, если можно регистрировать экстремум по стандартному критерию, то регистрируем новый экстремум ZZ.
Я думал над этим. Но хочется более универсального способа. И на то есть причины. Ведь есть вариант получения интересующего нас экстремума, как относительно времени и удалённости о 0-го бара, так и по направлению движения цены по какому-то признаку. Таким образом, гораздо нагляднее иметь цепочку значений раскинутых по времени.
Вообще-то, изначально я и реализовал это как буфер, но... оказалось, что метаквоты и тут сделали всё для "удобства" разработки. Оказалось, что буфер не может быть типом datetme, т.к. такой перегрузки и SetIndexBuffer() нет! Пришлось как-то реализовывать посредством обычного массива. Размер я не решил какой ему присвоить, поэтому сделал 10000 для теста. А как иначе? Создавать динамический массив? Я не разу так неделал.. Стоит оно того?
Тип datetime вполне умещается в тип double. Поэтому можно смело объявить массив с типом double, а данные в нем хранить такие, как требуется, хоть int, хоть datetime.
hoz пишет:
цитата:
Я думал над этим. Но хочется более универсального способа. И на то есть причины. Ведь есть вариант получения интересующего нас экстремума, как относительно времени и удалённости о 0-го бара, так и по направлению движения цены по какому-то признаку. Таким образом, гораздо нагляднее иметь цепочку значений раскинутых по времени.
На мой взгляд, овчинка выделки не стоит, т. е. гнаться в данном случае за универсальностью не нужно. Ведь время возникновения любого из экстремумов можно определить, просто перебрав значения буфера экстремумов. Это, конечно, немного дольше, но не настолько критично, чтобы выделять для этих целей индикаторный буфер. Ведь это память компьютера, которой и без того мало.
Все даты в формате GMT
2 час. Хитов сегодня: 0
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет