Здравствуйте!

При работе на реальных данных, у меня возникла серьезная проблема с параболиком.
Вкратце: индикатор очень сильно скачет.

Итак. Сначала, я загрузил исторические данные, наложил на них параболик: все было ок, индикатор отображался сразу на всю длину выбранной истории.

Но, когда я подключился к реальному серверу, произошло следующее:

в момент времени ИКС (допустим, в понедельник, 10:00) у нашего терминала не было данных по торгуемому инструменту.

Данные начали накапливаться по барам, и индикатор, соответственно, начал собственное построение с 10:00.

Однако, с каждым новым баром, время расчета скрипта все увеличивалось.
С одной стороны, это понятно - чем больше у нас баров, тем больше время расчета. С другой стороны, скрипт производит тонну ненужной работы - ведь он побарно производит пересчет одних и тех же данных!

В начале торгового дня, в понедельник, скрипт производил расчет за 2мс. Приемлемо.
Уже через час, время увеличилось до 10мс. Хуже, но тоже приемлемо.
Затем, скрипт начал обрабатывать 20 000 баров. Время 50мс. Появились пропуски входа и, что гораздо хуже - пропуски выхода.
Еще через некоторое время, скрипт начал обрабатывать 70 000 баров. Время работы скрипта увеличилось до 1200мс!!!

Тогда я понял, что нужно ограничивать скрипт по количеству обрабатываемых данных и вот тут-то были зарыты грабли:
Если мы ограничиваем параболик количеством баров, то, при достижении на инструменте их количества, наш интервал для расчета начинает сдвигаться, а сам параболик начинает скакать.

Причем, абсолютно неважно, обрабатываем ли мы 1000 баров (2мс стабильно) или 100 000 баров (1500-2000мс). С каждым новым баром, индикатор может переворачиваться. Цена была ниже индикатора в 17:30:40, через секунду, в это же время, цена уже выше индикатора. Еще через секунду - в это же время - опять ниже.

Т.е. для нормальной работы индикатора, нам нужно брать такой интервал, при котором количество баров ВСЕГДА меньше значения, которое мы задаем в скрипте в качестве ограничения.

Вопрос знатокам
Подскажите, как лучше поступить в этой ситуации?

Мне нужно обрабатывать данные по каждому бару, ограничив длину расчета 1000 баров, однако значения параболика мне нужны хотя бы за 100 000 баров.

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

При этом, на реальном инструменте, мой скрипт не должен производить расчет за целый месяц (цена уже сложилась, а значит, и функция цены тоже - индикатор не должен скакать!!!).
В идеале, скрипт должен обрабатывать только последние 1000 баров, а данные параболика, исходя из формулы, ему нужны только за предыдущий период SAR[i-1], которое он возьмет из буфера.

Т.е. наш параболик будет сохраняться вместе с историческими данными и НЕ будет пересчитываться побарно на всем отрезке.

Подскажите, как лучше поступить, чтобы получить нормальный индикатор?

Сейчас, мне приходится постоянно сдвигать опцию "дата от", "время от", но это приводит к неточности расчетов, т.к. значение индикатора в 17:30, рассчитанного от начала дня, отличается от значения индикатора, рассчитанного от 17:00.


Отредактировано Atomic (Mon Oct 10 2016 03:28 PM)