Perguntas de Iniciantes MQL5 MT5 MetaTrader 5 - página 1327

 
SanAlex:

todos os mesmos zeros e não quer mostrar comissão

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

Não sei se está certo ou errado, mas verifiquei-o e mostra-o correctamente

 
Aleksandr Egorov:

De qualquer forma, é assim que conta com o par seleccionado

Obrigado! - Vou tentar agora, afinal preciso de descobrir esta função

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

Sim! está a funcionar. Obrigado!

Fx10 4

 
SanAlex:

Obrigado! - Vou experimentar agora, afinal tenho de descobrir esta funcionalidade

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

Sim! mostra. Obrigado!


Acontece que se a comissão for contada apenas para um lado, então a função não funcionará correctamente porque é multiplicada por 2

DEAL_ENTRY_IN
Precisamos de o aperfeiçoar de alguma forma
 
Aleksandr Egorov:

acontece que se a comissão for contada apenas para um lado, então a função não funcionará correctamente porque é multiplicada por 2

Preciso de o fixar na perfeição

parece mostrar tudo correctamente

Fiz alguns ajustes - não sei se isto é correcto ou não, mas os avisos desapareceram

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

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

Abri uma posição oposta e a comissão aumentou - parece correcto

BTCUSDH1

 
SanAlex:

Parece mostrar tudo com precisão.

Afinei-o um pouco - não sei se está certo ou não, mas os avisos desapareceram

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

Abri uma posição oposta e a comissão aumentou - parece correcto.


há necessidade de verificar se conta para entrada e saída ou apenas para entrada e retirada de parte da posição se abrir com 1 lote e depois fechar com 0,5 lote

Tenho muito trabalho para fazer.
 

Este guião mostra o lucro para o período, lote total e comissão para cada instrumento.
Não, obrigado.

Arquivos anexados:
 
Dmitiry Ananiev:

Este guião mostra o lucro para o período, lote total e comissão para cada instrumento.
Não me agradeça.

O guião é bom, mas o problema é que precisa de uma comsa sobre posições em aberto e isto está na história

 
Aleksandr Egorov:

O guião é bom, mas a questão é que é preciso uma comsa em poses abertas, e isto está na história.

Já foi discutido anteriormente. Pode ver a comissão (declarada pelo corretor) nas condições comerciais do corretor. E a verdadeira comissão para a execução de uma ordem (ordem) só se pode descobrir após a execução da ordem, não se pode descobrir antes da execução.

ZS. É como a propagação no próximo tick. No actual tick não sabemos qual será o próximo tick, nem o preço, nem o spread, nem os swaps, nem a comissão. E o corretor tem o direito de os alterar.

 
Aleksandr Egorov:

Preciso de verificar o que conta para entrar e sair ou apenas para entrar e deduzir parte da posição se eu abrir com 1 lote e depois fechar com 0,5 lote.

Ainda tenho de me mexer.

Estou a trabalhar em algo engraçado - eu próprio ainda não o compreendo. Verifico em separado quando abro uma posição e separadamente quando o fecho.

sábio

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

Já foi discutido anteriormente. Pode ver a comissão (declarada pelo corretor) nas condições comerciais do corretor. E a verdadeira comissão para a execução da ordem (ordem) só se pode descobrir após a execução da ordem, não se pode descobrir antes da execução.

ZS. É como a propagação no próximo tick. No actual tick não sabemos qual será o próximo tick, nem o preço, nem o spread, nem os swaps, nem a comissão. E o corretor tem o direito de os alterar.

Por isso, precisa de saber sobre as suas posições em aberto.

Fórum sobre comércio, sistemas automatizados de comércio & testador de estratégias

Perguntas de Iniciantes MQL5 MT5 MetaTrader 5

Aleksandr Egorov, 2021.07.14 22:30

Tenho uma boa visão sobre a posição que estou a tentar usar na história

Razão: