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

 
Vladimir Karputov:
Vamos a comprobarlo con un simple asesor...
No hay necesidad de comprobarlo. La lógica es la misma que en MQL4: el Beneficio, la Comisión y el Swap son entidades separadas.
 
fxsaber:
No es necesario comprobarlo. La lógica es la misma que en MQL4: el Beneficio, la Comisión y el Swap son entidades separadas.
Por favor, muéstrame el código, el código directo en mql5 y preferiblemente sin perversiones
 
Vladimir Karputov:
Ahora vamos a comprobar con un simple EA...

Vladimir, la cuestión es que en el cuatro hago esto:

// считаем комиссии и свопы в пипки
     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(...);
}

¿Cómo se hace en cinco?

 
Vitaly Muzichenko:

Vladimir, la cuestión es que en el cuatro hago esto:

// считаем комиссии и свопы в пипки
     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(...);
}

¿Cómo se hace en cinco?

Añade al principio.
#include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006
O bien reescribir todo el asunto fuertemente.
 
Vitaly Muzichenko:
Por favor, muéstralo por código, aquí tienes un código directo en mql5 y preferiblemente sin perversiones.
¡Esto es casi imposible! Extraído 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:
Es casi imposible. Extraído 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"                         |
//+------------------------------------------------------------------+
Se me olvidó poner en la documentación, pero ¿funciona este"POSITION_COMMISSION"?
 
new-rena:
Se me olvidó ponerlo en la documentación, pero ¿funciona este"POSITION_COMMISSION"?
Lo has pedido sin perversiones. Y si con ellos, entonces

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

fxsaber, 2016.07.19 12:40

La propiedad POSITION_COMMISSION en el probador (RoboForexEU-MetaTrader 5) siempre devuelve cero comisiones.

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

También POSITION_COMMISSION (== 8) falta en la ayuda y en el meta-editor (resaltado), pero es familiar para el compilador. La comisión de posición no es difícil de determinar utilizando otro método (de trabajo). Propiedad POSITION_COMMISSION - ¿un rudimento?


Por eso es así
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);
}
O

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategias

Preguntas de los principiantes

fxsaber, 2016.10.29 16:23

No estoy imponiendo la biblioteca MT4Orders. Pero tal vez sería más fácil llamar a la buena y vieja OrderCommission.

Sigue funcionando no sólo en las cuentas de cobertura, sino también en las cuentas netas.

 
Vladimir Karputov:
Vamos a comprobarlo ahora con un simple Asesor Experto...

Aquí:POSITION_PROFIT muestra el beneficio de la posición

POSICIÓN_GANANCIA

. No tiene en cuenta los intercambios y similares.

 
Vitaly Muzichenko:

Vladimir, la cuestión es que en el cuatro hago esto:

// считаем комиссии и свопы в пипки
     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(...);
}

¿Cómo lo hago en cinco?

La comisión es tan imprevisible que sólo puede determinarse en una operación cerrada. Para una posición abierta, sólo se puede averiguar el beneficio actual (que no tiene en cuenta ni el impacto del swap ni el de las comisiones) y el swap. Aquí está el código:

ponga un punto de interrupción en la línea " m_trade.PositionClose(Symbol();" y ejecute la prueba en el historial. Cuando el probador se detenga en el punto de ruptura, compare las cifras de las columnas de Beneficio y Cambio con las cifras que no están escritas en el registro del probador.

Archivos adjuntos:
3.mq5  5 kb
 
Vladimir Karputov:

Aquí:POSITION_PROFIT muestra el beneficio de la posición

. No tiene en cuenta los intercambios y similares.

Bien. Lo tenemos.

La solución de fxsaber es buena, la he aplicado.

Básicamente, transferí mi programa MQL4 a MQL5 casi sin problemas.

Los detalles se indican más arriba.

¡Muchas gracias!

Razón de la queja: