MetaTrader 4. Build 160. - страница 4

 
Непонятно почему не инициализированы поля Order'a после его удачной отправки или закрытия. Я сделал функцию orderStr, которая возвращает описание ордера:

Очень просто: кому-то другому захочется сохранения старых данных ордера, а не автоматической замены. И это правильно. Если нужно заполнить ордер, просто вызовите OrderSelect с нужным номером ордера.
 
О библиотеках:
для скорости я рекомендую (по возможности) включать код библиотеки в саму программу через #include, а не через импорт #import. Импорт библиотек через #import - это серьезные накладные расходы, сопоставимые с COM. С помощью #include исходный код библиотеки встраивается непосредственно в основной код, тем самым получается экономия на вызовах функций.


За совет спасибо, а то я утилитные функции повыносил в библиотеку, думал работать будет также, а компилироваться кода меньше :)
 

Очень просто: кому-то другому захочется сохранения старых данных ордера, а не автоматической замены. И это правильно. Если нужно заполнить ордер, просто вызовите OrderSelect с нужным номером ордера.


Я не совсем понимаю, почему система не инициализирует openTime после открытия ордера, но еще больше не понимаю, почему поле lots ведет себя непредсказуемо, ладно бы в неинициализированых полях были 0, но если случайные значения ...
 
Я не совсем понимаю, почему система не инициализирует openTime после открытия ордера

Просто смените точку зрения. OrderSelect кеширует текущее состояние ордера в специальной _копии_ ордера. И чтобы сменить состояние копии, надо снова вызвать OrderSelect. Выбрал ордер, закешировал его текущее состояние и уверен, что все поля в нем верные.

поле lots ведет себя непредсказуемо, ладно бы в неинициализированых полях были 0, но если случайные значения

Проверьте себя на практике еще раз - удостоверьтесь что делали корректный вызов OrderSelect, что гарантированно _проверили_результат_ вызова OrderSelect.
 
В окне "Обзор рынка" кликаю мышкой на любом инструменте после чего нажимаю Del. Вместо удаления вылетает окно открытия ордера.
 
В окне "Обзор рынка" кликаю мышкой на любом инструменте после чего нажимаю Del. Вместо удаления вылетает окно открытия ордера.

Только что попробовал (билд 160) - по клавише Delete происходих удаление выделенного символа в Market Watch. У Вас постоянно так происходит?
 
Не получается создать Set без валют. Валюты вообще не удаляются. Если так задумано, то зачем?
 
MetaTrader 4. Build 160.

1. Обновлены иконки терминала.
2. Исправлена ошибка вызова функций внутри библиотек.
3. В MQL4 добавлены функции IsDllsAllowed, IsLibrariesAllowed.
4. Добавлена возможность выбора страны из списка при открытии нового демо-счета.
5. Поправлен расчет маржевых требований перекрытых ордеров.
6. Экспертные программы останавливаются при неудачном вызове внешней функции.
7. В объекте Fibo Expantion сохраняется свойство Background.
8. Внесены изменения в Словарь редактора MetaEditor.
9. Исправлены ошибки по крешлогам.


Уважаемые разработчики, особенное спасибо за пункт номер 7 !!!
 
Не получается создать Set без валют. Валюты вообще не удаляются. Если так задумано, то зачем?

Символы не удаляются из Market Watch, если по ним есть открытые графики или открытые позиции. Попробуйте закрыть все форексные графики и открытые позиции. Перезапустите (после удалению графиков они все равно еще остаются активными в базе) терминал и создайте нужные сеты.
 

Проверьте себя на практике еще раз - удостоверьтесь что делали корректный вызов OrderSelect, что гарантированно _проверили_результат_ вызова OrderSelect.


При закрытии ордера, OrderSelect я вообще не делаю, поскольку в документации написано:
bool OrderClose( int ticket, double lots, double price, int slippage, color Color=CLR_NONE) 

Closes opened order and selects it.



Получается, что после отктрытия/закрытия ордера, надо обязательно делать OrderSelect по этому ордеру, чтобы считать правильные значения его полей?

Причина обращения: