Так в коде нигде нет проверки на то, создался инстанс или нет. К примеру, нужно проверить хотя бы вот это место:
curDayDt = new DateTimeInstance(TimeCurrent()); if (CheckPointer(curDayDt) == POINTER_INVALID) { Alert("Instance of DateTimeInstance class creating error"); return; }
Виктор Демихов:
Т.е. значения часа, минуты и секунд равны нулям! Это как так? В конструкторах время нельзя задавать что-ли полям класса?
Всё же написано правильно, как я понимаю. В чём может быть причина?
// Конструктор класса. ========================================================================================================================================================================================================================================== Signal :: Signal(SymbolInstance *ptrSymbol) { // Указатель на класс свойств торгового инструмента m_ts = new TimeSeries(); m_symbol = ptrSymbol; curDayDt = new DateTimeInstance(TimeCurrent()); Print(TimeCurrent()); Print(__FUNCTION__, ":: curDayDt = ", curDayDt.m_dtStructure.hour, ":", curDayDt.m_dtStructure.min, ":", curDayDt.m_dtStructure.sec); prevDayDt = new DateTimeInstance(TimeCurrent()); posCnt[0] = 0; posCnt[1] = 0; }
fxsaber #:
Здесь понятно. Я же принтовал время. А оно нулевое. Но, дальше интереснее. Вот, что в журнале:
2024.11.12 00:07:39.124 2023.10.30 00:00:00 _g_signal 2024.11.12 00:07:39.124 2023.10.30 00:00:00 Signal::getAggregateSignal:: getAggregateSignal() 2024.11.12 00:07:39.124 2023.10.30 00:00:00 Signal::getAggregateSignal:: curDayDt = 0:0:0 2024.11.12 00:07:40.155 2023.10.30 00:00:00 Access violation at 0x00007FF75C355336 read to 0x000000007FF75AA7 2024.11.12 00:07:40.156 2023.10.30 00:00:00 crash --> 00007FF75C355336 F30F6F0A movdqu xmm1, [rdx] 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C35533A F3420F6F5402F0 movdqu xmm2, [rdx+r8*1-0x10] 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355341 F30F7F09 movdqu [rcx], xmm1 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355345 F3420F7F5401F0 movdqu [rcx+r8*1-0x10], xmm2 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C35534C C3 ret 2024.11.12 00:07:40.156 2023.10.30 00:00:00 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C35534D 4E8D0C02 lea r9, [rdx+r8*1] 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355351 483BCA cmp rcx, rdx 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355354 4C0F46C9 cmovbe r9, rcx 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355358 493BC9 cmp rcx, r9 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C35535B 0F823F040000 jb 0x00007FF75C3557A0 2024.11.12 00:07:40.156 2023.10.30 00:00:00 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355361 833D18EC540003 cmp dword ptr [0x00007FF75C8A3F80], 0x03 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C355368 0F82E2020000 jb 0x00007FF75C355650 2024.11.12 00:07:40.156 2023.10.30 00:00:00 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00007FF75C35536E 4981F800200000 cmp r8, 0x2000 2024.11.12 00:07:40.156 2023.10.30 00:00:00 2024.11.12 00:07:40.156 2023.10.30 00:00:00 00: 0x00007FF75C355336 2024.11.12 00:07:40.156 2023.10.30 00:00:00 01: 0x00007FF75B5260C9 2024.11.12 00:07:40.156 2023.10.30 00:00:00 02: 0x000000AD417FBFB8 2024.11.12 00:07:40.156 2023.10.30 00:00:00
Никаких ссылок на строку с ошибкой. Просто выдаёт такое. Как это победить?
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня самописный класс для работы со временем. Ещё нужны доработки, но, в целом то, что нужно.. уже реализовано. Почти всё. Остальное в процессе.
Я столкнулся с косяком, который напрягал меня несколько дней пока я не распринтовал код бота и не нашёл место, где косяк. Пришлось принтовать т.к. в мт5 нет нормальной возможности увидеть в какой строке ошибка. Терминал просто ничего не сообщает обычно. Иногда выдаёт невнятные вещи, которые не указывают ни на что.
Суть в том, что я принтанул значения полей класса моего класса DateTimeInstance, который нужен для работы со временем и увидел, что у него поля не инициализированы. Принтовал я в конструкторе класса, который является неотъемлемой части торгового бота.
Сам класс я прикрепляю.
По сути, этот класс DateTimeInstance инициализируется в конструкторе класса Signal вот так:
А класс Signal инициализируется в самом торговом боте вот так:
Так вот в классе Signal есть строка в конструкторе:
В журнале она выдаёт:
Т.е. значения часа, минуты и секунд равны нулям! Это как так? В конструкторах время нельзя задавать что-ли полям класса?
Всё же написано правильно, как я понимаю. В чём может быть причина?