Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях - страница 27

 
Carl Schreiber:

Я не понимаю.
Какое значение должно иметь BuffPrcLong [iB] для полного заполнения:

В обоих случаях, в редких случаях, я получал теплое сообщение с делением на ноль после изменения периода графика.

I don't understand.
What value does BuffPrcLong[iB] have to have in order to full fill:

In both cases, on rare occasions, I received the warm message division by zero after I changed the chart period.

Carl Schreiber:

Проблема не в этом, но тенарный оператор (? :) не работает от случая к случаю.
Изначально у меня было сравнение с 0:

что тоже привело к делению на ноль (в третьей части, после :), хотя именно это и должно быть уловлено в первой части (чек, или?).

Таким образом, независимо от того, есть соединение с сервером или нет, деление на ноль не должно происходить, поскольку в этом случае присваивается 1.0.

That is not the problem, but the tenary operator (?:) does not work case by case.
Originally I had the comparison with 0:

which also led to the division with zero (in the third part, after :), although exactly that should be caught in the first part (the check, or ?).

So, no matter if there is a connection to the server or not, a division by zero should not occur as in this case 1.0 is assigned.

Используйте MathClassify для проверки BuffPrcLong[iB], скорее всего содержит NaN

Документация по MQL5: Математические функции / MathClassify
Документация по MQL5: Математические функции / MathClassify
  • www.mql5.com
MathClassify - Математические функции - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
b3021.
        Access violation at 0x000002AAA03BAADD read to 0x0000000000000000 in 'C:\Program Files\MetaTrader 5\MQL5\Experts\Test9.ex5'
           crash -->  000002AAA03BAADD FF10              call       qword near [rax]
                      000002AAA03BAADF 488B16            mov        rdx, [rsi]
                      000002AAA03BAAE2 4889F9            mov        rcx, rdi
                      000002AAA03BAAE5 41FFD5            call       r13
                      000002AAA03BAAE8 49BC205B59A0AA02  mov        r12, 0x2aaa0595b20
                                       0000
                      000002AAA03BAAF2 498B74241C        mov        rsi, [r12+0x1c]
                      000002AAA03BAAF7 4885F6            test       rsi, rsi
        
        00: 0x000002AAA03BAADD
        01: 0x0000000000310033
 
2021.08.17 18:38:42.134 Terminal        MetaTrader 5 x64 build 3021 started for MetaQuotes Software Corp.

Если переключаю профили графиков (на графиках есть советники и пользовательские индикаторы) - все графики стираются из профилей.

 

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

Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях

fxsaber, 2021.08.17 12:30

b3021.
        Access violation at 0x000002AAA03BAADD read to 0x0000000000000000 in 'C:\Program Files\MetaTrader 5\MQL5\Experts\Test9.ex5'
           crash -->  000002AAA03BAADD FF10              call       qword near [rax]
                      000002AAA03BAADF 488B16            mov        rdx, [rsi]
                      000002AAA03BAAE2 4889F9            mov        rcx, rdi
                      000002AAA03BAAE5 41FFD5            call       r13
                      000002AAA03BAAE8 49BC205B59A0AA02  mov        r12, 0x2aaa0595b20
                                       0000
                      000002AAA03BAAF2 498B74241C        mov        rsi, [r12+0x1c]
                      000002AAA03BAAF7 4885F6            test       rsi, rsi
        
        00: 0x000002AAA03BAADD
        01: 0x0000000000310033

Воспроизводящий EX5 может помочь решить проблему?

 
fxsaber:

Воспроизводящий EX5 может помочь решить проблему?

Спасибо, уже исправлено.
 
Ilyas:
Спасибо, уже исправлено.

Скажите на будущее. Эти короткие crash-логи помогают найти причину? Ничего в них не понимаю.

 
fxsaber:

Скажите на будущее. Эти короткие crash-логи помогают найти причину? Ничего в них не понимаю.

Помогают

 
Carl Schreiber:

Я не понимаю.
Какое значение должно иметь BuffPrcLong [iB] для полного заполнения:

В обоих случаях, в редких случаях, я получал теплое сообщение с делением на ноль после изменения периода графика.

I don't understand.
What value does BuffPrcLong[iB] have to have in order to full fill:

In both cases, on rare occasions, I received the warm message division by zero after I changed the chart period.

К сожалению, и я теперь не понимаю вопрос ))

Что означает "полное заполнение (full fill)"?

И почему в приведенных примерах кода:

/* Version 1: */ BuffPrcLong[iB] != 0. && BuffPrcLong[iB] == 0.0
//or
/* Version 2: */ BuffPrcLong[iB] > MyZero && BuffPrcLong[iB] == 0.0

оба условия всегда равны false? Для чего эти условия вообще нужны?

По сути же первичного Вашего вопроса попытаюсь объяснить более детально. При старте терминала индикатор может пройти инициализацию раньше, чем терминал получит данные о рыночном окружении. В данном конкретном случае речь о Point(). Его значение равно нулю. Вот его и стоит проверять при старте индикатора. До тех пор, пока Point() равен нулю (или вдруг менее нуля), вообще не стоит запускать индикатор. Ведь кроме Point(), скорее всего, и свечи графика не были получены. То есть в лучшем случае на графике устаревшая история. Зачем отображать или рассчитывать что-то, если данные явно устаревшие?

 
Ihor Herasko:

По сути же первичного Вашего вопроса попытаюсь объяснить более детально. При старте терминала индикатор может пройти инициализацию раньше, чем терминал получит данные о рыночном окружении. В данном конкретном случае речь о Point(). Его значение равно нулю. Вот его и стоит проверять при старте индикатора. До тех пор, пока Point() равен нулю (или вдруг менее нуля), вообще не стоит запускать индикатор. Ведь кроме Point(), скорее всего, и свечи графика не были получены. То есть в лучшем случае на графике устаревшая история. Зачем отображать или рассчитывать что-то, если данные явно устаревшие?

Если бы там был 0, сработала бы проверка, и не было бы zero divide.

Иляс уже ответил — скорее всего там NaN

 
Point сидит же в спецификации символа - оффлайн.
Причина обращения: