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

 
Night63:

Коллеги! При компиляции выдается предупреждение:

possible use of uninitialized variable 'PipStep'

для такого куска:

Все переменные инициализированы как double, что ему не нравится?

вы объявили переменные типа double, инициализация - это присвоение значений объявленным переменным

double PipStep=0; сделайте

 
Я не пойму, демо-версии индикаторов в 555 билде только у меня не тестируются, или это совсем неважная проблема для дебюта Маркета?
 
Candid:
Я не пойму, демо-версии индикаторов в 555 билде только у меня не тестируются, или это совсем неважная проблема для дебюта Маркета?

а в 5-ке они тестяться?
 

ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

https://www.mql5.com/ru/forum/148325

MqlRates

Структура для хранения информации о ценах, объемах и спреде.

https://www.mql5.com/ru/docs/constants/structures/mqlrates

Так MqlRates в MetaTrader 4 build 555 это массив или структура?

Этот пример из справки (MetaTrader 4 build 555) не работает т.к. нет функции CopyRates

void OnStart()
  {
//---
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   int copied=CopyRates(Symbol(),0,0,100,rates);
   if(copied>0)
     {
      Print("Скопировано баров: "+copied);
      string format="open = %G, high = %G, low = %G, close = %G, volume = %d";
      string out;
      int size=fmin(copied,10);
      for(int i=0;i<size;i++)
        {
         out=i+":"+TimeToString(rates[i].time);
         out=out+" "+StringFormat(format,
                                  rates[i].open,
                                  rates[i].high,
                                  rates[i].low,
                                  rates[i].close,
                                  rates[i].tick_volume);
         Print(out);
        }
     }
   else Print("Не удалось получить исторические данные по символу ",Symbol());
  }
 

//+------------------------------------------------------------------+
//|                                                     my_test1.mq4 |
//|                        Copyright 2013, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2013, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
#property strict
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   MqlRates rates[];
   ArraySetAsSeries(rates,true);
   ArrayCopyRates(rates,"EURUSD",PERIOD_M1);
   //int copied=CopyRates(Symbol(),0,0,100,rates);

   Print(
         " спред ",rates[6].spread               
         );
  }
//+------------------------------------------------------------------+
Так тоже не работает, можно увидеть рабочий пример в MetaTrader 4 build 555 с MqlRates ?
 
ALXIMIKS:

а в 5-ке они тестяться?

У кого-то и в 5-ке не тестятся?
 
ALXIMIKS:

вы объявили переменные типа double, инициализация - это присвоение значений объявленным переменным

double PipStep=0; сделайте


Сработало!!

Век живи, век учись!

Спасибо большое!

 
serferrer:

Так MqlRates в MetaTrader 4 build 555 это массив или структура?

Этот пример из справки (MetaTrader 4 build 555) не работает т.к. нет функции CopyRates

Так тоже не работает, можно увидеть рабочий пример в MetaTrader 4 build 555 с MqlRates ?


MqlRates - структура

MqlRates[] - массив структур

В качестве примера работы со структурой MqlRates посмотрите скрипт period_converter_new

Пример работы ArrayCopyRates (документацию дополним)

MqlRates array1[];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",array1[0].time,"  цена открытия ", array1[0].open);
 
MetaQuotes:

Изменения в языке MQL4

  • ArrayCopyRates() также изменила свое поведение, раньше она производила виртуальное копирование в массив double[][6], теперь же производится виртуальное копирование в массив MqlRates[]. Для совместимости осталось копирование в массив double[][6], но это копирование не виртуальное, а реальное.

У меня есть значительное количество советников, использующих DLL, которые уже давно переданы заказчикам. При этом для передачи параметров в DLL использовались массивы double[][6], в которые при инициализации функцией ArrayCopyRates() производилось виртуальное копирование таймсерий. А затем при вызове функций из DLL в качестве их параметров по ссылке передавались эти массивы и их текущий размер.

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

Правильно ли я понимаю, что для сохранения их работоспособности без изменения кода DLL теперь нужно вызывать ArrayCopyRates() перед каждым вызовом функции из DLL?

 
stringo:
Сейчас отсутствует значение спреда (возможно и биржевой объем ) в структуре MqlRates, это будет добавлено позже?
 
Patrol:

У меня есть значительное количество советников, использующих DLL, которые уже давно переданы заказчикам. При этом для передачи параметров в DLL использовались массивы double[][6], в которые при инициализации функцией ArrayCopyRates() производилось виртуальное копирование таймсерий. А затем при вызове функций из DLL в качестве их параметров по ссылке передавались эти массивы и их текущий размер.

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

Правильно ли я понимаю, что для сохранения их работоспособности без изменения кода DLL теперь нужно вызывать ArrayCopyRates() перед каждым вызовом функции из DLL?


Тут несколько сложнее. Структура, которую принимают dll тоже поменялась.

То есть, Вам необходимо переписать ArrayCopyRates в массив структур MqlRates. Также в Ваших dll нужно заменить описание соответствующей структуры