Новая версия платформы MetaTrader 4 build 1170 - страница 16

 
Можно ли новые билды Metaeditor (идущие в составе MT5) запустить в режиме MQL4?  Раньше вроде достаточно было положить файл metaeditor64 в папку с МТ4, переименовав в metaeditor, и всё работало. А теперь он всегда запускается как MQL5, и создаёт себе папку MQL5.
 
Отловил незнакомое отличие MT4 от MT5. Это баг MT4?
#property strict

bool Print2( const string Str )
{
  Print(Str);
  
  return(true);
}

void Func()
{
  static bool b = Print2(__FUNCSIG__); // MT4 - вызывается, MT5 - нет.
}

void OnStart() {}
 
Возможна такая ситуация
2019.05.31 09:52:52.227 '': order #37664880 was closed by #37664879
2019.05.31 09:52:52.227 '': order #37664879 buy 0.00 XXX at xxx closed due take-profit at price xxx
Позиция схлопнулась по CloseBy, но при этом "закрылась по тейку" (нулевой объем).
 

На Win 8.1 запустил МТ-4 версии 1170: прога запустилась, однако в правом нижнем углу пишет "Нет связи", потом "Общая ошибка" и так по кругу...

Как исправить "Общую ошибку" и "Нет связи" ?

---

В сетевом экране выставил "Разрешать все действия" - и даже с этой опцией "Нет связи" и далее "Общая ошибка".

Сюда зашёл и задал вопрос с этой же Win 8.1 - стало быть связь таки есть...

 

Что-то с миллисекундами непонятное творится. Вроде в документации, в структуре MqlTick поле time_msc в отличии от mql5 отсутствует. Но при наборе кода оно предлагается и компилируется. Ну ладно, думаю, не поправили документацию. Пишу такой код

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[])
{
 MqlTick mqlTick;
 if(rates_total > prev_calculated)
  {
   SymbolInfoTick(_Symbol, mqlTick);
   Comment("Время последнего бара - ", TimeToString(time[0],TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"."+IntegerToString(time[0]%1000,3,'0'), "\n"
         , "Время mqlTick.time - ", TimeToString(mqlTick.time,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"."+IntegerToString(mqlTick.time%1000,3,'0'), "\n"
         , "Время mqlTick.time_msc - ", TimeToString(mqlTick.time_msc/1000,TIME_DATE|TIME_MINUTES|TIME_SECONDS)+"."+IntegerToString(mqlTick.time_msc%1000,3,'0'), "\n"
         );
  }
 //--- return value of prev_calculated for next call
   return(rates_total);
}


и получаю такой комментарий графика

Выходит, что время открытия бара time[0] в миллисекундах, время time в структуре тоже в миллисекундах (содержат миллисекунды), а время time_msc в структуре MqlTick ровно в секундах.

Это ошибка? Попутали в какое поле какое время писать? Или по причине отсутствия в документации и соответственно не рекомендуется использовать?

Файлы:
l00.mq4  5 kb
 
Alexey Viktorov:

Что-то с миллисекундами непонятное творится. Вроде в документации, в структуре MqlTick поле time_msc в отличии от mql5 отсутствует. Но при наборе кода оно предлагается и компилируется. Ну ладно, думаю, не поправили документацию. Пишу такой код


и получаю такой комментарий графика

Выходит, что время открытия бара time[0] в миллисекундах, время time в структуре тоже в миллисекундах (содержат миллисекунды), а время time_msc в структуре MqlTick ровно в секундах.

Это ошибка? Попутали в какое поле какое время писать? Или по причине отсутствия в документации и соответственно не рекомендуется использовать?

Все правильно выводит. Ошибка в понимании.

 
fxsaber:

Все правильно выводит. Ошибка в понимании.

Было бы неплохо и пояснить нужное "понимание"

 
Artyom Trishkin:

Было бы неплохо и пояснить нужное "понимание"

time[0] - время последнего сформированного бара в секундах.

Tick.time - время тика в секундах.

Tick.time_msc - время тика в миллисекундах (Tick.time * 1000).

void OnStart()
{
  datetime time = D'2019.06.07 20:10';
  
  Print(TimeToString(time, TIME_DATE|TIME_MINUTES|TIME_SECONDS) + "." + IntegerToString(time % 1000, 3, '0')); // 2019.06.07 20:10:00.200
}
 
fxsaber:

time[0] - время последнего сформированного бара в секундах.

Отлично. НО!!! Если время бара в секундах, откуда излишки сверх секунд?

Я брал long значение этого времени и делил на 60 в мечтах получить минуты... НО... почему-то без остатка не делится. Это как понимать?

 
Alexey Viktorov:

Отлично. НО!!! Если время бара в секундах, откуда излишки сверх секунд?

Я брал long значение этого времени и делил на 60 в мечтах получить минуты... НО... почему-то без остатка не делится. Это как понимать?

  Print((long)time % 60);   // 0
  Print((long)time % 1000); // 200