Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Ну да, немало. Я как-раз и ориентируюсь на портфельный анализ и портфельную торговлю. Впрочем, когда речь идёт о больших расчётах, то там вообще iBarShift неуместна, т.к. работа идёт с массивами. По сути, iBarShift и прочие аналогичные функции предназначены для редких вызовов. В цикле их гонять нерационально. Просто получаем массив в CopyTime и быстренько всё находим. Поэтому тестовый пример по сути малоприменим в реальной практике. Если конечно кодер не чайник ) А ради чайников утруждаться не стоит, я думаю )
Мне кажется, вашу функцию логичней обернуть в класс. Тогда и проверку символа/периода не придётся проводить на каждом вызове. Для каждой таймсерии будет свой объект.
Я не спорю. Просто эти функции создавались тогда, когда не было еще встроеной iBarShift и Bars был глючный.
Лично мне эти функции нужны для управления программы и графиками с помощью мыши. Так же я создаю синтетические ТФ с логарифмическим масштабом и эти функции там очень пригождаются. Они необходимы в решении задачи распознания образов и значительно убыстряют вычисления. Такой синтетический ТФ содержит всю историю символа и при этом содержит всего 3000 баров.
Разочаровался я окончательно в функциях Bars и iBarShift. MQ никак не могут их до ума довести. Одно лечат - другое калечат.
Осознал я, что это рудиментарные функции и лучше про них забыть как страшный сон.
Пусть остаются для студентов и консерваторов.
Разумно считаю использовать поиск номера бара по времени через обычный поиск в массиве time[].
Например, это можно осуществлять с помощью такой функции:
Да, нужен массив. Но лично у меня он всегда под рукой и обновляется с каждым тиком. Поэтому мне его даже формировать не нужно.
А по быстродействию данная функция в десятки раз превосходит оригинальную iBarShift.
Пример поиска номера бара по времени в массиве размерностью 100 000 элементов методом половинного деления:
Исправьте. Пр выходе за пределы имеющейся истории возвращает неправильную позицию:
Результат:
Функция fBarShift() в данном случае возвращает общее количество баров, что не является корректной позицией.Исправьте. Пр выходе за пределы имеющейся истории возвращает неправильную позицию:
Результат:
Функция fBarShift() в данном случае возвращает общее количество баров, что не является корректной позицией.не понял возвращает -1, как и должно быть.
Судя по коду, как такового поиска нужного бара нету, происходит расчёт его. А если история будет битой?
Какой Вы смысл вкладываете в слова "Судя по коду"?
Вам показалось или Вы его досконально изучили?
Это было давно, но как я помню, там был расчёт лишь в том случае когда это было уместно, т.е. когда история 100% не битая и нет дырок. Это легко проверяется проверкой разницы во времени между барами. За счет этого и происходит выигрыш в скорости. Проверьте, если не верите.
Сейчас данный код хоть и быстрее штатной iBarShift, но не значительно (20-50%, раньше было в 10 раз). Уже MQ исправили код. Так что можно сказать, что этот код уже не так актуален.
не понял возвращает -1, как и должно быть.
Это код возврата функции CopyOpen()
И тут отсутствует четвёртый параметр:
Какой Вы смысл вкладываете в слова "Судя по коду"?
Вам показалось или Вы его досконально изучили?
Это было давно, но как я помню, там был расчёт лишь в том случае когда это было уместно, т.е. когда история 100% не битая и нет дырок. Это легко проверяется проверкой разницы во времени между барами. За счет этого и происходит выигрыш в скорости. Проверьте, если не верите.
Сейчас данный код хоть и быстрее штатной iBarShift, но не значительно (20-50%, раньше было в 10 раз). Уже MQ исправили код. Так что можно сказать, что этот код уже не так актуален.
Я использовал код с первой страницы. Циклов нету, значит только расчёт(исключая глупые варианты). Я не говорю что неправильно, всё верно у вас кроме одного исключения.
Я использовал код с первой страницы. Циклов нету, значит только расчёт(исключая глупые варианты). Я не говорю что неправильно, всё верно у вас кроме одного исключения.
Там циклы не нужны, т.к. используется штатная функция Bars(), а суть алгоритма в том, чтобы минимизировать ее использование через вычисления с сохраненными данными предыдущих обращений к функции в статических переменных.
Я исправил одну ошибку (поменял - на + в функции fBarShift). У меня она оказывается была исправлена, а выложить видимо забыл. Обновил. Версия 1.04.
Цель этого кода была, чтобы бороться с багом, который был в функции Bars(). Повышение скорости - это уже был "побочный" эффект. Сейчас этого бага нет и скорость они значительно улучшили. Так что смысла сейчас в этой библиотеке большого нет.