[ARCHIVO] Cualquier pregunta de novato, para no saturar el foro. Profesionales, no pasen de largo. En ninguna parte sin ti - 3. - página 309

 
artmedia70:

Así es: es de buena educación ordenar tu propia basura...

Pero en este contexto, cómo se puede saber si hay que limpiar la "basura" ahora o viceversa: no es basura, son los datos necesarios para los cálculos posteriores.

Según tengo entendido, deinit() debería utilizarse para limpiar la basura, pero... se ejecuta no sólo cuando se borra el gráfico de un instrumento comercial y se elimina el EA, sino también cuando se cambia el TF. En este caso, todos los datos acumulados para el TF se perderán y el Asesor Experto volverá a trabajar con una matriz cero cuando vuelva al marco temporal anterior. Lo mismo ocurrirá si cambiamos alguno de los parámetros del Asesor Experto.

Resulta que en algunas situaciones la "recogida de basura" es un proceso lógico complejo, no un simple cambio del tamaño de la matriz.


Bueno, no es complicado. En el bucle, inicializa el array con valores. A continuación, trabajamos con la matriz resultante. Cuando el trabajo está hecho, lo hacemos de longitud cero. En caso de duda, puede hacerlo al final del código, justo antes de return(0).
 

Por favor, sugiera el siguiente código para leer el archivo de registro. Lee automáticamente el archivo de registro actual por fecha y lo envía a la impresora.

Dónde:

while (result>0) {

El archivo se está ensamblando a partir de piezas. Pero no necesito todo el archivo, sólo la última línea. Ayuda para corregir, por favor.

void ReadWrite() {
   string tekTime=TimeStr1(CurTime(),1);
   string path=TerminalPath()+"\\logs\\"+tekTime+".log";
   string title="Чтение из файла";
   string msg;
   int result;
   int handle=_lopen(path,4);
   if (handle<0) {
      msg="Ошибка открытия файла";
      //MessageBox(msg,title,MB_OK|MB_ICONERROR);
      Print(msg);
      return;
   }
   result=_llseek (handle,0,0);
   string buffer="";
   //string char="x                      ";
   string char="x                                                                                                                                                                                                                                                         ";
   int count=0;
   result=_lread (handle,char,250);
   while (result>0) {
      buffer=buffer+char;
      char="x                                                                                                                                                                                                                                                         ";
      count++;
      result=_lread (handle,char,250);
   }
   result=_lclose (handle);
   msg=StringTrimRight(buffer);
   //MessageBox(msg,title,MB_OK|MB_ICONINFORMATION);
   Print(msg);
}

//------------------расчет времени----------------
string TimeStr1(int taim,int tip)
{
   string sTaim;
   string sTaim1,sTaim2,sTaim3;
   if (tip==1) 
   {
      int GD=TimeYear(taim);                  
      int MN=TimeMonth(taim);                  
      int DD=TimeDay(taim);  
      
      sTaim1 = DoubleToStr(GD,0);
      if (MN<10) sTaim2 = StringConcatenate(sTaim2,"0"+DoubleToStr(MN,0));
      else sTaim2 = StringConcatenate(sTaim2,DoubleToStr(MN,0));
      if (DD<10) sTaim3 = StringConcatenate("0",DoubleToStr(DD,0));
      else sTaim3 = DoubleToStr(DD,0);
      sTaim=sTaim1+sTaim2+sTaim3;
   }
   return(sTaim);
}
 
drknn:

Bueno, no es difícil. En el bucle, el array se inicializa con valores. Luego trabajamos con la matriz resultante. Cuando el trabajo termina, lo convertimos en una matriz de longitud cero. En caso de duda, puede hacerlo al final del código, justo antes de return(0).

Me han malinterpretado.

En el contexto de la conversación (si he entendido bien la premisa de esta conversación), el bucle es el propio EA. Al fin y al cabo, cada vez que llega un tic, la matriz aumenta o se mantiene igual dependiendo de si hay que escribir un nuevo valor en ella.

¿Cómo podemos saber que la obra está terminada, y no sólo una persona, por ejemplo, cambia el plazo? Incluso por accidente... En este caso, se llamará a deinit() y se perderán todos los datos. El Asesor Experto comenzará a almacenarlos (escribir en un array dinámico) de nuevo, basándose en los valores obtenidos en el nuevo marco temporal(un nuevo ciclo).

Lo digo en serio.

 
artmedia70:

No me han entendido.

En el contexto de nuestra discusión (si he entendido bien la premisa de esta discusión), el ciclo es el trabajo del propio Asesor Experto. Al fin y al cabo, cada vez que llega un tic el array se incrementa o permanece sin cambios, dependiendo de si hay que escribir un nuevo valor en él.

¿Cómo se puede saber si un trabajo está terminado y no es una persona que cambia los plazos, por ejemplo? Incluso por accidente... En este caso, se llamará a deinit() y se perderán todos los datos. El Asesor Experto comenzará a acumularlos (escribirlos en una matriz dinámica) de nuevo, basándose en los valores obtenidos en el nuevo marco temporal(un nuevo ciclo).

Lo que quiero decir es esto.

Si entra en detalles, puede utilizar esta función. Le dirá cuál es el motivo de la desinicialización.
 

Me he dado cuenta de una característica específica del terminal. Como el cálculo de beneficios de la orden no considera el OrderSwap(), quiero que cierre la orden de una vez.


Significa que debemos utilizar esta fórmula para cerrar la orden con un beneficio:

(OrderProfit()+OrderSwap()+OrderCommission())>0

Nunca he trabajado con comisión y la comisión no se utiliza en la demo, por eso no puedo comprobarlo en la cuenta.

¿Son correctos mis cálculos?

 
Zhunko:
Si entra en detalles, puede utilizar esta función. Le indicará el motivo de la desinicialización.

Muy bien... :)

Lo había olvidado. Ahora, con mi costumbre de usar "a prueba de tontos", lo usaremos...

 
artmedia70:

ObjectGetValueByShift() para ayudarle

Y cómo vas a trabajar con ella, sólo tú lo sabes...


¡Gracias, amable hombre!
 
Dos preguntas.

1. ¿Cómo escribo/introduzco la primera y las siguientes variables double abc[10] en el array double ab=a*b?
2. ¿Cómo escribir la undécima variable en un array, eliminando la primera?

El orden en el que se escriben las variables en el array (hacia delante o hacia atrás) no importa. Las variables de la matriz son necesarias para determinar la media aritmética.
 
¿Puedo cambiar el tamaño del lote de una orden pendiente?
 
Parn25:
¿Puedo cambiar el tamaño del lote de una orden pendiente?


No, no puedes.

todo lo que puede cambiar se explica aquí https://docs.mql4.com/ru/trading/OrderModify

Razón de la queja: