Обсуждение статьи "Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXIII): Основной торговый класс - контроль допустимых параметров"

 

Опубликована статья Библиотека для простого и быстрого создания программ для MetaTrader (Часть XXIII): Основной торговый класс - контроль допустимых параметров:

В статье продолжим развитие торгового класса - организуем контроль неверных значений параметров торгового приказа и озвучим торговые события.

Скомпилируем советник и запустим его в тестере, предварительно установив в параметрах значение Lots, равным 10,
а для значений StopLoss in points и TakeProfit in points зададим значения по 1 пункту:


Таким образом мы попробуем открыть позицию с недопустимым размеров лота — чтобы не хватало средств на её открытие, и попробуем нарушить требования по минимальной дистанции установки стоп-приказов, регламентируемой параметром StopLevel символа:


Советник нам вывел в журнал две ошибки — "не хватает средств на выполнение торговой операции", и "значение StopLoss нарушает требования по параметру StopLevel символа". Но мы же задали и для TakeProfit значение в один пункт. Почему же он нам не сказал об этой ошибке? Да потому, что тут нет ошибки, так как установка уровней TakeProfit и StopLoss в пределах минимального уровня SYMBOL_TRADE_STOPS_LEVEL производится по правилу:

уровни TakeProfit и StopLoss необходимо сравнивать с текущей ценой, по которой можно совершить операцию противоположного направления:

  • Покупка совершается по цене Ask — уровни TakeProfit и StopLoss нужно сравнивать с текущей ценой продажи Bid.
  • Продажа совершается по цене Bid — уровни TakeProfit и StopLoss нужно сравнивать с текущей ценой покупки Ask.

Автор: Artyom Trishkin

 

Ну спасибо. Для MQL4 это действительно находка. Спасибо за труд и потраченное время для пользы общества.

Давайте уже приступайте к написанию документации.

 
Alexey Viktorov:

Ну спасибо. Для MQL4 это действительно находка. Спасибо за труд и потраченное время для пользы общества.

Давайте уже приступайте к написанию документации.

Подробная документация будет только после разработки основного функционала библиотеки. Так что пока можно задавать интересующие вопросы в обсуждениях к статьям.
 

Мне вот интересно - кто нибудь пользует эти библиотеки? Реально огромные простыни кода и разобраться в них займет времени больше, чем на изучение самого MQL.  Очень возможно  что библиотека полезна в качестве использования. Но по моему, операторов в mql5 меньше чем методов и классов в этой огромной библиотеке. 

НА мой взгляд ООП должно сокращать код и делать его более читабельным. Но используя все эти библы,  удобства как раз и не заметил. Вот если взять стандартную библиотеку ТО там чтоб открыть позицию используется простая контсрукция : Обявили объект типа: 

Ctrade tr;
tr.OpenBuy();

все!

А с этой библиотекой только в OnInit напихано куча всего. Так еще используется достаточно много глобальных переменных. Что-то найти, ну мягко сказать, проблематично. 

 
Dmitiry Ananiev:

Мне вот интересно - кто нибудь пользует эти библиотеки? Реально огромные простыни кода и разобраться в них займет времени больше, чем на изучение самого MQL.  Очень возможно  что библиотека полезна в качестве использования. Но по моему, операторов в mql5 меньше чем методов и классов в этой огромной библиотеке. 

НА мой взгляд ООП должно сокращать код и делать его более читабельным. Но используя все эти библы,  удобства как раз и не заметил. Вот если взять стандартную библиотеку ТО там чтоб открыть позицию используется простая контсрукция : Обявили объект типа: 

Ctrade tr;
tr.OpenBuy();

все!

А с этой библиотекой только в OnInit напихано куча всего. Так еще используется достаточно много глобальных переменных. Что-то найти, ну мягко сказать, проблематично. 

Да, пользуются.

Код библиотеки разбирать не нужно. В статьях описывается процесс создания, служащий подробным учебным материалом тем, кому это интересно.

К каждой статье прилагается тестовый советник, в еотором показано как можно использовать тот, или иной функционал библиотеки. Если функционал не требуется, то его и инициализировать не нужно.

Библиотека не доделана - только развивается. Будут простые и удобные функции для доступа к данным и для того же открытия позиции. К слову, вы описали открытие позиции со значениями по умолчанию. И пропустили (нарочно?) инициализацию торгового объекта.

Если в данный момент нет простого метода Buy(), Sell() в библиотеке, то это совершенно не означает, что в будущем их не будет. Будут, и не только они.

А теперь, пожалуйста, покажите, ну .., например, как вы в MQL4 легко определите закрытую позицию, предыдущую, с магиком 123 и не текущим символом - была ли она открыта при срабатывании отложенного ордера. И какого именно.

 
Artyom Trishkin:

 была ли она открыта при срабатывании отложенного ордера. И какого именно. 

MQL4 не хранит историю сработавших отложенных ордеров, в истории ордеров можно только определить:

- если закрытый ордер имел тип OP_BUY или OP_SELL - значит был закрыт рыночный ордер

- если закрытый ордер имел тип OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT или OP_SELLSTOP - значит был отменен отложенный ордер


Время закрытия ордера соответствует времени закрытия рыночного ордера или времени отмены отложенного.

Время открытия отложенного ордера соответствует времени выставления отложенного ордера, но это время будет заменено в момент сработки отложенного ордера на время открытия рыночного ордера

Тикет и магикномер ордера не изменяется за все время  (кроме случая встречного или частичного закрытия ордера - там другая ситуация, но магик не меняется)


Т.е. сам факт сработки отложенного ордера в истории ордеров MQL4 отсутствует, существует только факт отмены отложенного ордера. Насколько это необходимая информация - даже не припомню, возможно задачи не все знаю

 
Igor Makanu:

Насколько это необходимая информация - даже не припомню, возможно задачи не все знаю

Оценка величины проскальзывания. В MT5 для этого есть OrderOpenPriceRequest и OrderClosePriceRequest.

 
Igor Makanu:

MQL4 не хранит историю сработавших отложенных ордеров, в истории ордеров можно только определить:

- если закрытый ордер имел тип OP_BUY или OP_SELL - значит был закрыт рыночный ордер

- если закрытый ордер имел тип OP_BUYLIMIT, OP_BUYSTOP, OP_SELLLIMIT или OP_SELLSTOP - значит был отменен отложенный ордер


Время закрытия ордера соответствует времени закрытия рыночного ордера или времени отмены отложенного.

Время открытия отложенного ордера соответствует времени выставления отложенного ордера, но это время будет заменено в момент сработки отложенного ордера на время открытия рыночного ордера

Тикет и магикномер ордера не изменяется за все время  (кроме случая встречного или частичного закрытия ордера - там другая ситуация, но магик не меняется)


Т.е. сам факт сработки отложенного ордера в истории ордеров MQL4 отсутствует, существует только факт отмены отложенного ордера. Насколько это необходимая информация - даже не припомню, возможно задачи не все знаю

Так я и попросил человека, не понимающего возможностей библиотеки, написать как он "легко и просто" узнает это.

А библиотека может. И пользователю даже думать не нужно об этом - просто спросить.

Про него сразу понятно - "не читал, но осуждаю"

 
fxsaber:

Оценка величины проскальзывания. В MT5 для этого есть OrderOpenPriceRequest и OrderClosePriceRequest.

не оценивал еще, ибо застрял на создании совершенства...переписываю переписанное -переписанное (((

но имхо, такие вещи (оценку работы брокера) нужно выполнять параллельно работе основного эксперта и логировать, в тестере такие данные не имеют смысла?


-------------------

Artyom Trishkin:

Так я и попросил человека, не понимающего возможностей библиотеки, написать как он "легко и просто" узнает это.

А библиотека может. И пользователю даже думать не нужно об этом - просто спросить.

Про него сразу понятно - "не читал, но осуждаю"

по материалам статьи, листаю выборочно, обьем информации, ну просто большой, поэтому проще спросить:

предусмотрено ли в тестовых примерах возможность сохранения состояния ТС ? - "подхват" ордеров по своему магику не интересен, интересны реализации сохранения состояния именно эксперта на случай перезагрузки терминала

 
Igor Makanu:

в тестере такие данные не имеют смысла?

Огромный смысл в Тестере. Можно сильно обмануться, если не оценивать проскальзывание.

Например, эту ситуацию сразу заметил

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Тестер стратегий MetaTrader 5: ошибки, баги, предложения по улучшению работы

fxsaber, 2019.10.13 16:58

На биржевых кастомных символах тейки акцептируются по last-цене, а исполняются по bid/ask.

Например, тейк для BUY-позиции стоит на уровне 1.09801. Приходит такой тик bid/ask/last = 1.09799/1.09802/1.09801. Он срабатывает, т.к. last-цена каснулась, но при этом срабатывает по цене bid, что хуже last.

Получается, что тейки срабатывают все время с отрицательным проскальзыванием.

Без Report-библы в Тестере ничего не делаю. Иначе можно долго заниматься ерундой и не замечать этого.
 
Igor Makanu:
...

по материалам статьи, листаю выборочно, обьем информации, ну просто большой, поэтому проще спросить:

предусмотрено ли в тестовых примерах возможность сохранения состояния ТС ? - "подхват" ордеров по своему магику не интересен, интересны реализации сохранения состояния именно эксперта на случай перезагрузки терминала

В тестовых примерах предусмотрена только проверка того, что описывается в данной конкретной статье. Как проверка работоспособности.

Примеры использования функционала вместе с его описанием будут в отдельных статьях после завершения подготовки основного функционала библиотеки и создания пользовательских функций для быстрого доступа ко всем возможностям библиотеки.

----------------------

Что подразумевается под "состоянием эксперта"?

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