Errores, fallos, preguntas - página 548

 
ivandurak:

Buenas noches. Estoy empezando a verlo bien. Parece que es un error claro. Cito el código de abajo, si comento una línea (está marcada), parece que funciona, no entiendo cuál es el problema. No he encontrado nada en la documentación sobre este tema.

No has asignado la matriz Raznica. Se declara pero no se le asigna memoria, al mismo tiempo no es un buffer indicador (la memoria para los buffers se asigna automáticamente).

Aquí:

   SetIndexBuffer(0,BaseMaBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,MaForMaBuffer,INDICATOR_DATA);

le dices al compilador que los arrays BaseMaBuffer y MaForMaBuffer son buffers indicadores. Las otras matrices deben ser asignadas a través de

ArrayResize()
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
Усреднение ценовых рядов без дополнительных буферов для промежуточных расчетов
  • 2010.10.25
  • Nikolay Kositsin
  • www.mql5.com
Статья о традиционных и не совсем традиционных алгоритмах усреднения, упакованных в максимально простые и достаточно однотипные классы. Они задумывались для универсального использования в практических разработках индикаторов. Надеюсь, что предложенные классы в определенных ситуациях могут оказаться достаточно актуальной альтернативой громоздким, в некотором смысле, вызовам пользовательских и технических индикаторов.
 
ivandurak:

Buenas noches. Acabo de empezar a investigarlo. Parece ser un error obvio. Cito el código de abajo, si comento una línea de abajo (está marcada) entonces parece que funciona - no entiendo cuál es el problema. La situación puede evitarse especificando un tamaño explícito para la matriz Raznica[]. No he encontrado nada en la documentación sobre este tema.

No hay ningún error. Debe especificar el tamaño de las matrices dinámicas mediante la opción

int  ArrayResize(
   void  array[],              // массив, переданный по ссылке
   int   new_size,             // новый размер массива
   int   reserve_size=0        // резервное значение размера (избыточное)
   );

La función sólo puede aplicarse a matrices din ámicas, pero hay que tener en cuenta que las matrices dinámicas asignadas como búferes indicadores por la función SetIndexBuffer() no pueden cambiar de tamaño. En el caso de los búferes indicadores, todas las operaciones de redimensionamiento son realizadas por el subsistema de ejecución del terminal.


 
Lo tengo, gracias por la paliza inteligente. Otra pregunta, si se redimensiona un array, ¿qué pasa con los datos? ¿Y también cambiar la dirección de indexación como en las series temporales es posible sólo para el array dinámico?
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
Документация по MQL5: Основы языка / Типы данных / Объект динамического массива
  • www.mql5.com
Основы языка / Типы данных / Объект динамического массива - Документация по MQL5
 
ivandurak:
Lo tengo, gracias por la paliza inteligente. Otra pregunta, si el array se redimensiona, ¿qué pasará con los datos? ¿Y es posible cambiar el sentido de la indexación como en las series temporales sólo en una matriz dinámica?

Los datos permanecerán en su lugar, si se reduce y luego se restaura, es incierto (el resultado es indefinido).

Por la forma de indexar la dirección sólo cambia la referencia del índice, el array se distribuye en la misma dirección.

Es decir, los datos no pueden ser desplazados por la re-partición de la matriz.

 

Esto ya ha sido reportado, pero el probador sigue restableciendo el valor del depósito inicial definido por el usuario en 10.000 dólares.

El conjunto de valores iniciales disponibles está bastante torcido. Le añadiría al menos 1.000 dólares.

construir 523

Win XP

 
¿Fue así, o se rompió algo... En general, se permite el acceso libre al método protegido en los no descendientes
#include <Arrays/List.mqh>
//---------------------------------------
class CBasket;

class CFruit: public CObject {
private:
        double _weight;
protected:
        double GetWeight(){return _weight;}     
public:
        CFruit(double weight){_weight = weight;};
        ~CFruit(){};
};
//---------------------------------------
class CBasket {
private:
        CList _fruits;
protected:
public:
        CBasket(){};
        ~CBasket(){};
        double Weight() {
                double weight = 0;
                for(CFruit* f = _fruits.GetFirstNode(); f != NULL; f = _fruits.GetNextNode()) {
                        weight += f.GetWeight(); //свободный вызов protected метода другого класса
                }
                return weight;
        }
        
        void Attach(CFruit* f) {
                _fruits.Add(f);
        }
};
//---------------------------------------
int OnInit() {
        CBasket* b = new CBasket();
        
        CFruit* f1 = new CFruit(3.5);
        CFruit* f2 = new CFruit(6.5);
        b.Attach(f1);
        b.Attach(f2);
        Print(b.Weight());
      
   return(0);
}
//---------------------------------------
 

Después de la optimización, el archivo de resultados no se puede abrir,

Compilación 527 + Office 2007

El registro de errores contiene los siguientes datos


Error XML en la "Tabla"
Causa: Valor erróneo.
Archivo: C:\NDragon\Ndesktop\NReportOptimizer-957640.xml
Grupo: Celular
Etiqueta: Datos
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Error XML en la "Tabla".
Causa: Valor erróneo
Archivo: C:\NDragon\Ndesktop\NReportOptimizer-957640.xml
Grupo: Celular
Etiqueta: Datos
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Error XML en la "Tabla".
Causa: Valor erróneo
Archivo: C:\NDragon\Ndesktop\NReportOptimizer-957640.xml
Grupo: Celular
Etiqueta: Datos
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Error XML en la "Tabla".
Causa: Valor erróneo
Archivo: C:\NDragon\Ndesktop\NReportOptimizer-957640.xml
Grupo: Celular
Etiqueta: Datos
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

Error XML en la "Tabla".
Causa: Valor erróneo
Archivo: C:\NDragon\Ndesktop\NReportOptimizer-957640.xml
Grupo: Celular
Etiqueta: Datos
Значение: 179769313486231570000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000.0000

etc.

 

Creo que está recibiendo un valor vacío.

Puede leer

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

VALOR_VACÍO

Valor vacío en la memoria intermedia del indicador

DBL_MAX

DBL_MAX

Valor máximo que puede ser representado por el tipo doble

1.7976931348623158e+308

Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
Документация по MQL5: Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы
  • www.mql5.com
Стандартные константы, перечисления и структуры / Именованные константы / Прочие константы - Документация по MQL5
 
Vigor:
¿Fue así, o se rompió algo... De todos modos, se permite acceder libremente al método protegido en los no descendientes

Gracias por el post, error corregido, el arreglo irá en la próxima build.
 
Karlson:

Creo que está recibiendo un valor vacío.

Puede leer

https://www.mql5.com/ru/docs/constants/namedconstants/otherconstants

VALOR_VACÍO

Valor vacío en la memoria intermedia del indicador

DBL_MAX

DBL_MAX

Valor máximo que puede ser representado por el tipo doble

1.7976931348623158e+308

¿Y cómo pueden entrar valores vacíos en el archivo? En la ventana del probador hay resultados de optimización normales.