Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1250

 
Youri Lazurenko:

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

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

Здесь вы решили воспользоваться торговым объектом из СБ. А это значит, что при его создании и инициализации вам нужно установить его параметры. А потом просто к нему обращаться за торговым функционалом. Таких объектов может быть множество, и у каждого вы установите свои параметры. А далее - обращайтесь к нужному объекту для управления торговыми приказами по тем символам и магикам, которые установлены для каждого конкретного объекта, и которые требуются в разные моменты времени в зависимости от ТС.

Всё просто.

 
Здравствуйте, Артём Тришкин! 2020.09.14_01:14 GMT+3. Я взял стандартный советник Moving Average и изменил два условия для открытия сделки и для закрытия сделки. Но в тестере стратегий видно, что советник выполняет только второе условие для открытия и закрытия сделки, а первое условие игнорирует. Советник и так простой, как же пишут сложные советники, что у них всё работает? Как сделать так, чтобы хотя бы два условия для открытия и закрытия сделок работали? А ведь для открытия сделок может быть и больше условий. Вы знаете ответ на эти вопросы? Подскажите. Прикрепляю файл советника. 01:26 GMT+3.
Файлы:
 
Artyom Trishkin:

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

Здесь вы решили воспользоваться торговым объектом из СБ. А это значит, что при его создании и инициализации вам нужно установить его параметры. А потом просто к нему обращаться за торговым функционалом. Таких объектов может быть множество, и у каждого вы установите свои параметры. А далее - обращайтесь к нужному объекту для управления торговыми приказами по тем символам и магикам, которые установлены для каждого конкретного объекта, и которые требуются в разные моменты времени в зависимости от ТС.

Всё просто.

Здравствуйте. Спасибо за ответ. Выскажу свою точку зрения. В MQL4, открывая ордер, указываем его параметры, в том числе и магик.  В #include <Trade\OrderInfo.mqh>, указано все, кроме магика. Например - CTrade::BuyLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment=""). На мой взгляд, это не доработка и ее нужно исправить, введя еще параметр магика. Или в   #include <Trade\ HistoryOrderInfo.mqh> есть все, кроме профита (прибыли/убытка) полученного ордером. Это же важная информация об ордере, а ее нет.  Еще. Нужно найти профит последнего закрытого ордера. Информацию выведем в Comment(). И что увидим. Пока нет открытого ордера (позиции)  в комментарии отображается профит последнего ордера.  Как только открывается ордер (позиция) в комментарии получаем 0, пока ордер не будет закрыт. Т.е. ордер еще в рынке, но одновременно и в истории, он пребывает в двух ипостасях одновременно. Но это же нонсенс. Потому и говорю - язык ради языка. На мой взгляд, масса недоработанных мелочей. 

 
Youri Lazurenko:


Вы путаете понятия (в частности 'ордер'). В рынке может быть ОТЛОЖЕННЫЙ ОРДЕР или ПОЗИЦИЯ. Подробнее ознакомится можно в справке: Общие принципы.

Класс CTrade самодостаточен и в нем нет недоработок - есть только Ваше нежелание смотреть код реализации. При отсылке торгового приказа (хоть на выставление ОТЛОЖЕННОГО ОРДЕРА, хоть на открытие или модификацию ПОЗИЦИИ) экземпляр торгового класса отсылает magic number - Вам только нужно при создании объекта сразу его инициализировать

Общие принципы - Торговые операции - Справка по MetaTrader 5
Общие принципы - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Перед тем как приступить к изучению торговых функций платформы, необходимо создать четкое представление об основных терминах: ордер, сделка и позиция. — это распоряжение брокерской компании купить или продать финансовый инструмент. Различают два основных типа ордеров: рыночный и отложенный. Помимо них существуют специальные ордера Тейк Профит и...
 
Youri Lazurenko:

Здравствуйте. Спасибо за ответ. Выскажу свою точку зрения. В MQL4, открывая ордер, указываем его параметры, в том числе и магик.  В #include <Trade\OrderInfo.mqh>, указано все, кроме магика. Например - CTrade::BuyLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment=""). На мой взгляд, это не доработка и ее нужно исправить, введя еще параметр магика. Или в   #include <Trade\ HistoryOrderInfo.mqh> есть все, кроме профита (прибыли/убытка) полученного ордером. Это же важная информация об ордере, а ее нет.  Еще. Нужно найти профит последнего закрытого ордера. Информацию выведем в Comment(). И что увидим. Пока нет открытого ордера (позиции)  в комментарии отображается профит последнего ордера.  Как только открывается ордер (позиция) в комментарии получаем 0, пока ордер не будет закрыт. Т.е. ордер еще в рынке, но одновременно и в истории, он пребывает в двух ипостасях одновременно. Но это же нонсенс. Потому и говорю - язык ради языка. На мой взгляд, масса недоработанных мелочей

Юрий, это не масса недоработанных мелочей, а масса недопониманий.

Зачем в каждом открытии ордера или позиции писать магик, если достаточно один раз его обозначить в OnInit()

#include <Trade\Trade.mqh>
CTrade trade;

sinput  int Magic = 1; //  Идентификатор эксперта

int OnInit()
 {
  trade.SetExpertMagicNumber(Magic);
  return(INIT_SUCCEEDED);
 }/******************************************************************/

И всё!!! Дальше точно так-же проверяется магик ордера, сделки или позиции для идентификации «свой-чужой». Проблема в вашем понимании.

У ордера прибыли быть не может!!! Прибыль у позиции в текущее время. И у сделки закрытия позиции, или её части, но это уже в истории торгов. Ордер это всего лишь распоряжение совершить сделку на рынке.

По колхозному попробую объяснить. Приходите вы на рынок, решили купить урюк.

ордер: дайте мне килограмм урюка…

сделка: отдаёте деньги, берёте урюк…

позиция: в вашей сумке урюк…

С точки зрения продавца:

позиция: урюк на прилавке…

ордер: получаете распоряжение отвесить килограмм урюка…

сделка: отдаёте урюк, кладёте деньги в мешок…

 
Youri Lazurenko:

Здравствуйте. Спасибо за ответ. Выскажу свою точку зрения. В MQL4, открывая ордер, указываем его параметры, в том числе и магик.  В #include <Trade\OrderInfo.mqh>, указано все, кроме магика. Например - CTrade::BuyLimit(const double volume,const double price,const string symbol=NULL,const double sl=0.0,const double tp=0.0,const ENUM_ORDER_TYPE_TIME type_time=ORDER_TIME_GTC,const datetime expiration=0,const string comment=""). На мой взгляд, это не доработка и ее нужно исправить, введя еще параметр магика. Или в   #include <Trade\ HistoryOrderInfo.mqh> есть все, кроме профита (прибыли/убытка) полученного ордером. Это же важная информация об ордере, а ее нет.  Еще. Нужно найти профит последнего закрытого ордера. Информацию выведем в Comment(). И что увидим. Пока нет открытого ордера (позиции)  в комментарии отображается профит последнего ордера.  Как только открывается ордер (позиция) в комментарии получаем 0, пока ордер не будет закрыт. Т.е. ордер еще в рынке, но одновременно и в истории, он пребывает в двух ипостасях одновременно. Но это же нонсенс. Потому и говорю - язык ради языка. На мой взгляд, масса недоработанных мелочей. 

Вы мыслите процедурно, но пытаетесь использовать ООП-объекты. К ним иной подход. Например:

Создаётся объект. Ему задаётся магик.
Создаётся второй объект. Ему задаётся второй магик.
Создаётся третий объект. Ему задаётся третий магик.

Теперь у вас есть три торговых объекта для трёх стратегий в одном советнике.
Для открытия позиции или выставления отложенного ордера по первой ТС, вы должны обратиться к первому торговому объекту.
Для открытия позиции или выставления отложенного ордера по второй ТС, вы должны обратиться ко второму торговому объекту.
Для открытия позиции или выставления отложенного ордера по третьей ТС, вы должны обратиться к третьему торговому объекту.

У ордеров нет параметра прибыли. По одной простой причине - ордер это приказ (отложенный ордер - это приказ брокеру совершить некое действие при достижении ценой заданного уровня, т.е., приказ выполнить торговую операцию через некоторое время при достижении заданного критерия). Результатом торгового приказа (ордера) может стать сделка (вот у неё уже есть параметр профита DEAL_PROFIT), которая приведёт либо к порождению позиции, либо к её изменению или закрытию (и у позиции есть параметр профита, но только текущего - плавающего POSITION_PROFIT).

А ещё есть рыночный ордер (маркет-ордер) он всегда появляется перед сделкой при отсылке вами торгового приказа - это и есть ваш торговый приказ. И он виден в списке существующих ордеров. Т.е., любое открытие позиции порождает цепочку: ордер --> сделка --> позиция. Любое действие с открытой позицией порождает цепочку: позиция --> ордер --> сделка --> нет позиции или меньший объём позиции, или больший объём позиции (неттинг), или переворот позиции (неттинг)

Изучайте справку.

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Свойства сделок
  • www.mql5.com
Сделка является отражением факта совершения торговой операции на основании ордера, содержащего торговый приказ. Каждая сделка описывается свойствами, позволяющими получить информацию о ней. Для чтения значений свойств используются функции вида Идентификатор позиции, в открытии, изменении или закрытии которой участвовала эта сделка. Каждая...
 
Здравствуйте! Можно ли в коде индикатора "скользящая средняя" для MT5 сделать нестандартные периоды? Ну например не за 1 свечу, а за 0.5? Я так понял данные цен в платформе все ровно есть и индикатор их разделит и округлит..
 

Всем спасибо. Особенно  Alexey Viktorov - понятно и конкретно. Уже переделал и проверил - теперь есть информация о профите последнего ордера и советник ее использует. На счет позиция, ордер, сделка - слишком намудрено, лишняя  и не нужная путаница. Есть текущие ордера (отложенный, задействованный /рыночный/)  и ушедшие в историю, но все равно ордера. У меня нет урюка, у меня есть урюк - процесс передачи денег кратковременный и абсолютно не существенный.  Получается, пока идет взвешивание у продавца его уже как бы нет, у покупателя еще нет. Т.е. в этом промежутке путаница и неразбериха. Чем проще, тем лучше. 

Но все равно всем спасибо, желаю удачи.

 
Youri Lazurenko:

Всем спасибо. Особенно  Alexey Viktorov - понятно и конкретно. Уже переделал и проверил - теперь есть информация о профите последнего ордера и советник ее использует. На счет позиция, ордер, сделка - слишком намудрено, лишняя  и не нужная путаница. Есть текущие ордера (отложенный, задействованный /рыночный/)  и ушедшие в историю, но все равно ордера. У меня нет урюка, у меня есть урюк - процесс передачи денег кратковременный и абсолютно не существенный.  Получается, пока идет взвешивание у продавца его уже как бы нет, у покупателя еще нет. Т.е. в этом промежутке путаница и неразбериха. Чем проще, тем лучше. 

Но все равно всем спасибо, желаю удачи.

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

А время на перекладывание урюка с полки в котомку - есть время исполнения торгового приказа. И вот, имея все абсолютно данные по происходящим событиям, вы можете легко проконтролировать с какой скоростью идёт исполнение приказов. И не только это. У вас вообще теперь есть много возможностей по реализации любых статистических данных по любому из серверов, и тому, насколько качественно они могут исполнять ваши требования.

 
Artyom Trishkin:

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

А время на перекладывание урюка с полки в котомку - есть время исполнения торгового приказа. И вот, имея все абсолютно данные по происходящим событиям, вы можете легко проконтролировать с какой скоростью идёт исполнение приказов. И не только это. У вас вообще теперь есть много возможностей по реализации любых статистических данных по любому из серверов, и тому, насколько качественно они могут исполнять ваши требования.

Не обессудьте, чисто в русле дискуссии. Я давно торгую своими советниками (продажей не занимаюсь), у разных брокеров и меня не интересуют абсолютные данные по происходящим событиям. Меня интересует конечный результат - качественное исполнение ордеров  по запросам советника. Если ордера открываются через раз (образно говоря) я просто не буду дальше работать с этим брокером. Если у одного брокера открытие на пол секунды быстрее чем у другого, для меня это не существенно (как и отличие котировок).

На сколько просто написать советник в mql4 и на сколько, извиняюсь, геморойно в mql5.  Почему все же вопросы по mql5? Слышал хорошие отзывы о тестере МТ5 и чтобы попробовать пришлось ознакомится с языком mql5. Тестер  попробовал - не в восторге. Да, удобно что закачиваются котировки, гораздо быстрее, но в МТ4 более информативно. Мне, например, интересно знать не только, по какой цене закрылись ордера, но и какая при этом получена прибыль (убыток). При форвард оптимизации так грузится процессор, что комп вырубается. Попробовал один раз (это конечно не показатель) прогнать один и тот же советник, у одного и того же брокера. Результаты разные; в мт5 лучше - большая прибыль, существенно меньшая просадка, что напрягает. Возможно это старческое брюзжание, но на сегодняшний день у меня больше критики чем позитива.  Торговать на мт5 пока не собираюсь, но интерес написать качественный компактный советник остается. Просто ради интереса. 

Желаю удачи.

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