Discusión sobre el artículo "Trabajamos con matrices y vectores en MQL5" - página 2

 
Rashid Umarov #:
Lo hay, lee el artículo .

El artículo copia un array multidimensional, ¡pero tú necesitas uno unidimensional!

 
Hola a todos. Quiero estudiar el indicador pero no se por donde empezar.
 

No entiendo por qué no puede simplemente ayudar, mostrar un ejemplo - para eso es la discusión del artículo - triste.

En general, decidí que sólo a través de un vector es posible - para pasar una matriz allí, y luego atornillarlo a una matriz, pero hasta ahora ni siquiera he llegado al punto de cómo doblarlo (de un vector es posible hacer una matriz con un número especificado de columnas, como si transformarlo?

2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      Access violation at 0x0000000140D77E04 write to 0x00000002CBD3617E
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)         crash -->  0000000140 D77E04 6644896473 FE      mov        [rbx+rsi*2-0x2], r12w
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0A 83 F8FE            cmp        eax, 0xfe
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0D 751 C              jnz        0x140d77e2b
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E0F 4 C3BF7            cmp        r14, rdi
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E12 751 B              jnz        0x140d77e2f
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E14 443865 F0          cmp        [rbp-0x10], r12b
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)                    0000000140 D77E18 7478              jz         0x140d77e92
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      00: 0x0000000140D77E04
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      01: 0x00000001403246C7
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      02: 0x0000000140BCBBC8
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      03: 0x0000000140BCBA81
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      04: 0x0000000140BCB78B
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      05: 0x0000000140BB848B
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      06: 0x0000000140BBA5D1
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      07: 0x0000000140BBA491
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      08: 0x00000000040E06D0
2022.10.08 06:12:48.942 Test_Matrix_02 (EURUSD,H1)      

Adjunto el código por supuesto

//+------------------------------------------------------------------+
//|Test_Matrix_02.mq5
//|Copyright 2022, MetaQuotes Ltd. |
//| https://www.mql5.com
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   matrix target;
   int count=1000;
   target.Init(count, 1);
   vector V_Target;//Vector para obtener un array con objetivos y transferirlo a una matriz
   int arr_Target[];
   ArrayResize(arr_Target,count);
   int T_Rand=0;//Escribiremos un
   for(int i=0; i<count; i++)
     {
     T_Rand=rand();
     if(T_Rand>32767/2)arr_Target[i]=1;
     else arr_Target[i]=0;
     }
   V_Target.Assign(arr_Target);
   if(!target.Col(V_Target,0))
   return ;
   Print("data after Col(V_Target) \n", target);
   
  }
//+------------------------------------------------------------------+
 

Alexei, todo me funciona. Aquí está tu script, ligeramente modificado:

//+------------------------------------------------------------------+
//| Función de inicio del programa de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   const int count = 20;
   ::MathSrand(1);
//--- array
   int target_arr[];
   ::ArrayResize(target_arr, count);
   for(int i = 0; i < count; i++)
     {
      int T_Rand = ::MathRand();
      if(T_Rand > 32767 / 2)
         target_arr[i] = 1;
      else
         target_arr[i] = 0;
     }
//--- vector
   vector target_vc;
   target_vc.Assign(target_arr);
//--- matriz
   matrix target_mx(count, 1);
   if(!target_mx.Col(target_vc, 0))
      return;
   ::Print("data after Col(target_vc) \n", target_mx);
   int rows, cols;
   rows = 4;
   cols = 5;
   if(!target_mx.Reshape(rows, cols))
      return;
   ::Print("data after Reshape \n", target_mx);
  }
//+------------------------------------------------------------------+


Registro:

2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        data after Col(target_vc) 
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        [[0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0]]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        data after Reshape 
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)        [[0,1,0,1,1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,0,1,1,1]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,1,1,1,0]
2022.10.08 20:48:55.335 Test_Matrix_02 (SBER,H1)         [0,0,0,0,0]]
 
Denis Kirichenko #:

Alexei, todo me funciona. Aquí está tu script, ligeramente ajustado:


Registro:

Gracias. Sí, ya sé que el /n en la impresión provoca el fallo, pero no sé qué significa el ":".

Gracias - lo leí esta mañana, pero no lo he probado. Pero resulta que todavía se consumirá mucha memoria - digamos que recogimos datos en una matriz unidimensional, luego tenemos que ponerlos en un vector, luego en una matriz - ya 3 entidades repetidas, lo que no es bueno. ¿Por qué no podemos transferir inmediatamente una matriz unidimensional a una matriz?

 

No lo entiendo:

1. Cómo transferir una matriz a un array

2. Cómo leer un valor específico en la matriz y cómo escribirlo con la indicación de fila y columna.

He leído el artículo más de una vez - tal vez no entiendo la redacción en el mismo, pero aquí está el hecho - hay preguntas.

 
Aleksey Vyazmikin #:

Gracias. Sí, sé que /n en la impresión provoca el fallo, pero no sé qué significa ":".

Gracias por la transferencia de matriz - lo leí esta mañana, pero no lo he probado. Pero resulta que todavía se consumirá mucha memoria - digamos que recogimos datos en una matriz unidimensional, luego tenemos que ponerlos en un vector, luego en una matriz - ya 3 entidades repetidas, lo que no es bueno. ¿Por qué no podemos transferir inmediatamente una matriz unidimensional a una matriz?

No sé, supongo que el desarrollador sabe mejor.... ¿Y por qué no se puede recoger inmediatamente los datos en una matriz, pasando por alto la cadena "array-vector-matriz"? ))

 
Denis Kirichenko #:

No lo sé, quizás el desarrollador lo sepa mejor.... ¿Por qué no puedes simplemente recoger los datos en una matriz, evitando la cadena "array-vector-matriz"? ))

Hasta ahora no entiendo como llenar la matriz directamente por celdas y como leer de ella.

En general, leo los datos del archivo bin en array - es una muestra - quería trabajar con él como con una matriz, creo que había una oportunidad al principio para leer una matriz desde el archivo, pero ahora no veo tal oportunidad en las instrucciones.

Документация по MQL5: Методы матриц и векторов
Документация по MQL5: Методы матриц и векторов
  • www.mql5.com
Методы матриц и векторов - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Aleksey Vyazmikin #:

Hasta ahora no entiendo como rellenar celda por celda la matriz directamente y como leer de ella.

Ver el ejemplo sobre la multiplicación de matrices en OpenCL

 
O busca en el artículo MatrixSetValues, todo está a la vista.