Новая версия платформы MetaTrader 5 build 5100: Переход на Git и хаб разработчиков MQL5 Algo Forge, темная тема и улучшения интерфейса - страница 18

 
Renat Fatkhullin #:

Выпустили обновленную версию 5062 с исправлением.

Чтобы обновиться, надо:

  1. Удалить *.chr чарты в каталоге данных MQL5\Profiles\Charts\Default (или другое имя активного профиля), запустить и обновиться через Help -> Check for updates или 
  2. Установить поверх старой версии https://download.mql5.com/cdn/web/metaquotes.ltd/mt5/mt5setup.exe

Приносим свои извинения за креш.

Вроде работает.
Спасибо.

 
Renat Fatkhullin #:

Выпустили обновленную версию 5062 с исправлением.

Чтобы обновиться, надо:

  1. Удалить *.chr чарты в каталоге данных MQL5\Profiles\Charts\Default (или другое имя активного профиля), запустить и обновиться через Help -> Check for updates или 
  2. Установить поверх старой версии https://download.mql5.com/cdn/web/metaquotes.ltd/mt5/mt5setup.exe

Приносим свои извинения за креш.
Спасибо. Работает.
 

После удаления remote branch через сайт единственный способ заставить редактор узнать об этом - снести local repository.

Скажите пожалуйста, есть ли планы изменять это? Или в обозримом будущем будем так работать?

[edit] При пересоздании бранча через сайт с другим parent commit, похоже, без удаления local repo обойтись нельзя. Сейчас попробую показать...
 
Vladislav Boyko #:
[edit] При пересоздании бранча через сайт с другим parent commit, похоже, без удаления local repo обойтись нельзя. Сейчас попробую показать...

  1. Создал проект через визард


  2. Создал через редактор dev branch и запушил 2 комита


  3. Pull request -> squash commit -> delete branch "dev"


  4. Переключился в редакторе на 'refs/remotes/origin/main';
    выполнил git pull;
    запушил комит (в main)


  5. Из последнего комита в main создал на сайте dev branch


  6. Переключился в редакторе на 'refs/remotes/origin/dev' и нажал git pull


  7. Еще раз git pull


  8. Можно удалять local repo и делать git clone
 
Forester #:

Никогда не пользовался. По сути это происходило само собой 20 лет существования МТ.
Теперь надо вносить значительные правки для взаимодействия 2-х функций работающих с 1-байтовыми данными, которые раньше хорошо взаимодейстововали и теперь перестанут.

Можно пример кода union для динамических массивов?
Как полученый из WebRequest char[] перeдать в CryptDecode , который принимает uchar[]? Я не представляю как это сделать... Нам в любом случае надо иметь 2 массива char и uchar, чтобы отдавать их функциям.

И эта задача появится не только у меня - в соседней ветке проблема с JASON библиотекой. Всем ее пользователям видимо придется вноосить аналогичные изменения.

Думаю проще добавить перегрузку в WebReques .

Да, решение с ArraySwap, будет интереснее. ArraySwap это бесплатно в плане производительности, т.к. меняются просто указатели двух массивов. При этом дело имеем с динамическими массивами
не знал что:

 
Vladislav Boyko #:

  1. Создал проект через визард
  2. Создал через редактор dev branch и запушил 2 комита
  3. Pull request -> squash commit -> delete branch "dev"
  4. Переключился в редакторе на 'refs/remotes/origin/main';
    выполнил git pull;
    запушил комит (в main)
  5. Из последнего комита в main создал на сайте dev branch
  6. Переключился в редакторе на 'refs/remotes/origin/dev' и нажал git pull
  7. Еще раз git pull
  8. Можно удалять local repo и делать git clone

На видео ниже показано воспроизведение с нуля. Теперь точно каждый желающий сможет повторить.

 
Один пост () с англоязычного форума (такая же ветка о билде)

Файл *.mp4 file был приаттачен к посту   

------------------------

для информации

MetaTrader 5 Platform beta build 5050: Transition to Git and MQL5 Algo Forge developer hub, dark theme and interface improvements
MetaTrader 5 Platform beta build 5050: Transition to Git and MQL5 Algo Forge developer hub, dark theme and interface improvements
  • 2025.06.01
  • Alain Verleyen
  • www.mql5.com
On Friday, May 30, 2025, an updated beta version of the MetaTrader 5 platform will be released...
Файлы:
 

Я вам еще одну мелочь напишу сразу.

Если на момент создания проекта в редакторе не открыто ни одного файла, то после создания проекта вкладки отображены не будут. Я имею в виду эти вкладки: .

Проверил еще раз, уточнение: после создания проекта вкладки не будут отображены если в момент создания проекта не существовало ни одной вкладки. То есть, если есть открытый документ, но его окно не развернуто, то вкладок тоже не будет.

Но это супер ерунда; вот это, например, сильно важнее, как по мне.

 

Редактор ошибочно думает, что mqproj файл изменен.

  1. Создать shared project (script)
  2. Поставить галочку "Display a confirmation window..."
  3. Сохранить файл
  4. Убрать галочку "Display a confirmation window..."
  5. Сохранить файл
  6. Готово, теперь редактор будет ошибочно думать, что mqproj файл изменен.
  7. Можно запушить интересный комит
Смотрите полное воспроизведение на видео (ниже).

 

Билд 4885. Если в новом исправлено - сообщите. Но сомневаюсь, т.к. обновлений долго не было.

Баг с таймером.
Если запускать с параметром quick=true, то функция работает очень быстро и таймер всегда срабатывает через 100мс.

Баг при quick=false:
EventSetMillisecondTimer(100);  вызывает OnTimer() не через 100 мс, а через время от предыдущего вызова до нового + 100 мс. Аналогично и EventSetTimer(1) не через 1 сек, а с дополнительной паузой.

Например если после предыдущего вызова, некий код работал 5 секунд, то следущий  сработает через паузу 5 сек 100мс:

2025.06.04 11:01:12.364 OnTimer via 4108 ms   - момент предыдущего вызова OnTimer() и его остановки через EventKillTimer() и начало работы медленной функции на 5 секунд
2025.06.04 11:01:17.364 5) Work time: 4999 ms - через 5 сек фунция завершила работу
2025.06.04 11:01:17.364 start timer           - и запустила таймер  EventSetMillisecondTimer(100); 
2025.06.04 11:01:22.472 OnTimer via 5107 ms   - таймер сработал через 5.1 секунды, а не через 0.1 секунды

Эксперт:

input bool quick  = false;
void OnInit(){downloads();}
void OnDeinit(const int reason){ EventKillTimer();}

ulong mcs;
void OnTimer()  {
   Print("OnTimer via ", (GetMicrosecondCount()-mcs)/1000," ms");
   EventKillTimer();
   downloads();
}
int i=1;
void downloads(){
   if(quick){Print("start timer quick");}//быстрая функция
   else{//почему то тормозит перед запуском следущего OnTimer на время от предыдущго вызова
      mcs = GetMicrosecondCount();
      Sleep(i*1000); //медленные расчеты
      Print(i,") Work time: ", (GetMicrosecondCount()-mcs)/1000," ms");
      Print("start timer");
   }
   i++; if(i==10){Print("Finish!!!"); EventKillTimer();return;}
   mcs = GetMicrosecondCount();
   EventSetMillisecondTimer(100); 
}

Полный вывод в лог:

2025.06.04 11:00:52.823 start timer
2025.06.04 11:00:53.940 1) Work time: 994 ms
2025.06.04 11:00:53.940 start timer
2025.06.04 11:00:54.040 OnTimer via 99 ms
2025.06.04 11:00:56.043 2) Work time: 2002 ms
2025.06.04 11:00:56.043 start timer
2025.06.04 11:00:58.140 OnTimer via 2096 ms
2025.06.04 11:01:01.139 3) Work time: 2998 ms
2025.06.04 11:01:01.139 start timer
2025.06.04 11:01:04.249 OnTimer via 3109 ms
2025.06.04 11:01:08.255 4) Work time: 4005 ms
2025.06.04 11:01:08.255 start timer
2025.06.04 11:01:12.364 OnTimer via 4108 ms
2025.06.04 11:01:17.364 5) Work time: 4999 ms
2025.06.04 11:01:17.364 start timer
2025.06.04 11:01:22.472 OnTimer via 5107 ms
2025.06.04 11:01:28.472 6) Work time: 5999 ms
2025.06.04 11:01:28.472 start timer
2025.06.04 11:01:34.578 OnTimer via 6105 ms
2025.06.04 11:01:41.578 7) Work time: 6999 ms
2025.06.04 11:01:41.578 start timer
2025.06.04 11:01:48.682 OnTimer via 7103 ms
2025.06.04 11:01:56.673 8) Work time: 7990 ms
2025.06.04 11:01:56.673 start timer
2025.06.04 11:02:04.760 OnTimer via 8086 ms
2025.06.04 11:02:13.760 9) Work time: 8999 ms
2025.06.04 11:02:13.760 start timer
2025.06.04 11:02:13.760 Finish!!!

Убрать таймер не предлагайте  - нужно именно так.

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

Надеюсь к релизу разработчики успеют исправить.

Добавлено: Возможно при EventKillTimer(); EventSetMillisecondTimer(100); EventSetTimer(100); надо что-то обнулить в внутреннем коде?