При этом в журнале же выводится сообщение о том, что все нормально.
На этой странице несколько ссылок по затронутой теме. Если кратко, то можете увидеть в логе нулевой Result.deal. По логу видно (не нулевой Request.position), что делался OrderClose, который якобы завершился успешно (код возврата Result.code), но при этом в течение секунды (библиотека ждала) в терминале так и не появилась запись (сделка DEAL_ENTRY_OUT) об этом. Это обозначает два сценария:
Был успешно отправлен торговый MT5-ордер, но MT5-сделка не прошла.
Сделка прошла, но она не появилась в торговой истории.
Оба варианта - ни есть всегда хорошо для MT5 (подробные обсуждения можете посмотреть по ссылке выше). Библиотека отработала четко, к сожалению. Все эти нюансы были когда-то вдумчиво проанализированы и, соответственно, выработаны обоснованные реакции библиотеки на них.
Это исключительно информационный (на торговлю не влияет) алерт, что MT5-OrderSend работает с ошибкой. Подробно эта ошибка с обсуждением разбирается здесь. Правда, разработчики пока не считают, что это неправильное поведение MT5...
ЗЫ Вскрылась тонкость MT5. При торговле через библиотеку фантомные ордера возникать не будут.
Почему производительность библиотеки так сильно превосходит чистый MQL5 - не анализировал. Предполагаю, что HistorySelect тормозит в реал-тайме. В Тестере не проверял.
// Список изменений:// 03.09.2017:// Add: Добавлены OrderTicketOpen() - тикет MT5-сделки открытия позиции// OrderOpenReason() - причина проведения MT5-сделки открытия (причина открытия позиции)// OrderCloseReason() - причина проведения MT5-сделки закрытия (причина закрытия позиции)
Несколько неожиданный результат. Скрипт вычисляет время открытия/зыкрытия последней "позиции".
Почему производительность библиотеки так сильно превосходит чистый MQL5 - не анализировал. Предполагаю, что HistorySelect тормозит в реал-тайме. В Тестере не проверял.
С помощью этого скрипта удалось найти проблемы с исполнением в MT5. Рекомендую проверять свою связку Терминал+Торговый Сервер и, в случае проблем, сообщать в Сервисдеск.
Обновленный скрипт в приложении. Быстро находит, например, такие проблемы
// 30.05.2018// Add: Ускорена работа с историей торговли, выбрана золотая середина реализаций между производительностью и// потреблением памяти - важно для VPS. Используется стандартная Generic-библиотека.// Если не хочется использовать Generic-библиотеку, то доступен старый режим работы с историей.// Для этого нужно ДО MT4Orders-библиотеки прописать строку//// #define MT4ORDERS_FASTHISTORY_OFF // Выключаем быструю реализацию истории торговли - не используем Generic-библиотеку.
Работа с длинной историей теперь просто летает!
Проверка Generic-выигрыша в цифрах
#define MT4ORDERS_FASTHISTORY_OFF // Выключаем быструю реализацию истории торговли - не используем Generic-библиотеку.#include <MT4Orders.mqh>
double HistoryToDouble( void )
{
double Res = 0;
for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
Res += OrderCloseTimeMsc() - OrderOpenTimeMsc() + OrderProfit() + OrderTicket() - OrderTicketOpen();
return(Res);
}
#define BENCH(A) \
{ \
constulong StartTime = GetMicrosecondCount(); \
A; \
Print("Time[" + #A + "] = " + (string)(GetMicrosecondCount() - StartTime)); \
}
#define PRINT(A) Print(#A + " = " + (string)(A))
voidOnStart()
{
if (HistorySelect(0, INT_MAX))
{
PRINT(HistoryDealsTotal());
PRINT(HistoryOrdersTotal());
}
for (int i = 0; i < 3; i++)
{
PRINT(i);
BENCH(Print(HistoryToDouble()))
}
}
Результат без Generic
HistoryDealsTotal() = 10063HistoryOrdersTotal() = 20296
i = 01195028482.07Time[Print(HistoryToDouble())] = 829525
i = 11195028482.07Time[Print(HistoryToDouble())] = 885207
i = 21195028482.07Time[Print(HistoryToDouble())] = 918911
Результат с Generic
HistoryDealsTotal() = 10063HistoryOrdersTotal() = 20296
i = 01195028482.07Time[Print(HistoryToDouble())] = 52603
i = 11195028482.07Time[Print(HistoryToDouble())] = 39051
i = 21195028482.07Time[Print(HistoryToDouble())] = 34409
На истории с 10К сделок и 20К ордеров Generic-вариант в ~30 раз быстрее. Чем больше торговая история, тем заметнее ускорение.
При этом в журнале же выводится сообщение о том, что все нормально.
На этой странице несколько ссылок по затронутой теме. Если кратко, то можете увидеть в логе нулевой Result.deal. По логу видно (не нулевой Request.position), что делался OrderClose, который якобы завершился успешно (код возврата Result.code), но при этом в течение секунды (библиотека ждала) в терминале так и не появилась запись (сделка DEAL_ENTRY_OUT) об этом. Это обозначает два сценария:
Оба варианта - ни есть всегда хорошо для MT5 (подробные обсуждения можете посмотреть по ссылке выше). Библиотека отработала четко, к сожалению. Все эти нюансы были когда-то вдумчиво проанализированы и, соответственно, выработаны обоснованные реакции библиотеки на них.
Если взять для тестов брокера фхтм демо- то функция OrderSend открывает сделку, но возвращает ошибку.
Воспроизвел и обнаружил, что мой косяк. Спасибо Вам за сообщение, интересное поведение MT5 на этом торговом сервере оказалось.
Исправил. Если нужно, могу выслать в ЛС. А так, чтобы модераторов не дергать, выложу в КБ, когда с DEAL_SL/TP разработчики порешают в новых билдах.
Воспроизвел и обнаружил, что мой косяк. Спасибо Вам за сообщение, интересное поведение MT5 на этом торговом сервере оказалось.
Исправил. Если нужно, могу выслать в ЛС. А так, чтобы модераторов не дергать, выложу в КБ, когда с DEAL_SL/TP разработчики порешают в новых билдах.
Да, пришлите пожалуйста в ЛС
Да, пришлите пожалуйста в ЛС
Отправил.
Редко, но могут возникать такие Алерты
Это исключительно информационный (на торговлю не влияет) алерт, что MT5-OrderSend работает с ошибкой. Подробно эта ошибка с обсуждением разбирается здесь. Правда, разработчики пока не считают, что это неправильное поведение MT5...
ЗЫ Вскрылась тонкость MT5. При торговле через библиотеку фантомные ордера возникать не будут.
Работа с длинной историей теперь просто летает!
Несколько неожиданный результат. Скрипт вычисляет время открытия/зыкрытия последней "позиции".
Forum on trading, automated trading systems and testing trading strategies
OrderCloseTime Expert Advisor MQL5
fxsaber, 2018.07.06 00:49
Result
Почему производительность библиотеки так сильно превосходит чистый MQL5 - не анализировал. Предполагаю, что HistorySelect тормозит в реал-тайме. В Тестере не проверял.
ЗЫ Да, HistorySelect тормозит.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2017.09.03 18:52
Распечатка всех позиций, закрытых по SL
Forum on trading, automated trading systems and testing trading strategies
How to figure out the close price when position ran into stop loss?
fxsaber, 2018.07.10 11:46
Несколько неожиданный результат. Скрипт вычисляет время открытия/зыкрытия последней "позиции".
Почему производительность библиотеки так сильно превосходит чистый MQL5 - не анализировал. Предполагаю, что HistorySelect тормозит в реал-тайме. В Тестере не проверял.
ЗЫ Да, HistorySelect тормозит.
Это последняя версия библиотеки?
Это последняя версия библиотеки?
Да.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
fxsaber, 2017.02.16 15:16
С помощью этого скрипта удалось найти проблемы с исполнением в MT5. Рекомендую проверять свою связку Терминал+Торговый Сервер и, в случае проблем, сообщать в Сервисдеск.
Обновленный скрипт в приложении. Быстро находит, например, такие проблемы
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Библиотеки: MT4Orders
Andrey Khatimlianskii, 2018.06.06 01:53
Работа с длинной историей теперь просто летает!
Результат без Generic
Результат с Generic
На истории с 10К сделок и 20К ордеров Generic-вариант в ~30 раз быстрее. Чем больше торговая история, тем заметнее ускорение.