matrix A(2, 3); matrix B(3, 2); matrix C = A @ B; // Resultado: matriz C con un tamaño [2,2]Multiplicación de matrices (matriz × vector)
matrix M(2, 3); vector V(3); vector R = M @ V; // Resultado: vector R de 2 elementosMultiplicación de matrices (vector × matriz)
matrix M(2, 3); vector V(1, 2); vector R = V @ M; // Resultado: vector R de 3 elementosProducto escalar (vector × vector)
vector V1(1, 3), V2(1, 3); double r = V1 @ V2; // Resultado: escalar
static vector vector::Random( const ulong size, // longitud del vector const double min=0.0, // valor mínimo const double max=1.0 // valor máximo ); static matrix matrix::Random( const ulong rows, // número de filas const ulong cols // número de columnas const float min=0.0, // valor mínimo const float max=1.0 // valor máximo );
En las últimas versiones de la aplicación móvil MetaTrader 5 para iOS, hemos añadido muchas características cómodas para los gráficos, y también hemos realizado varias correcciones importantes para que la aplicación funcione de forma más estable.
Instale la última versión de la aplicación y amplíe sus posibilidades comerciales:
![]() |
![]() |
matrix<complex<T>> matrix<complex<T>>::TransposeConjugate(void) const;El método retorna una nueva matriz conjugada-transpuesta en la que los elementos de la matriz original se transponen y reducen a sus valores conjugados complejos.
int matrix<T>::CompareEqual(const matrix<T>& mat) constValores de retorno:
pip install --upgrade MetaTrader5
Función |
Acción |
---|---|
Singular Value Decomposition, algoritmo divide and conquer. Se considera el más rápido entre otros algoritmos SVD (función lapack de GESDD). |
|
Singular Value Decomposition, algoritmo QR. Se considera un algoritmo SVD clásico (función lapack de GESVD). |
|
Singular Value Decomposition, algoritmo QR with pivoting ( función lapack de GESVDQ). |
|
Singular Value Decomposition, algoritmo bisection (función lapack de GESVDX). |
|
Singular Value Decomposition, algoritmo Jacobi high level (función lapack de GEJSV). |
|
Singular Value Decomposition, algoritmo Jacobi low level (función lapack de GESVJ). En algunos casos, calcula valores singulares pequeños y sus vectores singulares con mucha más precisión que otras rutinas SVD. |
|
Singular Value Decomposition, algoritmo divide and conquer para una matriz bidiagonal (función lapack de BDSDC). |
|
Singular Value Decomposition, algoritmo bisection para matrices bidiagonales ( función lapack de BDSVDX). |
|
Cálculo de los valores y vectores propios de una matriz cuadrada ordinaria usando el algoritmo clásico (función lapack de GEEV). |
|
Cálculo de los valores y vectores propios de una matriz simétrica o hermitiana (conjugada compleja) usando el algoritmo divide and conquer (funciones lapack de SYEVD, HEEVD). |
|
Función de método para calcular las contribuciones relativas de los componentes espectrales a partir de los valores propios. |
|
Función de método para calcular datos reconstruidos y predichos utilizando componentes espectrales de las series temporales de entrada. |
|
Función de método para calcular los componentes reconstruidos de las series temporales de entrada y sus contribuciones. |
|
Función de método para calcular una serie temporal reconstruida utilizando los primeros componentes de component_count. |
Terminal
MQL5
Web Terminal
La actualización estará disponible a través del sistema Live Update.
MetaTrader 5 Android
Actualice sus aplicaciones móviles al build 4360 a través de Google Play, Huawei AppGallery o descargue el archivo APK.
Terminal
MetaTester
Terminal web
MetaEditor
Terminal
MQL5
Terminal web MetaTrader 5
vector<double/complex> operator[](const int i) const; vector<double/complex> operator[](const ulong i) const;Ahora, en lugar de ellos, se utilizará un método con un valor de retorno constante:
const vector<double/complex> operator[](const ulong i) const;La corrección realizada nos permitirá detectar el uso incorrecto del resultado: en la nueva versión de Alglib, el código mat[row][col]=x funciona de forma diferente que en la anterior. Antes, esto suponía la escritura en un array, pero ahora supone la escritura en un objeto vectorial temporal <double/complex> que se destruye inmediatamente después de la escritura.
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 los formatos de números reales para 16 y 8 bits pueden diferir, en el parámetro fmt en las funciones de conversión se deberá indicar qué formato de número debe procesarse. Para las versiones de 16 bits se utilizará la nueva enumeración NUM_FLOAT16_FORMAT, que actualmente tiene los siguientes valores:
Correcciones de crash logs.
Terminal
MQL5
MetaEditor
Simulador
Terminal web
Terminal
MQL5
Terminal web MetaTrader 5
Terminal
Terminal web MetaTrader 5
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 el archivo onnx creado en MetaEditor:
struct MyMap { long key[]; float value[]; };Aquí hemos utilizado arrays dinámicos con los tipos correspondientes. En este caso, podemos usar arrays fijos, ya que para este modelo Map siempre contiene 3 pares clave+valor.
//--- declaramos un array para recibir los datos de la capa de salida output_probability MyMap output_probability[]; ... //--- ejecución del modelo OnnxRun(modelo,ONNX_DEBUG_LOGS,float_input,output_label,output_probability);
MetaEditor
MetaTrader 5 Web Terminal build 3980
Terminal
El informe se divide en cuatro pestañas, cada una de las cuales contiene información añadida en su propia sección:
Los nuevos informes le permitirán evaluar visualmente los resultados del comercio en múltiples secciones transversales con solo clicar en la pestaña correspondiente. Los histogramas, gráficos y cuadros son interactivos y ofrecen información adicional al pasar el ratón por encima. Nuestros diseñadores han hecho un gran esfuerzo para que la información de los informes se pueda leer de la forma más fácil y clara posible. ¡Pruébelo usted mismo y notará la diferencia!
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
Simulador
Correcciones de crash logs.
MetaTrader 5 Web Terminal build 3950
Terminal
MQL5
double vector::RegressionMetric( const vector& vector_true, // valores verdaderos const ENUM_REGRESSION_METRIC metric // métrica ); double matrix::RegressionMetric( const matrix& matrix_true, // valores verdaderos const ENUM_REGRESSION_METRIC metric // métrica ); vector matrix::RegressionMetric( const matrix& matrix_true, // valores verdaderos const ENUM_REGRESSION_METRIC metric, // métrica const int axis // eje );
vector vector::LinearRegression(); matrix matrix::LinearRegression( ENUM_MATRIX_AXIS axis=AXIS_NONE // eje a lo largo del cual se calcula la regresión );Ejemplo:
vector vector_a; //--- rellenamos el vector con los precios vector_a.CopyRates(_Symbol,_Period,COPY_RATES_CLOSE,1,100); //--- obtenemos la regresión lineal vector vector_r=vector_a.LinearRegression();Visualización del resultado en forma de gráfico:
ulong vector::HasNan(); ulong matrix::HasNan();Los métodos Compare y CompareByDigits, al comparar un par de elementos que tienen valores NaN, tratan estos elementos como iguales, mientras que con una comparación normal de números de coma flotante, NaN != NaN.
Modificada la estructura OnnxTypeInfo, utilizada para trabajar con modelos ONNX:
struct OnnxTypeInfo { ENUM_ONNX_TYPE type; // tipo de parámetro OnnxTensorTypeInfo tensor; // descripción del tensor OnnxMapTypeInfo map; // descripción del mapa OnnxSequenceTypeInfo sequence; // descripción de la secuencia };
Ahora el tipo de datos se especifica en ella usando nuevas subestructuras:
struct OnnxTensorTypeInfo { ENUM_ONNX_DATATYPE data_type; // tipo de datos en el tensor long dimensions[]; // número de elementos }; struct OnnxMapTypeInfo { ENUM_ONNX_DATA_TYPE key_type; // tipo de clave OnnxTypeInfo type_info; // tipo de valor }; struct OnnxSequenceTypeInfo { OnnxTypeInfo type_info; // tipo de datos en la secuencia };Dependiendo de OnnxTypeInfo::type (ONNX_TYPE_TENSOR, ONNX_TYPE_MAP o ONNX_TYPE_SEQUENCE) se rellenará la subestructura correspondiente.
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
Simulador
Correcciones de crash logs.
Web Terminal
MQL5.community
Terminal
MQL5
Web Terminal