Скачать MetaTrader 5

Как узнать размер комиссии не открывая позицию по инструменту?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Размещай ссылки на чужие сигналы и зарабатывай
Andrey Dik
11348
Andrey Dik 2015.11.17 13:58 
См. сабж.
Yury Kirillov
3276
Yury Kirillov 2015.11.17 15:10  
Joo Zepper:
См. сабж.
В некоторых случаях в МТ никак, а можно только по информации от ДЦ.
Alexey Volchanskiy
16684
Alexey Volchanskiy 2015.11.17 15:11  
Joo Zepper:
См. сабж.
Вероятно никак, так как до открытия сделки неизвестен точный курс базовой валюты по отношению торгуемым. ДЦ обычно публикуют комиссию примерно так - $5/лот для EURUSD. Можно примерно прикинуть к нужной паре.
Andrey Dik
11348
Andrey Dik 2015.11.17 16:30  
Yury Kirillov:
В некоторых случаях в МТ никак, а можно только по информации от ДЦ.

Ну, я и сам знаю, что никак.

Разработчики, ауу!

алексей мишарин
80
алексей мишарин 2015.11.17 19:19  

Извините, но можно же просто погуглить? (Результатов: примерно 18 700.)

Andrey Dik
11348
Andrey Dik 2015.11.17 20:04  
brainstorminq:

Извините, но можно же просто погуглить? (Результатов: примерно 18 700.)

Вы советником гуглите? - это реально круто!, но, я надеюсь, что разработчики дадут штатный механизм.
Dmitiry Ananiev
6591
Dmitiry Ananiev 2015.11.18 12:55  
Joo Zepper:
Вы советником гуглите? - это реально круто!, но, я надеюсь, что разработчики дадут штатный механизм.
И верните комиссию в тестер ! Раньше она была !
Andrey Dik
11348
Andrey Dik 2016.11.08 19:47  

Как узнать комиссию по открытой позиции?

делаю так:

#include  <Trade\PositionInfo.mqh>

void OnStart()
{
  PositionSelect (Symbol ());
  //PositionGetDouble (
  //Commission ();
  Print (PositionGetDouble(POSITION_COMMISSION));
  
  CPositionInfo PosInfo;
  PosInfo.Select(Symbol());
  PosInfo.Commission();
  Print (PosInfo.Commission());
}

 По всякому пробую, результат 0.0.

Vladimir Karputov
Модератор
46186
Vladimir Karputov 2016.11.08 19:53  
Andrey Dik:

Как узнать комиссию по открытой позиции?

делаю так:

#include  <Trade\PositionInfo.mqh>

void OnStart()
{
  PositionSelect (Symbol ());
  //PositionGetDouble (
  //Commission ();
  Print (PositionGetDouble(POSITION_COMMISSION));
  
  CPositionInfo PosInfo;
  PosInfo.Select(Symbol());
  PosInfo.Commission();
  Print (PosInfo.Commission());
}

 По всякому пробую, результат 0.0.

Только открыть, закрыть, потом в истории у сделки посмотреть комиссию.

Так сложно потому что комиссия - это что-то невообразимое и трудно прогнозируемое и как правило заранее сам чёрт ногу сломит, если захочет рассчитать комиссию. 

Andrey Dik
11348
Andrey Dik 2016.11.08 20:00  
Vladimir Karputov:

Только открыть, закрыть, потом в истории у сделки посмотреть комиссию.

Так сложно потому что комиссия - это что-то невообразимое и трудно прогнозируемое и как правило заранее сам чёрт ногу сломит, если захочет рассчитать комиссию. 

А почему в МТ4 показывает комиссию в окне Инструменты->Торговля а в МТ5 нет? Почему непонятно, учтена комиссия в плавающей прибыли в колонке прибыли или нет? Почему такие сложности то? Почему штатный скрипт PositionInfoSample.mq5 даже не показывает комиссию у открытой позиции?

Сломал вот клавиатуру, процентов 45 клавиш не работает теперь после удара кулаком. Набираю со смартфона. 

fxsaber
4538
fxsaber 2016.11.08 20:30  
Andrey Dik:

Сломал вот клавиатуру, процентов 45 клавиш не работает теперь после удара кулаком. Набираю со смартфона. 

Использую библу, как справочник. Сначала проверил, что работает
#include <MT4Orders.mqh>

void OnStart()
{
  const int Ticket = OrderSend(_Symbol, OP_BUY, 1, SymbolInfoDouble(_Symbol, SYMBOL_ASK), 0, 0, 0);
  
  OrderClose(Ticket, 0.3, SymbolInfoDouble(_Symbol, SYMBOL_BID), 0, clrNONE);

  Sleep(1000); // ждем обновления истории
  
  if (OrderSelect(Ticket, SELECT_BY_TICKET))
    Alert(OrderCommission());
}

Осталось залезть в исходник OrderCommission и посмотреть. Вспомнил, что недавно это делал

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

Вопросы от начинающих

fxsaber, 2016.10.29 17:09

double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}
Исходник функции, что не хватает
  ulong GetPositionDealIn( const ulong PositionIdentifier = 0 )
  {
    ulong Ticket = 0;

    if ((PositionIdentifier == 0) ? ::HistorySelectByPosition(::PositionGetInteger(POSITION_IDENTIFIER)) : ::HistorySelectByPosition(PositionIdentifier))
    {
      const int Total = ::HistoryDealsTotal();

      for (int i = 0; i < Total; i++)
      {
        const ulong TicketDeal = ::HistoryDealGetTicket(i);

        if (TicketDeal > 0)
          if ((ENUM_DEAL_ENTRY)::HistoryDealGetInteger(TicketDeal, DEAL_ENTRY) == DEAL_ENTRY_IN)
          {
            Ticket = TicketDeal;

            break;
          }
      }
    }

    return(Ticket);
  }
123
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий