Интеллисенс делает абсолютно разумно и безошибочно два предположения для перехода, так как его работа - это обязательно расширять поле возможных вариантов.
Так как основной кейс его работы - это расширенно помогать в заведомо неполном заполнении текста/кода.
// Демонстрация сверх-низкой скорости работы HistoryOrderGetInteger.// В Тестере Deposit=10000000, длина интервала - неделя.inputint inMod = 5; // Через сколько тиков торговля// Открывает и сразу закрывает позицию.bool OpenClose()
{
MqlTradeRequest Request = {};
Request.action = TRADE_ACTION_DEAL;
Request.symbol = _Symbol;
Request.volume = 1;
Request.price = SymbolInfoDouble(Request.symbol, SYMBOL_ASK);
Request.type_filling = ORDER_FILLING_IOC; // Поставьте сюда поддерживаемый Filling.MqlTradeResult Result;
bool Res = OrderSend(Request, Result);
if (Res)
{
Request.type = (ENUM_ORDER_TYPE)!Request.type;
Request.position = Result.order;
Request.price = (Result.price == Result.bid) ? Result.ask : Result.bid;
Res = OrderSend(Request, Result);
}
return(Res);
}
voidOnTick()
{
staticint i = 0;
if (!(i++ % inMod))
OpenClose();
History();
}
// Демонстрация тормозов HistoryOrderGetInteger.void History()
{
if (HistorySelect(0, INT_MAX))
{
constulong DealTicket = HistoryDealGetTicket(HistoryDealsTotal() - 1);
constulong OrderTicket = HistoryDealGetInteger(DealTicket, DEAL_ORDER);
HistoryOrderGetInteger(OrderTicket, ORDER_TYPE); // Без этой строки бэктест проходит в несколько раз быстрее.
}
}
HistoryOrderGetInteger присутствует.
final balance 9971903.00 pips
EURUSD,M1: 159744 ticks, 4317 bars generated. Environment synchronized in0:00:00.023. Test passed in0:00:15.970 (including ticks preprocessing 0:00:00.015).
EURUSD,M1: total time from login to stop testing 0:00:15.993 (including 0:00:00.023for history data synchronization)
HistoryOrderGetInteger отсутствует.
final balance 9971903.00 pips
EURUSD,M1: 159744 ticks, 4317 bars generated. Environment synchronized in0:00:00.024. Test passed in0:00:01.212 (including ticks preprocessing 0:00:00.016).
EURUSD,M1: total time from login to stop testing 0:00:01.236 (including 0:00:00.024for history data synchronization)
Разница более, чем в 10 раз. Угробил уйму своего времени на выяснение причин медленной работы.
Но в основе тормозов конечно же попытка хака через HistorySelect(0, INT_MAX) на каждом тике, а потом стимуляция пересортировки 50к ордеров для извлечения нужного ордера.
Но в основе тормозов конечно же попытка хака через HistorySelect(0, INT_MAX) на каждом тике, а потом стимуляция пересортировки 50к ордеров для извлечения нужного ордера.
Эта функция ничего не возвращает, поэтому компилятор мог бы выкинуть полностью тело if, оставив только HistorySelect. Это не делается из-за возможного влияния на _LastError?
Эта функция ничего не возвращает, поэтому компилятор мог бы выкинуть полностью тело if, оставив только HistorySelect. Это не делается из-за возможного влияния на _LastError?
Эти функции серьезно меняют кеши ордеров и сделок. Это системно значимые функции, не помеченные как const.
Я специально проверил оптимизацию - функции не выкидываются.
Но вообще это хорошая и смелая мысль пометить их константными и спровоцировать оптимизацию.
Постоянный HistorySelect убивает кеши. Будем думать над оптимизацией.
Вообще конечно зря мы сделали HistorySelect - лучше и дешевле было бы всегда во всех случаях обеспечивать прямой и постоянный доступ к истории. Возможно, так и сделаем.
Вообще конечно зря мы сделали HistorySelect - лучше и дешевле было бы всегда во всех случаях обеспечивать прямой и постоянный доступ к истории. Возможно, так и сделаем.
После релиза мы начнем большую работу по добавлению новых более эффективных MQL5 функций и откроем нативные структуры данных ордеров/сделок, чтобы можно было упростить и ускорить алготрейдинг.
OrderExist и PositionExist - это специальные оптимизированные функции, которые позволяют избежать тупых переборов в цикле всех ордеров или позиций в поисках записей по символу, типу операции и меджику.
Результатом получаете массив с тикетами.
Программы могут серьезно сэкономить, используя эти функции. Особенно, когда массово, постоянно и многократно обращаются к открытым позициям и ордерам в переборных циклах.
В будущем мы реализуем более эффективные функции доступа к массивным данным торговых операций.
Язык тоже кардинально усилится и упростится с более мощным функционалом.
Ваш новый пример не имеет отношения к предыдущему.
Плюс я не расположен заниматься расшифровкой ваших мыслей.
Придал смысл переменной.
Придал смысл переменной.
Интеллисенс делает абсолютно разумно и безошибочно два предположения для перехода, так как его работа - это обязательно расширять поле возможных вариантов.
Так как основной кейс его работы - это расширенно помогать в заведомо неполном заполнении текста/кода.
HistoryOrderGetInteger присутствует.
HistoryOrderGetInteger отсутствует.
Разница более, чем в 10 раз. Угробил уйму своего времени на выяснение причин медленной работы.
Строка для поиска: Oshibka 076.
b4048, огромные тормоза HistoryOrderGetInteger.
HistoryOrderGetInteger присутствует.
HistoryOrderGetInteger отсутствует.
Разница более, чем в 10 раз. Угробил уйму своего времени на выяснение причин медленной работы.
Строка для поиска: Oshibka 076.
Спасибо, проверим.
Но в основе тормозов конечно же попытка хака через HistorySelect(0, INT_MAX) на каждом тике, а потом стимуляция пересортировки 50к ордеров для извлечения нужного ордера.
Спасибо, проверим.
Но в основе тормозов конечно же попытка хака через HistorySelect(0, INT_MAX) на каждом тике, а потом стимуляция пересортировки 50к ордеров для извлечения нужного ордера.
В коде есть HistoryDealGetInteger - не тормозит.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 4040: Улучшения и исправления
fxsaber, 2023.10.29 01:13
Эта функция ничего не возвращает, поэтому компилятор мог бы выкинуть полностью тело if, оставив только HistorySelect. Это не делается из-за возможного влияния на _LastError?
Эта функция ничего не возвращает, поэтому компилятор мог бы выкинуть полностью тело if, оставив только HistorySelect. Это не делается из-за возможного влияния на _LastError?
Эти функции серьезно меняют кеши ордеров и сделок. Это системно значимые функции, не помеченные как const.
Я специально проверил оптимизацию - функции не выкидываются.
Но вообще это хорошая и смелая мысль пометить их константными и спровоцировать оптимизацию.
В коде есть HistoryDealGetInteger - не тормозит.
У него свой кеш, отличающийся от ордеров.
Постоянный HistorySelect убивает кеши. Будем думать над оптимизацией.
Вообще конечно зря мы сделали HistorySelect - лучше и дешевле было бы всегда во всех случаях обеспечивать прямой и постоянный доступ к истории. Возможно, так и сделаем.
Постоянный HistorySelect убивает кеши. Будем думать над оптимизацией.
Вообще конечно зря мы сделали HistorySelect - лучше и дешевле было бы всегда во всех случаях обеспечивать прямой и постоянный доступ к истории. Возможно, так и сделаем.
Обещаний много было.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MT5 и скорость в боевом исполнении
Renat Fatkhullin, 2020.09.01 14:18
После релиза мы начнем большую работу по добавлению новых более эффективных MQL5 функций и откроем нативные структуры данных ордеров/сделок, чтобы можно было упростить и ускорить алготрейдинг.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
MT5 и скорость в боевом исполнении
Renat Fatkhullin, 2020.08.28 00:51
OrderExist и PositionExist - это специальные оптимизированные функции, которые позволяют избежать тупых переборов в цикле всех ордеров или позиций в поисках записей по символу, типу операции и меджику.
Результатом получаете массив с тикетами.
Программы могут серьезно сэкономить, используя эти функции. Особенно, когда массово, постоянно и многократно обращаются к открытым позициям и ордерам в переборных циклах.
В будущем мы реализуем более эффективные функции доступа к массивным данным торговых операций.
Язык тоже кардинально усилится и упростится с более мощным функционалом.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 3800: ордера Book or Cancel, помощь AI при написании кода и расширенная поддержка ONNX
fxsaber, 2023.06.07 14:38
Тот же перебор в цикле по символам вызывает коллизии, схожие с перебором ордеров и позиций.
Надо делать штатную в виде текущего снимка Обзора рынка.Это все нереализованный базовый функционал нормальной торговой платформы.