Выпущена бета-версия MetaTrader 4 Build 529 с новым компилятором - страница 39

 
Out of range однозначно указывает на ошибку в коде - выход за пределы массива. Там указывается строка и место ошибки, так что ищите ошибку.
 

Вот код.


datetime   prevtime0 = 0;
double prevVolume0 =0;
double prevClose0 =0;
void init()
{
   Print("_______Test init");
   prevtime0 = iTime(NULL,PERIOD_M1,0); 
   prevVolume0 = iVolume(NULL,PERIOD_M1,0);
   prevClose0 = iClose(NULL,PERIOD_M1,0);
}

void start()
{
  Print(" prevtime0!!!!! = ",prevtime0," iTime(NULL,PERIOD_M1,0) =",iTime(NULL,PERIOD_M1,0) );
  Print(" prevVolume0!!!!! = ",prevVolume0," iVolume(NULL,PERIOD_M1,0) =",iVolume(NULL,PERIOD_M1,0) );
  Print(" prevClose0!!!!! = ",prevClose0," iClose(NULL,PERIOD_M1,0) =",iClose(NULL,PERIOD_M1,0) );
  Print("");

  prevtime0 = iTime(NULL,PERIOD_M1,0); 
  prevVolume0 = iVolume(NULL,PERIOD_M1,0);
  prevClose0 = iClose(NULL,PERIOD_M1,0);

}

Вот результат исполнения в терминале Version 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1: prevClose0!!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevVolume0!!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevtime0!!!!! = 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevVolume0!!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevtime0!!!!! = 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

Как видно не меняется ни iClose, ни iVolume, ни iTime.

Я так полагаю, что и остальные функции, которые начинаются с i.

Кроме того, функция iVolume в этом примере показывает явно не Volume.

В тоже время в тестере всё работает и меняется, кроме iVolume. Она и там не работает.

Обратите внимание.

 
thecore:

Вот код.


Вот результат исполнения в терминале Version 4.0 Build 536

2013.11.11 22:53:08 Test EURJPY,M1: prevClose0!!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevVolume0!!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:53:08 Test EURJPY,M1: prevtime0!!!!! = 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00
2013.11.11 22:52:25 Test EURJPY,M1:
2013.11.11 22:52:25 Test EURJPY,M1: prevClose0!!!!! = 133.02 iClose(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevVolume0!!!!! = 133.02 iVolume(NULL,PERIOD_M1,0) =133.02
2013.11.11 22:52:25 Test EURJPY,M1: prevtime0!!!!! = 2013.11.11 22:38:00 iTime(NULL,PERIOD_M1,0) =2013.11.11 22:38:00

Как видно не меняется ни iClose, ни iVolume, ни iTime.

Я так полагаю, что и остальные функции, которые начинаются с i.

Кроме того, функция iVolume в этом примере показывает явно не Volume.

В тоже время в тестере всё работает и меняется, кроме iVolume. Она и там не работает.

Обратите внимание.

Ну, обратил. Что не так?
 
tara:
Ну, обратил. Что не так?


Мда...

Функция iTime(NULL,PERIOD_M1,0) выдаёт не то время, что выдаёт терминал слева.

Терминал выдаёт 2013.11.11 22:53:08, iTime выдаёт 2013.11.11 22:38:00, а должен выдавать

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) должен выдавать некое целое число, например 1, 2, 3, 100, а не

как в этом примере 133.02

iClose должна выдавать в первом случае 133.02, а во втором 133.03.

 

Все эти функции работают маненько иначе, по минуткам. Печать у Вас работает по тикам. Время в MT считается по секундам.

А второй терминал - вообще, слева :)

 
tara:

Все эти функции работают маненько иначе, по минуткам. Печать у Вас работает по тикам. Время в MT считается по секундам.

А второй терминал - вообще, слева :)

Слушайте, я понимаю, что Вам вечерком не с кем поговорить.

Я знаю, что по минутам, поэтому в распечатке результата и показал СПЕЦИАЛЬНО

два результата на разных минутах.

Да и потом, это сообщение было не для Вас, а для разработчиков.

 
thecore:

iVolume(NULL,PERIOD_M1,0) должен выдавать некое целое число, например 1, 2, 3, 100, а не

как в этом примере 133.02

Походу действительно iVolume возвращает последнюю цену (цену закрытия) вместо объема.

Но совсем повеселило меня описание из справки (первый вариант из файла, а второй взять на сайте)

1

datetime  iVolume(
   string           symbol,          // символ
   int              timeframe,       // период
   int              shift            // сдвиг
   );

2

double iVolume(string symbol, int timeframe, int shift)
 
thecore:


Мда...

Функция iTime(NULL,PERIOD_M1,0) выдаёт не то время, что выдаёт терминал слева.

Терминал выдаёт 2013.11.11 22:53:08, iTime выдаёт 2013.11.11 22:38:00, а должен выдавать

2013.11.11 22:53:00

iVolume(NULL,PERIOD_M1,0) должен выдавать некое целое число, например 1, 2, 3, 100, а не

как в этом примере 133.02

iClose должна выдавать в первом случае 133.02, а во втором 133.03.


Попробуйте использовать RefreshRates(), в OnTick такая же проблема, в тестере не обновляются время и цены, но при использовании RefreshRates() все гуд ...
 
Еще две проблемы по индикаторам см. пожалуйста в Сервис Деск!
 
thecore:

Как видно не меняется ни iClose, ни iVolume, ни iTime.

Я так полагаю, что и остальные функции, которые начинаются с i.

Кроме того, функция iVolume в этом примере показывает явно не Volume.


Исправили. Спасибо
Причина обращения: