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

 
Come si ottiene una colonna da una matrice?
 
Aleksey Vyazmikin #:

Non si tratta di un vettore, ma di una matrice, ho il codice di cui sopra

Dovete capirlo da soli o convincere il compilatore. Vedere gli esempi, leggere.


 
Aleksey Vyazmikin #:
Come si ottiene una colonna da una matrice?

È possibile ottenere un vettore da una matrice utilizzando Col

Cosa si intende per "estrarre"? Rimuovere?

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

È possibile ottenere un vettore da una matrice utilizzando Col

Cosa si intende per "togliere"? Rimuovere?

Eliminarlo in termini di conversione in qualcosa con cui lavorare.

Ho mostrato sopra il codice che ho fallito con Col, era una matrice, non un vettore, come hai scritto tu.

 
Dovete riposare e rileggere tutte le domande di questa discussione domani.
 
Rashid Umarov #:
Dovete riposare e rileggere tutte le vostre domande in questo osbud domani.

Grazie per il vostro interesse!

La maggior parte delle domande sono state risolte con il vostro aiuto.

Aspetterò fino a domani, forse potrete rispondere alla mia domanda più tardi.

 
Rashid Umarov #:

Nessuno legge, ma sono disposti a sostenere. Mi sembra di averti visto nel thread sull'apprendimento automatico? Se è così, dovresti capire cosa c'è scritto nell'articolo.

Credo di non aver capito bene. Perché un elemento della matrice ha 3 valori. È una matrice tridimensionale. Perché nella guida il vettore è un array monodimensionale e la matrice in questo esempio è rappresentata da un array tridimensionale.
ZY, succede)))) nell'esempio ci sono 3 righe e 4 colonne)))) matrice))))))
 

Probabilmente c 'è un piccolo errore:

//--- copia della matrice
  matrix a= {{2, 2}, {3, 3}, {4, 4}};
  matrix b=a+2;
  matrix c;
  Print("matrix a \n", a);
  Print("matrix b \n", b);
  c.Assign(b);
  Print("matrix c \n", a);
  /*
matrice a
[[2,2]
[3,3]
[4,4]]
matrice b
[[4,4]
[5,5]
[6,6]]
 matrice c
 [[2,2]
 [3,3]
 [4,4]]
  */

Dovrebbe essere così:

//--- copia della matrice
  matrix a= {{2, 2}, {3, 3}, {4, 4}};
  matrix b=a+2;
  matrix c;
  Print("matrix a \n", a);
  Print("matrix b \n", b);
  c.Assign(b);
  Print("matrix c \n", с);
  /*
matrice a
[[2,2]
[3,3]
[4,4]]
matrice b
[[4,4]
[5,5]
[6,6]]
 matrice c
 [[4,4]
 [5,5]
 [6,6]]
  */
 

Un altro piccolo errore nella sezione"Copia delle serie temporali in matrici o vettori":

//--- elenco di caratteri da calcolare
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- matrice e vettore per ottenere i prezzi Chiudi
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- ottenere i prezzi di chiusura in un vettore
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- inserire il vettore nella matrice delle serie temporali
      rates.Col(close, i);
      PrintFormat("%d. %s: %d Prezzi di chiusura aggiunti alla matrice"., i+1, symbols[i], close.Size());
      //--- emette i primi 20 valori del vettore per il debugging
      int  digits=(int)SymbolInfoInteger(symbols[i], SYMBOL_DIGITS);
      Print(VectorToString(close, 20, digits));
     }
    else
     {
      Print("vector.CopyRates(%d,COPY_RATES_CLOSE) failed. Error ", symbols[i], GetLastError());
      return;
     }
   }

Probabilmente è meglio così:

//--- elenco di caratteri da calcolare
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- matrice e vettore per ottenere i prezzi Chiudi
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- ottenere i prezzi di chiusura in un vettore
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- inserire il vettore nella matrice delle serie temporali
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d Prezzi di chiusura aggiunti alla matrice"., i + 1, symbols[i],close_vc.Size());
         //--- emette i primi 20 valori del vettore per il debugging
         int  digits = (int)::SymbolInfoInteger(symbols[i], SYMBOL_DIGITS); ::Print(VectorToString(close_vc, 20, digits));
         }
      else
         {
         ::PrintFormat("vector.CopyRates(%s,COPY_RATES_CLOSE) failed. Error %d", symbols[i], ::GetLastError());
         return;
         }
      }
 
Denis Kirichenko #:

Probabilmente c 'è un piccolo errore:

Dovrebbe essere così:

Grazie, corretto