Обновление платформы MetaTrader 4 билд 625: Журналы в MetaTrader Market и новый MetaViewer - страница 22

 
Alexey_74:

Иногда, чтобы какую-то задачу решить проще, проще написать собственную DLL, реализующую что-нибудь, либо индикатор. И такую DLL использовать в этих случаях предпочтительнее. Но чтобы передать "барные цены" в DLL всегда приходится объявлять массив, заполнять его "барными ценами" и этот массив только и можно передать в собственную DLL. А можно ли сделать так, чтобы в свою DLL уже сразу можно было пихнуть то, что нужно? В старой версии МТ4 были только Open, High, Low, Close. Теперь же такое многообразие...

Но на тек. момент всё ещё нельзя. Если сунуть с собственную библию, например, open, то получается следующее: 'open' - constant variable cannot be passed as reference



А в 610-м build'е ещё было можно:

#import "aaa"
void fdSTO(const double &o[]);
#import

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   fdSTO(open);
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Лог:

0 error(s), 0 warning(s)                1       1

WinXP-32 build 610.

 

iATR

Возвращает значение технического индикатора Awesome Oscillator.

double iAO(
string symbol, // имя символа
int timeframe, // таймфрейм
int shift // сдвиг
);

Заголовок поправьте.

И в локальной справке.

 
Alexey_74:

Иногда, чтобы какую-то задачу решить проще, проще написать собственную DLL, реализующую что-нибудь, либо индикатор. И такую DLL использовать в этих случаях предпочтительнее. Но чтобы передать "барные цены" в DLL всегда приходится объявлять массив, заполнять его "барными ценами" и этот массив только и можно передать в собственную DLL. А можно ли сделать так, чтобы в свою DLL уже сразу можно было пихнуть то, что нужно? В старой версии МТ4 были только Open, High, Low, Close. Теперь же такое многообразие...

Но на тек. момент всё ещё нельзя. Если сунуть с собственную библию, например, open, то получается следующее: 'open' - constant variable cannot be passed as reference



Эти массивы передаются в функцию OnCalculate как const, соответственно и в свою функцию тоже должны передаваться константой, чтобы у функции не было возможности их изменить. Тогда примет.

void fdSTO(const double & PriceArray[], ...)
{
    ...
}
 
Не соединяется с сервером MQ "New MT4 Test", с которого обновлялся. Пишет "Нет связи".
 
Y.A.K._:
Не соединяется с сервером MQ "New MT4 Test", с которого обновлялся. Пишет "Нет связи".

Этот сервер больше не нужен, так как мы прошли стадию ранних бета-тестов.

Сейчас рабочий сервер - это MetaQuotes-Demo (demo.metaquotes.net:443), где мы выкладываем регулярные обновления бета версий. Сейчас там обкатывается 628 билд.

 
Spy:

Предложение: добавить в функцию OnInit() аргумент, позволяющий различать причину её вызова: добавление советника на график, изменение параметров, перезапуск терминала, смена таймфрейма и т.д.

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

Проблема в том, что если пользователь установит входной параметр в "true", то при последующем запуске терминала с уже установленным на графике советником последний опять всё закроет, чего быть не должно. Если же функция OnInit() будет знать причину своего вызова, то проблема решается:


Всё давным-давно реализовано.

Вызовите в OnInit функцию UninitializeReason и получите причину, почему эксперт был переинициализирован

 

Заметил проблему при вызове пользовательского индикатора

Собственно в чем проблема. С выходом обновлений в самом языке, произошло изменение работы индикаторов которые вызываются из экспертов. Это касается тестера стратегий именно. Раньше я вызывал из эксперта индикатор, при вызове я передавал два параметра init переменную и string . Когда запускаешь тестирование, эксперт подгружает индикатор. Это видно в журнале, далее идет само тестирование, параметры переданы верно, индикатор их видит и с ними работает, но когда нажимаешь стоп тест, то на график должны выводиться индикаторы которые принимали участие в тесте.

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

Если этот же индикатор компилировать билдом ниже 600 то все работает норм и в билде 625. Так что трабла не в коде.

 

Вот сделал скрин . Вызывается индикатор test2, в него передаются параметры 1 и name5, он их принимает и выводит через Alert, это видно. Далее нажимаем стоп, снова вызов индикатора но уже строковой переменной нет. Причем ее нет вообще, даже значение по умолчанию не подставилось.

 
Можно ли программно читать новостную ленту из терминала?
 
Существует ли в МЕ возможность сделать курсор немигающим?
Причина обращения: