Errores, fallos, preguntas - página 661

 

¿Existe un límite interno en la longitud de la cadena(tipo de cadena), o cuánta memoria libre hay y cuánto se puede meter en la cadena?

// Esta pregunta está relacionada con la escritura de programas para OpenCL.

Por favor, especifique también la respuesta correcta en la documentación, no hay ninguna indicación en las FAQ.

 
MetaDriver:

¿Existe un límite interno en la longitud de la cadena(tipo de cadena), o cuánta memoria libre hay y cuánto se puede meter en la cadena?

// Esta pregunta está relacionada con la escritura de programas para OpenCL.

Por favor, especifique también la respuesta correcta en la documentación, ya que no hay ninguna indicación en las FAQ.

Sin el carácter de avance de línea "\r\n" es un poco menos de 32768, a grandes rasgos 32000 caracteres pueden caber ahí,

Y con un avance de línea hasta la memoria es suficiente, al menos he metido 2 000 000 en el hilo, mi mano se cansó de palear más :)

 
Urain:

Sin el salto de línea, es un poco menos de 32768, aproximadamente 32.000 caracteres,

pero con la línea de alimentación, tengo suficiente memoria por ahora, al menos he metido 2.000.000 en el hilo, mi brazo está cansado de empujar :)

¡Muchas gracias! Dos millones serán suficientes para mí al principio.

// Sólo estoy perplejo: ¿qué demonios tiene que ver la traducción de cadenas con esto? Es sólo un símbolo, no es peor/mejor que los demás.

// No, te creo, es que suelo entender cómo funcionan las cosas, pero aquí es algo raro y sorprendente...

// ¿Con qué lo has medido? ¿No era una función de archivo?

:)

 
MetaDriver:

Gracias, ¡me alegro de que lo hayas hecho! Dos millones serán suficientes para mí por primera vez.

// Sólo estoy perplejo: ¿qué demonios tiene que ver la traducción de cadenas con esto? Es sólo un símbolo, no es peor/mejor que los demás.

// No, te creo, es que suelo entender cómo funcionan las cosas, pero aquí es algo raro y sorprendente...

// ¿Con qué lo has medido? ¿No será por casualidad la función de archivo?

:)

Lo más probable es que se trate de una representación interna de la cadena; \r\nprobablemente se asigne un nuevo array (adicional) para almacenar la información.

No lo sé exactamente, pregúntale a MQ.

SZY por supuesto para el control volcado en un archivo, pero primero se forma la cadena, comprobó su longitud a través de Len, bueno, no recuerdo ahora, fue hace mucho tiempo, pero todo estaba en orden.

ZZZI Y comprobé la lectura de 10 caracteres de la cadena guardada, sin la traducción de más de ~32700 no escribe en la variable.

 
Urain:

Lo más probable es que se trate de una representación de cadena interna, con \r\nprobablemente seguida de una nueva matriz (adicional) para almacenar información.

No lo sé exactamente, pregúntale a MQ.

Bueno, por supuesto para controlar el restablecimiento a un archivo, pero primero se forma la cadena, comprobó su longitud a través de Len, bueno, no recuerdo ahora, fue hace mucho tiempo, pero todo estaba en orden.

ZZZY Y leer de 10 caracteres de la cadena guardada, sin traducción más de ~32700 no escribe en la variable.

Muy bien, gracias, Nicholas. Y, por cierto, ¡feliz cumpleaños a ti...!



--

¿Qué tiene que decir el camarada Stringo?

 
La longitud máxima de la línea es de 1073741816 caracteres, pero no hay suficiente memoria para ese número de caracteres en x86 (32 bits).
 
Valmars:
Sólo hay que sincronizar el tiempo de la computadora en el tiempo, de lo contrario también podemos perder las operaciones.

Eso es, lo tengo. Entonces te he entendido mal. )) Para obtener siempre correctamente todo el historial, la sincronización puede hacerse así:

//+------------------------------------------------------------------+
//| МАКСИМАЛЬНОЕ_ВРЕМЯ                                               |
//+------------------------------------------------------------------+
datetime ChoiceTimeFunction()
  {
   datetime synchro=NULL;
//---
   synchro=(datetime)fmax((double)TimeTradeServer(),(double)TimeLocal());
//---
   if(!MQL5InfoInteger(MQL5_TESTING) || !MQL5InfoInteger(MQL5_OPTIMIZATION) || !MQL5InfoInteger(MQL5_VISUAL_MODE))
     {
      Print("synchro_time: ",synchro,"; TimeTradeServer(): ",TimeTradeServer(),"; TimeLocal(): ",TimeLocal()); return(synchro);
     }
//---
   synchro=TimeCurrent()+Milliseconds_Ahead;
//---
   Print("synchro_time tm+ml_ahead: ",synchro,"; TimeCurrent(): ",TimeCurrent(),"; Milliseconds_Ahead: ",Milliseconds_Ahead); return(synchro);
  }
Para el probador, sólo hay una muleta y no para todos los casos. Esperamos hasta que lo arreglen.
 
tol64:

Eso es, lo tengo. Entonces te he entendido mal. )) Para obtener siempre correctamente todo el historial, la sincronización puede hacerse así:

Para el probador es sólo una muleta, y no para todos los casos. Estamos esperando que lo arreglen.

No, has acertado. La hora del servidor no depende de la zona horaria del ordenador, es la misma para todos y es igual a la última hora fijada en el 'Market Watch'.

Cuando el mercado se cierra (la negociación termina) en un servidor determinado, no deben activarse las paradas hasta la reapertura del siguiente mercado en una nueva semana. En su caso, esto no parece ser así. Las cotizaciones ya han dejado de entrar en el terminal, pero siguen siendo procesadas en el servidor y se activan las paradas fijas. En algunas empresas de corretaje, los stops no se activan por el mercado, sino por el precio fijado en el stop. No se trata de un mecanismo de mercado, sino de uno de "cocina".

Lo que dije sobre las posibles operaciones perdidas, pues bien, si su reloj está atrasado 2 minutos, entonces las operaciones realizadas en estos últimos 2 minutos no caerán en el historial porque la hora del servidor se calcula con la hora local y también estará atrasada por los mismos 2 minutos.

En cuanto al probador, no está claro qué le molesta, porque todo esto se simula allí y la hora local es igual a la del servidor.

 
MetaDriver:

OK, gracias Nikolai, y por cierto, ¡Feliz cumpleaños a ti...!

Lo he desenterrado,

Skype y en medio de la noche te acordarás del cumpleaños de un conocido (como la publicidad :)

Gracias por la tarta, es muy bonita, pero las velas son un poco difíciles de digerir :o)

 
Valmars:

No, tienes razón. La hora del servidor es independiente de la zona horaria del ordenador, es la misma para todos y es igual a la última hora registrada en el 'Market Watch'.

Cuando el mercado se cierra (la negociación termina) en un servidor determinado, no deben activarse las paradas hasta la reapertura del siguiente mercado en una nueva semana. En su caso, esto no parece ser así. Las cotizaciones ya han dejado de entrar en el terminal, pero siguen siendo procesadas en el servidor y se activan las paradas fijas. En algunas empresas de corretaje, los stops no se activan por el mercado, sino por el precio fijado en el stop. No se trata de un mecanismo de mercado, sino de uno de "cocina".

No, todo ha funcionado correctamente en el servidor ( cuenta demo MQ). Es decir, las paradas se activan cuando no estoy conectado. Pero cuando me conecté, el mercado ya estaba cerrado. En la ventana de Market Watch se registró la hora del último tick antes de que se cortara mi conexión. Cuando solicité el historial de operaciones especificando TimeCurrent() como segundo valor, no obtuve todo el historial. Aunque la ayuda de TimeCurrent() dice que:

... El valor de la hora se genera en el servidor comercial y no depende de la configuración de la hora en el ordenador del usuario.

Es decir, entiendo que esta función debe devolver el valor de la última llegada de cotización de uno de los instrumentos en la ventana de Market Watch desde el servidor aunque se haya cortado la conexión y ésta se haya realizado cuando el mercado ya estaba cerrado. En mi caso, esto no sucedió y no obtuve toda la historia. No lo sé, no se menciona en la ayuda.

Y lo que dije sobre las posibles operaciones perdidas, pues bien, si tu reloj va con 2 minutos de retraso, las operaciones realizadas en esos últimos 2 minutos no pasarán al historial, porque la hora del servidor se calcula con la hora local y también irá con los mismos 2 minutos de retraso.

En este caso, si quieres todo el historial, puedes simplemente añadir un número mayor para un día antes y será una garantía de que todas las ofertas serán seleccionadas. :)

En cuanto al probador, no está claro lo que no te conviene, porque ahí está todo simulado y el local es igual al servidor.

Pero en el probador, hay un error con la función HistoryDealsTotal(), y aparece en el modo de visualización. El tiempo se modela correctamente allí. Sólo una muleta ayuda en algunos casos.