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

 
JRandomTrader #:

Могу только показать старый пример подобного кода, когда-то выкладывал, начиная отсюда: https://www.mql5.com/ru/forum/160683/page1950#comment_34431498

Там также "тяжёлое" решение

 

Хотелось бы иметь параметр показывающий рабочее время брокера или нет. 

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

 
Vitaly Muzichenko #:

Там также "тяжёлое" решение

Вставка/удаление/перемещение элемента в отсортированный массив(n) - максимум копирование n элементов. А сортировка массива?

 
JRandomTrader #:

Могу только показать старый пример подобного кода, когда-то выкладывал, начиная отсюда: https://www.mql5.com/ru/forum/160683/page1950#comment_34431498

К сожалению, там нет HistorySelect и HistoryOrderGetTicket.

 
fxsaber #:

К сожалению, там нет HistorySelect и HistoryOrderGetTicket.

В другом коде использую

HistorySelect(st.OrdTime-3600,TimeCurrent()+100)

Убедился, что смотреть на две минуты в прошлое от получения ответа 10012  TRADE_RETCODE_TIMEOUT мало, теперь смотрю на час.

 
Опять какие-то ошибки возникают непонятные на старте:
PR      0       13:00:59.610    Demo (EURUSD,M15)       
LE      0       13:00:59.610    Demo (EURUSD,M15)       
QD      2       13:00:59.611    Demo (EURUSD,M15)       Access violation at 0x000001EA0091083B read to 0xFFFFFFFFFFFFFFFF in 'C:\Users\User\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075\MQL5\Scripts\Demo.ex5'
HK      2       13:00:59.611    Demo (EURUSD,M15)          crash -->  000001EA0091083B 66458B0C50        mov        r9w, [r8+rdx*2]
MR      2       13:00:59.611    Demo (EURUSD,M15)                     000001EA00910840 89C1              mov        ecx, eax
JP      2       13:00:59.611    Demo (EURUSD,M15)                     000001EA00910842 83C101            add        ecx, 0x1
LS      2       13:00:59.611    Demo (EURUSD,M15)                     000001EA00910845 664183F900        cmp        r9w, 0x0
OK      2       13:00:59.611    Demo (EURUSD,M15)                     000001EA0091084A 894C2450          mov        [rsp+0x50], ecx
RD      2       13:00:59.611    Demo (EURUSD,M15)                     000001EA0091084E 8944244C          mov        [rsp+0x4c], eax
FK      2       13:00:59.611    Demo (EURUSD,M15)                     000001EA00910852 75DA              jnz        0x1ea0091082e
OF      2       13:00:59.611    Demo (EURUSD,M15)       
KI      2       13:00:59.611    Demo (EURUSD,M15)       
EO      2       13:00:59.611    Demo (EURUSD,M15)       00: 0x000001EA0091083B
JH      2       13:00:59.611    Demo (EURUSD,M15)       01: 0x0000000000000008
QS      2       13:00:59.611    Demo (EURUSD,M15)       02: 0x000001EA00380150
HK      2       13:00:59.611    Demo (EURUSD,M15)       03: 0x0000000000000008
OR      2       13:00:59.611    Demo (EURUSD,M15)       04: 0x000001EA0094BE10
KJ      2       13:00:59.611    Demo (EURUSD,M15)       05: 0x0000000000300000
LE      2       13:00:59.611    Demo (EURUSD,M15)       06: 0x000001EA00910260
DM      2       13:00:59.611    Demo (EURUSD,M15)       07: 0x000000ABDFDFDD38
DK      2       13:00:59.611    Demo (EURUSD,M15)       08: 0x000001EA009104F0
NL      2       13:00:59.611    Demo (EURUSD,M15)       09: 0x010000ABDFDFDD68
RG      2       13:00:59.611    Demo (EURUSD,M15)       10: 0xFFFFFFFF00000008
NO      2       13:00:59.611    Demo (EURUSD,M15)       11: 0x000001EA00000000
LF      2       13:00:59.611    Demo (EURUSD,M15)       12: 0x000000ABDFDFDF58
MN      2       13:00:59.611    Demo (EURUSD,M15)       13: 0x000001EA6F5641E0
FI      2       13:00:59.611    Demo (EURUSD,M15)       14: 0x0040E0400040E040
DN      2       13:00:59.611    Demo (EURUSD,M15)       15: 0xFFFFFFFF0093002C
PG      2       13:00:59.611    Demo (EURUSD,M15)       16: 0x000001EA0094B7ED
OM      2       13:00:59.611    Demo (EURUSD,M15)       
А на старых версиях (build 3661) все нормально
 
JRandomTrader #:

В другом коде использую

Убедился, что смотреть на две минуты в прошлое от получения ответа 10012  TRADE_RETCODE_TIMEOUT мало, теперь смотрю на час.

Установили лимит-ордер, тем временем идёт торговля buy/sell

Удаляем лимитник и идём в историю ... тут в новых билдах и есть подводный камень - он попадает в историю не последним, а по времени установки.

Почему лимит/стоп ордерам дали такой низкий приоритет, хотя они имеют приоритет на уровне buy/sell и должны попадать в историю по времени удаления, а не установки, что вполне логично.

 
JRandomTrader #:

В другом коде использую

У меня не получается из предоставленного кода собрать решение этой задачи.

 
Vitaly Muzichenko #:

Установили лимит-ордер, тем временем идёт торговля buy/sell

Удаляем лимитник и идём в историю ... тут в новых билдах и есть подводный камень - он попадает в историю не последним, а по времени установки.

Почему лимит/стоп ордерам дали такой низкий приоритет, хотя они имеют приоритет на уровне buy/sell и должны попадать в историю по времени удаления, а не установки, что вполне логично.

buy/sell тоже попадают в историю по времени установки (тикету, если совсем правильно). Просто они "только что" установились, поэтому в 99% случаев оказываются в конце таблицы ордеров. Однако, правило едино для всех типов ордеров.

Повторюсь, в Тестере всегда идет дозапись в конец, в отличие от Терминала.

 
fxsaber #:

buy/sell тоже попадают в историю по времени установки (тикету, если совсем правильно). Просто они "только что" установились, поэтому в 99% случаев оказываются в конце таблицы ордеров. Однако, правило едино для всех типов ордеров.

Пример 1% случаев, когда не в конце окажется и buy/sell.

  1. Асинхронно отправляется Buy-приказ.
  2. Асинхронно отправляется BuyLimit-приказ.
  3. Как только появился BuyLimit-тикет, делается его удаление.

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


Давайте разберем, что это обозначает. Пусть в таблице истории ордеров 1000 записей - ордера с индексами (HistoryOrderGetTicket) от 0 до 999.

Вот произошло событие п.3 выше - BuyLimit удалился и попал в таблицу истории ордеров. Он имеет индекс 1000 - его тикет отдается вызовом HistoryOrderGetTicket(1000).


Теперь произошло срабатывание Buy-приказа из п.1 - Buy-приказ попал в таблицу истории ордеров. Вы думаете, что его индекс 1001?

-Нет, его индекс 1000! Т.е. HistoryOrderGetTicket(1000) возвращал одно значение (BuyLimit-ticket), а через некоторое время - другое (Buy-ticket).


Интересна реакция не MQ, а форумчан. Либо это "красноречивое молчание", либо пофигизм.

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