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

 
Slava:

А при том, что примеры эти ваши - чисто теоретические. Чисто для студентов. Ни один программист в здравом уме не выпустит такое в продакшен.

Постфиксные и префиксные инкремент и декремент реально используются прежде всего в циклах. Они и называются инкремент и декремент!

Вот примеры

и

Если Вы утверждаете, что префиксные и постфиксные операции работают одинаково, то флаг Вам в руки и барабан на шею.

В случае с префиксным инкрементом, вы получите неинициализированным нулевой элемент массива и ошибку array out of range на последней итерации.

может до вашего высокого ума не доходит, еще раз повторю свой вопрос

а при чем тут array[++i]=i и array[i++]=i, как я могу сравнить то, чего не было в беседе...

вам выделенное уже не по глазам?

а теперь к делу, почему в примере который фигурирует в беседе, результат в mql == 12 и не важно высосан он из пальца или нет, при разнице в постфиксных и префиксных операциях, результат должен быть == 13

ps. и я уже не утверждаю, т.к. сейчас проверил и действительно постфиксные и префиксные теперь есть разница, но мой вопрос выше дает основание полагать, что неоднозначностей в языке при компиляции видимо хватает и прежде чем накидываться на кого то в ветке, разберитесь с этими UB, мы тут не при чем

кстати справку смотрю уже перелопатили ))

 
Konstantin:

может до вашего высокого ума не доходит, еще раз повторю свой вопрос

вам выделенное уже не по глазам?

а теперь к делу, почему в примере который фигурирует в беседе, результат в mql == 12 и не важно высосан он из пальца или нет, при разнице в постфиксных и префиксных операциях, результат должен быть == 13

ps. и я уже не утверждаю, т.к. сейчас проверил и действительно постфиксные и префиксные теперь есть разница, но мой вопрос выше дает основание полагать, что неоднозначностей в языке при компиляции видимо хватает и прежде чем накидываться на кого то в ветке, разберитесь с этими UB, мы тут не при чем

кстати справку смотрю уже перелопатили ))

Не хамите.

Кто сказал, что результат должен быть 13? Повторяю, результаты с сайд-эффектами сильно зависят от оптимизации. Даже если к такому выражению не применять оптимизацию, тогда вступает в дело реализация - изменение значения переменной либо сразу после использования, либо после вычисления выражения. Какая из реализаций является правильной?

Мы не собираемся разбираться с UB, на то оно и undefined, и явно написали: "не делайте так"

В каком месте перелопатили справку? Вот я открыл MQL5 reference из MetaEditor билда 1755 от 18 января. Там то же самое написано

Important Notice

int i=5;
int k = i++ + ++i;

Computational problems may occur while moving the above expression from one programming environment to another one (for example, from Borland C++ to MQL5). In general, the order of computations depends on the compiler implementation. In practice, there are two ways to implement the post-decrement (post-increment):

  1. The post-decrement (post-increment) is applied to the variable after calculating the whole expression.
  2. The post-decrement (post-increment) is applied to the variable immediately at the operation.

Currently the first way of post-decrement (post-increment) calculation is implemented in MQL5. But even knowing this peculiarity, it is not recommended to experiment with its use.


Ваше первоначальное утверждение заключалось в том, что нет никакой разницы между постфиксными и префиксными операциями. Разве не так?

 
Slava:

Не хамите.

Кто сказал, что результат должен быть 13? Повторяю, результаты с сайд-эффектами сильно зависят от оптимизации. Даже если к такому выражению не применять оптимизацию, тогда вступает в дело реализация - изменение значения переменной либо сразу после использования, либо после вычисления выражения. Какая из реализаций является правильной?

Мы не собираемся разбираться с UB, на то оно и undefined, и явно написали: "не делайте так"

В каком месте перелопатили справку? Вот я открыл MQL5 reference из MetaEditor билда 1755 от 18 января. Там то же самое написано

Important Notice

int i=5;
int k = i++ + ++i;

Computational problems may occur while moving the above expression from one programming environment to another one (for example, from Borland C++ to MQL5). In general, the order of computations depends on the compiler implementation. In practice, there are two ways to implement the post-decrement (post-increment):

  1. The post-decrement (post-increment) is applied to the variable after calculating the whole expression.
  2. The post-decrement (post-increment) is applied to the variable immediately at the operation.

Currently the first way of post-decrement (post-increment) calculation is implemented in MQL5. But even knowing this peculiarity, it is not recommended to experiment with its use.


Ваше первоначальное утверждение заключалось в том, что нет никакой разницы между постфиксными и префиксными операциями. Разве не так?

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

по справке - да, ее сильно перелопатили т.к. когда разбирался (примерно года два назад) с постфикс и префикс операциями в mql, то этого материала, что сейчас явно не помню

в общем тему закрыли, ввели эту разницу и нормально сделали, только предупреждать ведь нужно, что меняете

 
. ... Rick D. ... .:
Подскажите вопрос по частичному закрытию позиции, тип счета RETAIL_HEDGING. Например я закрываю из эксперта половину позиции, должен автоматом открыться новый ордер меньшим лотом. Так вот, в какой момент новый ордер гарантированно будет в терминале? Правильно ли я понимаю, что сразу он появиться после PositionClosePartial не обязан и его нужно ловить где-нибудь в OnTrade ?
Попробую сам ответить на свой вопрос. При вызове PositionClosePartial тикет закрытого ордера вернется в CTrade::ResultOrder(), а тикет позиции останется тем-же, но сама позиция будет с уменьшенным лотом. Попробую сделать вывод, что вызов PositionClosePartial ведет к синхронному уменьшению позиции и изменению истории ордеров одной транзакцией.
 

Это что ещё за штука?

2018.05.15 12:50:04.594 Pred_Find (GBPUSD,M1)   Access violation at 0x000000013F1C4945 read to 0xFFFFFFFFFFFFFFFF
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48A0 48895C2418        mov        [rsp+0x18], rbx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48A5 48897C2420        mov        [rsp+0x20], rdi
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48AA 4156              push       r14
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48AC 4883EC20          sub        rsp, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48B0 488BDA            mov        rbx, rdx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48B3 4C8BF1            mov        r14, rcx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48B6 4883FA20          cmp        rdx, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48BA 7307              jae        0x13f1c48c3
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48BC BB20000000        mov        ebx, 0x20
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48C1 EB13              jmp        0x13f1c48d6
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48C3 488BCB            mov        rcx, rbx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48C6 83E107            and        ecx, 0x7
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48C9 740B              jz         0x13f1c48d6
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48CB B808000000        mov        eax, 0x8
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48D0 482BC1            sub        rax, rcx
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48D3 4803D8            add        rbx, rax
2018.05.15 12:50:04.661 Pred_Find (GBPUSD,M1)                 000000013F1C48D6 498B4620          mov        rax, [r14+0x20]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48DA 33FF              xor        edi, edi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48DC 4885C0            test       rax, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48DF 0F8485000000      jz         dword 0x13f1c496a
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48E5 483B58F8          cmp        rbx, [rax-0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48E9 7616              jbe        0x13f1c4901
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48EB 488B5008          mov        rdx, [rax+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48EF 33C0              xor        eax, eax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48F1 0FB6CA            movzx      ecx, dl
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48F4 4883E2FC          and        rdx, 0xfc
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48F8 80E102            and        cl, 0x2
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48FB 480F44C2          cmovz      rax, rdx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C48FF EB0E              jmp        0x13f1c490f
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4901 488BF8            mov        rdi, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4904 488B00            mov        rax, [rax]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4907 A802              test       al, 0x2
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4909 7509              jnz        0x13f1c4914
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C490B 4883E0FC          and        rax, 0xfc
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C490F 4885C0            test       rax, rax
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4912 75D1              jnz        0x13f1c48e5
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4914 4885FF            test       rdi, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4917 7451              jz         0x13f1c496a
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4919 488BD7            mov        rdx, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C491C 498D4E18          lea        rcx, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4920 E89B0F0000        call       0x13f1c58c0  ; #5079 (terminal64.exe)
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4925 4C8B47F8          mov        r8, [rdi-0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4929 4C2BC3            sub        r8, rbx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C492C 4983F820          cmp        r8, 0x20
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4930 7224              jb         0x13f1c4956
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4932 4983C0F8          add        r8, 0xf8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4936 488D5308          lea        rdx, [rbx+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C493A 4803D7            add        rdx, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C493D 498D4E18          lea        rcx, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4941 4C8942F8          mov        [rdx-0x8], r8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)      crash -->  000000013F1C4945 4D894410F8        mov        [r8+rdx-0x8], r8
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C494A 48895FF8          mov        [rdi-0x8], rbx
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C494E 4D8B4618          mov        r8, [r14+0x18]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4952 41FF5008          call       qword near [r8+0x8]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4956 488BC7            mov        rax, rdi
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C4959 488B5C2440        mov        rbx, [rsp+0x40]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)                 000000013F1C495E 488B7C2448        mov        rdi, [rsp+0x48]
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   00: 0x000000013F1C4945
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   01: 0x000000013F63EA90
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   02: 0x00000000FFFFFFFF
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   03: 0x000000005A3CD7A0
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   04: 0x000000013F6303ED
2018.05.15 12:50:04.662 Pred_Find (GBPUSD,M1)   
 
Konstantin:

\по справке - да, ее сильно перелопатили т.к. когда разбирался (примерно года два назад) с постфикс и префикс операциями в mql, то этого материала, что сейчас явно не помню

в общем тему закрыли, ввели эту разницу и нормально сделали, только предупреждать ведь нужно, что меняете

Интереса ради решил я проверить на старом 1159 билде от июня 2015 года. В его справке имеется всё то, что процитировал Slava. Так что возможно вы что-то перепутали.

 
Aleksey Vyazmikin:

Это что ещё за штука?

It's a crash:) Go to servicedesk!

 
Alexey Kozitsyn:

It's a crash:) Go to servicedesk!

Понятно - сорвал банк :)

 
Aleksey Vyazmikin:

Понятно - сорвал банк :)

Бывает)

 
Alexey Kozitsyn:

Бывает)

Я вот не знаю, как локализовать можно эту ошибку? Просто отдавать весь скрипт не хочу, и перелапачивать всё не хочу....

Причина обращения: