Errores, fallos, preguntas - página 465

 
uncleVic:
Escribe al CD sobre esto también. Como "no todo lo que está en la revisión puede ser elegido en el probador".
No, no hay marcha atrás. Tengo dos terminales abiertos - Alpari, y MK, y cambié de un lado a otro, pero en este último me olvidé de añadir EURGBP a la visión general del mercado.
 
marketeer:
No, rebote. Tengo dos terminales abiertos - Alpari, y MK, y cambié de un lado a otro, pero en este último me olvidé de añadir EURGBP a la visión general del mercado.
Eso sucede.
 

Estoy intentando crear un array en el script que se comporte como una serie de indicadores. Es decir, cuando aparece una nueva entrada, todo el array se desplaza hacia atrás y la nueva entrada se hace en una posición nula.

void OnStart()
  {
   int a[];
   int size=5;               // размер массива
   bool flag=true;           // флаг направления индексации
   ArraySetAsSeries(a,flag);  // зададим направление индексации
   ArrayResize(a,size);      // зададим размер массива
//---
   for(int i=0;i<size;i++)  // задаём значения и распечатываем массив
      a[i]=size-i;         // 54321
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
//---
   ArrayResize(a,size-1);     // уменьшаем размер 5432
   ArraySetAsSeries(a,!flag);  // меняем направление индексации 2345
   ArrayResize(a,size);       // возвращаем в исходный размер  2345х
   ArraySetAsSeries(a,flag);   // возвращаем в исходную индексацию х5432   
   a[0]=6;                   // задаём "пустому" нулевому данному значение
//---
   Print("[",a[0],"][",a[1],"][",a[2],"][",a[3],"][",a[4],"]");
   // в результате получаем 64321 вместо нужного 65432
  }

Como se dice, ¿por qué?

Tal vez me equivoque, pero es lo primero que me viene a la cabeza: otro fallo en la optimización del lenguaje.

HZZY También pido a los que quieren desplazar los datos usando bucles que no se molesten. Esto funciona bien para matrices de 5...100...1000..., pero no funcionará para matrices más grandes.

 
Urain:

Estoy intentando crear un array en el script que se comporte como una serie de indicadores. Es decir, cuando aparece una nueva entrada, todo el array se desplaza hacia atrás y la nueva entrada se hace en una posición nula.

Como se dice ¿por qué?


¿Qué pasa si tomamos la clase CArrayInt y usamos un insert para meter datos en ella?
 
uncleVic:
¿Y si tomamos la clase CArrayInt, e insertamos allí los datos?

Me gustaría poder pasar el array mediante parámetros, mientras que el propio array es privado en la clase.

De nuevo, por lo que recuerdo, este método se dedica a desplazar los datos en el bucle, y es bastante lento.

 
Urain:

Estoy intentando crear un array en el script que se comporte como una serie de indicadores. Es decir, cuando aparece una nueva entrada, todo el array se desplaza hacia atrás y la nueva entrada se hace en una posición nula.

Como se dice, ¿por qué?

Tal vez me equivoque, pero es lo primero que me viene a la cabeza: otro fallo en la optimización del lenguaje.

HZZY También pido a los que quieren desplazar los datos usando bucles que no se molesten. Esto funciona bien para matrices de 5...100...1000..., pero no funcionará para matrices más grandes.


En cuanto al tema "ZZZY": ¿no se te va a estropear la memoria con los cambios de tamaño?
 
uncleVic:
En cuanto a "ZZI": ¿sus redimensionamientos no le fragmentan la memoria?

No conozco ninguna otra función (que asigne memoria) en mql5.

HH Y por lo que entendí la dirección de la matriz también es algo puramente virtual.

ZZY Al parecer, no hay que trabajar con la memoria, sino con la virtualización del espacio de direcciones. Y esto también ralentiza el trabajo, el acceso directo es más rápido después de todo.

 
Urain:

Me gustaría poder pasar el array a través de parámetros, mientras que el propio array es privado en la clase.

De nuevo, por lo que recuerdo, este método es sólo para cambiar los datos en un bucle y eso es bastante lento.

Tendré que pensar en mejorar las clases de array (para mí).
 
uncleVic:
Tendría que pensar en mejorar las clases de matriz (para mí).

Sí, una inserción virtual en una posición cero estaría bien. Pero no para mover realmente los datos, pues de lo contrario sería largo e ineficiente.

De todos modos, es malo que no puedas trabajar con la memoria directamente, tiene una buena aceleración de la virtualización, incluso la velocidad de C++ es 1,5 veces más rápida si te diriges a una dirección de celda en lugar de un array.

 
Urain:

Estoy intentando crear un array en el script que se comporte como una serie de indicadores. Es decir, cuando aparece una nueva entrada, todo el array se desplaza hacia atrás y la nueva entrada se sitúa en la posición cero.

ZZZY le pido a los compañeros que quieren aconsejar a mover los datos por el ciclo de no preocuparse, esta opción funciona bien para las matrices de 5 ... 100 ... 1000 ..., pero en la matriz de tamaño más grande es inaceptable.


Pero ¿puedo sugerir que no se mueva todo el conjunto? :)

Array dinámico, los nuevos datos se escriben al final, el tamaño se cambia/memoriza, y la bandera AsSeries sólo cambia la indexación.

Para el orden normal, es N elementos del array, para el "serial" Tamaño-N-1.

Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5