MQL5: Примеры. - страница 5

 
Лауреат:
книгу надо по мквл 5 написать . по мквл4 же есть 

Неа. Книга это только для художественной литературы, для женских романов, детских сказок и тому подобного. Для MQL5 - только Документация, CodeBase, Статьи и Форум.

 
Лауреат:
книгу надо по мквл 5 написать . по мквл4 же есть 

Даже сложно представить: "Перед сном прочитал ~20 страниц по mql5, и со спокойной душой спишь ... и весь такой умный" )

 
  • 4.4. Прибыль по всем позициям открытым советником

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

В таком случае задача решается так: необходимо обойти все позиции (при этом учитывать позиции только по символу советника и только с идентификатором советника). Обход всех позиций реализован в функции CalculateAllProfit:

//+------------------------------------------------------------------+
//|                                         Calculate all profit.mq5 |
//|                              Copyright © 2018, Vladimir Karputov |
//|                                           http://wmua.ru/slesar/ |
//+------------------------------------------------------------------+
#property copyright "Copyright © 2018, Vladimir Karputov"
#property link      "http://wmua.ru/slesar/"
#property version   "1.000"
#property description "Calculate all profit"
//---
#include <Trade\PositionInfo.mqh>
#include <Trade\Trade.mqh>
#include <Trade\SymbolInfo.mqh>  
CPositionInfo  m_position;                   // trade position object
CTrade         m_trade;                      // trading object
CSymbolInfo    m_symbol;                     // symbol info object
//--- input parameters
input ulong    m_magic=15489;                // magic number
//---
ulong          m_slippage=10;                // slippage
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   if(!m_symbol.Name(Symbol())) // sets symbol name
      return(INIT_FAILED);
//---
   m_trade.SetExpertMagicNumber(m_magic);
   m_trade.SetMarginMode();
   m_trade.SetTypeFillingBySymbol(m_symbol.Name());
   m_trade.SetDeviationInPoints(m_slippage);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment("");
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   double total_profit=CalculateAllProfit();
   Comment("All profit: ",DoubleToString(total_profit,2));
  }
//+------------------------------------------------------------------+
//| TradeTransaction function                                        |
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//---

  }
//+------------------------------------------------------------------+
//| Calculate all profit                                             |
//+------------------------------------------------------------------+
double CalculateAllProfit()
  {
   double total_profit=0.0;

   for(int i=PositionsTotal()-1;i>=0;i--)
      if(m_position.SelectByIndex(i)) // selects the position by index for further access to its properties
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
            total_profit+=m_position.Commission()+m_position.Swap()+m_position.Profit();
//---
   return(total_profit);
  }
//+------------------------------------------------------------------+


 

Почему окно, когда скрыто, возвращает параметры отличные от того, когда оно активно?

Ответ прост - всё дело в операционной системе Windows. Окно может быть в нескольких состояниях: окно развернуто полностью, свернуто и минимизировано. Когда окно неактивно - оно находится в состоянии свернуто (если Вы до этого его не минимизировали). Проверим это. Используем индикатор Bar number - он нумерует бары и служебный индикатор 'CHART_FIRST_VISIBLE_BAR.mq5' - индикатор выводит значение 

CHART_FIRST_VISIBLE_BAR

Номер первого видимого бара на графике. Индексация баров соответствует таймсерии.

int  r/o


Вот что получается: сначала окно развернуто полностью, затем окно свернуто и после этого переходим на другой график (который разворачиваем полностью)

CHART_FIRST_VISIBLE_BAR

Bar number
Bar number
  • www.mql5.com
Нумерация баров при помощи графических объектов OBJ_TEXT
Файлы: