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

 
Vladimir Karputov:
Vamos verificar com um simples conselheiro...
Não há necessidade de o verificar. A lógica é a mesma que na MQL4: Profit, Commission e Swap são entidades separadas.
 
fxsaber:
Não há necessidade de verificar. A lógica é a mesma que na MQL4: Profit, Commission e Swap são entidades separadas.
Por favor mostre-me o código, o código directo em mql5 e de preferência sem quaisquer perversões
 
Vladimir Karputov:
Agora vamos verificar com uma simples EA...

Vladimir, a questão é que nos quatro eu faço isto:

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

Como o fazes em cinco?

 
Vitaly Muzichenko:

Vladimir, a questão é que nos quatro eu faço isto:

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

Como é que o faz em cinco?

Acrescentar no início.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
Ou reescreve tudo muito.
 
Vitaly Muzichenko:
Por favor mostre-o por código, aqui está um código directo em mql5 e de preferência sem perversões.
Isto é quase impossível! Puxado de SB, código directo
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
double CPositionInfo::Profit(void) const
  {
   return(PositionGetDouble(POSITION_PROFIT));
  }
 
fxsaber:
É quase impossível! Puxado de SB, código directo
//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_SWAP"                           |
//+------------------------------------------------------------------+
double CPositionInfo::Swap(void) const
  {
   return(PositionGetDouble(POSITION_SWAP));
  }
//+------------------------------------------------------------------+
//| Get the property value "POSITION_PROFIT"                         |
//+------------------------------------------------------------------+
Esqueceu-se de colocar a documentação, mas será que esta"POSIÇÃO_COMISSÃO" funciona?
 
new-rena:
Esqueceu-se de o colocar na documentação, mas será que esta"POSIÇÃO_COMISSÃO" funciona?
Pediu-o sem perversões. E se com eles, então

Fórum sobre comércio, sistemas automatizados de comércio e testes de estratégia comercial

Insectos, insectos, perguntas

fxsaber, 2016.07.19 12:40

POSITION_COMMISSION propriedade no testador (RoboForexEU-MetaTrader 5) devolve sempre comissão zero.

//+------------------------------------------------------------------+
//| Get the property value "POSITION_COMMISSION"                     |
//+------------------------------------------------------------------+
double CPositionInfo::Commission(void) const
  {
   return(PositionGetDouble(POSITION_COMMISSION));
  }

Também POSITION_COMMISSION (== 8) está ausente na ajuda e meta-editor (destaque), mas é familiar ao compilador. A comissão de posição não é difícil de determinar utilizando outro método (de trabalho). POSITION_COMMISSION propriedade - um rudimento?


É por isso que é assim
double GetPositionCommission( void )
{
  double Commission = ::PositionGetDouble(POSITION_COMMISSION);

  // На случай, если POSITION_COMMISSION не работает
  if (Commission == 0)
  {
    const ulong Ticket = MT4ORDERS::GetPositionDealIn();

    if (Ticket > 0)
    {
      const double LotsIn = ::HistoryDealGetDouble(Ticket, DEAL_VOLUME);

      if (LotsIn > 0)
        Commission = ::HistoryDealGetDouble(Ticket, DEAL_COMMISSION) * ::PositionGetDouble(POSITION_VOLUME) / LotsIn;
    }
  }

  return(Commission);
}
Ou

Fórum sobre comércio, sistemas de comércio automatizados e testes estratégicos

Perguntas de principiantes

fxsaber, 2016.10.29 16:23

Não estou a impor a biblioteca MT4Orders. Mas talvez fosse mais fácil simplesmente chamar a boa e velha Comissão da Ordem?

Ainda funciona não só em contas de cobertura mas também em contas líquidas.

 
Vladimir Karputov:
Vamos verificar isso agora com um simples Expert Advisor...

Aqui:POSITION_PROFIT mostra o lucro da posição

POSITION_PROFIT

. Não tem em conta a troca e afins.

 
Vitaly Muzichenko:

Vladimir, a questão é que nos quatro eu faço isto:

// считаем комиссии и свопы в пипки
     swap=OrderSwap();
     commission=OrderCommission();
     if(swap+commission<0.0) {
      costs=NormalizeDouble(MathAbs(((swap+commission)/(SymbolInfoDouble(_symbol,SYMBOL_TRADE_TICK_VALUE)*ol))*_Point),_Digits);
     } else {
      costs=0.0;
     }
// прибавляем количество пипок
if(((Bid-(br+costs+((BreakevenStep*_Point)*D)))>=op) && typ==0)
{
  OrderModify(...);
}

Como é que o faço em cinco?

A comissão é tão imprevisível que só pode ser determinada num comércio fechado. Para uma posição aberta, só se pode descobrir o lucro actual (que não tem em conta nem o impacto do swap nem o impacto das comissões) e o swap. Aqui está o código:

colocar um ponto de parada na linha " m_trade.PositionClose(Symbol();" e fazer o teste sobre a história. Quando o testador pára no ponto de parada, comparar os números nas colunas Lucro e Troca com os números que não estão escritos no registo do testador.

Arquivos anexados:
3.mq5  5 kb
 
Vladimir Karputov:

Aqui:POSITION_PROFIT mostra o lucro da posição

. Não tem em conta a troca e afins.

Ok. Conseguimo-lo.

A solução de fxsaber é boa, eu apliquei-a.

Basicamente, transferi o meu programa MQL4 para MQL5 quase sem qualquer problema.

Os detalhes são dados acima.

Muito obrigado!