В том то и дело, что прошла. После окончания выполнения скрипта остается висеть одна или две позиции (в зависимости от того, сколько принтов вставить в код).
Многие трейдеры на Московской бирже хотели бы автоматизировать свои торговые алгоритмы, но не знают с чего начать. Язык MQL5 предлагает не только огромный набор торговых функций, но и готовые классы, которые максимально облегчают первые шаги в алготрейдинге.
имхо, OnTradeTransaction() тоже ничего не гарантирует, очередность событий не гарантирует, как и саму доставку информации в терминал тоже - я про случай с не самыми надежными провайдерами интернета
механизма контроле OnTradeTransaction() нет, или получил или не получил все события в строгой очередности
ЗЫ: про лаконичность языка..... нашел бы 2 часа времени какой-нибудь не самый занятый программист MQ на написание функции возвращающей текстовое описание кода ошибки, ему б цены не было, да и писанины бы меньше стало в MQL5 , в МТ4 не нужно, пусть пишут руками
//+------------------------------------------------------------------+//| Возврат стрингового результата торговой операции по его коду |//+------------------------------------------------------------------+string ResultRetcodeDescription(int retcode)
{
string str;
//----switch(retcode)
{
caseTRADE_RETCODE_REQUOTE:
str="TRADE_RETCODE_REQUOTE(Реквота)";
break;
caseTRADE_RETCODE_REJECT:
str="TRADE_RETCODE_REJECT(Запрос отвергнут)";
break;
caseTRADE_RETCODE_CANCEL:
str="TRADE_RETCODE_CANCEL(Запрос отменен трейдером)";
break;
caseTRADE_RETCODE_PLACED:
str="TRADE_RETCODE_PLACED(Ордер размещен)";
break;
caseTRADE_RETCODE_DONE:
str="TRADE_RETCODE_DONE(Заявка выполнена)";
break;
caseTRADE_RETCODE_DONE_PARTIAL:
str="TRADE_RETCODE_DONE_PARTIAL(Заявка выполнена частично)";
break;
caseTRADE_RETCODE_ERROR:
str="TRADE_RETCODE_ERROR(Ошибка обработки запроса)";
break;
caseTRADE_RETCODE_TIMEOUT:
str="TRADE_RETCODE_TIMEOUT(Запрос отменен по истечению времени)";
break;
caseTRADE_RETCODE_INVALID:
str="TRADE_RETCODE_INVALID(Неправильный запрос)";
break;
caseTRADE_RETCODE_INVALID_VOLUME:
str="Неправильный объем в запросе";
break;
caseTRADE_RETCODE_INVALID_PRICE:
str="TRADE_RETCODE_INVALID_VOLUME(Неправильная цена в запросе)";
break;
caseTRADE_RETCODE_INVALID_STOPS:
str="TRADE_RETCODE_INVALID_STOPS(Неправильные стопы в запросе)";
break;
caseTRADE_RETCODE_TRADE_DISABLED:
str="TRADE_RETCODE_TRADE_DISABLED(Торговля запрещена)";
break;
caseTRADE_RETCODE_MARKET_CLOSED:
str="TRADE_RETCODE_MARKET_CLOSED(Рынок закрыт)";
break;
caseTRADE_RETCODE_NO_MONEY:
str="TRADE_RETCODE_NO_MONEY(Нет достаточных денежных средств для выполнения запроса)";
break;
caseTRADE_RETCODE_PRICE_CHANGED:
str="TRADE_RETCODE_PRICE_CHANGED(Цены изменились)";
break;
caseTRADE_RETCODE_PRICE_OFF:
str="TRADE_RETCODE_PRICE_OFF(Отсутствуют котировки для обработки запроса)";
break;
caseTRADE_RETCODE_INVALID_EXPIRATION:
str="TRADE_RETCODE_INVALID_EXPIRATION(Неверная дата истечения ордера в запросе)";
break;
caseTRADE_RETCODE_ORDER_CHANGED:
str="TRADE_RETCODE_ORDER_CHANGED(Состояние ордера изменилось)";
break;
caseTRADE_RETCODE_TOO_MANY_REQUESTS:
str="TRADE_RETCODE_TOO_MANY_REQUESTS(Слишком частые запросы)";
break;
caseTRADE_RETCODE_NO_CHANGES:
str="TRADE_RETCODE_NO_CHANGES(В запросе нет изменений)";
break;
caseTRADE_RETCODE_SERVER_DISABLES_AT:
str="TRADE_RETCODE_SERVER_DISABLES_AT(Автотрейдинг запрещен сервером)";
break;
caseTRADE_RETCODE_CLIENT_DISABLES_AT:
str="TRADE_RETCODE_CLIENT_DISABLES_AT(Автотрейдинг запрещен клиентским терминалом)";
break;
caseTRADE_RETCODE_LOCKED:
str="TRADE_RETCODE_LOCKED(Запрос заблокирован для обработки)";
break;
caseTRADE_RETCODE_FROZEN:
str="TRADE_RETCODE_FROZEN(Ордер или позиция заморожены)";
break;
caseTRADE_RETCODE_INVALID_FILL:
str="TRADE_RETCODE_INVALID_FILL(Указан неподдерживаемый тип исполнения ордера по остатку)";
break;
caseTRADE_RETCODE_CONNECTION:
str="TRADE_RETCODE_CONNECTION(Нет соединения с торговым сервером)";
break;
caseTRADE_RETCODE_ONLY_REAL:
str="TRADE_RETCODE_ONLY_REAL(Операция разрешена только для реальных счетов)";
break;
caseTRADE_RETCODE_LIMIT_ORDERS:
str="TRADE_RETCODE_LIMIT_ORDERS(Достигнут лимит на количество отложенных ордеров)";
break;
caseTRADE_RETCODE_LIMIT_VOLUME:
str="TRADE_RETCODE_LIMIT_VOLUME(Достигнут лимит на объем ордеров и позиций для данного символа)";
break;
caseTRADE_RETCODE_INVALID_ORDER:
str="TRADE_RETCODE_INVALID_ORDER:Неверный или запрещённый тип ордера)";
break;
caseTRADE_RETCODE_POSITION_CLOSED:
str="TRADE_RETCODE_POSITION_CLOSED:Позиция с указанным POSITION_IDENTIFIER уже закрыта)";
break;
caseTRADE_RETCODE_INVALID_CLOSE_VOLUME:
str="TRADE_RETCODE_INVALID_CLOSE_VOLUME(Закрываемый объем превышает текущий объем позиции)";
break;
caseTRADE_RETCODE_CLOSE_ORDER_EXIST:
str="TRADE_RETCODE_CLOSE_ORDER_EXIST(Для указанной позиции уже есть ордер на закрытие)";
break;
caseTRADE_RETCODE_LIMIT_POSITIONS:
str="TRADE_RETCODE_LIMIT_POSITIONS(Количество открытых позиций, которое можно одновременно иметь на счете, может быть ограничено настройками сервера)";
break;
caseTRADE_RETCODE_REJECT_CANCEL:
str="TRADE_RETCODE_REJECT_CANCEL(Запрос на активацию отложенного ордера отклонен, а сам ордер отменен)";
break;
caseTRADE_RETCODE_LONG_ONLY:
str="TRADE_RETCODE_LONG_ONLY(Запрос отклонен, так как на символе установлено правило \"Разрешены только длинные позиции\")";
break;
caseTRADE_RETCODE_SHORT_ONLY:
str="TRADE_RETCODE_SHORT_ONLY(Запрос отклонен, так как на символе установлено правило \"Разрешены только короткие позиции\")";
break;
caseTRADE_RETCODE_CLOSE_ONLY:
str="TRADE_RETCODE_CLOSE_ONLY(Запрос отклонен, так как на символе установлено правило \"Разрешено только закрывать существующие позиции\")";
break;
caseTRADE_RETCODE_FIFO_CLOSE:
str="TRADE_RETCODE_FIFO_CLOSE(Запрос отклонен, так как для торгового счета установлено правило \"Разрешено закрывать существующие позиции только по правилу FIFO\")";
break;
case TRADE_RETCODE_HEDGE_PROHIBITED:
str="TRADE_RETCODE_HEDGE_PROHIBITED(Запрос отклонен, так как для торгового счета установлено правило \"Запрещено открывать встречные позиции по одному символу\")";
break;
//case : str=""; break;//case : str=""; break;//case : str=""; break;//case : str=""; break;default:
str="Неизвестный результат";
}
//----return(str);
}
Ну просили люди дать доступ в чёрный ящик - им дали. Теперь нужно самому делать эту синхронизацию. Просили? Просили. Дали? Дали. Хорошо это? Говорили, что будет хорошо. Как дали - стало плохо.
1. я не просил
2. никто не говорил что ценой за это будет целостность данных, которая на порядок важнее
может вместо голой демагогии типа "самивиноваты" предложите решение без костылей?
я такой же код за полчаса из справки МЕ сделал - открыл коды ошибок, выделил мышей, Ctrl+C , создал пустую страницу Эксел, Ctrl+V и добавил столбцы с case: и кавычки
затем Ctrl+C + Ctrl+V в ME
ладно, видимо "стойко переносить тяготы и лишения" - это не только статья из устава ВС, это скорее менталитет наш
я такой же код за полчаса из справки МЕ сделал - открыл коды ошибок, выделил мышей, Ctrl+C , создал пустую страницу Эксел, Ctrl+V и добавил столбцы с case: и кавычки
затем Ctrl+C + Ctrl+V в ME
ладно, видимо "стойко переносить тяготы и лишения" - это не только статья из устава ВС, это скорее менталитет наш
Для авторизации и пользования сайтом MQL5.com необходимо разрешить использование файлов Сookie.
Пожалуйста, включите в вашем браузере данную настройку, иначе вы не сможете авторизоваться.
Вы вошли в аккаунт. Двухфакторная аутентификация отключена. Настройте её заново и отсканируйте новый QR-код или продолжите с отключённой двухфакторной аутентификацией.
вроде так работает:
но очень медленно, да и решение такое себе
вроде так работает:
но очень медленно, да и решение такое себе
Вы сделали почти такой вариант.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Великий и ужасный МТ4 навсегда (или как грамотно выработать стратегию перехода)
fxsaber, 2021.05.09 00:36
Можно использовать такое условие:
в общем нужна некая синхронная RefreshPositions() от разработчиков которая гарантированно вернет с сервера состояние позиций + ордеров
тогда кому надо тот асинхронно отправляет ордера, кому не надо, тот в теле программы будет ждать ответа сервера
В том то и дело, что прошла. После окончания выполнения скрипта остается висеть одна или две позиции (в зависимости от того, сколько принтов вставить в код).
Код:
Результат:
Для полноты картины повесьте на соседний график слушателя торговых событий из статьи https://www.mql5.com/ru/articles/2513
Чтобы увидеть порядок событий
+ добавьте после отправки ордера вывод request_id - Идентификатор запроса, устанавливается терминалом при отправке
Сколько там реально отсылается ордеров
имхо, OnTradeTransaction() тоже ничего не гарантирует, очередность событий не гарантирует, как и саму доставку информации в терминал тоже - я про случай с не самыми надежными провайдерами интернета
механизма контроле OnTradeTransaction() нет, или получил или не получил все события в строгой очередности
ЗЫ: про лаконичность языка..... нашел бы 2 часа времени какой-нибудь не самый занятый программист MQ на написание функции возвращающей текстовое описание кода ошибки, ему б цены не было, да и писанины бы меньше стало в MQL5 , в МТ4 не нужно, пусть пишут руками
;)
Найдено в кодобазе и добавлены последние коды
Ну просили люди дать доступ в чёрный ящик - им дали.
Теперь нужно самому делать эту синхронизацию. Просили? Просили. Дали? Дали. Хорошо это? Говорили, что будет хорошо. Как дали - стало плохо.
1. я не просил
2. никто не говорил что ценой за это будет целостность данных, которая на порядок важнее
может вместо голой демагогии типа "самивиноваты" предложите решение без костылей?
Найдено в кодобазе и добавлены последние коды
я такой же код за полчаса из справки МЕ сделал - открыл коды ошибок, выделил мышей, Ctrl+C , создал пустую страницу Эксел, Ctrl+V и добавил столбцы с case: и кавычки
затем Ctrl+C + Ctrl+V в ME
ладно, видимо "стойко переносить тяготы и лишения" - это не только статья из устава ВС, это скорее менталитет наш
1. я не просил
2. никто не говорил что ценой за это будет целостность данных, которая на порядок важнее
может вместо голой демагогии типа "самивиноваты" предложите решение без костылей?
я такой же код за полчаса из справки МЕ сделал - открыл коды ошибок, выделил мышей, Ctrl+C , создал пустую страницу Эксел, Ctrl+V и добавил столбцы с case: и кавычки
затем Ctrl+C + Ctrl+V в ME
ладно, видимо "стойко переносить тяготы и лишения" - это не только статья из устава ВС, это скорее менталитет наш