Определение значения индикатора в конкретный момент в прошлом.

 

Всем привет

Есть в прошлом локальный минимум. Свеча, в которой минимальное ее значение - минимально для 10 свечей до и 10 после (для получения значений свечей использую MqlRates).

Есть индикатор (например, я беру стохастический осциллятор с входными значениями K, В и S), значение которого равнялось конкретной величине именно в тот момент, когда значение свечи показывало этот минимум.

Как его найти?

Спасибо.

 
Запомнить значение индикатора в тот момент, когда это происходило. Далее использовать по необходимости.
 
Aleksei Stepanenko #:
Запомнить значение индикатора в тот момент, когда это происходило. Далее использовать по необходимости.

Как пример:

Нужно найти индекс этого бара на котором Вы хотите взять значение индикатора далее делаете вот такую функцию где естественно переменная MA_handle хендл Вашего индикатора, а цифра 3 порядковый номер буфера индикатора.

  double SignalD(datetime index)
  {
   double MA[1];
   ResetLastError();
   if(CopyBuffer(MA_handle,3,index,1,MA)<0)
     {
      PrintFormat("Failed to copy data from the SignalD indicator, error code %d",GetLastError());
      return(0.0);
     }
   return NormalizeDouble(MA[0],Digits());
  }

Далее обращаемся к этой функции вот таким образом

CurSignal=(int)SignalD(iTime(_Symbol,PERIOD_CURRENT,i));
где i это индекс нужного Вам бара и в переменную будет записано значение индикаторного буфера
 
canonier:

Есть в прошлом локальный минимум. Свеча, в которой минимальное ее значение - минимально для 10 свечей до и 10 после (для получения значений свечей использую MqlRates).

Есть индикатор (например, я беру стохастический осциллятор с входными значениями K, В и S), значение которого равнялось конкретной величине именно в тот момент, когда значение свечи показывало этот минимум.

Как его найти?

Подготовить массив данных ДО искомого бара. Длина должна быть достаточной для расчета индикатора.

Добавить в массив искомый бар в нужном состоянии (например, когда цена была на уровне лоу). Состояние бара можно восстановить из тиков.

Рассчитать на этом массиве значение индикатора.

 
Andrey Khatimlianskii #:

Добавить в массив искомый бар в нужном состоянии (например, когда цена была на уровне лоу). Состояние бара можно восстановить из тиков.

Вот здесь непонятно. Прошу немного поподробнее. Как это сделать? Это можно сделать не в разделе OnTick, что сработает при прогоне на тестере стратегий, а в разделе OnInit?

 
canonier #:

Вот здесь непонятно. Прошу немного поподробнее. Как это сделать? Это можно сделать не в разделе OnTick, что сработает при прогоне на тестере стратегий, а в разделе OnInit?

Что конкретно не понятно?

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

Как добавить бар в массив? Добавьте новый элемент, и присвойте ему нужное значение.

Где это делать? Там, где нужно получить значение индикатора. Если нужно однажды, в ОнИнит, можно там.


Тут самое сложное — Рассчитать на этом массиве значение индикатора. Для некоторых индикаторов есть стандартные функции, для остальных нужно будет немного заморочиться.