Проблема с индикаторами в тестере стратегий

 

Написал индикатор, который берет MovingAverages для GBPUSD, но прикреплен к USDJPY.

Когда его подгружаю в тестер стратегий (например для периода 01-10-2007 - 27-10-2007), то подгружается и отображается нормально.

Но на каждом следующем тике MovingAverages возвращает значение на 01-10-2007.

Упростил код до предела, где грабли? :

int start(){
if (IndicatorCounted()<0) return(-1);
int limit=Bars-IndicatorCounted();

for(int i = 0; i <= limit; i++) ExtMapBuffer[i] = iMA("GBPUSD", 0, 30, 0, 3, 6, i);
return(0);

}

 
Для тестера не существует тиков на других парах, только тики родной валюты. Соответственно, обращаясь к другой паре ты получаешь МА для закрытия соответствующего бара. Или открытия? - не помню, была борьба с подсматриванием и что-то там хитрое сделали. Главное - на других парах для тестера тиков нет, только бары, потому МА будет неизменен пока не переползет на новый бар.
 

он даже на следующих барах возвращает тоже значение.

в итоге, на индикаторе длиннющая прямая линия.

 
raw:

он даже на следующих барах возвращает тоже значение.

в итоге, на индикаторе длиннющая прямая линия.


Возможно у вас нет закчанной истории по нужному символу и периоду
 
xeon:
raw:

он даже на следующих барах возвращает тоже значение.


в итоге, на индикаторе длиннющая прямая линия.


Возможно у вас нет закчанной истории по нужному символу и периоду

Простой, вроде, вопрос, но какой-то мутный. ИМХО, тестер формирует файлы  *.FXT из имеющихся в терминале исторических данных по соответствуюшим символу и периоду, т.е. автоматически. Провел примитивный эксперимент.

1. Открыл в терминале график GBPUSD H1, клавишей PgUp закачал историю по ноябрь 2006. Оставил график открытым (чем черт не шутит)
2. Из индикатора MACD сделал опытный идикатор, заменил одну строку на строку из индикатора raw, причем в iMA прописал явно символ и период.
MacdBuffer[i]= iMA("GBPUSD", 60, 30, 0, 3, 6, i);
3. Запустил в тестере на EURUSD H1 с января 2007 советник MACD Sample и поставил на график опытный индикатор

Результат близок к результату raw, прямая линия. Отличаются нулевой и первый бары, но и они имеют постоянные значения.

В чем ошибка, что я не так сделал?
 
В визуальном режиме наверно проблема? Дело в том, что по другим символом в окне загружены все данные, а на тестируемом символе подгружаются по ходу тестирования. Поэтому если к параметрам баров других символов делается обращение по индексу - их значения не меняются.
 
Надо синхронизацию по времени делать.
 
И у меня часто такое бывает.
Недавно тестил индикатор в режиме тестера. Так он неправильно берет iHigh и iLow текущего символа но старшего таймфрейма. тестил на 210 билде - как только ставишь галочку "Пересчитать" все появляется, но на следующем тесте сново таже проблема. И иногда и "пересчитать" не помогает. Как то коряво очень.

Вот кстати и просьба к разработчикам - сделайте хоть что нибудь, чтоб можно было тестить мультивалютные стратегии. Ну пожулуйста. ..
 

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

Индикатор, прикреплённый к окну графика, использует данные графика (то есть, совершенно без разницы источник данных в окне графика). Но если данные, используемые таким индикатором не совпадают с данными графика (символ и/или период), то индикатор запрашивает эти данные в историческом центре клиентского терминала. Данные не моделированные, а реальные. И, конечно же, запрашивая много раз в секунду данные нулевого бара "чужих" данных, индикатор будет получать одинаковое значение до тех пор, пока к этим "чужим" данным не придёт новый тик.

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

 
"Горизонтальная" линия проявляется тогда, когда нет запрашиваемых данных по GBPUSD. Это легко проверить, заглянув в историю GBPUSD и точку на графике, где значение индикатора равно 0:



Вообще странно, что вместо "значение равно нулю, а по коду это значит, что нет данных", говорите "горизонтальная линия". Кроме того, не забывайте, что этот тестовый индикатор экономичный и ранее просчитанные бары не пересчитываются после вашей ручной подгрузки исторических данных по GBPUSD.

Следите за наличием исторических данных всех используемых символов, их таймфреймов и внутренней синхронностью всех таймфреймов внутри символа.
 
Vinin:
Надо синхронизацию по времени делать.
То есть, вместо:
//---индикатор стоит на графике EURUSD M60

MacdBuffer
[i]= iMA("GBPUSD", 60, 30, 0, 3, 6, i);
желательно в общем случае писать:
//---индикатор стоит на графике EURUSD M60

datetime TimeBar=Time[i];
MacdBuffer[i]= iMA("GBPUSD", 60, 30, 0, 3, 6, iBarShift("GBPUSD",60,TimeBar,false));
Так работает. Но, насколько это правильное решение? И стоит ли перестраховываться и применять эту конструкцию  для вызова индикаторов 
с другим символом/периодом из советника для тестера, демо и реала?