MQL_PROGRAM_NAME, может вызываться после OnInit. INDICATOR_SHORTNAME может назначаться ДО OnInit.
MQL_PROGRAM_NAME может быть прописан в подключаемом mqh, который вообще не знает, из какого типа программы будет вызываться и откуда, но должен работать одинаково.
Пасиб!
Из всего я понял одно - что лучше всего все смотреть и принтовать и с друг другом сравнивать что бы исключить работу переименованного ex5 или старой версии что отличается от серверной
// 777: INDICATOR_SHORTNAME Должен стоять всегда в конце Ininitstring FullPath = MQLInfoString(MQL_PROGRAM_PATH);
string FileNameFromPath = GetFileNameFromPath(FullPath);
//Print("FileNameFromPath: ", FileNameFromPath);string PROGRAM_NAME = MQLInfoString(MQL_PROGRAM_NAME)+".ex5"; // GetFileNameFromPath(FullPath);//Print("MQL_PROGRAM_NAME: ", PROGRAM_NAME);// Устанавливаем это имя как короткое название индикатораIndicatorSetString(INDICATOR_SHORTNAME, SoftNameVersion);
//Print("SoftNameVersion: ",SoftNameVersion);if(FileNameFromPath != PROGRAM_NAME || FileNameFromPath != SoftNameVersion || PROGRAM_NAME != SoftNameVersion)
{
Print("Old version of soft - please download New at www.....");
return(INIT_FAILED);
}
//-------------------------------------------------------------------------------------string GetFileNameFromPath(string FullPath)
{
int LastBackslash = StringLastIndexOf(FullPath, '\\'); // Находим последнее вхождение "\"if (LastBackslash >= 0)
return StringSubstr(FullPath, LastBackslash + 1); // Извлекаем имя файлаreturn FullPath; // Если `\` не найден, возвращаем весь путь (на случай, если это просто имя файла)
}
// Функция для поиска последнего вхождения символа в строкеint StringLastIndexOf(conststring Str, constshort Char)
{
int Pos = StringLen(Str) - 1;
while (Pos >= 0 && Str[Pos] != Char)
Pos--;
return Pos;
}
//-------------------------------------------------------------------------------------
Интересный факт. Если сделать поиск названия функции FileLoad на русскоязычной/англоязычной версии сайта, то можно обнаружить упоминание использования этой функции (менее) 10-тью людьми.
Попробуйте вставить такую строку в метод CCheckGroup::Check() в файле CheckGroup.mqh:
На экране будет отображаться количество объектов CCheckBox в массиве m_rows и индекс idx, передаваемый в метод, по которому предполагается доступ в объекту в массиве.
Если при некоем условии индекс больше, либо равен количеству объектов в массиве, то тут и получается выход за пределы массива.
Соответственно, будет от чего отталкиваться для поиска и исправления ошибки в такой ситуации.
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
MQL_PROGRAM_NAME, может вызываться после OnInit. INDICATOR_SHORTNAME может назначаться ДО OnInit.
MQL_PROGRAM_NAME может быть прописан в подключаемом mqh, который вообще не знает, из какого типа программы будет вызываться и откуда, но должен работать одинаково.
Пасиб!
Из всего я понял одно - что лучше всего все смотреть и принтовать и с друг другом сравнивать что бы исключить работу переименованного ex5 или старой версии что отличается от серверной
MQL_PROGRAM_NAME в индикаторах возвращает INDICATOR_SHORTNAME.
Не нашел в Документации такого. При этом используется издавна.
Баг или фича?
Это баг, который не будет исправлен, т.к. давно используется, как недокументированная фича.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Обсуждение статьи "Основы программирования на MQL5: Файлы"
Renat Fatkhullin, 2016.10.21 23:35
Кстати, появились новые высокоуровневые функции FileLoad и FileSave, которые экономят время разработчиков и сильно упрощают код.Что то сломал, не пойму что. Запускаю скрипт, через пару секунд он пишет в логи "эксперты" вот такое
Суть скриптов, обмениваются данными между терминалами посредством записи файлов в общую папку всех терминалов Common.
В этой папке есть ещё папочка, которая с помощью симлинк лежит в рамдиск, который в оперативной памяти.
Что сие может значить?
ЗЫ. Ещё в рам диске пишет, что в нём занято 180метров, а там лежат всего 6 файлов по 1кб.
ЗЫЫ. Нашёл ошибку. Сравнивал тёплое с мягким, а терминал оказался неженкой и не захотел прощать такие вольности)))
ЗЫЫ. Нашёл ошибку. Сравнивал тёплое с мягким, а терминал оказался неженкой и не захотел прощать такие вольности)))
Это важно для багрепорта. Крашей не должно быть.
Это важно для багрепорта. Крашей не должно быть.
Ну примерно так
Эта функция вызывается в цикле. Отсутствие выделенной i вызывало краш на строке if( на второй итерации.
Я не умею багрепорты.
Отсутствие выделенной i вызывало краш на строке if( на второй итерации.
Я не умею багрепорты.
Об этом сообщалось.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 4755: общие улучшения
fxsaber, 2025.01.07 21:18
b4779, компилятор пропускает ошибку. При выполнении в дебаг-режиме происходит крэш терминала.Строка для поиска: Oshibka 124.
comment 1
comment 2
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Ошибки, баги, вопросы
Slava, 2024.11.28 13:30
Добавим в методы Std, Var и Cov параметр ddof (Delta Degrees of Freedom), чтобы можно было устанавливать делитель на size или size-1
Обещали исправить методы Std, Var, Cov
Наверно забыли.
Билд 4790 так и не исправлено.
Попробуйте вставить такую строку в метод CCheckGroup::Check() в файле CheckGroup.mqh:
На экране будет отображаться количество объектов CCheckBox в массиве m_rows и индекс idx, передаваемый в метод, по которому предполагается доступ в объекту в массиве.
Если при некоем условии индекс больше, либо равен количеству объектов в массиве, то тут и получается выход за пределы массива.
Соответственно, будет от чего отталкиваться для поиска и исправления ошибки в такой ситуации.
Возможное решение https://www.mql5.com/en/forum/481123