Errores, fallos, preguntas - página 1845

 
Nikolai Semko:
Pregunta: por favor, pregunte a los desarrolladores.
Se echa mucho en falta la posibilidad de guardar algunas variables o arrays al cambiar de marco temporal, para que no se produzca su reinicialización. ¿O se puede hacer de alguna manera a través deOnDeinit definiendo un código de razón REASON_CHARTCHANGE?
Es que tengo cálculos bastante engorrosos e independientes del tiempo en el cuerpo de mi programa y no quiero recalcularlos cada vez. Creo que echamos en falta algún tipo especial de variables globales, que no se reinicien cuando cambie el marco temporal. He aprendido a hacerlo con variables simples sin variables globales en el terminal, pero con estructuras o arrays no tengo ni idea de cómo hacerlo, y parece que esa posibilidad simplemente no existe. Por supuesto, puedes utilizar recursos, pero es muy confuso.
Intenta utilizar un indicador. Las variables globales no se reinicializan allí al cambiar de TF (que yo recuerde). O a través de un archivo.
 
Konstantin:

¿Cómo?

Así:

struct MyArray
{
   double buff[];
   
   MyArray()
   {
   }
   MyArray( int n )
   {
      ArrayResize( buff, n );
   }
   MyArray( const MyArray& other )
   {
      ArrayCopy( buff, other.buff );
   }
   ~MyArray()
   {
      ArrayFree( buff );
   }
   
   void operator=( const MyArray& other )
   {
      ArrayCopy( buff, other.buff );
   }
   
   void assign( int n, const double val = 0.0 )
   {
      ArrayResize( buff, n );
      ArrayInitialize( buff, val );
   }
};

MyArray func()
{
   MyArray myArray;
   
   // Заполняем массив.
   
   return myArray;
}
 
Koldun Zloy:

Por ejemplo, así:

Eso no es lo que se ha preguntado, pero tal vez le convenga al autor de la pregunta, a la que hay una respuesta inequívoca: NINGUNA.

No hay rechazo en el Servicio de Atención al Cliente

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

Bichos, errores, preguntas

fxsaber, 2017.04.02 10:34

¿Es posible compensar la ausencia de punteros a un array introduciendo la posibilidad de devolver un array con una función?
int[] Func()
{
  int a[] = {1, 2, 3};

  return(a);
}

Print(Func()[1]); // 2

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

Bichos, errores, preguntas

fxsaber, 2017.04.01 10:20

Hace tiempo , se añadió el operador [] al tipo de cadena
string Str = "AB C";
Print(CharToString(Str[1])); // B


¿Es posible, por parte de los desarrolladores, añadir un operador = para las matrices?

int a[], b[];
a = b; // ArrayCopy(a, b);


Dado que no hay punteros, un operador de este tipo haría que el lenguaje fuera más flexible, encontrando situaciones en las que sería MUY útil.

 
Alexey Kozitsyn:
Intenta usar un indicador. Allí las variables globales no se reinicializan cuando el TF cambia (que yo recuerde). O a través de un archivo.

Es al revés:

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

Inicialización de las variables globales del programa y otros conocimientos útiles.

Artyom Trishkin, 2016.12.05 20:27

Respuesta recibida de SD:


Creo que se puede utilizar con seguridad esta característica de los EAs de variables globales.


 
Alexey Kozitsyn:
Intenta usar un indicador. Las variables globales no se reinicializan cuando se cambia el TF (que yo recuerde). O a través de un archivo.

Para esto uso el indicador. Se reinicializan. El archivo no es una opción en absoluto, es lento y es difícil proporcionar una buena sincronización. En este caso sería mejor utilizarResourceCreate. Pero todo esto no es muy conveniente. Si tengo decenas de arrays, algunos de ellos con varios Mb, debo escribir al menos dos funciones de lectura y escritura, crear un manejador enOnDeinit. Ya he experimentado con todo ello, me he enfrentado al problema de la sincronización, porque los recursos y los archivos tienen sus propias vidas separadas en el multithreading. Por qué hacer una joroba cuando no hay suficiente posibilidad de no reiniciar en cierto evento, en mi caso el cambio de horario.
 
Nikolai Semko:

Indicador y lo uso. Reiniciado. El archivo no es una opción en absoluto, es lento y es difícil proporcionar una sincronización de calidad. En este caso sería mejor utilizarResourceCreate. Pero todo esto no es muy conveniente. Si tengo decenas de arrays, algunos de ellos con varios Mb, debo escribir al menos dos funciones de lectura y escritura, crear un manejador enOnDeinit. Ya he experimentado con todo ello, me he enfrentado al problema de la sincronización, porque los recursos y los archivos tienen sus propias vidas separadas en el multithreading. No sé por qué me he molestado en hacerlo cuando simplemente quiero evitar la reinicialización de algún evento concreto, en mi caso era un cambio de horario.
La respuesta está aquí.
 
Artyom Trishkin:

Es exactamente lo contrario:



Gracias, ¡no sabía lo del EA!
Pero hombre, ¡si necesito ese chip en el indicador!

 
Koldun Zloy:

Por ejemplo, así:


gracias por el ejemplo, pero crear un objeto de un tipo complejo a causa de un solo array es exactamente lo que no quiero, todo parece código innecesario ))
 
fxsaber:

Eso no es lo que se ha preguntado, pero tal vez le convenga al autor de la pregunta, a la que hay una respuesta inequívoca: NINGUNA.

No hay negativa a hacerlo en Service Desk



esperemos que introduzcan esta característica, aunque lo más normal sería introducir un puntero para arrays
 
Artyom Trishkin:

Es exactamente lo contrario:

Oh, hombre... Sí, me guié exactamente por tu post, sólo que me confundí:)