Ошибки, баги, вопросы - страница 3614

 

MQL_PROGRAM_NAME в индикаторах возвращает INDICATOR_SHORTNAME.

void OnInit()
{
  IndicatorSetString(INDICATOR_SHORTNAME, "qwert");
  Print(MQLInfoString(MQL_PROGRAM_NAME)); // qwert
}

int OnCalculate(const int rates_total, const int, const int, const double &[] )
{
  return(rates_total);
}

Не нашел в Документации такого. При этом используется издавна.

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Vladimir Karputov, 2016.09.23 10:31

 Print(MQLInfoString(MQL_PROGRAM_NAME)); возвращает короткое имя индикатора. Если короткое имя не задано - вернётся полное имя.

Баг или фича?

 
fxsaber #:

MQL_PROGRAM_NAME в индикаторах возвращает INDICATOR_SHORTNAME.

Не нашел в Документации такого. При этом используется издавна.

Баг или фича?

Присоединяюсь. https://www.mql5.com/ru/forum/480125/page2#comment_55773774

Как получить собственное имя и путь файла ex5 ?
Как получить собственное имя и путь файла ex5 ?
  • 2025.01.30
  • Alex Renko
  • www.mql5.com
Подскажите как получить в собственном коде полный путь к своему же ex5...
 
fxsaber #:
void OnInit() {   IndicatorSetString(INDICATOR_SHORTNAME, "qwert");   Print(MQLInfoString(MQL_PROGRAM_NAME)); // qwert }

А так, при смене мест?

void OnInit()
{
  Print(MQLInfoString(MQL_PROGRAM_NAME)); // ???
  IndicatorSetString(INDICATOR_SHORTNAME, "qwert");
}
 
Vitaly Muzichenko #:

А так, при смене мест?

Да но если 

IndicatorSetString(INDICATOR_SHORTNAME, "qwert");

будет стоять первым то далее 

Print(MQLInfoString(MQL_PROGRAM_NAME));

всегда будет тоже самое что и INDICATOR_SHORTNAME

 
Alex Renko #:

Да но если 

будет стоять первым то далее 

всегда будет тоже самое что и INDICATOR_SHORTNAME

Не ставьте первым, а ставьте вторым.

Вообще проблемы не вижу.

 
Vitaly Muzichenko #:

Не ставьте первым, а ставьте вторым.

Вообще проблемы не вижу.

Ну это костыль и баг - описать надо в документации это както тогда что для индикаторов надо INDICATOR_SHORTNAME ставить в конце OnInit aто он карежыт любые вызовы MQL_PROGRAM_NAME, т.е мы должны догадаться 

 
Alex Renko #:

Ну это костыль и баг - описать надо в документации это както тогда что для индикаторов надо INDICATOR_SHORTNAME ставить в конце OnInit aто он карежыт любые вызовы MQL_PROGRAM_NAME, т.е мы должны догадаться 

MQL_PROGRAM_NAME, может вызываться после OnInit.  INDICATOR_SHORTNAME может назначаться ДО OnInit.

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

 
fxsaber #:

MQL_PROGRAM_NAME, может вызываться после OnInit.  INDICATOR_SHORTNAME может назначаться ДО OnInit.

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

Пасиб! 

Из всего я понял одно -  что лучше всего все смотреть и принтовать и с друг другом сравнивать что бы исключить работу переименованного ex5 или старой версии что отличается от серверной 

   // 777: INDICATOR_SHORTNAME Должен стоять всегда в конце Ininit
   
   
   string 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(const string Str, const short Char)
{
    int Pos = StringLen(Str) - 1;

    while (Pos >= 0 && Str[Pos] != Char)
        Pos--;

    return Pos;
}
//-------------------------------------------------------------------------------------
 
fxsaber #:

MQL_PROGRAM_NAME в индикаторах возвращает INDICATOR_SHORTNAME.

Не нашел в Документации такого. При этом используется издавна.

Баг или фича?

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

 
Комментарии, не относящиеся к этой теме, были перенесены в "Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам".