Discussão do artigo "Operações com Matrizes e Vetores em MQL5" - página 5

 
Então, como você obtém uma coluna de uma matriz?
 
Aleksey Vyazmikin #:

Não é um vetor, é uma matriz, tenho o código acima

Você precisa descobrir isso sozinho ou convencer o compilador. Veja exemplos, leia.


 
Aleksey Vyazmikin #:
Então, como você obtém uma coluna de uma matriz?

Você pode obter um vetor de uma matriz usando Col

O que você quer dizer com "retirar"? Remover?

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

Você pode obter um vetor de uma matriz usando Col

O que você quer dizer com "retirar"? Remover?

Retirar em termos de convertê-lo em algo com que se possa trabalhar.

Mostrei acima o código que falhou com o Col, que era uma matriz, não um vetor, como você escreveu.

 
Você precisa descansar e reler todas as suas perguntas nesta discussão amanhã.
 
Rashid Umarov #:
Você precisa descansar e reler todas as suas perguntas neste osbud amanhã

Obrigado por sua preocupação!

A maioria das perguntas foi resolvida com sua ajuda.

Vou esperar até amanhã, talvez você possa responder minha pergunta mais tarde.

 
Rashid Umarov #:

Ninguém lê, mas estão dispostos a apoiar. Acho que o vi no tópico sobre aprendizado de máquina? Se sim, você deve entender o que está escrito no artigo.

Acho que não entendi completamente. Por que um elemento de matriz tem 3 valores. É uma matriz tridimensional. Por que na ajuda o vetor é uma matriz unidimensional e a matriz nesse exemplo é representada por uma matriz tridimensional?
ZY, it happens)))) no exemplo há 3 linhas e 4 colunas)))) matrix))))))
 

Provavelmente há um pequeno erro aqui:

//--- cópia de matriz
  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);
  /*
matriz a
[[2,2]
[3,3]
[4,4]]
matriz b
[[4,4]
[5,5]
[6,6]]
 matrix c
 [[2,2]
 [3,3]
 [4,4]]
  */

Deveria ser assim:

//--- cópia de matriz
  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", с);
  /*
matriz a
[[2,2]
[3,3]
[4,4]]
matriz b
[[4,4]
[5,5]
[6,6]]
 matriz c
 [[4,4]
 [5,5]
 [6,6]]
  */
 

Outro pequeno erro na seção"Copying timeseries to matrix or vector":

//--- lista de caracteres a serem calculados
  string symbols[]= {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
  int size=ArraySize(symbols);
//--- matriz e vetor para obter preços Fechar
  matrix rates(InBars, size);
  vector close;
  for(int i=0; i<size; i++)
   {
    //--- obter preços de fechamento em um vetor
    if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
     {
      //--- inserir o vetor na matriz de séries temporais
      rates.Col(close, i);
      PrintFormat("%d. %s: %d Preços de fechamento adicionados à matriz.", i+1, symbols[i], close.Size());
      //--- gera os primeiros 20 valores do vetor para depuração
      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;
     }
   }

Provavelmente seria melhor assim:

//--- lista de caracteres a serem calculados
   string symbols[] = {"EURUSD", "GBPUSD", "USDJPY", "USDCAD", "USDCHF"};
   int size =::ArraySize(symbols);
//--- matriz e vetor para obter preços Fechar
   matrix rates_mx(InBars, size);
   vector close_vc;
   for(int i = 0; i < size; i++)
      {
      ::ResetLastError();
      //--- obter preços de fechamento em um vetor
      if(close_vc.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars))
         {
         //--- inserir o vetor na matriz de séries temporais
         rates_mx.Col(close_vc, i);
         ::PrintFormat("%d. %s: %d Preços de fechamento adicionados à matriz.", i + 1, symbols[i],close_vc.Size());
         //--- gera os primeiros 20 valores do vetor para depuração
         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 #:

Provavelmente há um pequeno erro aqui:

Deveria ser assim:

Obrigado, corrigido