Вопрос программистам. - страница 2

 
Vitaly Stepanov:
как проверить бары индикатора в советнике, скажем iMACD, чтобы понять, был ли сигнал?

Самые эконом варианты: 

1) если есть исходник и рисует сигналы (стрелочки напр) - сделать чтоб не убирал сигнал;

2) если нет исходника - сделать другой индикатор который бы брал значения и не перерисовывал. 

И это прогнать в тестере на нужном участке. 

Если имеете ввиду "нанести индикатор и чтоб он показал все как было в истории", то для этого нужно анализировать тиковую историю и полностью разбирать логику индикатора. Это довольно дорого обойдется. 

 
Galina Bobro:

Самые эконом варианты: 

1) если есть исходник и рисует сигналы (стрелочки напр) - сделать чтоб не убирал сигнал;

2) если нет исходника - сделать другой индикатор который бы брал значения и не перерисовывал. 

И это прогнать в тестере на нужном участке. 

Если имеете ввиду "нанести индикатор и чтоб он показал все как было в истории", то для этого нужно анализировать тиковую историю и полностью разбирать логику индикатора. Это довольно дорого обойдется. 

там же написано, что например стандартный MACD ?

 

Это не сложно, нужно своевременно записывать событие в массив:

datetime SignalWas[];
int Finish=-1;

void OnTick()
   {
   .......
   if(Signal)
      {
      ArrayResize(SignalWas, ++Finish+1);
      SignalWas[Finish]=Time[0];
      }
   .......
   }

и запустить эксперт с моделированием всех тиков. Если событие произойдёт внутри свечи, то оно будет в этом массиве. По дате вы узнаете бар, на котором это произошло. Можно добавить в массив любые другие сведения о событии. Границ для фантазии нет, вот только ни MACD, ни Moving Average Вам не помогут;)

 
Igor Makanu:

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

Это никак не поможет при анализе сформированной истории. А для текущего бара вариантов масса.

 

Вот по такому принципу можно сделать проигрывание всей истории (не только 0-го бара):


Контрольных точек скорее всего хватит, т.к. в них будут почти все хай/лоу, которые были у реального бара (исключение - новостные шпильки). Ну, или по всем тикам.

 
Andrey Khatimlianskii:

Вот по такому принципу можно сделать проигрывание всей истории

Полезный индикатор. Молодец!

 
Galina Bobro:

Самые эконом варианты: 

1) если есть исходник и рисует сигналы (стрелочки напр) - сделать чтоб не убирал сигнал;

2) если нет исходника - сделать другой индикатор который бы брал значения и не перерисовывал. 

И это прогнать в тестере на нужном участке. 

Если имеете ввиду "нанести индикатор и чтоб он показал все как было в истории", то для этого нужно анализировать тиковую историю и полностью разбирать логику индикатора. Это довольно дорого обойдется. 

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

Можно подробнее про тиковую историю? Предполагаю, что нужно использовать CopyTicks(), как и где не понимаю.

Спасибо.

 
Vitaly Stepanov:

...

Можно подробнее про тиковую историю? Предполагаю, что нужно использовать CopyTicks(), как и где не понимаю.

...

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

Но смотря какой индикатор, может быть, будет достаточно ограничиться двумя дополнительными расчетами по high и low.