matrix A(2, 3); matrix B(3, 2); matrix C = A @ B; // Resultado: matriz C de tamanho [2,2]Multiplicação matricial (matriz × vetor)
matrix M(2, 3); vector V(3); vector R = M @ V; // Resultado: vetor R com 2 elementosMultiplicação matricial (vetor × matriz)
matrix M(2, 3); vector V(1, 2); vector R = V @ M; // Resultado: vetor R com 3 elementosProduto escalar (vetor × vetor)
vector V1(1, 3), V2(1, 3); double r = V1 @ V2; // Resultado: escalar
static vector vector::Random( const ulong size, // tamanho do vetor const double min=0.0, // valor mínimo const double max=1.0 // valor máximo ); static matrix matrix::Random( const ulong rows, // quantidade de linhasм const ulong cols // quantidade de colunas const float min=0.0, // valor mínimo const float max=1.0 // valor máximo );
Nas versões mais recentes do aplicativo móvel MetaTrader 5 para iOS, adicionamos várias funcionalidades úteis para gráficos, além de realizar algumas correções importantes para garantir um funcionamento mais estável do aplicativo.
Instale a versão mais recente do aplicativo e expanda suas possibilidades de negociação:
![]() |
![]() |
matrix<complex<T>> matrix<complex<T>>::TransposeConjugate(void) const;O método retorna uma nova matriz conjugada-transposta, na qual os elementos da matriz original são transpostos e convertidos em seus valores complexos conjugados.
int matrix<T>::CompareEqual(const matrix<T>& mat) constValores retornados:
pip install --upgrade MetaTrader5
Função | Ação |
---|---|
Singular Value Decomposition, algoritmo divide and conquer. Considerado o mais rápido entre os outros algoritmos SVD (função lapack GESDD). |
|
Singular Value Decomposition, algoritmo QR. Considerado o algoritmo clássico de SVD (função lapack GESVD). |
|
Singular Value Decomposition, algoritmo QR com pivotamento (função lapack GESVDQ). |
|
Singular Value Decomposition, algoritmo bissecção (função lapack GESVDX). |
|
Singular Value Decomposition, algoritmo Jacobi de alto nível (função lapack GEJSV). |
|
Singular Value Decomposition, algoritmo Jacobi de baixo nível (função lapack GESVJ). Em alguns casos, calcula valores singulares pequenos e seus vetores singulares com muito mais precisão do que outros subprogramas SVD. |
|
Singular Value Decomposition, algoritmo divide and conquer para matriz bidiagonal (função lapack BDSDC). |
|
Singular Value Decomposition, algoritmo bissecção para matrizes bidiagonais (função lapack BDSVDX). |
|
Cálculo de valores próprios e vetores próprios de uma matriz quadrada comum usando o algoritmo clássico (função lapack GEEV). |
|
Cálculo de valores próprios e vetores próprios de uma matriz simétrica ou hermitiana (complexo-conjugada) usando o algoritmo divide and conquer (funções lapack SYEVD, HEEVD). |
|
Método-função para calcular as contribuições relativas dos componentes espectrais com base nos valores próprios. |
|
Função-método para cálculo de dados reconstruídos e previstos usando componentes espectrais da série temporal de entrada. |
|
Função-método para cálculo das componentes reconstruídas da série temporal de entrada e suas contribuições. |
|
Função-método para cálculo da série temporal reconstruída usando as primeiras component_count componentes. |
Terminal
MQL5
Terminal Web
A atualização estará disponível através do sistema Live Update.
MetaTrader 5 Android
Atualize seus aplicativos móveis para o build 4360 através do Google Play, Huawei AppGallery ou baixe o arquivo APK.
Terminal
MetaTester
Terminal Web
MetaEditor
Terminal
MQL5
MetaTrader 5 Web Terminal
vector<double/complex> operator[](const int i) const; vector<double/complex> operator[](const ulong i) const;Agora, em vez deles, é usado um método com um valor de retorno constante:
const vector<double/complex> operator[](const ulong i) const;A correção permitirá capturar o uso incorreto do resultado no na nova versão do Alglib, o código mat[row][col]=x funciona de forma diferente do antigo. Antes, era uma escrita na matriz, e agora - escrita em um objeto vector<double/complex> temporário, que é destruído imediatamente após a escrita.
bool ArrayToFP16(ushort &dst_array[],const float &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayToFP16(ushort &dst_array[],const double &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayToFP8(uchar &dst_array[],const float &src_array[],ENUM_FLOAT8_FORMAT fmt); bool ArrayToFP8(uchar &dst_array[],const double &src_array[],ENUM_FLOAT8_FORMAT fmt); bool ArrayFromFP16(float &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayFromFP16(double &dst_array[],const ushort &src_array[],ENUM_FLOAT16_FORMAT fmt); bool ArrayFromFP8(float &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt); bool ArrayFromFP8(double &dst_array[],const uchar &src_array[],ENUM_FLOAT8_FORMAT fmt);Como os formatos de números reais para 16 e 8 bits podem variar, no parâmetro fmt nas funções de conversão é necessário especificar qual formato de número precisa ser processado. Para versões de 16 bits, é utilizada a nova enumeração NUM_FLOAT16_FORMAT, que atualmente possui os seguintes valores:
Correções de acordo com os logs de erro.
Terminal
MQL5
MetaEditor
Tester
Terminal Web
Terminal
MQL5
Terminal da Web MetaTrader 5
Terminal
MetaTrader 5 Web Terminal
Terminal
MQL5
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { complex a=1+1i; complex b=a.Conjugate(); Print(a, " ", b); /* (1,1) (1,-1) */ vectorc va= {0.1+0.1i, 0.2+0.2i, 0.3+0.3i}; vectorc vb=va.Conjugate(); Print(va, " ", vb); /* [(0.1,0.1),(0.2,0.2),(0.3,0.3)] [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)] */ matrixc ma(2, 3); ma.Row(va, 0); ma.Row(vb, 1); matrixc mb=ma.Conjugate(); Print(ma); Print(mb); /* [[(0.1,0.1),(0.2,0.2),(0.3,0.3)] [(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)]] [[(0.1,-0.1),(0.2,-0.2),(0.3,-0.3)] [(0.1,0.1),(0.2,0.2),(0.3,0.3)]] */ ma=mb.Transpose().Conjugate(); Print(ma); /* [[(0.1,0.1),(0.1,-0.1)] [(0.2,0.2),(0.2,-0.2)] [(0.3,0.3),(0.3,-0.3)]] */ }
from sys import argv data_path=argv[0] last_index=data_path.rfind("\\")+1 data_path=data_path[0:last_index] from sklearn.datasets import load_iris iris_dataset = load_iris() from sklearn.model_selection import train_test_split X_train, X_test, y_train, y_test = train_test_split(iris_dataset['data'], iris_dataset['target'], random_state=0) from sklearn.neighbors import KNeighborsClassifier knn = KNeighborsClassifier(n_neighbors=1) knn.fit(X_train, y_train) # Convert into ONNX format from skl2onnx import convert_sklearn from skl2onnx.common.data_types import FloatTensorType initial_type = [('float_input', FloatTensorType([None, 4]))] onx = convert_sklearn(knn, initial_types=initial_type) path = data_path+"iris.onnx" with open(path, "wb") as f: f.write(onx.SerializeToString())Abra o arquivo onnx criado no MetaEditor:
struct MyMap { long key[]; float value[]; };Aqui usamos arrays dinâmicos com tipos apropriados. Nesse caso, é possível usar arrays fixos, já que para esse modelo o Map sempre contém 3 pares de chave+valor.
//--- declaramos um array para receber dados da camada de saída output_probability MyMap output_probability[]; ... //--- execução do modelo OnnxRun(model,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);
MetaEditor
MetaTrader 5 Web Terminal build 3980
Terminal
O relatório está dividido em quatro guias, cada uma contendo informações agregadas em seu próprio contexto:
Novos relatórios permitem avaliar visualmente vários aspectos dos resultados de negociação, simplesmente clicando nas guias. Os histogramas, gráficos e tabelas são interativos e apresentam informações adicionais ao passar o cursor do mouse sobre eles. Nossos designers trabalharam arduamente para garantir que as informações dos relatórios fossem lidas da maneira mais simples e clara possível. Experimente você mesmo e avalie o resultado!
Terminal MetaTrader 5 x64 build 3914 started for MetaQuotes Software Corp.
Terminal Windows 10 build 19045, 20 x Intel Xeon E5-2630 v4 @ 2.20GHz, AVX, 41 / 63 Gb memory, 58 / 280 Gb disk, UAC, GMT+2
VPS Hosting
MQL5
#define MACRO1 /* #define MACRO2 */ void OnStart() { #ifdef MACRO2 Print( 2 ); #else Print( 1 ); #endif }
void OnStart() { Print("CPU name: ",TerminalInfoString(TERMINAL_CPU_NAME)); Print("CPU cores: ",TerminalInfoInteger(TERMINAL_CPU_CORES)); Print("CPU architecture: ",TerminalInfoString(TERMINAL_CPU_ARCHITECTURE)); Print(""); Print("EX5 architecture: ",__CPU_ARCHITECTURE__); } CPU name: 12th Gen Intel Core i9-12900K CPU cores: 24 CPU architecture: AVX2 + FMA3 EX5 architecture: AVX
extern int X=0; void OnStart() { }
extern int X; void OnStart() { }
extern int X; int Y=X; void OnStart(void) { Print("Y=",Y," X=",X); } int X=_Digits;
MetaEditor
Tester
Traduções atualizadas da interface do usuário.
Correções de registros de falhas.
MetaTrader 5 Web Terminal build 3950
Terminal
MQL5
double vector::RegressionMetric( const vector& vector_true, // valores reais const ENUM_REGRESSION_METRIC metric // métrica ); double matrix::RegressionMetric( const matrix& matrix_true, // valores reais const ENUM_REGRESSION_METRIC metric // métrica ); vector matrix::RegressionMetric( const matrix& matrix_true, // valores reais const ENUM_REGRESSION_METRIC metric, // métrica const int axis // eixo );
vector vector::LinearRegression(); matriz::RegressãoLinear( ENUM_MATRIX_AXIS axis=AXIS_NONE // eixo ao longo do qual é calculada a regressão );Exemplo:
vector vector_a; //--- preenchemos o vetor com preços vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100); //--- obtemos uma regressão linear vector vector_r=vector_a.LinearRegression();Visualização do resultado em forma de gráfico:
ulong vector::HasNan(); ulong matrix::HasNan();Os métodos Compare e CompareByDigits, ao comparar os respectivos pares de elementos que têm valores NaN, considera esses elementos iguais, enquanto em uma comparação normal de ponto flutuante NaN != NaN.
A estrutura OnnxTypeInfo, usada para trabalhar com modelos ONNX, foi modificada:
struct OnnxTypeInfo { ENUM_ONNX_TYPE type; // tipo de parâmetro OnnxTensorTypeInfo tensor; // descrição do tensor OnnxMapTypeInfo map; // descrição do mapa OnnxSequenceTypeInfo sequence; // descrição da sequência };
Agora, o tipo de dados é especificado usando novas subestruturas:
struct OnnxTensorTypeInfo { ENUM_ONNX_DATATYPE data_type; // tipo de dados no tensor long dimensions[]; // número de elementos }; struct OnnxMapTypeInfo { ENUM_ONNX_DATA_TYPE key_type; // tipo de chave OnnxTypeInfo type_info; // tipo de valor }; struct OnnxSequenceTypeInfo { OnnxTypeInfo type_info; // tipo de dados na sequência };Dependendo de OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP ou ONNX_TYPE_SEQUENCE), a subestrutura correspondente é preenchida.
bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,ulong start_pos,ulong count); bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,ulong count); bool vector<T>::CopyIndicatorBuffer(long indicator_handle,ulong buffer_index,datetime start_time,datetime stop_time);
MetaEditor
Tester
Correções de registro de falhas.
Web Terminal
MQL5.community
Terminal
MQL5
Web Terminal