Не могу найти информацию по свойству POSITION_PROFIT

 

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

Для свойства POSITION_PROFIT по умолчанию подразумевается значение в деньгах или в пипсах? Т.е. если я устанавливаю значение PositionGetDouble(POSITION_PROFIT)=5, на паре EUR/USD (5 символов после запятой в цене), это будет означать изменение цены на 5 пунктов (+0,00050), 0,5 пункта (+0,00005), 5 рублей (для рублевого счета) или 5 копеек?

Хочу, чтобы советник отрабатывал при достижении прибыли в 5 пунктов, т.е. (как я понимаю), 50 пипсов.

Спасибо.

 
surgeoni:

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

Для свойства 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 считает прибыль в пунктах (пипсах, рублях) и т.д.

 
surgeoni:

Vitaly Muzichenko, Спасибо за ответ, но сейчас это для меня не самый легкий момент, поскольку я только начинаю изучение MQL5. Странно, что на весь инет не нашел комментов типа POSITION_PORFIT считает прибыль в пунктах (пипсах, рублях) и т.д.


Учите еще и учите... 

Профит в деньгах всегда вычисляется, в валюте депо. 

Если нужно в пунктах  - считайте разницу текущей цены и цены открытия позиции. 

 

Galina Bobro, спасибо большое за исчерпывающий ответ!

 
surgeoni:

Странно, что на весь инет не нашел комментов типа POSITION_PORFIT считает прибыль в пунктах (пипсах, рублях) и т.д.

Достаточно поискать на этом сайте, а не по всему инету, мне 5 страниц выдало с результатами


 
surgeoni:

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

Для свойства POSITION_PROFIT по умолчанию подразумевается значение в деньгах или в пипсах? Т.е. если я устанавливаю значение PositionGetDouble(POSITION_PROFIT)=5, на паре EUR/USD (5 символов после запятой в цене), это будет означать изменение цены на 5 пунктов (+0,00050), 0,5 пункта (+0,00005), 5 рублей (для рублевого счета) или 5 копеек?

Хочу, чтобы советник отрабатывал при достижении прибыли в 5 пунктов, т.е. (как я понимаю), 50 пипсов.

Спасибо.


Рекомендую сразу начинать применять торговый класс CPositionInfo:

Класс CPositionInfo является классом для упрощенного доступа к свойствам открытой рыночной позиции.

Итак, с самого начала, как подключить торговый класс CPositionInfo и вывести на экран размер текущей прибыли по позиции.


Шаг первый: Создадим эксперт

Помощь: Как самому создать советника или индикатор.

Имя эксперту назначьте "Profit" - в диалоговых окнах НЕ ПОДКЛЮЧАЙТЕ никакие дополнительные события:

1 2


В итоге Вы получите такую вот болванку:

//+------------------------------------------------------------------+
//|                                                       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>"

3

Теперь возвращаемся к нашей болванке и вставляем скопированный текст в "шапку". Получится вот-так:

#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). Если ошибок нет:

4

можно двигаться дальше. 

Пожалуйста не пугайтесь новых слов "подключить торговый класс", "объявить объект этого класса" - просто действуйте под копирку - всё что нужно - это просто вставить две строки в "шапку" советника:

#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:

5

а это уже означает, что речь идёт о деньгах, а не пунктах. Также далее в справке явно указано:

Возвращаемое значение

Размер текущей прибыли по позиции в валюте депозита.

Прибыль мы получим, но для того, чтобы вывести эту информацию на экран, нужно тип 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
  • www.metatrader5.com
Для разработки торговых систем в платформу встроен собственный язык программирования MetaQuotes Language 5 ( MQL5 ), среда разработки MetaEditor и...
Файлы:
Profit.mq5  4 kb
 

У человека проблемы с принтом, а вы ему классы скармливаете :)

 
Aleksei Radchenko:

У человека проблемы с принтом, а вы ему классы скармливаете :)


Ничего страшного - сначала копипаст, потом, постепенно, приходит понимание. Тем более я написал почти мини-статью :) - довольно подробно.