← К каталогу
Исходный код · ID 2399

ctradesstats.mqh

Вы автор или правообладатель?

Сообщите нам, если считаете, что материал размещён без разрешения.

Краткий обзор

О программе

Библиотека для MetaTrader 4, предоставляющая класс CTradeStats для сбора и хранения статистики торговых операций в советниках. Класс отслеживает открытые ордера и закрытые сделки, разделяя их по направлениям покупки и продажи, и вычисляет различные показатели эффективности.

Основные вычисляемые метрики включают общую прибыль, количество выигранных и проигранных сделок, процент побед, коэффициент прибыльности, ожидаемую отдачу на сделку, средний объём лотов на сделку, а также прибыль за текущий и предыдущий день. Данные фильтруются по магическим номерам, заданным при инициализации.

Метод Refresh обновляет статистику по текущим открытым позициям и автоматически запускает пересчёт исторических данных при смене дня или изменении количества ордеров. Метод RefreshHistory выполняет полный пересчёт всех закрытых сделок из истории счёта.

Состав библиотеки

Классов: 1 · методов: 2 · конструкторов: 1 · деструкторов: 0 · отдельных функций: 0

Классы
Класс class CTradeStats

Класс для хранения и расчёта торговой статистики: открытые ордера, закрытые сделки, прибыль, количество побед и поражений, процент побед, коэффициент прибыльности и другие показатели.

Методы и конструкторы
Конструктор · CTradeStats CTradeStats(int magicNumberBuy, int magicNumberSell)

Инициализирует экземпляр класса, задавая магические номера для ордеров на покупку и продажу, и выполняет начальный расчёт статистики.

Метод · CTradeStats void RefreshHistory()

Пересчитывает статистику по всем закрытым сделкам из истории счёта с учётом заданных магических номеров.

Метод · CTradeStats void Refresh()

Обновляет статистику по текущим открытым ордерам и при необходимости перезапускает пересчёт исторических данных при смене дня или изменении количества ордеров.

Получить полный код

Поиск по коду файла

class CTradeStats
{
private:
   int     _today;
   int     _prevOrdersTotal;
   int     _magicNumberBuy;
   int     _magicNumberSell;

public:
   int     TotalCount;              // # of open orders for this chart / ea
   int     BuyOrders;               // # of open buy orders for this chart / ea
   int     SellOrders;              // # of open sell orders for this chart / ea

   double  TotalProfit;             // total profit of all open orders for this chart / ea
   double  TotalProfitPips;         // total profit of all open orders for this chart / ea
   double  TotalProfitOfSellOrders; // total profit of all sell open orders for this chart / ea
   double  TotalProfitOfBuyOrders;  // total profit of all buy open orders for this chart / ea

   int     OrdersWon;               // Total # of orders won by this ea on this chart            
   int     OrdersLost;              // Total # of orders won by this ea on this chart       
   double  WinPercentage;           // percentage of orders won;     
   double  AllTimeProfit;           // all profit made by this ea on this chart            
   double  ProfitToday;             // profit made by this ea on this chart today
   double  ProfitYesterday;         // profit made by this ea on this chart yesterday

   double  AllTimeProfitPips;       // all profit made by this ea on this chart in pips          
   double  ProfitTodayPips;         // profit made by this ea on this chart today in pips
   double  ProfitYesterdayPips;     // profit made by this ea on this chart yesterday in pips
   double  ProfitFactor;            // profit factor
   double  ExpectedPayOff;          // expected payoff / trade   
   double  TotalLotsTraded;         // total nr of lots traded
   int     TotalTrades;             // total nr of trades traded
   double  AverageLotsPerTrade;     // average lot size / trade   
   int     GlobalOrderCount;        // # open orders for this account
   double  GlobalProfit;            // total profit of all open orders on this account
   double  HighestBuyPrice;
   double  LowestBuyPrice;
   double  HighestSellPrice;
   double  LowestSellPrice;

   CTradeStats(int magicNumberBuy, int magicNumberSell)
   {
      _magicNumberBuy  = magicNumberBuy;
      _magicNumberSell = magicNumberSell;
      _prevOrdersTotal = 0;
      _today=0;
      Refresh();
      RefreshHistory();
   }

    void RefreshHistory()
    {      

      AllTimeProfit              = 0;
      AllTimeProfitPips          = 0;
      OrdersWon                  = 0;
      OrdersLost                 = 0;     
      ProfitToday                = 0;
      ProfitTodayPips            = 0;
      ProfitYesterday            = 0;
      ProfitYesterdayPips        = 0; 
      WinPercentage              = 0;
      ProfitFactor               = 0;
      ExpectedPayOff             = 0;
      TotalLotsTraded            = 0;
      AverageLotsPerTrade        = 0;
      TotalTrades                = 0;
      double totalAmountWon      = 0;
      double totalAmountLost     = 0; 
      datetime now               = TimeCurrent();
      datetime yesterday         = TimeCurrent() - 60 * 60 * 24;

      if (IsTesting() || IsOptimization()) return;      

      for (int i=0; i < OrdersHistoryTotal(); ++i)
      {
        if(OrderSelect(i, SELECT_BY_POS,MODE_HISTORY))
        {
            if (OrderMagicNumber() == _magicNumberBuy || OrderMagicNumber() == _magicNumberSell)
            {
               double digits   = MarketInfo(OrderSymbol(), MODE_DIGITS);
               double points   = MarketInfo(OrderSymbol(), MODE_POINT);
               double mult = 1.0;
               if (digits == 3 || digits == 5) mult = 10.0;

               TotalTrades = TotalTrades+1;
               TotalLotsTraded += OrderLots();
               double orderProfit = OrderProfit() + OrderSwap() + OrderCommission();
               AllTimeProfit += orderProfit;
               double pips=0;
               if (OrderType() == OP_BUY)
               {     
                  pips = ( OrderClosePrice() - OrderOpenPrice()) ;
               }
               else
               

Показано первые 50% кода (символов: 5071)

Открыть по тарифу

Купите тариф с пакетом открытий или войдите, если тариф уже есть. Открытый файл останется в вашем кабинете навсегда.

Разовая покупка файла

На этой странице откроется полный исходный код файла вместо ознакомительного фрагмента.

Чтобы оформить заказ, введите email и перейдите к оплате.

Стоимость полного кода
507,10₽ ≈ $6.20