Страница 1 из 1

Изменение API

Добавлено: Пн янв 29, 2007 4:46 pm
wellx
В очередной раз борясь за производительность индикаторов , окончательно убедил себя , что в программе крайне необходимо добавить дополнительный вариант нумерации баров. От 0 до последнего бара, при этом 0й бар это самый старый бар. Данный вариант даст целый ряд плюсов: - не надо пересчитывать весь массив на новом баре, не надо ловить отход назад, т.к. ничего в массиве индикатора не поменяется кроме логики вычисления текущего бара, упростится поддержка массивов баров, т.к. не придется сдвигать нумерацию с каждым баром.

Мне кажется это может здорово ускорить работу многих систем и индикаторов. А для совместимости с МТ оставить существующую систему нумерации. Постепенно можно реализовать все индикаторы специально для ФТ.

Добавлено: Сб май 30, 2009 6:57 pm
duh
Если еще интересует решение этого вопроса, через столько времени :), то тут нет ничего проще, так как каждый бар имеет инвариант - расстояние от начала истории до самого себя, поэтому чтобы не искать нужный бар, надо запоминать не его индекс а инвариант, который при необходимости всегда можно в одно действие пересчитать в индекс бара и использовать его при вычислении - независимо от того сколько баров появилось (главное не запутаться) - см.код:

Код: Выделить всё

int nbur = Bars();	// Количество баров
int iftbar; // Индекс бара форекс тестера, правила нумерации: (0) - текущий бар, (nbur-1) - самый старый бар
int invbar; // Индекс бара инвариантный, правила нумерации: (nbur) - текущий бар, (1) - самый старый бар
invbar = nbur - iftbar; // Вычисление инвариантного индекса бара по известному индексу бара форекс тестера
iftbar = nbur - invbar; // Вычисление индекса бара форекс тестера по известному инвариантному бару
Это поможет избавиться от лишних циклов с целью поиска нового индекса нужного бара, и индикаторы можно на этом принципе построить (которые не будут пересчитываться с каждым новым баром), но готовые индикаторы уже будут вычисляться по старому - с пересчетом