Bibliotecas: MT4Orders - página 29

 
Ilya Malev:
para obtener los mismos indicadores de informe que en el probador, es necesario tener en cuenta la mitad de la comisión para las operaciones rentables, y la parte que se retiró al entrar en una operación debe tenerse en cuenta en la pérdida total. Es decir, las operaciones rentables cuentan 1/2 de OrderCommission(), y las no rentables cuentan toda la comisión, y +1/2 por cada ganancia en la pérdida total.... Esto es en el caso más simple, cuando no hay entradas/salidas parciales, no quiero pensar en otros más complicados todavía))))

Algo esta mal.

 
fxsaber:

Algo se ha estropeado.

Estoy haciendo un cálculo paralelo de indicadores PF para diferentes tipos de operaciones, que se abren simultáneamente durante la prueba. Así que me di cuenta de que si MT4-estúpidamente suma OrderProfit()+OrderCommission()+OrderSwap por separado de todas las operaciones más y menos, entonces el beneficio total, la pérdida total y el hollín-no PF al final no coincidirán. Y para que coincidan hay que hacer lo siguiente (si se está en el "entorno ideal del probador", donde se garantizan 2 operaciones por posición)

double summ_plus=0, summ_minus=0;
int oht=OrdersHistoryTotal();
for(int i = oht-1; i>=0; i--)
{
if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)&&OrderType()<2/*...*/)
{
if(OrderProfit()>0)
{
summ_plus+=OrderProfit()+OrderCommission()/2+OrderSwap();
summ_minus+=-OrderCommission()/2;
}
else
{
summ_minus+=-OrderProfit()-OrderCommission()-OrderSwap();
}
}
}
return(summ_minus>0?summ_plus/summ_minus:0.0); // Factor de beneficio correcto en MT5 tester
 
Ilya Malev:

Hago paralelamente con el probador el cálculo de los indicadores PF para diferentes tipos de operaciones, que se abren simultáneamente durante la prueba.

Por lo tanto, el cálculo de PF es absolutamente erróneo. PF no se puede calcular de manera diferente, no importa qué plataforma se utiliza. Es un concepto puramente matemático. Por lo tanto, siempre se calcula de forma inequívoca.

 
fxsaber:

Por tanto, el cálculo de la PF es completamente erróneo. La FP no puede calcularse de forma diferente, independientemente de la plataforma que se utilice. Es un concepto puramente matemático. Por lo tanto, siempre se calcula de forma inequívoca.

Bueno, trate de calcular cualquier sistema de ti mismo y compararlo con las cifras en el informe MT5. Sólo que la comisión era y preferentemente forex (porque yo estaba probando forex).

 
Ilya Malev:

Bueno, intente calcular cualquier sistema usted mismo y compárelo con las cifras del informe de MT5. Sólo si había comisión y preferiblemente forex (porque yo estaba probando forex).

Inserté este código en MQL5\Experts\Examples\Moving Average\Moving Average.mq5.

#include <MT4Orders.mqh>

double GetPF()
{
  double SumPlus = 0;
  double SumMinus = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
    {
      const double Profit = OrderProfit() + OrderCommission() + OrderSwap();
      
      if (Profit > 0)
        SumPlus += Profit;
      else
        SumMinus -= Profit;      
    }
    
  return(SumMinus ? SumPlus / SumMinus : DBL_MAX);
}

Coincidencia total con el Tester.

 
fxsaber:

He insertado este código en MQL5\Experts\Examples\Moving Average\Moving Average.mq5

Una coincidencia completa con el Probador.

Así que tal vez el tipo de cuenta a la que está conectado no tiene comisión para las operaciones.

P.D. Lo comprobaré de nuevo, vale. Si acaso, lo postearé con fotos :)
 
fxsaber:

He insertado este código en MQL5\Experts\Examples\Moving Average\Moving Average.mq5

Coincidencia total con el Probador.

El servidor MetaQuotes-Demo no tiene comisión para las operaciones en Forex.

1) Busque un servidor donde haya, por ejemplo, en broker A-i.

2) Añadir a su código

    printf("My Profit Factor = %.8f, MT5 Profit Factor = %.8f",GetPF(),TesterStatistics(STAT_PROFIT_FACTOR));
// а заодно это
  printf("My Plus=%.8f, My Minus=%.8f, MT5 Plus=%.8f, MT5 Minus=%.8f",SumPlus,SumMinus,
    TesterStatistics(STAT_GROSS_PROFIT),TesterStatistics(STAT_GROSS_LOSS));

3) ???

4) ¡¡¡Ganancia!!! :lol:

 
Ilya Malev:

Así que tal vez el tipo de cuenta a la que está conectado no tiene comisión para las transacciones.

Exactamente, lo comprobé en el servidor de comercio equivocado. Con comisión el PF correcto no coincide con Tester. Esto indica que MT5 calcula PF torcido, no teniendo en cuenta DEAL_IN-comisión en absoluto.

El beneficio se calcula de forma absolutamente correcta

double GetProfit()
{
  double Res = 0;
  
  for (int i = OrdersHistoryTotal() - 1; i >= 0; i--)
    if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY) && (OrderType() <= OP_SELL))
      Res += OrderProfit() + OrderCommission() + OrderSwap();
    
  return(Res);
}


PF está torcido en MT5. MT5 puede tener un PF infinito al final de la operación, con el saldo disminuyendo. Esto es incorrecto, por supuesto.

 
fxsaber:

Correcto, comprobado en el servidor de comercio equivocado. Con la comisión el PF correcto no coincide con el Probador. Esto demuestra que MT5 calcula PF torcidamente, no teniendo en cuenta la comisión DEAL_IN en absoluto.

Esto demuestra que tienen una filosofía diferente - no consideran las transacciones como un todo (y no hay posiciones en el historial como tal, en el sentido de HistoryPositionSelect, etc.). Para ellos cada transacción es una operación independiente, por eso suman la comisión a la entrada con pérdidas (aunque luego no está claro por qué la siguen deduciendo del beneficio a la salida)

 
Ilya Malev:

Esto demuestra que tienen una filosofía diferente - no consideran las transacciones como un todo (e incluso las posiciones en el historial como tales no existen, en el sentido de HistoryPositionSelect, etc.). Para ellos cada transacción es una operación independiente, por eso suman la comisión a la entrada con las pérdidas (aunque luego no está claro por qué la siguen descontando del beneficio a la salida)

Piensan que si el saldo disminuyó como consecuencia de la operativa, pero todas las operaciones DEAL_OUT cubrieron su comisión (y swap), entonces el PF es cósmico.


Resulta que MT4Orders cuenta correctamente. Pero no sabe trabajar completamente con Netting - no procesa las operaciones DEAL_INOUT normalmente.