В очередной раз борясь за производительность индикаторов , окончательно убедил себя , что в программе крайне необходимо добавить дополнительный вариант нумерации баров. От 0 до последнего бара, при этом 0й бар это самый старый бар. Данный вариант даст целый ряд плюсов: - не надо пересчитывать весь массив на новом баре, не надо ловить отход назад, т.к. ничего в массиве индикатора не поменяется кроме логики вычисления текущего бара, упростится поддержка массивов баров, т.к. не придется сдвигать нумерацию с каждым баром.
Мне кажется это может здорово ускорить работу многих систем и индикаторов. А для совместимости с МТ оставить существующую систему нумерации. Постепенно можно реализовать все индикаторы специально для ФТ.
Изменение API
-
- Сообщения: 68
- Зарегистрирован: Сб мар 14, 2009 8:07 pm
Если еще интересует решение этого вопроса, через столько времени , то тут нет ничего проще, так как каждый бар имеет инвариант - расстояние от начала истории до самого себя, поэтому чтобы не искать нужный бар, надо запоминать не его индекс а инвариант, который при необходимости всегда можно в одно действие пересчитать в индекс бара и использовать его при вычислении - независимо от того сколько баров появилось (главное не запутаться) - см.код:
Это поможет избавиться от лишних циклов с целью поиска нового индекса нужного бара, и индикаторы можно на этом принципе построить (которые не будут пересчитываться с каждым новым баром), но готовые индикаторы уже будут вычисляться по старому - с пересчетом
Код: Выделить всё
int nbur = Bars(); // Количество баров
int iftbar; // Индекс бара форекс тестера, правила нумерации: (0) - текущий бар, (nbur-1) - самый старый бар
int invbar; // Индекс бара инвариантный, правила нумерации: (nbur) - текущий бар, (1) - самый старый бар
invbar = nbur - iftbar; // Вычисление инвариантного индекса бара по известному индексу бара форекс тестера
iftbar = nbur - invbar; // Вычисление индекса бара форекс тестера по известному инвариантному бару
zzz