Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 1327

 
SanAlex:

todos los mismos ceros y no quiere mostrar la comisión

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

No sé si está bien o mal pero lo he comprobado y aparece correctamente

 
Aleksandr Egorov:

De todos modos, así es como cuenta el par seleccionado

Gracias. - Voy a probarlo ahora, después de todo tengo que averiguar esta función

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

¡Sí! Está funcionando. Gracias.

Fx10 4

 
SanAlex:

Gracias. - Voy a probarlo ahora, al fin y al cabo tengo que descubrir esta función.

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

¡Sí! Se nota. Gracias.


Resulta que si la comisión se cuenta sólo para un lado, entonces la función no funcionará correctamente porque se multiplica por 2

DEAL_ENTRY_IN
Tenemos que perfeccionarla de alguna manera
 
Aleksandr Egorov:

resulta que si la comisión sólo se cuenta para un lado, entonces la función no funcionará correctamente porque se multiplica por 2

Tengo que arreglarlo a la perfección

parece mostrar todo correctamente

He hecho algunos ajustes - no sé si esto es correcto o no, pero los avisos han desaparecido

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

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

He abierto una posición contraria y la comisión ha aumentado - parece correcto

BTCUSDH1

 
SanAlex:

Parece mostrar todo con precisión.

Lo he retocado un poco - no sé si está bien o no, pero los avisos han desaparecido

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

He abierto una posición contraria y la comisión ha aumentado, parece correcta.


hay que comprobar si cuenta para la entrada y la salida o sólo para la entrada y retirar parte de la posición si se abre con 1 lote y luego se cierra con 0,5 lotes

Tengo mucho trabajo que hacer.
 

Este script muestra el beneficio del periodo, el lote total y la comisión de cada instrumento.
No, gracias.

Archivos adjuntos:
 
Dmitiry Ananiev:

Este script muestra el beneficio del periodo, el lote total y la comisión de cada instrumento.
No me des las gracias.

El script está bien pero la cosa es que se necesita un comsa en las posiciones abiertas y esto está en el historial

 
Aleksandr Egorov:

El guión está bien, pero la cosa es que se necesita una comsa en poses abiertas, y esto está en la historia.

Ya se ha discutido antes. Puede ver la comisión (declarada por el corredor) en las condiciones de negociación del corredor. Y la comisión real por la ejecución de una orden (pedido) sólo se puede averiguar después de la ejecución de la orden, no se puede averiguar antes de la ejecución.

ZS. Es como la propagación de la siguiente garrapata. En el tick actual no sabemos lo que será el siguiente tick, ni el precio, ni el spread, ni los swaps, ni la comisión. Y el corredor tiene derecho a cambiarlos.

 
Aleksandr Egorov:

Necesito comprobar qué cuenta para la entrada y la salida o sólo para la entrada y deducir parte de la posición si abrí con 1 lote y luego cerré con 0,5 lotes.

Todavía tengo que trastear.

Estoy resolviendo algo curioso, aún no lo entiendo. Lo compruebo por separado al abrir una posición y por separado al cerrarla.

sabio

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

Ya se ha discutido antes. Puede ver la comisión (declarada por el corredor) en las condiciones de negociación del corredor. Y la comisión real por la ejecución de la orden (pedido) sólo se puede averiguar después de la ejecución de la orden, no se puede averiguar antes de la ejecución.

ZS. Es como la propagación de la siguiente garrapata. En el tick actual no sabemos lo que será el siguiente tick, ni el precio, ni el spread, ni los swaps, ni la comisión. Y el corredor tiene derecho a cambiarlos.

Así que necesita saber en sus posiciones abiertas.