// Список изменений: // 08.02.2017: // Add: Переменные MT4ORDERS::LastTradeRequest и MT4ORDERS::LastTradeResult содержат соответствующие данные MT5-OrderSend.
Теперь можно получать полностью все данные MT5-OrderSend.
Print(MT4ORDERS::LastTradeResult.retcode); // Operation return codePrint(MT4ORDERS::LastTradeResult.retcode_external); // Return code of an external trading system
ЗЫ Обратите внимание, что в MT5 GetLastError() не возвращает торговые ошибки. Поэтому, если хочется делать, как в MT4, нужно генерировать свою соответствующую ошибку через SetUserError. Но и там ERR_USER_ERROR_FIRST не даст достигнуть MT4-варианта.
// Список изменений:// 20.07.2022// Add: Добавлена OrderLotsOpen() - полный объем позиции/ордера перед закрытием/удалением. Корректно работает только в ByPass-режиме.
Пример.
#define MT4ORDERS_BYPASS_MAXTIME 1000000// Максимальное время (в мкс.) на ожидание синхронизации торгового окружения#include <MT4Orders.mqh>
#define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK)
#define PRINT(A) Print(#A + " = " + (string)(A) + "\n")
voidOnStart()
{
constulong Ticket = OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0); // Открыли позицию на один лот.for (int i = 1; i <= 4; i++)
if (OrderSelect(Ticket, SELECT_BY_TICKET) && !OrderCloseTime())
{
OrderClose(OrderTicket(), 0.1 * i, OrderClosePrice(), 0); // Закрываем по 0.1, 0.2, 0.3, ... лота.if (OrderSelect(OrdersHistoryTotal() - 1, SELECT_BY_POS, MODE_HISTORY))
{
OrderPrint();
PRINT(OrderLotsOpen()); // Объем позиции перед соответствующим закрытием. Берется из истории торговли.
}
}
}
Особенность представления библиотекой закрытых позиций по сравнению с MT5.
Торговая ситуация.
Открыт BuyLimit на 1 лот.
BuyLimit исполнился частично на 0.4 лота в 12:00.
Позиция на 0.4 лота закрылась в 13:00.
Остаток BuyLimit исполнился - 0.6 лота в 14:00.
Позиция на 0.6 лота закрылась в 15:00.
MT5 покажет, что была одна позиция, которая открылась в 12:00, а закрылась в 15:00. При этом цены открытия/закрытия этой позиции могут быть очень странными.
MT4Orders покажет, что было две позиции: одна открылась в 12:00 и закрылась в 13:00, другая - 14:00-15:00. Цены открытия/закрытия будут адекватными.
ЗЫ Обратите внимание, что в MT5 GetLastError() не возвращает торговые ошибки. Поэтому, если хочется делать, как в MT4, нужно генерировать свою соответствующую ошибку через SetUserError. Но и там ERR_USER_ERROR_FIRST не даст достигнуть MT4-варианта.
Спасибо за информацию, я сам в этом не силен.
Правильно ли я понимаю, что достаточно заменить
int er=GetLastError();
на
int er=MT4ORDERS::LastTradeResult.retcode_external;
и уже обрабатывать новые коды ошибок?
Кстати, не нашел аналоги ошибок для MT5, в MT4 они: 135, 145, 146 - есть ли они?
Да это достижение. Однако, проверка ошибок при приеме в маркет не все ситуации воссоздает.
К сожалению, у меня только теоретические представления о Маркете. Практики прохождения проверок не имею.
Правильно ли я понимаю, что достаточно заменить и уже обрабатывать новые коды ошибок?
Правильно. Только retcode. Аналог ResetLastError по той же схеме - присвоение нуля.
Кстати, не нашел аналоги ошибок для MT5, в MT4 они: 135, 145, 146 - есть ли они?
Совсем не знаю типы ошибок, т.к. не использую в боевых советниках. Наверное, нужно добиваться воспроизведения каждой ошибки в MT4, после чего складывать ясное представление об их природе и сопоставлять с подобным в MT5. Возможно, где-то есть уже таблицы соответствия. Не факт, что у всех кодов есть тезки в другой платформе.
Совсем не знаю типы ошибок, т.к. не использую в боевых советниках. Наверное, нужно добиваться воспроизведения каждой ошибки в MT4, после чего складывать ясное представление их природы и сопоставлять с подобными в MT5. Возможно, где-то есть уже таблицы соответствия. Не факт, что у всех кодов есть тезки в другой платформе.
Да вот искал такую таблицу и не нашел. Ошибки не всегда же в коде - бывают проблемы на стороне ДЦ.
Я так понял, что если проблема любого рода с работой с ордерами, то через GetLastError(); возвращается код 4756, что уже не плохо, если так.
Возможно я не так понял, так как ухватился за идею возможности использования одного кода на двух платформах.
Часть MT5-Маркета написана через эту библиотеку. Основная причина - легкость.
На тему ошибок.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2017.02.08 14:16
Изучив GetLastError, сделал вывод, что дополнять его нецелесообразно.
// 08.02.2017:
// Add: Переменные MT4ORDERS::LastTradeRequest и MT4ORDERS::LastTradeResult содержат соответствующие данные MT5-OrderSend.
Теперь можно получать полностью все данные MT5-OrderSend.
Сами MT5-коды здесь. Сравните с MT4-кодами.
ЗЫ Обратите внимание, что в MT5 GetLastError() не возвращает торговые ошибки. Поэтому, если хочется делать, как в MT4, нужно генерировать свою соответствующую ошибку через SetUserError. Но и там ERR_USER_ERROR_FIRST не даст достигнуть MT4-варианта.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2022.07.20 00:39
Пример.
Результат.
Особенность представления библиотекой закрытых позиций по сравнению с MT5.
Торговая ситуация.
MT5 покажет, что была одна позиция, которая открылась в 12:00, а закрылась в 15:00. При этом цены открытия/закрытия этой позиции могут быть очень странными.
MT4Orders покажет, что было две позиции: одна открылась в 12:00 и закрылась в 13:00, другая - 14:00-15:00. Цены открытия/закрытия будут адекватными.
Часть MT5-Маркета написана через эту библиотеку. Основная причина - легкость.
Да это достижение. Однако, проверка ошибок при приеме в маркет не все ситуации воссоздает.
На тему ошибок.
Сами MT5-коды здесь. Сравните с MT4-кодами.
ЗЫ Обратите внимание, что в MT5 GetLastError() не возвращает торговые ошибки. Поэтому, если хочется делать, как в MT4, нужно генерировать свою соответствующую ошибку через SetUserError. Но и там ERR_USER_ERROR_FIRST не даст достигнуть MT4-варианта.
Спасибо за информацию, я сам в этом не силен.
Правильно ли я понимаю, что достаточно заменить
на
и уже обрабатывать новые коды ошибок?
Кстати, не нашел аналоги ошибок для MT5, в MT4 они: 135, 145, 146 - есть ли они?
Да это достижение. Однако, проверка ошибок при приеме в маркет не все ситуации воссоздает.
К сожалению, у меня только теоретические представления о Маркете. Практики прохождения проверок не имею.
Правильно ли я понимаю, что достаточно заменить и уже обрабатывать новые коды ошибок?
Правильно. Только retcode. Аналог ResetLastError по той же схеме - присвоение нуля.
Кстати, не нашел аналоги ошибок для MT5, в MT4 они: 135, 145, 146 - есть ли они?
Совсем не знаю типы ошибок, т.к. не использую в боевых советниках. Наверное, нужно добиваться воспроизведения каждой ошибки в MT4, после чего складывать ясное представление об их природе и сопоставлять с подобным в MT5. Возможно, где-то есть уже таблицы соответствия. Не факт, что у всех кодов есть тезки в другой платформе.
Правильно. Только retcode. Аналог ResetLastError по той же схеме - присвоение нуля.
Так может сброс ошибки интегрировать как то в Ваш класс можно? А то четверка в этом не нуждалась как то.
Или достаточно просто вызвать информацию о последней ошибки, а потом сразу её сбросить, т.е. поменять местами функции, что у Вас в примере?
Совсем не знаю типы ошибок, т.к. не использую в боевых советниках. Наверное, нужно добиваться воспроизведения каждой ошибки в MT4, после чего складывать ясное представление их природы и сопоставлять с подобными в MT5. Возможно, где-то есть уже таблицы соответствия. Не факт, что у всех кодов есть тезки в другой платформе.
Да вот искал такую таблицу и не нашел. Ошибки не всегда же в коде - бывают проблемы на стороне ДЦ.
Я так понял, что если проблема любого рода с работой с ордерами, то через GetLastError(); возвращается код 4756, что уже не плохо, если так.
Так может сброс ошибки интегрировать как то в Ваш класс можно? А то четверка в этом не нуждалась как то.
Или достаточно просто вызвать информацию о последней ошибки, а потом сразу её сбросить, т.е. поменять местами функции, что у Вас в примере?
Не вижу необходимости сбрасывать. Сказал для доп. совместимости с тем, как, предполагаю, работают в MT4.
Не вижу необходимости сбрасывать. Сказал для доп. совместимости с тем, как, предполагаю, работают в MT4.
Я всё же уточню, это ошибки какие ниже вызываемым кодом?
А то похожие вещи - что нужно не пойму - этот же код ниже возвращает ошибки из структуры MqlTradeResult ?
Я всё же уточню, это ошибки какие ниже вызываемым кодом?
А то похожие вещи - что нужно не пойму - этот же код ниже возвращает ошибки из структуры MqlTradeResult ?
retcode - ошибка MT5. retcode_external - поле, которое по желанию может заполнять разработчик стороннего бриджа.
retcode - ошибка MT5. retcode_external - поле, которое по желанию может заполнять разработчик стороннего бриджа.
Понял, спасибо. Думаю стандартных пока хватит.