Откуда эти невнятные ошибки?

 

Ни разу с таким косяком я не сталкивался. 2-ой день удивляюсь. Запускаю бота в отладчике и вижу в журнале:

2024.11.08 22:54:13.508 2024.01.02 01:05:00   Access violation at 0x00007FF7622C5896 read to 0x000000F20206F840
2024.11.08 22:54:13.509 2024.01.02 01:05:00      crash -->  00007FF7622C5896 F30F6F0A          movdqu     xmm1, [rdx]
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C589A F3420F6F5402F0    movdqu     xmm2, [rdx+r8*1-0x10]
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58A1 F30F7F09          movdqu     [rcx], xmm1
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58A5 F3420F7F5401F0    movdqu     [rcx+r8*1-0x10], xmm2
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58AC C3                ret       
2024.11.08 22:54:13.509 2024.01.02 01:05:00   
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58AD 4E8D0C02          lea        r9, [rdx+r8*1]
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58B1 483BCA            cmp        rcx, rdx
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58B4 4C0F46C9          cmovbe     r9, rcx
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58B8 493BC9            cmp        rcx, r9
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58BB 0F823F040000      jb         0x00007FF7622C5D00
2024.11.08 22:54:13.509 2024.01.02 01:05:00   
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58C1 833DB8E6540003    cmp        dword ptr [0x00007FF762813F80], 0x03
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58C8 0F82E2020000      jb         0x00007FF7622C5BB0
2024.11.08 22:54:13.509 2024.01.02 01:05:00   
2024.11.08 22:54:13.509 2024.01.02 01:05:00                 00007FF7622C58CE 4981F800200000    cmp        r8, 0x2000
2024.11.08 22:54:13.509 2024.01.02 01:05:00   
2024.11.08 22:54:13.509 2024.01.02 01:05:00   00: 0x00007FF7622C5896
2024.11.08 22:54:13.509 2024.01.02 01:05:00   01: 0x00007FF761496149
2024.11.08 22:54:13.509 2024.01.02 01:05:00   02: 0x000000F201FFBD78
2024.11.08 22:54:13.509 2024.01.02 01:05:00   
2024.11.08 22:55:51.812 stopped by user
2024.11.08 22:55:51.812 test Experts\myBots\toTrade\OneTradeADay\OneTradeAWeek.ex5 on GBPUSD,H1 thread finished
2024.11.08 22:55:51.814 disconnected
2024.11.08 22:55:51.815 prepare for shutdown
2024.11.08 22:55:51.815 shutdown finished

Никакой информации об конкретной ошибке нет..

Сверху вижу рекламу, что требуется С++ для разработки самого продвинутого языка для написания торговых роботов.. А где отладчик продвинутый? Реально, как найти ошибку, если ни на какую строчку не ругается компилятор? Да и классы проверены временем уже.

 
Viktar Dzemikhau:

Ни разу с таким косяком я не сталкивался. 2-ой день удивляюсь. Запускаю бота в отладчике и вижу в журнале:

Никакой информации об конкретной ошибке нет..

Сверху вижу рекламу, что требуется С++ для разработки самого продвинутого языка для написания торговых роботов.. А где отладчик продвинутый? Реально, как найти ошибку, если ни на какую строчку не ругается компилятор? Да и классы проверены временем уже.

наиболее вероятно, что у вас в боте используются прямо/косвенно DLL и они не вполне скажем так хороши ;-) например не готовы что бот может быть под отладкой и остановиться

это просто типичный дамп который вылетает при ошибках в DLL. Обращение к чужой или битой памяти.

после которых надо перезагружать тестер (для 4-ки весь терминал). Иначе следующий прогон будет неверным

---

в любом случае - у вас как у разработчика есть конкретные места под подозрением - спросите приватно у разработчиков MQ. Чем чёрт не шутит - может и действительно баг с очередным новым компилятором

 
Viktar Dzemikhau:

Ни разу с таким косяком я не сталкивался. 2-ой день удивляюсь. Запускаю бота в отладчике и вижу в журнале:

Никакой информации об конкретной ошибке нет..

Сверху вижу рекламу, что требуется С++ для разработки самого продвинутого языка для написания торговых роботов.. А где отладчик продвинутый? Реально, как найти ошибку, если ни на какую строчку не ругается компилятор? Да и классы проверены временем уже.

Покажи хоть код в ините и что за классы
 
Maxim Kuznetsov #:

наиболее вероятно, что у вас в боте используются прямо/косвенно DLL и они не вполне скажем так хороши ;-) например не готовы что бот может быть под отладкой и остановиться

это просто типичный дамп который вылетает при ошибках в DLL. Обращение к чужой или битой памяти.

dll не использую в тестовых версиях сов. Только классы и библиотеки. Ну и инклюдники попадаются ещё.


Maxim Kuznetsov #:
в любом случае - у вас как у разработчика есть конкретные места под подозрением - спросите приватно у разработчиков MQ. Чем чёрт не шутит - может и действительно баг с очередным новым компилятором

А где это можно сделать? Сейчас же сервисдеска уже нет..


Dz Mak #:
Покажи хоть код в ините и что за классы

инит и деинит:

//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//|                                                                         Expert initialization function                                                                         |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit() {
//---
  sym = new SymbolInstance(_Symbol);
  sig = new Signal(sym);
//  mm = new MoneyManagement();
  order = new OrdersHandling(i_tryCount);
  position = new PositionsHandling(i_tryCount);
  g_magic = generateMagicNumber(i_magic, sym.getName(), i_tf);
//---
  return INIT_SUCCEEDED;
}
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//|                                                                        Expert deinitialization function                                                                        |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
void OnDeinit(const int reason) {
//---
  delete sym;
  delete sig;
//  delete mm;
  delete order;
  delete position;
}

Самое что интересное, я эти классы уже больше года использую. Уже проверены ни один раз и даже в более сложных системах. В гридерах, например. А здесь 1 ордер в день..((

 
Viktar Dzemikhau #:

dll не использую в тестовых версиях сов. Только классы и библиотеки. Ну и инклюдники попадаются ещё.


А где это можно сделать? Сейчас же сервисдеска уже нет..


инит и деинит:

Самое что интересное, я эти классы уже больше года использую. Уже проверены ни один раз и даже в более сложных системах. В гридерах, например. А здесь 1 ордер в день..((

навскидку - неверная очередность деструкторов (они по идее должны быть строго наоборот с конструкторами - кто первый инитился, последним разрушается)

если кто-то в sig сослался на sym (а так оно и есть по коду), что конструкторами допустимо, то в деструктороах получится бяка

 

Ещё меня удивляет вот такое в журнале при запуске бота:

2024.11.08 23:39:38.035 Tester  Local network farm switched off
2024.11.08 23:39:38.035 Tester  Cloud servers switched off
2024.11.08 23:40:21.973 Tester  "myBots\toTrade\OneTradeADay\OneTradeAWeek.ex5" 64 bit
2024.11.08 23:40:22.364 Core 03 agent process started on 127.0.0.1:3002
2024.11.08 23:40:22.364 Core 03 connecting to 127.0.0.1:3002
2024.11.08 23:40:34.130 Core 03 tester agent authorization error
2024.11.08 23:40:34.130 Core 03 connection closed

Где там агент не может авторизоваться..

 
Maxim Kuznetsov #:

навскидку - неверная очередность деструкторов (они по идее должны быть строго наоборот с конструкторами - кто первый инитился, последним разрушается)

если кто-то в sig сослался на sym (а так оно и есть по коду), что конструкторами допустимо, то в деструктороах получится бяка

Возможно. Но, раньше не натыкался на такие грабли я ещё. Понаблюдаю.

Кстати, я в ините сделал так:

//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
//|                                                                         Expert initialization function                                                                         |
//+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
int OnInit() {
//---
  Print("_OnInit()");
  sym = new SymbolInstance(_Symbol);
  sig = new Signal(sym);
//  mm = new MoneyManagement();
  order = new OrdersHandling(i_tryCount);
  position = new PositionsHandling(i_tryCount);
  g_magic = generateMagicNumber(i_magic, sym.getName(), i_tf);
  Print("OnInit()");
//---
  return INIT_SUCCEEDED;
}

В принципе, сейчас запустил в отладчике и вижу:

2024.11.08 23:44:19.164 2024.01.01 00:00:00   _OnInit()
2024.11.08 23:44:19.164 2024.01.01 00:00:00   OnInit()
2024.11.08 23:44:20.071 GBPUSD,M1: history cache allocated for 691284 bars and contains 369340 bars from 2023.01.02 01:01 to 2023.12.29 23:58
2024.11.08 23:44:20.071 GBPUSD,M1: 1 bar from 2024.01.02 01:00 added
2024.11.08 23:44:20.071 GBPUSD,M1: history begins from 2023.01.02 01:01
2024.11.08 23:45:26.447 2024.01.02 15:00:00   Time!

Прошёл инициализация без косяков. Тут, по ходу, косяк даже не в коде. Просто я не хотел мешать 2 вопроса в 1.

По сути, каждый раз возникает головняк в агентами тестирования. Я выбрал уже очередной раз другого агента и запустилось без ошибок. Но, как такое может быть, что к локальному агенту терминал подключится не может? Баг? Было такое у кого-нибудь? По ходу, косяк, именно, с агентом.

 
Viktar Dzemikhau #:
Было такое у кого-нибудь? По ходу, косяк, именно, с агентом.

Если баг с одним агентом, то обычно три причины:

1. Агент продаёт ресурс в клауд и сейчас занят сторонней задачей

2. Не хватает ресурсов агенту или не хватило в прошлый запуск и он в состоянии метаболизма - заработает спустя время.

3. Ему кердык по невыясненным причинам (ошибка при деинициализации - как вариант) - отключить и запустить изнова.

 
@Aleksey Vyazmikin, так я не настраивал продажу ресурсов. Да и странно, как может агент чем-то занят быть, если ему никаких задач не задано.. Сейчас сменил терминал, посмотрю на результат. Видимо, попался брокер с косяками, хотя и регулируемый. Выходные были. Даже не связаться.
 
Viktar Dzemikhau #:
@Aleksey Vyazmikin, так я не настраивал продажу ресурсов. Да и странно, как может агент чем-то занят быть, если ему никаких задач не задано.. Сейчас сменил терминал, посмотрю на результат. Видимо, попался брокер с косяками, хотя и регулируемый. Выходные были. Даже не связаться.

Если компьютер только включили, и ресурсов хватает, то да, странно.