iBarShift( NULL, меньший_тф , Time[i] ) для индюка в окне визуального тестирования.

 

Из кода, работающего на высоком ТФ в окне визуального тестирования (при визуальном тестировании пустого советника) надо вычислять индекс бара на меньшем ТФ (обычно М1), который открывается в некоторое время Time[i] : вроде бы для этого предназначена iBarShift( NULL, <меньший_тф>, Time[i] ). Но эта самая iBarShift() выдаёт какие-то космические значения, никак не сочетающиеся с действительностью и предположительно относящиеся к реальному времени на меньшем ТФ (а нужно, очевидно, на эмулируемом).

Можно ли как-то победить это баг?

Спасибо.

 

-Входите..

-Доктор... меня все игнорируют!

-Следующий!


ап, типа...

 
Надо использовать функцию  
iTime(NULL,timeframe,shift) 

так как фунция Time() предназначена для текущего ТФ 

или запоминать время, используя другую переменную.

 

Вообще-то мне не время, а индекс нужен...

Можно, конечно, делать iBarShift( NULL, __, Time[i] ) - iBarShift( NULL, __, Time[0] ), но как-то это извращённо, да и не будет работать глубоко в истории (когда запрашиваемое время Time[i] ещё не появится на реальном графике данного ТФ...

А больше, наверное, и нет средств, раз iBarShift глючит...

А разработчики, говорят, даже багфиксы забросили. Ляпотааа...

 

1. вы проверяли сколько баров возвращает iBars(smb, PERIOD_M1)

2. что вернул вызов iBarsShift(smb, PERIOD_M1, time, true)

 

Вот лог трёх последовательных шагов в визуальном тестировании индюка:

2010.09.18 08:34:00 my2 EURUSD,M5: Time[1]=2010.07.30 02:05 iBarShift(,0,)=1 iBarShift(,M1,)=50763 iBarShift(,M1,,true)=50763 iBars(,M1)=65222

2010.09.18 08:33:46 my2 EURUSD,M5: Time[1]=2010.07.30 02:00 iBarShift(,0,)=1 iBarShift(,M1,)=50768 iBarShift(,M1,,true)=50768 iBars(,M1)=65222

2010.09.18 08:33:34 my2 EURUSD,M5: Time[1]=2010.07.30 01:55 iBarShift(,0,)=1 iBarShift(,M1,)=50773 iBarShift(,M1,,true)=50773 iBars(,M1)=65222


Короче, оно точно считает смещение на реальном М1, вместо тестируемого :(

А если уйти глубже в историю за пределы досягаемости из реального М1, то те же самые 3 шага:

2010.09.18 08:37:20 my2 EURUSD,M5: Time[1]=2010.05.05 00:40 iBarShift(,0,)=1 iBarShift(,M1,)=65221 iBarShift(,M1,,true)=-1 iBars(,M1)=65222
2010.09.18 08:37:19 my2 EURUSD,M5: Time[1]=2010.05.05 00:35 iBarShift(,0,)=1 iBarShift(,M1,)=65221 iBarShift(,M1,,true)=-1 iBars(,M1)=65222
2010.09.18 08:37:12 my2 EURUSD,M5: Time[1]=2010.05.05 00:30 iBarShift(,0,)=1 iBarShift(,M1,)=65221 iBarShift(,M1,,true)=-1 iBars(,M1)=65222



Как спрашивается, с этим работать? :(

 
Gorinych:

Вот лог трёх последовательных шагов в визуальном тестировании индюка:

2010.09.18 08:34:00 my2 EURUSD,M5: Time[1]=2010.07.30 02:05 iBarShift(,0,)=1 iBarShift(,M1,)=50763 iBarShift(,M1,,true)=50763 iBars(,M1)=65222

2010.09.18 08:33:46 my2 EURUSD,M5: Time[1]=2010.07.30 02:00 iBarShift(,0,)=1 iBarShift(,M1,)=50768 iBarShift(,M1,,true)=50768 iBars(,M1)=65222

2010.09.18 08:33:34 my2 EURUSD,M5: Time[1]=2010.07.30 01:55 iBarShift(,0,)=1 iBarShift(,M1,)=50773 iBarShift(,M1,,true)=50773 iBars(,M1)=65222


Короче, оно точно считает смещение на реальном М1, вместо тестируемого :(

А если уйти глубже в историю за пределы досягаемости из реального М1, то те же самые 3 шага:

2010.09.18 08:37:20 my2 EURUSD,M5: Time[1]=2010.05.05 00:40 iBarShift(,0,)=1 iBarShift(,M1,)=65221 iBarShift(,M1,,true)=-1 iBars(,M1)=65222
2010.09.18 08:37:19 my2 EURUSD,M5: Time[1]=2010.05.05 00:35 iBarShift(,0,)=1 iBarShift(,M1,)=65221 iBarShift(,M1,,true)=-1 iBars(,M1)=65222
2010.09.18 08:37:12 my2 EURUSD,M5: Time[1]=2010.05.05 00:30 iBarShift(,0,)=1 iBarShift(,M1,)=65221 iBarShift(,M1,,true)=-1 iBars(,M1)=65222



Как спрашивается, с этим работать? :(



Никак. Разве что поставить в настройках максимально возможное количество отображаемых баров. Но это ж сколько памяти уйдет зря.

Хотя можно отдельный терминал под это дело настроить и открывать только нужный инструмент