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

 

double CurrentPositionTotalCommission(string comment="",string symb="",int type=-1)
  {
   if(symb=="")symb=_Symbol;
   int    total=0;  // Всего сделок в списке выбранной истории
   double    commission=0;  // Счетчик сделок по символу позиции
   string deal_symbol=""; // символ сделки
  
   for(int i=0; i<PositionsTotal(); i++)
     {
      ulong pt=PositionGetTicket(i);
      long ID=PositionGetInteger(POSITION_IDENTIFIER);
      if(PositionGetString(POSITION_SYMBOL)==symb && HistorySelect(PositionGetInteger(POSITION_TIME),TimeCurrent()+60))
        {
         //--- Получим количество сделок в полученном списке
         total=HistoryDealsTotal();
         //--- Пройдем по всем сделкам в полученном списке
         for(int i=0; i<total; i++)
           {
            ulong dt = HistoryDealGetTicket(i);
            long did = HistoryDealGetInteger(dt, DEAL_POSITION_ID);
            ENUM_DEAL_ENTRY in_out=HistoryDealGetInteger(dt,DEAL_ENTRY);
            if(did==pt && in_out==DEAL_ENTRY_IN && (StringFind(HistoryDealGetString(HistoryDealGetTicket(i),DEAL_COMMENT),comment)!=-1 || comment=="")
               && (HistoryDealGetInteger(HistoryDealGetTicket(i),DEAL_TYPE)==type || type==-1))
              {
               commission+=HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_COMMISSION)+HistoryDealGetDouble(HistoryDealGetTicket(i),DEAL_SWAP);
              }
           }
        }
     }
//---

   return(commission*2);
  }

 

считаю так, комиссию и своп,

*2 потому что при закрытии снимается та же комиссия по второму разу.  

 
fxsaber:

Vladislav Andruschenko:

 Спасибо, оба варианта пашут.

 
Andrey Dik:

 Спасибо, оба варианта пашут.

написал только сегодняя ее, использовал в трале, чтобы трал срабатывал не на 0 а по размеру комиссии и свопу. 
 
Vladislav Andruschenko:

считаю так, комиссию и своп

работать не будет с частичным закрытием. Попробуйте

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

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

fxsaber, 2016.11.08 20:30

#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(CurrentPositionTotalCommission());
}

 
Очень плохо, что без Sleep не обойтись.
 
Vladislav Andruschenko:

считаю так, комиссию и своп,

*2 потому что при закрытии снимается та же комиссия по второму разу.  

А своп снимается 1 раз, его не надо *2. К тому же он нарастает каждый день. Мне кажется их надо отдельно учитывать.
 
elibrarius:
А своп снимается 1 раз, его не надо *2. К тому же он нарастает каждый день. Мне кажется их надо отдельно учитывать.
Спасибо, тупанул. 
 
fxsaber:
работать не будет с частичным закрытием. Попробуйте

сорри, но я не закрываю частично, наверно поэтому не продумывал этот момент. А Вы разобрались почему не будет считать при частичном закрытии? что там не так?

 
Vladislav Andruschenko:

А Вы разобрались почему не будет считать при частичном закрытии? что там не так?

Так сразу видно - out-сделки не учитываются. Честно говоря, очень и очень не оптимальный код у Вас.

Один HistorySelect чего стоит. 

 
fxsaber:


а что с ним не так?