Как посчитать профит открытых позиций? - страница 2

 
Vladimir Karputov:

А вот так можно лаконично написать на торговых классах CPositionInfo и CSymbolInfo:

За одно обращение к функции сразу получаем прибыль и по BUY ("profit_buys") и по SELL ("profit_sells") позициям.



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

Где объявлены m_symbol и m_magiс?

Дай код с полным объявлением всех переменных. и как с применением m_position можно посчитать закрытые ордера?

 

Блин, и нафиг нужен магик, если при открытии нового ордера, я не могу его записать???

mql5  сильно отличается от mql4.

 

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

методы OrderOpen, PositionOpen, Buy  - открывают ордера без указания магика.

 
Azamat Ishegulov:

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

методы OrderOpen, PositionOpen, Buy  - открывают ордера без указания магика.

#include <Trade/Trade.mqh>
CTrade Trade;

int OnInit()
{
     Trade.SetExpertMagicNumber(1234567); // magic
     Trade.SetMarginMode();
     Trade.SetDeviationInPoints(10);
     Trade.LogLevel(LOG_LEVEL_ALL);
     Trade.SetTypeFillingBySymbol(_Symbol);
    
     Trade.PositionOpen( _Symbol, ORDER_TYPE_BUY, 0.1,
                         SymbolInfoDouble(_Symbol, SYMBOL_ASK),
                         0, 0, "Expert");
                        
     return(INIT_SUCCEEDED);
}

CTrade

 
Azamat Ishegulov:


Пример, как задать magic: 

 
Я конечно всего-лишь полторы недели изучаю MQL5, но вот написал такую функцию, которая печатает общий профит/убыток от всех открытых на данный момент позиций с определённым #MAGIC.
void Current_Profit(int magic)
  {
   double Profit = 0;
   double Swap = 0;
   double Volume = 0;
   double Total_Profit = 0;

   for(int i=0; i<PositionsTotal(); i++)
     {
      if(PositionGetInteger(POSITION_MAGIC) == Magic)
        {
         Profit = PositionGetDouble(POSITION_PROFIT);
         Swap = PositionGetDouble(POSITION_SWAP);
         Volume = PositionGetDouble(POSITION_VOLUME);
        }
      Total_Profit += Profit + Swap;
     }
   Print(Total_Profit);
  }

Может быть кому-то поможет или пригодится.


 
Vadzim Bandarevich #:
Я конечно всего-лишь полторы недели изучаю MQL5, но вот написал такую функцию, которая печатает общий профит/убыток от всех открытых на данный момент позиций с определённым #MAGIC.

Может быть кому-то поможет или пригодится.


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

 
Ihor Herasko #:

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

еще убрать

Volume = PositionGetDouble(POSITION_VOLUME);

оно не используется. И прибавить комиссию.

 
Evgeniy Zhdan #:

еще убрать

оно не используется. И прибавить комиссию.

Понял, это я для будущих функций оставил и забыл убрать просто. Спасибо
 
Ihor Herasko #:

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

Благодарю, я просто вначале опубликовал, а потом уже понял что не работает :(

Я понял что нужно использовать PositionSelectByTicket. Суть просто в том что я не понимал каким образом моя старая функция, хоть и коряво, но работала без него. Но ответ уже найден. Спасибо
Причина обращения: