Cálculo de beneficios de las órdenes cerradas "AYUDA" - página 9

 
Natashe4ka:

Yo también pensaba que contaba correctamente.
No debería haber puesto esta información en el código y mi vida habría sido más fácil))

¡¡¡Y ahora me pregunto cómo la función no funcionó correctamente todo este tiempo!!!

Ya veo, tengo que quitar la comprobación de beneficio = positivo, por eso la cuenta se para más tarde, sólo tenía que tener en cuenta mi pérdida anterior también.

double lastloss()
{
double lastlos=0.0,lastlot=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}
 
Natashe4ka:

A mí también me pareció que todo cuenta como debería.
No debería haber puesto esta información en el código y la vida habría sido más fácil))

¡¡¡Y ahora es desconcertante cómo la función no funcionó correctamente todo este tiempo!!!

Está utilizando la función de las primeras páginas de su libro para principiantes para cerrar. En el probador cerrará casi normalmente, pero en el comercio real el bot a menudo cerrará en rojo, especialmente si toma una pequeña ganancia.

¿Has probado a operar en el mercado real o sólo en el probador?

¿Has visto alguna vez una situación así, cuando se cierran una serie de posiciones? Observe la diferencia en pips desde la señal hasta el cierre, y hasta el cierre de la última posición

Para no hacer spam, sólo adjuntaré 3 capturas de pantalla, aunque en realidad hay más de cien disponibles:


Todas las funciones funcionan correctamente para todo el mundo, pero sólo usted no funciona correctamente. ¿Se ha preguntado alguna vez por qué?

Y por último, la pregunta que debes hacerte, no necesitamos respuesta: ¿vas a reiniciar el terminal en cualquier momento, o lo vas a cerrar el fin de semana, ...? Si es así, ¿cómo va a obtener el beneficio en el próximo lanzamiento del terminal para continuar el trabajo del Asesor Experto que se hizo en el último cierre de la serie, si no quiere guardarlo en ningún sitio?

 

Hay más:

¿Por qué he preguntado qué hace la eliminación de una orden entre posiciones de cierre?


Ahora tenemos una situación: Un EA comienza a cerrar posiciones cuando alcanza beneficios y entonces recibe una orden que no sirve para nada, es decir, no obtiene ni beneficios ni pérdidas pero se envía una orden para eliminar esta orden y mientras se elimina, el precio se va y el EA sigue cerrando más. El resultado es el siguiente: hemos empezado a cerrar el beneficio pero como hemos cerrado todo mal, hemos acabado cerrando la serie con pérdidas. ¿Es normal? No escriba códigos sólo para el probador, escriba un código al menos para trabajar en una cuenta demo.

 
Vitalie Postolache:

Lo tengo, tengo que quitar la comprobación de beneficio = positivo, hace que la cuenta se detenga más tarde, sólo tenía que tener en cuenta mi pérdida anterior también.

double lastloss()
{
double lastlos=0.0,lastlot=0.0,op=0.0;
int cnt=0;
datetime time=0;
for(int i=OrdersHistoryTotal()-1; i>=0; i--)
{
      if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY))
      {
         if(OrderSymbol()==_Symbol && OrderMagicNumber()==Magic && OrderType()<2)
         {
            if(cnt==0 && OrderCloseTime()!=0) time=OrderCloseTime();
            if(OrderCloseTime()+PeriodSeconds()<time/* && op>0.0*/) break;
            op=OrderProfit()+OrderSwap()+OrderCommission();
            lastlos+=op;
            cnt++;
         }
      }
}
return(lastlos);
}

Funciona, cuenta como debe, genio, ¡¡¡impresionante!!!
Gracias - gracias - gracias !!!!!!!!!!!!)))))))))))))

Lo has hecho bien))

 
Vitaly Muzichenko:

Hay más:

¿Por qué he preguntado qué hace la eliminación de una orden entre posiciones de cierre?


Ahora tenemos una situación: Un EA comienza a cerrar posiciones cuando alcanza beneficios y entonces recibe una orden que no sirve para nada, es decir, no obtiene ni beneficios ni pérdidas pero se envía una orden para eliminar esta orden y mientras se elimina, el precio se va y el EA sigue cerrando más. El resultado es el siguiente: hemos empezado a cerrar el beneficio pero como hemos cerrado todo mal, hemos acabado cerrando la serie con pérdidas. ¿Es normal? No escriba códigos sólo para el probador, escriba un código al menos para trabajar en una cuenta demo.

Sí, no se cierran allí en orden, sucede si el ciclo de cierre comienza desde cero.
 
Vitalie Postolache:
No se cierran en ningún orden, ocurre si el ciclo de cierre comienza desde cero.

¿Desde qué punto cero?

¿Por qué perder tiempo en la eliminación de pedidos en el momento del cierre de la red? Tú mismo sabes que borrar una orden lleva tiempo, así que para qué perderlo, y si tu empresa de corretaje no es rápida, estamos jodidos. He mostrado una captura de pantalla con 15 posiciones cerradas en 1 minuto y 34 segundos y tenemos que darnos cuenta de que el precio puede pasar por más de una docena de puntos durante este tiempo y tendremos suerte si va en nuestra dirección y no en nuestra contra.

 
Vitaly Muzichenko:

¿Desde qué punto cero?

¿Por qué perder tiempo en la eliminación de pedidos en el momento del cierre de la red? Tú mismo sabes que borrar una orden lleva tiempo, así que ¿por qué perder el tiempo? Y si tu empresa de corretaje no es rápida, estamos jodidos. Una vez publiqué una captura de pantalla en la que se cerraron 15 posiciones en 1 minuto y 34 segundos.

A partir de este punto cero for(int i=0;i<OrdersHistoryTotal();i++) - De este modo, las órdenes se cerrarán una a una en el mejor de los casos si se seleccionan por número ordinal.

Sí, lo sé, una orden pendiente no debe ser eliminada en medio del proceso de cierre de una serie, y sería mejor cerrarlas en orden, pero esto viene con la experiencia.

Razón de la queja: