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

 
Natashe4ka:

Esto también es correcto si "cnt" se pone a cero, pero entonces el valor es de nuevo incomprensible como en la captura de pantalla 3 (debería ser un valor de beneficio de 4,27)

double LastProfitCL(int op=-1){ //"op" позиция (-1 любая позиция)
  int cnt=0;
  double LastProfit=0;
   for(i=0;i<OrdersHistoryTotal();i++)
     if(OrderSelect(i,SELECT_BY_POS,MODE_HISTORY) && (OrderType()==OP_BUY || OrderType()==OP_SELL) && OrderSymbol()==Symbol() && OrderMagicNumber()==magic) {
       if (OrderSymbol()!=Symbol() || OrderMagicNumber()!=magic) continue;
       if ((op<0 || OrderType()==op) && cnt==0) {LastProfit+=OrderProfit()+OrderCommission()+OrderSwap(); cnt++;} else {cnt=0;}
       }
  return(LastProfit);
   }

No es bueno cuando no tengo pensamiento lógico(

Verás, en el mercado real el depósito se fundirá en 3 días con este tipo de lógica.

 
Vitaly Muzichenko:
Es malo cuando no se piensa con lógica(

Así es.

La orden pendiente fue eliminada

 
Natashe4ka:

Así es.

La orden pendiente ha sido eliminada

Es comprensible tal y como es.
 

Bien, entonces ¿cómo se devuelve una entrada de órdenes cerradas que sean iguales a OrderCloseTime() y se calcula su beneficio?
Así:

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}
 
Natashe4ka:

Bien, entonces ¿cómo se devuelve una entrada de órdenes cerradas que sean iguales a OrderCloseTime() y se calcula su beneficio?
Algo así:

if (t<OrderCloseTime()) {t=OrderCloseTime();r=OrderTicket();profit+=OrderProfit()+OrderCommission()+OrderSwap();}


¿Y si se cierra en una parada?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

 
Escribí un sistema para registrar las detracciones o ganancias acumuladas - era algo así: para cada orden de mercado durante la apertura se crea una variable global con el nombre del ticket de esta orden y cuando necesitemos recalcular el beneficio/pérdida acumulado, simplemente comprobamos la lista actual de órdenes con la lista de variables globales y realizamos la contabilidad borrando las variables sobrantes y añadiendo el beneficio directamente al ticket desde el nombre.
 
Renat Akhtyamov:

¿Y si se cierra en una parada?

ticket=OrderClose(......);

if(ticket>0){//увеличить размер массива на один и записать тикет закрытого ордера}

Bueno, ¿qué matrices, qué entradas, qué órdenes?

Tras el primer reinicio del terminal, o el apagado durante el fin de semana, simplemente se perderán todos los datos, y ese será el fin de todas las escrituras y cálculos.

 
Aleksey Semenov:
Por ejemplo, cuando escribía para mí un sistema de recuento de detracciones o beneficios acumulados, tenía este aspecto: para cada orden de mercado durante la apertura se crea una variable global con el nombre del ticket de esta orden y cuando queramos recalcular el beneficio/pérdida, simplemente comprobamos la lista de órdenes actual con la lista de variables globales y realizamos el cálculo borrando las variables sobrantes y añadiendo el beneficio directamente al ticket desde el nombre.

Esto supone una gran carga para el sistema, en un indicador funciona bien, pero en un EA la enumeración de decenas de variables globales puede acabar con un cuelgue del terminal.

Hay un horario de apertura y cierre, hay que trabajar a partir de él y no es difícil conseguirlo, se puede obtener toda la información sobre el estado de la cuenta con un registro de tiempo, y no se necesita una bicicleta.

 
Vitaly Muzichenko:

¿Qué matrices, qué entradas, qué órdenes?

Tras el primer reinicio del terminal, o un apagado de fin de semana, simplemente se perderán todos los datos, y eso será el fin de todas las escrituras y cálculos.

es solucionable

No tengo que explicártelo.

 
Vitaly Muzichenko:

Esto supone una gran carga para el sistema, en un indicador funciona bien, pero en un EA la enumeración de decenas de variables globales puede acabar con un cuelgue del terminal.

Hay horarios de apertura y cierre, a partir de eso hay que trabajar, y no hay dificultad para conseguirlo, con un registro de tiempo puedes obtener toda la información sobre el estado de la cuenta, y no necesitas una bicicleta.

Si tiene, por ejemplo, un terminal lleno de cientos de variables glob no utilizadas, entonces sí - la reconstrucción terminará tristemente, si no, funciona bastante rápido, si se escribe correctamente