Errores, fallos, preguntas - página 2570

 
Nikolai Semko:

la cadena está vacía, como si no existiera, es decir, ni siquiera se asigna memoria.

Esto se observa para otros tipos. Si se declara una variable, significa que la memoria ya está asignada.
Pero en realidad, una cadena no es un tipo primitivo, sino un tipo de referencia.

¿Cómo no iba a serlo? La memoria para el objeto string se asigna en el heap y la dirección de memoria donde comienza el texto es 0x00
 
Igor Makanu:

no puedo averiguar cómo comprobarPrintFormat

Nota

PrintFormat() no se ejecuta en el probador de estrategias en modo de optimización.

¿Alguna idea?

¿Qué talStringFormat y la cadena resultante en un archivo? (para que cada pase cree su propio archivo en la carpeta compartida - para que el probador no los sobrescriba).

 
Vladimir Simakov:
¿Cómo no iba a serlo? La memoria para el objeto cadena se asigna en el heap, pero la dirección de memoria en la que comienza el texto es 0x00.

La memoria se asigna sólo para el nombre y la referencia, pero no para el objeto en sí, ya que aún no existe. Este no es el caso de los tipos primitivos, la memoria se asigna allí en el momento en que se crea la variable, incluso sin inicialización.
No quiero molestarme con la terminología. De todos modos, todo el mundo se entiende.
Todo esto es obvio.

 
Vladimir Karputov:

¿Qué talStringFormat y la cadena resultante en un archivo? (cree un archivo diferente para cada pase en la carpeta compartida, para que el probador no los sobrescriba).

buena opción, la probaré

ZS: código de nuevo reescrito para trabajar más rápido en el optimizador (los resultados fueron 5h, ahora 1,5h !!!)

¡¡¡ahora me encontré con printf() en la ayuda, y decidí revisar todas mis impresiones, donde necesito reemplazar.... lo reemplacé y la optimización se convirtió en 22h .... encontré donde me equivoqué, pero por supuesto inmediatamente pensé que todo estaba en printf() !!!

)))


He intentado comprobar printf() en el optimizador:

int xx=10;
void OnTick()
{  printf("1/x = %f",1/(xx--));
....

hasta ahora he conseguido lo que esperaba:

2019.09.20 11:29:16.611 Core 1 pase genético (0, 607) probado con el error "error crítico de ejecución 503 en la función OnTick (división cero, expertos en el módulo)" en 0:00:00.048


Esperaba que si dice"PrintFormat() no se ejecuta.", entonces debería conseguirlo.

 
He comprobado que la optimización del código acelera la ejecución por un factor de 450 :).
 
Igor Makanu:

buena opción, la probaré

SZY: código reescrito una vez más, para trabajar más rápido en el optimizador (los resultados eran 5h, ahora 1,5 h!!)

Ahora me encontré con printf() en la ayuda, y decidí comprobar todas mis impresiones, donde tengo que reemplazar.... lo sustituí y la optimización se convirtió en 22 horas .... Encontré donde metí la pata, pero por supuesto, de inmediato pensó que la causa de todo en printf() !!!

)))


He intentado comprobar printf() en el optimizador:

hasta ahora he conseguido lo que esperaba:

2019.09.20 11:29:16.611 Core 1 pase genético (0, 607) probado con el error "error crítico de ejecución 503 en la función OnTick (división cero, expertos en el módulo)" en 0:00:00.048


Esperaba que si dice"PrintFormat() no se ejecuta.", entonces debería conseguirlo.

Aha. Y obtener diferente valor de la variable xx en la prueba única y en la optimización.

Sólo la llamada a la función printf no se ejecuta.

 
Slava:

Aha. Y obtener diferente valor de la variable xx en la prueba única y en la optimización.

Sólo la llamada de la función printf no se ejecuta.

Sí, está claro que el usuario también puede hacerlo así

¿pero cómo comprobar printf()?

HH: aunque, si el promotor dice que no está impreso, entonces no tenemos que comprobarlo.

 
Igor Makanu:


¿pero cómo se comprueba printf()?

Compara el tiempo de una sola pasada de la optimización y el tiempo de una sola pasada

 
Slava:

Lo duplicaré:

Foro sobre trading, sistemas de trading automatizados y pruebas de estrategias de trading

Bichos, errores, preguntas

Alexey Kozitsyn, 2019.09.18 09:34

Algunas preguntas sobre la plataforma:

1. ¿se añadirá un rango de negociación permitido para VP a través de MOEX (por ejemplo, EURRUB_TOM)? En este momento no es posible saber con seguridad si se pondrá un límite, ya que no hay acceso a la gama (precios máximos y mínimos posibles). Por favor, añade.

2. ¿Es posible añadir al terminal y al meta-editor un estado de auto-guardado cada N minutos? ¡Muy carente, ya que con una desconexión repentina se vuelve al estado de inicio del programa con pérdida de todos los cambios! ¡Muy estresante!

Sobre el primer punto: ¡comprende que es imposible operar con normalidad si no conoces las limitaciones! ¿Por qué es posible obtener estas limitaciones para algunos instrumentos y no para otros?

 

la ayuda es incorrecta de nuevo, leo:https://www.mql5.com/ru/docs/math/mathmax

Функция возвращает максимальное из двух числовых значений.

double  MathMax(
   double  value1,     // первое число
   double  value2      // второе число
   );

Veo que no hay opciones, función tipo fmax() double , buscando donde puedo haber perdido un valor fraccionario, después de buscar cualquier cosa y todo, hago la prueba:

void OnStart()
{
   long slvl = SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL);
   int sl = 300;
   Print(typename(fmax(slvl,sl)));
}

2019.09.20 18:06:34.194 tst (EURUSD,H1) long

ZS: Respondo enseguida, leo la ayuda hasta el final y veo la frase: "El tipo de valor de retorno corresponde al tipo superior". ...en mi opinión, no es serio, que en el 99% de los casos es suficiente buscar en la ayuda la descripción de la función, que buscar el significado oculto entre líneas - está escrito el tipo de resultado fmin() --> double - así que no hay opciones