Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1327

 
SanAlex:

всё равно нули и не хочет показать комиссию

double Komsa(string Pair) {
   double  commicion=0;
   int tikett,entry;
   ulong tik,ord;
//---------------------------------------------------------------   
   for(int i=PositionsTotal()-1;i>=0;i--) {
   if(PositionGetSymbol(i)==Pair){  tik=PositionGetTicket(i); 
//---------------------------------------------------------------         
   HistorySelect(0,TimeCurrent());
   for(uint r=HistoryDealsTotal()-1;r>0;r--)   {
   if((tikett=HistoryDealGetTicket(r))>0)   {
   ord=HistoryDealGetInteger(tikett,DEAL_ORDER);
   entry =HistoryDealGetInteger(tikett,DEAL_ENTRY);
   if(entry==DEAL_ENTRY_IN) {
   if(tik==ord)  { commicion+=HistoryDealGetDouble(tikett,DEAL_COMMISSION)*2;    }  }  } }  } }
//--------------------------------------------------------------  
  Comment( " commisia "+commicion);
   return(commicion);  }

короче так вот считает по выбранной паре , слепил быстро хз правильно или нет ну проверил показывает правильно 

 
Aleksandr Egorov:

короче так вот считает по выбранной паре 

Спасибо! -  сейчас испытаю, надо-же всё таки разобраться с этой функцией 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Да! показывает. Спасибо!

Fx10 4

 
SanAlex:

Спасибо! -  сейчас испытаю, надо-же всё таки разобраться с этой функцией 

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

Да! показывает. Спасибо!


тут получается что если комиссия будет считаться только за одну сторону тогда функция будет не правильно работать так как умножается на 2 

DEAL_ENTRY_IN
надоб как то допилить до идеала ее
 
Aleksandr Egorov:

тут получается что если комиссия будет считаться только за одну сторону тогда функция будет не правильно работать так как умножается на 2 

надоб как то допилить до идеала ее

вроде всё точно показывает

я немножко - подправил - не знаю правильно или нет. но убрались предупреждения  

//+------------------------------------------------------------------+
//|                                                   Commission.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
//---
   Komsa(_Symbol);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Komsa(string Pair)
  {
   double  commicion=0;
   ulong tikett,entry;
   ulong tik,ord;
//---------------------------------------------------------------
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionGetSymbol(i)==Pair)
        {
         tik=PositionGetTicket(i);
         //---------------------------------------------------------------
         HistorySelect(0,TimeCurrent());
         for(uint r=HistoryDealsTotal()-1; r>0; r--)
           {
            if((tikett=HistoryDealGetTicket(r))>0)
              {
               ord=HistoryDealGetInteger(tikett,DEAL_ORDER);
               entry =HistoryDealGetInteger(tikett,DEAL_ENTRY);
               if(entry==DEAL_ENTRY_IN)
                 {
                  if(tik==ord)
                    {
                     commicion+=HistoryDealGetDouble(tikett,DEAL_COMMISSION);
                    }
                 }
              }
           }
        }
     }
//--------------------------------------------------------------
   Comment(" commisia "+DoubleToString(commicion,2));
   return(commicion);
  }
//+------------------------------------------------------------------+

Fx10 5

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

открыл противоположную позицию и увеличилась комиссия - вроде правильно 

BTCUSDH1

 
SanAlex:

вроде всё точно показывает

я немножко - подправил - не знаю правильно или нет. но убрались предупреждения  

\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

открыл противоположную позицию и увеличилась комиссия - вроде правильно 


тут нужно еще проверку сделать на то что считается за вход и выход или только за вход и отнимать часть позы если открыл 1 лотом а потом 0.5 закрыл 

короче нужно еще повозится
 

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

Файлы:
 
Dmitiry Ananiev:

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

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

 
Aleksandr Egorov:

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

Ранее уже обсуждалось. Комиссию (декларируемую брокером) вы можете посмотреть в условиях торговли у брокера. А реальную комиссию на исполнение приказа (ордера) можно узнать только после исполнения приказа, до исполнения нельзя узнать.

ЗЫ. Это как спред на следующем тике. На текущем тике мы не знаем, что будет на следующем, ни цену, ни спред, ни свопы ни комиссию. А брокер имеет право их менять.

 
Aleksandr Egorov:

тут нужно еще проверку сделать на то что считается за вход и выход или только за вход и отнимать часть позы если открыл 1 лотом а потом 0.5 закрыл 

короче нужно еще повозится

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

мудрю

//+------------------------------------------------------------------+
//|                                                   Commission.mq5 |
//|                                  Copyright 2021, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2021, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <Trade\Trade.mqh>
CTrade trade;
#property script_show_inputs
//---
input bool Inp_open_close = false; // Open --> false || Close --> true
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart(void)
  {
//---
   if(!Inp_open_close)
     {
      if(!trade.PositionOpen(_Symbol,ORDER_TYPE_BUY,0.1,SYMBOL_ASK,0.0,0.0))
         Print(trade.ResultRetcode());
      PlaySound("ok.wav");
      CSV_OPEN();
     }
   if(Inp_open_close)
     {
      if(TerminalInfoInteger(TERMINAL_TRADE_ALLOWED) && Bars(_Symbol,_Period)>100)
         trade.PositionClose(_Symbol,3);
      PlaySound("ok.wav");
      CSV_CLOS();
     }
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
double Komsa(void)
  {
   double  commicion=0;
   ulong tikett,entry;
   ulong tik,ord;
//---------------------------------------------------------------
   for(int i=PositionsTotal()-1; i>=0; i--)
     {
      if(PositionGetSymbol(i)==_Symbol)
        {
         tik=PositionGetTicket(i);
         //---------------------------------------------------------------
         HistorySelect(0,TimeCurrent());
         for(uint r=HistoryDealsTotal()-1; r>0; r--)
           {
            if((tikett=HistoryDealGetTicket(r))>0)
              {
               ord=HistoryDealGetInteger(tikett,DEAL_ORDER);
               entry =HistoryDealGetInteger(tikett,DEAL_ENTRY);
               if(entry==DEAL_ENTRY_IN)
                 {
                  if(tik==ord)
                    {
                     commicion+=HistoryDealGetDouble(tikett,DEAL_COMMISSION);
                    }
                 }
              }
           }
        }
     }
//--------------------------------------------------------------
   Comment(" commisia "+DoubleToString(commicion,2));
   return(commicion);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CSV_OPEN(void)
  {
//---
   ResetLastError();
   int filehandle=FileOpen("CommissionOpen.csv",FILE_READ|FILE_WRITE|FILE_CSV);
   if(filehandle==-1)
     {
      int res=GetLastError();
      Print("File open error :  ",
            res);
      return;
     }
   FileSeek(filehandle, 0, SEEK_END);
   FileWrite(filehandle,Komsa());
   FileClose(filehandle);
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void CSV_CLOS(void)
  {
//---
   ResetLastError();
   int filehandle=FileOpen("CommissionClose.csv",FILE_READ|FILE_WRITE|FILE_CSV);
   if(filehandle==-1)
     {
      int res=GetLastError();
      Print("File open error :  ",
            res);
      return;
     }
   FileSeek(filehandle, 0, SEEK_END);
   FileWrite(filehandle,Komsa());
   FileClose(filehandle);
  }
//+------------------------------------------------------------------+
 
Valeriy Yastremskiy:

Ранее уже обсуждалось. Комиссию (декларируемую брокером) вы можете посмотреть в условиях торговли у брокера. А реальную комиссию на исполнение приказа (ордера) можно узнать только после исполнения приказа, до исполнения нельзя узнать.

ЗЫ. Это как спред на следующем тике. На текущем тике мы не знаем, что будет на следующем, ни цену, ни спред, ни свопы ни комиссию. А брокер имеет право их менять.

Ну так ему и нужно узнать по открытым позициям