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

 
Интересный факт. Если сделать поиск названия функции 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...
 
Нафига так писать?!

Forum on trading, automated trading systems and testing trading strategies

IsStopped(__FUNCTION__) error why?

wk.Kun, 2021.11.02 13:17

IsStopped(__FUNCTION__) Normal after comment.
bool CTrade::PositionModify(const ulong ticket,const double sl,const double tp)
  {
//--- check stopped
   if(IsStopped(__FUNCTION__))
      return(false);
//--- check position existence
   if(!PositionSelectByTicket(ticket))
      return(false);
//--- clean
   ClearStructures();
//--- setting request
   m_request.action  =TRADE_ACTION_SLTP;
   m_request.position=ticket;
   m_request.symbol  =PositionGetString(POSITION_SYMBOL);
   m_request.magic   =m_magic;
   m_request.sl      =sl;
   m_request.tp      =tp;
//--- action and return the result
   return(OrderSend(m_request,m_result));
  }

Что мешало написать this? Потенциальные же ошибки при копи-пасте и при чтении кода.


В Учебнике только в четырех файлах содержится вызов через this. На чем экономим и ради чего?

Include\MQL5Book\CustomSymbolMonitor.mqh
Include\MQL5Book\toyjson.mqh
Include\MQL5Book\TradeBaseMonitor.mqh
Include\MQL5Book\ws\wsmessage.mqh
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7
Программирование на MQL5 для трейдеров — исходные коды из книги. Часть 7
  • www.mql5.com
В заключительной седьмой части книги рассматриваются расширенные возможности MQL5 API, которые пригодятся при разработке программ для MetaTrader 5. Некоторые из них — пользовательские финансовые инструменты и встроенный экономический календарь, а другие — универсальные технологии, такие как сетевые функции, базы данных и криптография.
 
fxsaber #:
Нафига так писать?!

Что мешало написать this? Потенциальные же ошибки при копи-пасте и при чтении кода.

CTrade, один из не многих классов, который можно использовать без знаний ООП. А всё потому, что написан нормально, а не через  this.

 
Aleksandr Slavskii #:

CTrade, один из не многих классов, который можно использовать без знаний ООП. А всё потому, что написан нормально, а не через  this.

bool CTrade::PositionModify(const ulong ticket,const double sl,const double tp)
  {
//--- check stopped
   if(this.IsStopped(__FUNCTION__))

Знания ООП требуются для прочтения? Не возникает вопрос, почему IsStopped содержит входной параметр?


А ниже же полное понимание, что вызывается, правда?

return(OrderSend(m_request,m_result));


Многим приходит в голову при виде такого вызова OrderSend нажать ALT+G?