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

 
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, помощь и обсуждение по алгоритмам и кодам".
 
Интересный факт. Если сделать поиск названия функции FileLoad на русскоязычной/англоязычной версии сайта, то можно обнаружить упоминание использования этой функции (менее) 10-тью людьми.

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

Обсуждение статьи "Основы программирования на MQL5: Файлы"

Renat Fatkhullin, 2016.10.21 23:35

Кстати, появились новые высокоуровневые функции FileLoad и FileSave, которые экономят время разработчиков и сильно упрощают код.
 

Что то сломал, не пойму что. Запускаю скрипт, через пару секунд он пишет в логи "эксперты"  вот такое

Access violation at 0x000001CE3010318B read to 0xFFFFFFFFFFFFFFFF in 'C:\Users\Iskander\AppData\Roaming\MetaQuotes\Terminal\E98C5173D8A802F9B8F133E800FDDE2B\MQL5\Scripts\46\LoadSymbol.ex5'
   crash -->  000001CE3010318B 660F2E441108      ucomisd    xmm0, [rcx+rdx*1+0x08]
              000001CE30103191 7506              jnz        0x000001CE30103199

              000001CE30103193 0F8B17040000      jnp        0x000001CE301035B0

              000001CE30103199 8B4830            mov        ecx, [rax+0x30]
              000001CE3010319C F6C102            test       cl, 0x02
              000001CE3010319F 7521              jnz        0x000001CE301031C2

              000001CE301031A1 48C7400800000000  mov        qword ptr [rax+0x08], 0x00
              000001CE301031A9 83BC24A000000000  cmp        dword ptr [rsp+0xA0], 0x00
              000001CE301031B1 0F84EC090000      jz         0x000001CE30103BA3

              000001CE301031B7 488B8424B4000000  mov        rax, [rsp+0xB4]
              000001CE301031BF 8B4830            mov        ecx, [rax+0x30]
              000001CE301031C2 F6C104            test       cl, 0x04
              000001CE301031C5 0F84A5030000      jz         0x000001CE30103570


00: 0x000001CE3010318B
01: 0x00007FF9ADEA21C1
02: 0x00007FF9ADEA2D73
03: 0x0000000001E91AD0
04: 0x0000000000590008
05: 0x0000006E0000000A


Суть скриптов, обмениваются данными между терминалами посредством записи файлов в общую папку всех терминалов Common.

В этой папке есть ещё папочка, которая с помощью симлинк лежит в рамдиск, который в оперативной памяти.

Что сие может значить?


ЗЫ. Ещё в рам диске пишет, что в нём занято 180метров, а там лежат всего 6 файлов по 1кб. 

ЗЫЫ. Нашёл ошибку. Сравнивал тёплое с мягким, а терминал оказался неженкой и не захотел прощать такие вольности)))

 
Aleksandr Slavskii #:

ЗЫЫ. Нашёл ошибку. Сравнивал тёплое с мягким, а терминал оказался неженкой и не захотел прощать такие вольности)))

Это важно для багрепорта. Крашей не должно быть.

 
fxsaber #:

Это важно для багрепорта. Крашей не должно быть.

Ну примерно так

MqlTick prevTick[];  // объявлена на глобале, ArrayResize сделана в другом месте.
//+------------------------------------------------------------------+
void NewTick(int i, string symb)
  {
   MqlTick ticks[];
   if(FileLoad(fName + symb + "_Tick", ticks, FILE_COMMON) > 0)
      if((ticks[0].bid != prevTick[i].bid) || (ticks[0].ask != prevTick[i].ask) || (ticks[0].time != prevTick[i].time))
        {
         CustomTicksAdd(symb + "_c", ticks);
         prevTick[i] = ticks[0];
        }
  }
//+------------------------------------------------------------------+

Эта функция вызывается в цикле. Отсутствие выделенной i  вызывало краш на строке if(   на второй итерации.

Я не умею багрепорты. 

 
Aleksandr Slavskii #:

Отсутствие выделенной i  вызывало краш на строке if(   на второй итерации.

Я не умею багрепорты. 

Об этом сообщалось.

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

Новая версия платформы MetaTrader 5 build 4755: общие улучшения

fxsaber, 2025.01.07 21:18

b4779, компилятор пропускает ошибку. При выполнении в дебаг-режиме происходит крэш терминала.
void OnStart()
{
  MqlTick Ticks[];
  MqlTick Tick;
  
  Ticks = Tick; // OK
}

Строка для поиска: 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 так и не исправлено.

 
Artyom Trishkin #:

Попробуйте вставить такую строку в метод CCheckGroup::Check() в файле CheckGroup.mqh:

На экране будет отображаться количество объектов CCheckBox в массиве m_rows и индекс idx, передаваемый в метод, по которому предполагается доступ в объекту в массиве.

Если при некоем условии индекс больше, либо равен количеству объектов в массиве, то тут и получается выход за пределы массива.

Соответственно, будет от чего отталкиваться для поиска и исправления ошибки в такой ситуации.

Возможное решение https://www.mql5.com/en/forum/481123

CCheckGroup returns ''array out of range'' when trying to check items not visible
CCheckGroup returns ''array out of range'' when trying to check items not visible
  • 2025.02.08
  • dcstoyanov
  • www.mql5.com
This is the same example from the library https://www.mql5...