Discussion de l'article "Opérations sur les Matrices et les Vecteurs en MQL5" - page 2

 
Rashid Umarov #:
Il y en a un, lisez l'article .

L'article copie un tableau multidimensionnel, mais vous avez besoin d'un tableau unidimensionnel !

 
Bonjour à tous. Je souhaite étudier l'indicateur mais je ne sais pas par où commencer.
 

Je ne comprends pas pourquoi vous ne pouvez pas simplement aider, montrer un exemple - c'est à cela que sert la discussion de l'article - c'est triste.

En général, j'ai décidé que ce n'est possible qu'à travers un vecteur - y passer un tableau, et ensuite le visser à une matrice, mais jusqu'à présent je ne suis même pas arrivé au point de savoir comment le plier (à partir d'un vecteur, il est possible de faire une matrice avec un nombre spécifié de colonnes, comme si on le transformait ?), et pas au fait que c'est possible, donc j'ai eu un plantage.

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)      

Je joins le code bien sûr

//+------------------------------------------------------------------+
//|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"
//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   matrix target;
   int count=1000;
   target.Init(count, 1);
   vector V_Target;//Vecteur permettant d'obtenir un tableau avec des cibles et de le transférer dans une matrice
   int arr_Target[];
   ArrayResize(arr_Target,count);
   int T_Rand=0;//Nous écrirons un message aléatoire
   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, tout fonctionne pour moi. Voici votre script, légèrement modifié :

//+------------------------------------------------------------------+
//| Fonction de démarrage du programme de script|
//+------------------------------------------------------------------+
void OnStart()
  {
   const int count = 20;
   ::MathSrand(1);
//--- tableau
   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;
     }
//--- vecteur
   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, tout fonctionne pour moi. Voici votre script, légèrement modifié :


Log :

Merci. Oui, je sais que le /n dans l'impression provoque le plantage, mais je ne sais pas ce que signifie le " :".

Merci pour le transfert de la matrice - je l'ai lu ce matin, mais je ne l'ai pas encore essayé. Mais il s'avère que beaucoup de mémoire sera consommée - disons que nous avons collecté des données dans un tableau unidimensionnel, puis nous devons les mettre dans un vecteur, puis dans une matrice - déjà 3 entités répétées, ce qui n'est pas bon. Pourquoi ne pouvons-nous pas transférer immédiatement un tableau unidimensionnel dans une matrice ?

 

Je ne comprends pas :

1. Comment transférer une matrice dans un tableau

2. Comment lire une valeur spécifique dans la matrice et comment l'écrire avec l'indication de la ligne et de la colonne.

J'ai lu l'article plus d'une fois - peut-être que je ne comprends pas la formulation, mais le fait est là - il y a des questions.

 
Aleksey Vyazmikin #:

Je vous remercie. Oui, je sais que /n dans l'impression provoque le crash, mais je ne sais pas ce que signifie " :".

Merci pour le transfert de la matrice - je l'ai lu ce matin, mais je ne l'ai pas encore essayé. Mais il s'avère que beaucoup de mémoire sera consommée - disons que nous avons collecté des données dans un tableau unidimensionnel, puis nous devons les mettre dans un vecteur, puis dans une matrice - déjà 3 entités répétées, ce qui n'est pas bon. Pourquoi ne pouvons-nous pas transférer immédiatement un tableau unidimensionnel dans une matrice ?

Je ne sais pas, je suppose que le développeur le sait mieux que moi.... Et pourquoi ne pouvez-vous pas collecter immédiatement des données dans une matrice, en contournant la chaîne "tableau-vecteur-matrice" ? ))

 
Denis Kirichenko #:

Je ne sais pas, peut-être que le développeur le sait mieux.... Pourquoi ne pas simplement collecter les données dans une matrice, en contournant la chaîne "tableau-vecteur-matrice" ? ))

Jusqu'à présent, je n'ai pas compris comment remplir la matrice directement par les cellules et comment lire les données.

En général, je lis les données d'un fichier bin dans un tableau - c'est un échantillon - je voulais travailler avec lui comme avec une matrice, je pense qu'il y avait une possibilité au début de lire une matrice à partir du fichier, mais maintenant je ne vois pas une telle possibilité dans les instructions.

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

Jusqu'à présent, je n'ai pas compris comment remplir directement la matrice cellule par cellule et comment la lire.

Voir l'exemple de multiplication de matrice dans OpenCL

 
Vous pouvez également consulter l'article MatrixSetValues, tout y est clair.