Discussione sull’articolo "Operazioni con matrici e vettori in MQL5" - pagina 2

 
Rashid Umarov #:
C'è, leggete l'articolo .

L'articolo copia un array multidimensionale, ma a voi serve un array monodimensionale!

 
Ciao a tutti. Voglio studiare l'indicatore ma non so da dove iniziare.
 

Non capisco perché non puoi semplicemente aiutare, mostrare un esempio - questo è lo scopo della discussione dell'articolo - triste.

In generale, ho deciso che solo attraverso un vettore è possibile - passare un array lì, e poi avvitarlo a una matrice, ma finora non sono nemmeno arrivato al punto di come piegarlo (da un vettore è possibile fare una matrice con un numero specificato di colonne, come se trasformarlo?), e non il fatto che è possibile, quindi ho un crash.

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)      

Naturalmente allego il codice

//+------------------------------------------------------------------+
//|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"
//+------------------------------------------------------------------+
//| Funzione di avvio del programma di script|
//+------------------------------------------------------------------+
void OnStart()
  {
   matrix target;
   int count=1000;
   target.Init(count, 1);
   vector V_Target;/Vettore per ottenere una matrice con gli obiettivi e trasferirla in una matrice
   int arr_Target[];
   ArrayResize(arr_Target,count);
   int T_Rand=0;//Scriveremo un testo casuale
   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, a me funziona tutto. Ecco il tuo script, leggermente modificato:

//+------------------------------------------------------------------+
//| Funzione di avvio del programma di 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;
     }
//--- vettore
   vector target_vc;
   target_vc.Assign(target_arr);
//--- matrice
   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);
  }
//+------------------------------------------------------------------+


Log:

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, a me funziona tutto. Ecco il tuo script, leggermente modificato:


Log:

Grazie. Sì, so che la /n nella stampa causa l'arresto anomalo, ma non so cosa significhi il ":".

Grazie - l'ho letto stamattina, ma non l'ho provato. Ma si scopre che verrà consumata ancora molta memoria - diciamo che abbiamo raccolto i dati in un array monodimensionale, poi dobbiamo metterli in un vettore, poi in una matrice - già 3 entità ripetute, il che non va bene. Perché non possiamo trasferire immediatamente un array monodimensionale in una matrice?

 

Non riesco a capire:

1. Come trasferire una matrice in un array

2. Come leggere un valore specifico nella matrice e come scriverlo con l'indicazione di riga e colonna.

Ho letto l'articolo più di una volta - forse non capisco la formulazione, ma il fatto è che ci sono delle domande.

 
Aleksey Vyazmikin #:

Grazie. Sì, so che /n nella stampa causa l'arresto anomalo, ma non so cosa significhi ":".

Grazie per il trasferimento della matrice - l'ho letto stamattina, ma non l'ho provato. Ma si scopre che verrà consumata ancora molta memoria - diciamo che abbiamo raccolto i dati in un array monodimensionale, poi dobbiamo metterli in un vettore, poi in una matrice - già 3 entità ripetute, il che non va bene. Perché non possiamo trasferire immediatamente un array monodimensionale in una matrice?

Non lo so, credo che lo sviluppatore lo sappia meglio.... E perché non si possono raccogliere immediatamente i dati in una matrice, aggirando la catena "array-vettore-matrice"? ))

 
Denis Kirichenko #:

Non lo so, forse lo sviluppatore ne sa di più.... Perché non è possibile raccogliere i dati in una matrice, evitando la catena "array-vettore-matrice"? ))

Finora non ho capito come riempire la matrice direttamente con le celle e come leggere da essa.

In generale, leggo i dati da un file bin in un array - è un esempio - volevo lavorare con esso come con una matrice, penso che all'inizio ci fosse l'opportunità di leggere una matrice dal file, ma ora non vedo tale opportunità nelle istruzioni.

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

Finora non ho capito come riempire direttamente la matrice cella per cella e come leggere da essa.

Vedere l'esempio della moltiplicazione di matrici in OpenCL

 
Oppure cercate nell'articolo MatrixSetValues, tutto è in bella vista.