Questions des débutants MQL5 MT5 MetaTrader 5 - page 1327

 
SanAlex:

tous les mêmes zéros et ne veut pas montrer de commission

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);  }

Je ne sais pas si c'est correct ou non, mais j'ai vérifié et c'est correct.

 
Aleksandr Egorov:

Quoi qu'il en soit, c'est comme ça que ça se passe pour la paire sélectionnée.

Merci ! - Je vais essayer maintenant, j'ai besoin de comprendre cette fonction après tout.

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

Oui ! Ça marche. Merci !

Fx10 4

 
SanAlex:

Merci ! - Je vais l'essayer maintenant, il faut que je m'occupe de cette fonctionnalité après tout.

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

Oui ! Ça se voit. Merci !


Il s'avère que si la commission ne sera comptée que pour un seul côté, alors la fonction ne fonctionnera pas correctement car elle est multipliée par 2.

DEAL_ENTRY_IN
Nous devons le perfectionner d'une manière ou d'une autre.
 
Aleksandr Egorov:

il s'avère que si la commission n'est comptée que pour un seul côté, alors la fonction ne fonctionnera pas correctement car elle est multipliée par 2

Je dois le réparer à la perfection

il semble tout montrer correctement

J'ai fait quelques ajustements - je ne sais pas si c'est correct ou non, mais les avertissements ont disparu.

//+------------------------------------------------------------------+
//|                                                   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

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

J'ai ouvert une position opposée et la commission a augmenté - cela semble correct.

BTCUSDH1

 
SanAlex:

Il semble tout montrer avec précision.

Je l'ai un peu modifié - je ne sais pas si c'est correct ou non, mais les avertissements ont disparu.

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

J'ai ouvert une position opposée et la commission a augmenté - cela semble correct.


il faut vérifier si cela compte pour l'entrée et la sortie ou seulement pour l'entrée et le retrait d'une partie de la position si vous ouvrez avec 1 lot et fermez avec 0.5 lot.

J'ai beaucoup de travail à faire.
 

Ce script montre le profit pour la période, le lot total et la commission pour chaque instrument.
Non merci.

Dossiers :
 
Dmitiry Ananiev:

Ce script montre le profit pour la période, le lot total et la commission pour chaque instrument.
Ne me remerciez pas.

Le script est correct mais vous avez besoin d'un comsa sur les positions ouvertes et cela se trouve dans l'historique.

 
Aleksandr Egorov:

Le scénario est bien, mais le truc c'est qu'il faut un comsa sur les poses ouvertes, et c'est dans l'histoire.

Ce sujet a déjà été abordé auparavant. Vous pouvez consulter la commission (déclarée par le courtier) dans les conditions de trading du courtier. Et la commission réelle pour l'exécution d'un ordre (commande), vous ne pouvez la connaître qu'après l'exécution de l'ordre, vous ne pouvez pas la connaître avant l'exécution.

ZS. C'est comme le spread sur le prochain tick. Au tick actuel, nous ne savons pas ce que sera le prochain tick, ni le prix, ni le spread, ni les swaps, ni la commission. Et le courtier a le droit de les modifier.

 
Aleksandr Egorov:

J'ai besoin de vérifier ce qui compte pour l'entrée et la sortie ou seulement pour l'entrée et la déduction d'une partie de la position si j'ai ouvert avec 1 lot et ensuite fermé avec 0.5 lot.

Je dois encore m'amuser.

Je travaille sur quelque chose d'étrange - je ne le comprends pas encore moi-même. Je le vérifie séparément lors de l'ouverture d'une position et séparément lors de sa fermeture.

sage

//+------------------------------------------------------------------+
//|                                                   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:

Ce sujet a déjà été abordé auparavant. Vous pouvez consulter la commission (déclarée par le courtier) dans les conditions de trading du courtier. Et la commission réelle pour l'exécution de l'ordre (commande), vous ne pouvez la connaître qu'après l'exécution de l'ordre, vous ne pouvez pas la connaître avant l'exécution.

ZS. C'est comme le spread sur le prochain tick. Au tick actuel, nous ne savons pas ce que sera le prochain tick, ni le prix, ni le spread, ni les swaps, ni la commission. Et le courtier a le droit de les modifier.

Donc il a besoin de savoir sur ses positions ouvertes.