CiRSI - получить значение по индексу (не Main)

 

Добрый вечер, уважаемые.

Пытаюсь переписать свой индикатор с использованием классов, в частности CiRSI.

Схематично, код выглядит так:

CiRSI *rsi; //наш индикатор

//в OnInit инициализируем
rsi = new CiRSI();
rsi.Create(_Symbol, _Period, RsiPeriod, PRICE_CLOSE);

//в OnCalculate начинаем с ним работать:
res.Refresh();
CopyBuffer(rsi.Handle(), 0, start, rates_total - start, RsiBuffer); //копирую в буфер

for(int i; i=start + 1; i<rates_total && !IsStopped(); i++)      
{      
      rsi_1 = RsiBuffer[i]; // беру из буфера значение
и так далее.

Но ведь у CiRSI есть метод Main, который позволяет брать значение напрямую. Таким образом мы избавляемся от CopyBuffer, но! Проблема в том, что в цикле нумерация свечей идет слева направо, а метод Main принимает индексы с нумерацией справа налево.

for(int i; i=start + 1; i<rates_total && !IsStopped(); i++)      
{      
      rsi_1 = rsi.Main(i); // <<< т.е. вот тут надо как-то пересчитать индекс, чтобы он брал значение как надо 

Где-то у CiRSI должен быть метод наподобие ArrayAsSeries, но что-то не нашел.

Пока пишу так:

rsi_1 = rsi.Main(rates_total - i);

Но это как-то некрасиво.

Подскажите, есть ли безгеморный способ пользоваться методом Main без постоянного пересчета индекса?

Спасибо.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyBuffer
  • www.mql5.com
CopyBuffer - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5