Как узнать комиссию взимаемую брокером? - страница 4

 
Maksym Mudrakov:

Комиссия в МТ5 начисляется всегда при открытии позиции и потом при закрытии?

Или бывает, что при открытии позиции сразу вся сумма комиссии начисляется, а при закрытии позиции нету комиссии?

Или наоборот бывает, что при закрытии позиции вся сумма комиссии начисляется, а при открытии позиции нету комиссии?

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Бета-версия платформы MetaTrader 5 build 2155: Области видимости в MQL5, глобальное обновление тестера стратегий и встроенного хостинга

MetaQuotes Software Corp., 2019.09.20 16:36

  1. Terminal: В спецификацию торгового инструмента добавлены новые поля:

    Комиссия
    Здесь отображается информация о комисcиях, взимаемых брокером при совершении сделок по инструменту. Показываются все подробности расчета:

    • Комиссии могут быть одноуровневыми и многоуровневыми, т.е. взиматься в одинаковом размере независимо от объема сделки/оборота или разниться в зависимости от их величины. Соответствующая информация выводится в спецификации.
    • Комиссии могут взиматься сразу при совершении сделки или в конце торгового дня/месяца.
    • Комиссии могут взиматься в зависимости от направления сделки: за вход, за выход или за оба типа операций.
    • Комиссии могут взиматься за каждый лот или за каждую сделку.
    • Комиссии могут взиматься в разных величинах: в деньгах, процентах или пунктах.

    Например, следующая запись означает, что комиссия начисляется немедленно при совершении сделок входа и выхода. При объеме сделки от 0 до 10 лотов комиссия взимается в размере 1.2 USD за операцию. При объеме сделки от 11 до 20 лотов комиссия будет взиматься в размере 1.1 USD за каждый лот сделки.
    Комиссия | Немедленно за объем, сделки входа/выхода
    0  - 10  | 1.2 USD за сделку
    11 - 20  | 1.1 USD за лот


 
Andrey Khatimlianskii:

перебираешь сделки, которые относятся к позиции и получаешь суммарно всю комиссию по позиции. При закрытии тоже будут начислены комиссии( это тоже следует учитывать если расчеты используют их.

double            GetCommission(long uid)
     {
      double dcommissions=0;
      HistorySelectByPosition(uid);

      for(int j=0; j<HistoryDealsTotal(); j++)
        {
         long ut=(long)HistoryDealGetTicket(j);

         if(ut!=0)
           {
            if(HistoryDealGetInteger(ut,DEAL_POSITION_ID)!=uid)
               continue;

            dcommissions+=NormalizeDouble(HistoryDealGetDouble(ut,DEAL_COMMISSION),2);
           }
        }

      return NormalizeDouble(dcommissions,2);
     }
Результат для расчетов например точки бу, я умножаю на 2.  Исходя из того, что комиссия берется одинаковая при открытии и закрытии.
 
elibrarius:

Это что за функция? - в документации такой не нашел.  Хотя упоминания о ней встречаются, может это библиотека какая-то? И по коду видно что это для МТ4.

Я сейчас решаю вопрос на МТ5, но в случае удачного робота буду переписывать на МТ4, так что поиск комиссии для МТ4 тоже нужен...

ACCOUNT_COMMISSION_BLOCKED из МТ5 - видимо что-то близкое к вашей функции, но на демо-счете она возвращает 0. А реального нету, для проверки.

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

 
Alexandr Gavrilin:

перебираешь сделки, которые относятся к позиции и получаешь суммарно всю комиссию по позиции. При закрытии тоже будут начислены комиссии( это тоже следует учитывать если расчеты используют их.

Результат для расчетов например точки бу, я умножаю на 2.  Исходя из того, что комиссия берется одинаковая при открытии и закрытии.


Вот я тоже так работал всегда. 

что комиссия берется и при открытии и при закрытии сделки (ведь в мт5 каждый чих это сделка) 

 
Alexandr Gavrilin:

перебираешь сделки, которые относятся к позиции и получаешь суммарно всю комиссию по позиции. При закрытии тоже будут начислены комиссии( это тоже следует учитывать если расчеты используют их.

Результат для расчетов например точки бу, я умножаю на 2.  Исходя из того, что комиссия берется одинаковая при открытии и закрытии.

Спасибо за решение. Это конечно ужасно, так грузить терминал лишним циклом.

 
PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+PositionGetDouble(POSITION_COMMISSION);
 
Renat Akhtyamov:
PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+ PositionGetDouble(POSITION_COMMISSION);

уже работает? 

 
Vladislav Andruschenko:

уже работает? 

Небыло и не будет. Это наверное смесь mql и СБ, а там по любому цикл. Комиссия берётся за сделку, а не за позицию.

 
Renat Akhtyamov:
PositionGetDouble(POSITION_PROFIT)+PositionGetDouble(POSITION_SWAP)+PositionGetDouble(POSITION_COMMISSION);

Не работает, выдаёт ноль.

 

В общем, способ выше не плох, сильно терминал не грузит. Но, к сожалению, способ не дает точного результата.

Результат для расчетов например точки бу, я умножаю на 2."

Я сразу не сообразил и не внимательно прочитал. Если позиция открывается и закрывается полным объёмом, проблем нет, схема рабочая. Но так как комиссия суммируется за уже закрытые части позиции, то умножать на 2 не корректно, получим неадекватные цифры комиссии, если нам нужно рассчитать комиссию заранее полностью за оборот. Умножать на 2 можно, если позиция открыта первично в полном объёме, а если её уже откусывали несколько раз и от, допустим, 1 лота осталось 0.1 лот, то умножая на 2 сумму комиссий за закрытые части, получим завышенную цифру. Пока думаю, как решить проблему.