Косяки? Глюки? Как такое возможно?

Nextor  

Добрый день.

Написал эксперт, отладка на исторических данных гоняет как надо.
Прикрепил эксперт к реальному графику в реальном времени, начались косяки.

Запустил отладку на реальных данных, и пошли чудеса:

i = 102043546 при цикле от 5 до 0

Как такое возможно?


Maxim Kuznetsov  
Nextor:

Добрый день.

Написал эксперт, отладка на исторических данных гоняет как надо.
Прикрепил эксперт к реальному графику в реальном времени, начались косяки.

Запустил отладку на реальных данных, и пошли чудеса:

i = 102043546 при цикле от 5 до 0

Как такое возможно?


какой тип имеет pm_QtyPos ? держу пари, что uint, unsigned, беззнаковый и получилось underflow

((uint)0)-1 = MAX_UINT

то есть в вашем случае цикл должен выглядить как : for(int i=((int)pm_QtyPos)-1;i>=0;i--) {.....}

а вообще стоит поменять тип pm_QtyPos

Nextor  
Maxim Kuznetsov:

какой тип имеет pm_QtyPos ? держу пари, что uint, unsigned, беззнаковый и получилось underflow

((uint)0)-1 = MAX_UINT

то есть в вашем случае цикл должен выглядить как : for(int i=((int)pm_QtyPos)-1;i>=0;i--) {.....}

а вообще стоит поменять тип pm_QtyPos

на картинке ведь виден тип  pm_QtyPos - int

Nextor  

Проблема в том, что переменная i не инициализируется:

Что c MQL ?

Aleksandr Slavskii  
Nextor:

Проблема в том, что переменная i не инициализируется:

Что c MQL ?

Да, кстати сталкивался с такой проблемой, так и не понял в чём дело, в итоге просто поменял i на другую букву и всё заработало как надо.

PapaYozh  
Nextor:

Проблема в том, что переменная i не инициализируется:

Опупеть!

Nextor  

Что на это скажут разработчики MQL ?

Я написал о самой очевидной проблеме.

Есть и другие - когда заполняешь переменные объекта в одних функциях, в других функциях эти переменные не инициализированы!

Эксперт работает очень непредсказуемо!

Vladimir Karputov  

1. Покажите информацию о терминале и об операционной системе:

Forum on trading, automated trading systems and testing trading strategies

Very Glitchy MetaTrader

Vladimir Karputov, 2021.03.16 04:20

If you have a question, first of all you should show the first three lines from the 'Journal' tab


(select these lines, copy to the clipboard and paste into the message using the button Code). It should look like this:

2021.03.16 05:13:07.133 Terminal        MetaTrader 5 x64 build 2832 started for MetaQuotes Software Corp.
2021.03.16 05:13:07.134 Terminal        Windows 10 build 19042, Intel Core i7-9750H  @ 2.60GHz, 26 / 31 Gb memory, 842 / 947 Gb disk, IE 11, UAC, GMT+2
2021.03.16 05:13:07.134 Terminal        C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075


2. Вставьте код из сообщения , код который можно загрузить в редактор MetaEditor и проверить.

Косяки? Глюки? Как такое возможно?
Косяки? Глюки? Как такое возможно?
  • 2021.06.07
  • www.mql5.com
Добрый день. Написал эксперт, отладка на исторических данных гоняет как надо...
Ilyas  
Nextor:

Проблема в том, что переменная i не инициализируется:

Что c MQL ?

Само значение, конкретной 'i', верное, неверное отображение в WatchList

Обнаружена и устранена ошибка в WatchList отладчика: в некоторых случаях (часто), значение могло извлекаться по старому адресу переменной с именем 'i', (не обязательно той 'i', что в текущей области видимости)


Исправление будет доступно в ближайшем билде.

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

Ilyas  
Nextor:

Проблема в том, что переменная i не инициализируется:

Что c MQL ?

Предоставьте пожалуйста минимальный компилируемый код для воспроизведения ошибки.

Nextor  

@Vladimir Karputov:

Версии:

2021.06.08 03:11:19.925 Terminal        Alpari MT5 x64 build 2940 started for Alpari International
2021.06.08 03:11:19.927 Terminal        Windows 10 build 18363, AMD Ryzen 5 3500U with Radeon Vega Mobile Gfx, 3 / 5 Gb memory, 15 / 237 Gb disk, IE 11, Admin, GMT+3
2021.06.08 03:11:19.927 Terminal        C:\Program Files\Alpari MT5

@Ilyas:

Ilyas:

Предоставьте пожалуйста минимальный компилируемый код для воспроизведения ошибки.

Эксперт прикрепил архивом.

Открываете в отладчике, нажимаете отладка на реальных данных. Период М5, EURUSD:

Добавил отладочный код (выделил комментариями этот участок в коде), поэтому сразу откроются позиции (по принципу - на каждый свече, один раз, свеча растет вверх - позиция Бай,растет вниз - позиция Селл)

Лучше подождать 5 мин, тогда откроется несколько позиций Бай и Селл.
Откроется вот с так:


как видно на картинке выше, хоть у нас и открыто по GBPUSD 2 позиции Buy и 1 Sell, в выделенных красным участках информация по позициям не отображается.

Все из за проблем с инициализацией переменной i (класс PositionsManager.mqh, строка 276):


а так же из за того, что в этом же классе в функции PositionAdd не верно сохраняется тип позиции в переменной PositionType, строка 242:


На картинке выше тип позиции присвоится верно ("00" или "11), но в следующей функции (в той же CheckStatus, где проблемы с инициализацией i) в  pm_PositionsArray[i].PositionType будет NULL.

Возможно, это не все проблемы с инициализациями и присваиванием переменных.

Правильный вариант работы:

Сейчас открыта позиция Бай, и по ней в левом столбце выводится вся информация (QtyBuy - количество позиций Бай, информация о лоте TotalVolume, инфрмация о прибыли)
Позиций Селл нет, поэтому в правом столбце ничего не выводится.

Запустить правильный вариант можно в отладке на исторических данных, предварительно закомментировав указанный участок кода (в противном случае будут открываться позиции на каждой свече):


Настройки исторического тестирования:

EURUSD M5 (как и реального тестирования)

Каждый тик на основе реальных тиков.

Без задержек, идеальное исполнение.


Файлы:
Причина обращения: