Комиссия брокера на экране(mt5)

 

Коллеги приветствую! Нужно создать индикатор, который после открытия сделки, отображает на экране комиссию брокера(на mt5) Наработки кода мне скинули, но они не работают, помогите в доработке или скажите куда копать, спасибо

//+------------------------------------------------------------------+
//|                                              BrokerComission.mq5 |
//|                                             Copyright 2024, 666. |
//|                                      http://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, 666."
#property link      "http://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

input string s="EURUSD";

#include <Trade\PositionInfo.mqh>

CPositionInfo pos;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void PutLabel(string text)
  {
//--- создадим текстовую метку
   ObjectCreate(0,"L",OBJ_LABEL,0,0,0);
//--- установим координаты метки
   ObjectSetInteger(0,"L",OBJPROP_XDISTANCE,111);
   ObjectSetInteger(0,"L",OBJPROP_YDISTANCE,22);
//--- установим угол графика, относительно которого будут определяться координаты точки
   ObjectSetInteger(0,"L",OBJPROP_CORNER,2);
//--- установим текст
   ObjectSetString(0,"L",OBJPROP_TEXT,text);
//--- установим шрифт текста
   ObjectSetString(0,"L",OBJPROP_FONT,"Arial");
//--- установим размер шрифта
   ObjectSetInteger(0,"L",OBJPROP_FONTSIZE,12);
//--- установим цвет
   ObjectSetInteger(0,"L",OBJPROP_COLOR,Red);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Com()
  {
   double com=0;

   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionSelectByTicket(PositionGetTicket(i)))
        {
         if(PositionGetString(POSITION_SYMBOL)==_Symbol)
           {
            com=pos.Commission();
            break;
           }
        }
     }
   return(com);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
//---
   PutLabel("Comission: "+string(Com()));

//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+
Discover new MetaTrader 5 opportunities with MQL5 community and services
Discover new MetaTrader 5 opportunities with MQL5 community and services
  • 2024.03.21
  • www.mql5.com
MQL5: language of trade strategies built-in the MetaTrader 5 Trading Platform, allows writing your own trading robots, technical indicators, scripts and libraries of functions
 
Nikolay:

Коллеги приветствую! Нужно создать индикатор, который после открытия сделки, отображает на экране комиссию брокера(на mt5) Наработки кода мне скинули, но они не работают, помогите в доработке или скажите куда копать, спасибо

У меня работает без проблем. У Вас, что конкретно не работает?

С уважением, Владимир.


 
Очень зависит от брокера. Открытие показывало в сделках комиссию биржи, но не брокера. Финам вообще пишет нули.
 
MrBrooklin #:

У меня работает без проблем. У Вас, что конкретно не работает?

С уважением, Владимир.


У меня вообще пусто на экране, при компиляции такая петрушка(фото) 
Файлы:
266cf7cf3f.jpg  51 kb
 
Nikolay:

Коллеги приветствую! Нужно создать индикатор, который после открытия сделки, отображает на экране комиссию брокера(на mt5) Наработки кода мне скинули, но они не работают, помогите в доработке или скажите куда копать, спасибо

Комиссия у разных брокеров начисляется по разному. За вход, за выход, за вход-выход вместе.

Вообще брокер в договоре указывает свою комиссию.

В открывашке комиссия брокера записывалась в отчёте отдельной строкой.

Если в отчёте понятно какие суммы являются комиссией, то поискать их можно примерно так.

   datetime to = TimeCurrent();
   datetime from = to - 7 * PeriodSeconds(PERIOD_D1);

   if(!HistorySelect(from, to))
      for(int i = 0; i < HistoryDealsTotal(); i++)
        {
         ulong ticket = HistoryDealGetTicket(i);

         if((ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE) == DEAL_TYPE_CORRECTION)
            Print("CORRECTION = ", DoubleToString(HistoryDealGetDouble(ticket, DEAL_PROFIT), 2));

         if((ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE) == DEAL_TYPE_COMMISSION)
            Print("COMMISSION = ", DoubleToString(HistoryDealGetDouble(ticket, DEAL_PROFIT), 2));
        }

А потом уже, когда выяснили где эта комиссия прячется, можно вывести инфу в индикатор.

 
Max Payne #:
У меня вообще пусто на экране, при компиляции такая петрушка(фото) 

Это не петрушка, а предупреждение компилятора. Забейте на него. Если у Вас ничего нет в правом нижнем углу графика, как у меня на картинке, то возможно у Вас в названии валютной пары есть суффикс или префикс. Если это так, то во входном параметре, пропишите такое название валютной пары, как оно у Вас пишется в терминале. Например, суффикс у меня выглядит вот так (выделил желтым цветом):

input string s="EURUSDrfd";

С уважением, Владимир.

 
Aleksandr Slavskii #:

Комиссия у разных брокеров начисляется по разному. За вход, за выход, за вход-выход вместе.

Вообще брокер в договоре указывает свою комиссию.

В открывашке комиссия брокера записывалась в отчёте отдельной строкой.

Если в отчёте понятно какие суммы являются комиссией, то поискать их можно примерно так.

А потом уже, когда выяснили где эта комиссия прячется, можно вывести инфу в индикатор.

Можете для чайника показать, как использовать этот код?

 
Nikolay #:

Можете для чайника показать, как использовать этот код?

Очень извиняюсь, допустил досадную описку в коде.

Запустите скрипт и посмотрите что он распечатает на вкладке "эксперты"

#property  script_show_inputs

input int day = 30;
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime to = TimeCurrent();
   datetime from = to - day * PeriodSeconds(PERIOD_D1);

   if(HistorySelect(from, to))
      for(int i = 0; i < HistoryDealsTotal(); i++)
        {
         ulong ticket = HistoryDealGetTicket(i);

         if((ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE) == DEAL_TYPE_CORRECTION)
            Print("CORRECTION = ", DoubleToString(HistoryDealGetDouble(ticket, DEAL_PROFIT), 2));

         if((ENUM_DEAL_TYPE)HistoryDealGetInteger(ticket, DEAL_TYPE) == DEAL_TYPE_COMMISSION)
            Print("COMMISSION = ", DoubleToString(HistoryDealGetDouble(ticket, DEAL_PROFIT), 2));
        }
  }
//+------------------------------------------------------------------+
Файлы:
004.mq5  2 kb
 
Aleksandr Slavskii #:

Очень извиняюсь, допустил досадную описку в коде.

Запустите скрипт и посмотрите что он распечатает на вкладке "эксперты"

ничего, пусто

 
Nikolay #:

ничего, пусто

Возможно выбран маленький диапазон времени, поэтому во входных параметрах скрипта поставьте не 30 дней, как это задано автором скрипта по умолчанию, а, например,  500 или 1000 дней.

С уважением, Владимир.

 
MrBrooklin #:

Возможно выбран маленький диапазон времени, поэтому во входных параметрах скрипта поставьте не 30 дней, как это задано автором скрипта по умолчанию, а, например,  500 или 1000 дней.

С уважением, Владимир.

пусто, пробую на демо, это может влиять?

Причина обращения: