MessageBox останавливает выполнение советника. Просьба рассмотреть возможность задавать для MessageBox обратный отсчет времени на принятие решения пользователем.
fxsaber: MessageBox останавливает выполнение советника. Просьба рассмотреть возможность задавать для MessageBox обратный отсчет времени на принятие решения пользователем.
Сейчас попробовал, в MQL4 эта недокументированная функция вызывается без проблем. Вот рабочий пример:
#include <WinUser32.mqh>#import "user32.dll"int MessageBoxTimeoutA(int hWnd, string lpText, string lpCaption, int uType, int wLanguageId, int dwMilliseconds);
int start()
{
int result=MessageBoxTimeoutA(0,"Are you ok?","Caption",MB_YESNO,0,1000);
Print(result);
}
I (b3003) want to change hasChanged to HasChanged firstly in the actual and then in all files. / Я хочу изменить hasChanged на HasChanged сначала в фактическом, а затем во всех файлах
Найти и найти и заменить в одном или нескольких файлах не получится. :(
Find and Find & Replace in one File or more does not work. :(
This is found but not replaced: / Это найдено, но не заменено:
If I want to change that in all file of the actual and the subdirectories I can find them but nothing is replaced:
Если я хочу изменить это во всех файлах фактического и подкаталогов, я могу найти их, но ничего не заменяется:
Вручную вводимые значения переменных в GUI могут ошибочно изменяться.
// Изменение значения глобальной переменной во время ее незаконченного редактирования.voidOnStart()
{
GlobalVariableSet("Lots", 1);
Alert(GlobalVariableGet("Lots"));
MessageBox("Нажмите F3 и начните редактировать значение переменной Lots.\n" +
"Не нажимайте ENTER - конечный результат изменения переменной при редактировании.");
Sleep(10000); // Даем время на редактирование.Alert("Этим сообщением редактируемая переменная Lots была изменена.");
Sleep(1000);
Alert(GlobalVariableGet("Lots"));
}
Результат.
2021.07.2912:55:07.837Alert: 1.02021.07.2912:55:07.837 Нажмите F3 и начните редактировать значение переменной Lots.
2021.07.2912:55:07.837 Не нажимайте ENTER - конечный результат изменения переменной при редактировании.
2021.07.2912:55:19.209Alert: Этим сообщением редактируемая переменная Lots была изменена.
2021.07.2912:55:20.203Alert: 1234.0
Эта уязвимость может иметь серьезные последствия во время торговли.
Столкнулся с аналогичной ситуацией. Дело было так:
1. Был ордер 0.6 buy limit.
2. 0.1 от него частично залились.
3. Оставшиеся 0.5 лимитника лочатся, потому что у брокера срабатывает активация.
4. Я пытаюсь закрыть залитые 0.1 по CloseBy и получаю реджект из-за п.3.
В итоге этот ордер CloseBy исчезает. И его нет нигде, ни на клиенте, ни даже на сервере в истории. При сортировке по тикетам там дыра.
Забагованый сервер МТ5 с пропадающими ордерами-это очень неприятно.
Просьба CloseBy-rejects ордера сохранять в истории торгов.
Не должно быть ситуаций, что ордер выбирается через OrderSelect, а после реджекта его больше никогда нельзя посмотреть через HistoryOrderSelect.
if (OrderSelect(Ticket))
{
Sleep(10000);
if (!OrderSelect(Ticket) && !HistoryOrderSelect(Ticket))
Alert("Bug"); // Ордера нет (и не будет) среди живых и мертвых.
}
// Скрипт позволяет увидеть, как формируется таблица истории ордеров// при создании/удалении новых ордеров и без этого.#property script_show_inputsinputbool inFlag = true; // Проверка истории с открытием ордеровinputdatetime inFrom = 0; // Не ноль приведет к ошибке и с новыми ордерами#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006voidOnTick()
{
MqlTick Tick;
if (SymbolInfoTick(_Symbol, Tick) && Tick.ask)
{
Print("------------\n" + (string)inFlag); // Отделили строки разных запусков скрипта.if (inFlag) // Проверка на новых ордерах.
{
// Попытка сформировать кеш на случай, если начальная дата будет всегда постоянной, но ненулевой.HistorySelect(inFrom, INT_MAX);
Print("Create/Delete orders.");
// Создали первый ордер.const TICKET_TYPE Ticket1 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
Sleep(2000); // Подождали и создали второй ордер.const TICKET_TYPE Ticket2 = OrderSend(_Symbol, OP_BUYLIMIT, 0.1, Tick.ask - 1000 * _Point, 0, 0, 0);
Print(Ticket1); // Тикет первого.Print(Ticket2); // Тикет второго.
OrderDelete(Ticket2); // Удалили второй - попал в историю.Sleep(2000); // Подождали и удалили первый - попал в историю.
OrderDelete(Ticket1);
// Проверка последовательности ордеров в истории - последних двух.if (HistorySelect(inFrom, INT_MAX))
{
Print("Check the History. inFrom = " + (string)inFrom);
constint Total = HistoryOrdersTotal();
for (int i = Total - 2; i < Total; i++)
Print(HistoryOrderGetTicket(i)); // Распечатываем тикеты в конце таблицы.
}
ExpertRemove();
}
}
}
Результат Тестера.
2021.06.1915:30:46.582 Core 1 EURUSD,M1: testing of Experts\Test9.ex5 from 2021.06.1800:00 to 2021.06.1900:00 started with inputs:
2021.06.1915:30:46.582 Core 1 inFlag=true2021.06.1915:30:46.582 Core 1 inFrom=02021.06.1915:30:46.582 Core 1 EURUSD : real ticks begin from 2021.03.1500:00:002021.06.1915:30:46.582 Core 12021.06.1800:00:00 ------------
2021.06.1915:30:46.582 Core 12021.06.1800:00:00true2021.06.1915:30:46.582 Core 12021.06.1800:00:00 Create/Delete orders.
2021.06.1915:30:46.582 Core 12021.06.1800:00:00 buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19097)
2021.06.1915:30:46.582 Core 12021.06.1800:00:02 buy limit 0.1 EURUSD at 1.18097 (1.19057 / 1.19069)
2021.06.1915:30:46.582 Core 12021.06.1800:00:0222021.06.1915:30:46.582 Core 12021.06.1800:00:0232021.06.1915:30:46.582 Core 12021.06.1800:00:02 order canceled [#3buy limit 0.1 EURUSD at 1.18097]
2021.06.1915:30:46.582 Core 12021.06.1800:00:04 order canceled [#2buy limit 0.1 EURUSD at 1.18097]
2021.06.1915:30:46.582 Core 12021.06.1800:00:04 Check the History. inFrom = 1970.01.0100:00:002021.06.1915:30:46.582 Core 12021.06.1800:00:0432021.06.1915:30:46.582 Core 12021.06.1800:00:0422021.06.1915:30:46.582 Core 12021.06.1800:00:04ExpertRemove() function called
Все четко и правильно в Тестере! Это не повод ломать Тестер. Это повод вернуть хотя бы поведение Терминала к тому, что было еще в b2958. Там работало только для inFrom = 0, но работало. В Тестере работает для любого inFrom правильно. Это абсолютно логично.
Что имеем на данный момент. HistorySelect в Терминале и в Тестере работают разными алгоритмами. При этом в Тестере этот алгоритм удобный и логичный, да еще и супер-быстрый - дозапись всего, что приходит в историю, в конец таблицы. В Терминале же - нет.
Заметьте, не упоминаю сортировку по какому-либо признаку во время работы советника. Просто говорю о дозаписи в конец (а не в середину) новых элементов истории.
Если же говорить о сортировке, то она нужна только один раз - при запуске советника. И сортировка должна быть по ORDER_TIME_DONE_MSC (при совпадающих значениях - по тикету). Тогда будет полная однозначность HistorySelect-таблицы во время работы и сразу после запуска.
MessageBox останавливает выполнение советника. Просьба рассмотреть возможность задавать для MessageBox обратный отсчет времени на принятие решения пользователем.
Это вопрос 2012 года
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Вопрос о MessageBox()
Alexey Navoykov, 2012.02.07 15:21
Сейчас попробовал, в MQL4 эта недокументированная функция вызывается без проблем. Вот рабочий пример:
Это вопрос 2012 года
Но нестандартное решение
I (b3003) want to change hasChanged to HasChanged firstly in the actual and then in all files. / Я хочу изменить hasChanged на HasChanged сначала в фактическом, а затем во всех файлах
Найти и найти и заменить в одном или нескольких файлах не получится. :(
Find and Find & Replace in one File or more does not work. :(
This is found but not replaced: / Это найдено, но не заменено:
If I want to change that in all file of the actual and the subdirectories I can find them but nothing is replaced:
Если я хочу изменить это во всех файлах фактического и подкаталогов, я могу найти их, но ничего не заменяется:
Вручную вводимые значения переменных в GUI могут ошибочно изменяться.
Результат.
Эта уязвимость может иметь серьезные последствия во время торговли.
Строка для поиска: Oshibka 030.
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Акцептирование SL/TP-ордеров
traveller00, 2021.07.06 16:34
Столкнулся с аналогичной ситуацией. Дело было так:
1. Был ордер 0.6 buy limit.
2. 0.1 от него частично залились.
3. Оставшиеся 0.5 лимитника лочатся, потому что у брокера срабатывает активация.
4. Я пытаюсь закрыть залитые 0.1 по CloseBy и получаю реджект из-за п.3.
В итоге этот ордер CloseBy исчезает. И его нет нигде, ни на клиенте, ни даже на сервере в истории. При сортировке по тикетам там дыра.
Забагованый сервер МТ5 с пропадающими ордерами-это очень неприятно.
Просьба CloseBy-rejects ордера сохранять в истории торгов.
Не должно быть ситуаций, что ордер выбирается через OrderSelect, а после реджекта его больше никогда нельзя посмотреть через HistoryOrderSelect.
Никак не получалось закачать тики по символу. Либо ничего, либо только за сегодня.
Когда сменил Access Point, то тики стали закачиваться.
На скрине выделил проблемную точку доступа, которая автоматом выбиралась терминалом.
Разве доступ к тиковой истории должен зависеть от Access Points? Ну и явный баг, что каждый релогин выбирает точку не с минимальным пингом.
У меня сейчас Windows 11 (канал Бета)
а терминал определяет её как Windows 10
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 2980: Push-уведомления о торговых операциях
fxsaber, 2021.07.23 15:49
Время компиляции и размер EX5 очень сильно выросли при переходе b2982->b3003. Несколько раз перепроверил. Встроенных ресурсов в коде нет.
b3007, просьба исправить поведение на прежнее (b2958).
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Новая версия платформы MetaTrader 5 build 2940: Перенос витрин MQL5-сервисов в рабочую область и обновление дизайна
fxsaber, 2021.06.19 14:39
Веский довод, почему сейчас в Терминале неправильно. Переделал скрипт в советник.Результат Тестера.
Все четко и правильно в Тестере! Это не повод ломать Тестер. Это повод вернуть хотя бы поведение Терминала к тому, что было еще в b2958. Там работало только для inFrom = 0, но работало. В Тестере работает для любого inFrom правильно. Это абсолютно логично.
Что имеем на данный момент. HistorySelect в Терминале и в Тестере работают разными алгоритмами. При этом в Тестере этот алгоритм удобный и логичный, да еще и супер-быстрый - дозапись всего, что приходит в историю, в конец таблицы. В Терминале же - нет.
Заметьте, не упоминаю сортировку по какому-либо признаку во время работы советника. Просто говорю о дозаписи в конец (а не в середину) новых элементов истории.
Если же говорить о сортировке, то она нужна только один раз - при запуске советника. И сортировка должна быть по ORDER_TIME_DONE_MSC (при совпадающих значениях - по тикету). Тогда будет полная однозначность HistorySelect-таблицы во время работы и сразу после запуска.