Уважаемые форумчане, подскажите, пожалуйста, ответ на нубский вопрос. Пытался ответить на него экспериментальным путем, но безуспешно.
Для свойства POSITION_PROFIT по умолчанию подразумевается значение в деньгах или в пипсах? Т.е. если я устанавливаю значение PositionGetDouble(POSITION_PROFIT)=5, на паре EUR/USD (5 символов после запятой в цене), это будет означать изменение цены на 5 пунктов (+0,00050), 0,5 пункта (+0,00005), 5 рублей (для рублевого счета) или 5 копеек?
Хочу, чтобы советник отрабатывал при достижении прибыли в 5 пунктов, т.е. (как я понимаю), 50 пипсов.
Спасибо.
Всегда не ясные моменты можно вывести в Print() и посмотреть результат. Это будет в сотни раз быстрее, чем создавать тему, а потом ждать ответ, и не факт, что он будет правильным.
Vitaly Muzichenko, Спасибо за ответ, но сейчас это для меня не самый легкий момент, поскольку я только начинаю изучение MQL5. Странно, что на весь инет не нашел комментов типа POSITION_PORFIT считает прибыль в пунктах (пипсах, рублях) и т.д.
Vitaly Muzichenko, Спасибо за ответ, но сейчас это для меня не самый легкий момент, поскольку я только начинаю изучение MQL5. Странно, что на весь инет не нашел комментов типа POSITION_PORFIT считает прибыль в пунктах (пипсах, рублях) и т.д.
Учите еще и учите...
Профит в деньгах всегда вычисляется, в валюте депо.
Если нужно в пунктах - считайте разницу текущей цены и цены открытия позиции.
Galina Bobro, спасибо большое за исчерпывающий ответ!
Уважаемые форумчане, подскажите, пожалуйста, ответ на нубский вопрос. Пытался ответить на него экспериментальным путем, но безуспешно.
Для свойства POSITION_PROFIT по умолчанию подразумевается значение в деньгах или в пипсах? Т.е. если я устанавливаю значение PositionGetDouble(POSITION_PROFIT)=5, на паре EUR/USD (5 символов после запятой в цене), это будет означать изменение цены на 5 пунктов (+0,00050), 0,5 пункта (+0,00005), 5 рублей (для рублевого счета) или 5 копеек?
Хочу, чтобы советник отрабатывал при достижении прибыли в 5 пунктов, т.е. (как я понимаю), 50 пипсов.
Спасибо.
Рекомендую сразу начинать применять торговый класс CPositionInfo:
Класс CPositionInfo является классом для упрощенного доступа к свойствам открытой рыночной позиции.
Итак, с самого начала, как подключить торговый класс CPositionInfo и вывести на экран размер текущей прибыли по позиции.
Шаг первый: Создадим эксперт
Помощь: Как самому создать советника или индикатор.
Имя эксперту назначьте "Profit" - в диалоговых окнах НЕ ПОДКЛЮЧАЙТЕ никакие дополнительные события:
В итоге Вы получите такую вот болванку:
//+------------------------------------------------------------------+ //| Profit.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+
(В "шапке" Copyright конечно у Вас будет свой)
Шаг второй: подключение торгового класса CPositionInfo
Это вообще легко - заходите в справку по торговому классу CPositionInfo и копируете строку "#include <Trade\PositionInfo.mqh>"
Теперь возвращаемся к нашей болванке и вставляем скопированный текст в "шапку". Получится вот-так:
#property version "1.00" #include <Trade\PositionInfo.mqh> //+------------------------------------------------------------------+ //| Expert initialization function
На данный момент мы подключили класс CPositionInfo, но нам нужно ещё объявить объект этого класса. Я это делаю так:
#property version "1.00" #include <Trade\PositionInfo.mqh> CPositionInfo m_position; // trade position object //+------------------------------------------------------------------+ //| Expert initialization function
Подготовительные действия окончены - можно даже скомпилировать (F7). Если ошибок нет:
можно двигаться дальше.
Пожалуйста не пугайтесь новых слов "подключить торговый класс", "объявить объект этого класса" - просто действуйте под копирку - всё что нужно - это просто вставить две строки в "шапку" советника:
#property version "1.00" #include <Trade\PositionInfo.mqh> CPositionInfo m_position; // trade position object //+------------------------------------------------------------------+ //| Expert initialization function
Шаг третий: организация обхода всех позиций
Все позиции хранятся в терминале в виде списка. Общее количество позиций нужно получать при помощи PositionsTotal:
Возвращает количество открытых позиций.
Необходимо помнить, что списки нумеруются начиная с индекса "0".
Здесь есть ещё одна тонкость: обход списка позиций нужно осуществлять К НУЛЮ. Таким образом цикл обхода позиций выглядит так:
//+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- for(int i=PositionsTotal()-1;i>=0;i--) { }
Чтобы что-то узнать о позиции, нужно это позицию ВЫБРАТЬ (если хотите аналог из обычного супермаркета: чтобы прочитать какие ингредиенты содержаться в продукте, этот продукт НУЖНО ВЗЯТЬ С ПОЛКИ). Так как мы организовываем обход списка, то значит будем использовать метод SelectByIndex
Выбирает позицию по индексу для дальнейшей работы
Наш код преобразится:
void OnTick() { //--- for(int i=PositionsTotal()-1;i>=0;i--) { if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties { } }
На данном этапе мы написали цикл обхода позиций и выбор (последовательно) каждой позиции.
Шаг четвёртый обращаемся к свойству позиции "Profit" и выводим результат на экран
Прибыль по позиции получаем при помощи метода Profit (обратите внимание, что метод Profit имеет тип double:
а это уже означает, что речь идёт о деньгах, а не пунктах. Также далее в справке явно указано:
Возвращаемое значение
Размер текущей прибыли по позиции в валюте депозита.
Прибыль мы получим, но для того, чтобы вывести эту информацию на экран, нужно тип double преобразовать в string: DoubleToString.
Введём переменную типа string "text" и будет складывать в неё прибыль позиций:
//+------------------------------------------------------------------+ //| Profit.mq5 | //| Copyright © 2017, Vladimir Karputov | //| http://wmua.ru/slesar/ | //+------------------------------------------------------------------+ #property copyright "Copyright © 2017, Vladimir Karputov" #property link "http://wmua.ru/slesar/" #property version "1.00" #include <Trade\PositionInfo.mqh> CPositionInfo m_position; // trade position object //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- string text=""; for(int i=PositionsTotal()-1;i>=0;i--) { if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties { text="\n"+ IntegerToString(i)+". Profit: "+ DoubleToString(m_position.Profit(),2); } } Comment(text); } //+------------------------------------------------------------------+
Теперь можно скомпилировать файл советника и прикрепить его на график.
Откройте позицию и сравнивайте значение на экране со значением в графе "Прибыль" терминала...
![Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5 Как самому создать советника или индикатор - Алгоритмический трейдинг, торговые роботы - Справка по MetaTrader 5](/i/community/logo_metatrader5_small.png)
- www.metatrader5.com
У человека проблемы с принтом, а вы ему классы скармливаете :)
У человека проблемы с принтом, а вы ему классы скармливаете :)
Ничего страшного - сначала копипаст, потом, постепенно, приходит понимание. Тем более я написал почти мини-статью :) - довольно подробно.
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Уважаемые форумчане, подскажите, пожалуйста, ответ на нубский вопрос. Пытался ответить на него экспериментальным путем, но безуспешно.
Для свойства POSITION_PROFIT по умолчанию подразумевается значение в деньгах или в пипсах? Т.е. если я устанавливаю значение PositionGetDouble(POSITION_PROFIT)=5, на паре EUR/USD (5 символов после запятой в цене), это будет означать изменение цены на 5 пунктов (+0,00050), 0,5 пункта (+0,00005), 5 рублей (для рублевого счета) или 5 копеек?
Хочу, чтобы советник отрабатывал при достижении прибыли в 5 пунктов, т.е. (как я понимаю), 50 пипсов.
Спасибо.