matrix corr_from_matrix=rates.CorrCoef(false); // false significa que los vectores están en cadenas матрицы
¿Seguro que no está en las columnas?
//--- obtener los precios de cierre en el vector if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars)) { //--- inserta el vector en la matriz de series temporales rates.Col(close, i);
Desafortunadamente, esta sencilla forma de rellenar la matriz tiene un grave defecto: las barras multidivisa no están sincronizadas.
Tal vez tenga sentido hacer el método estándar CopyRates para matrices también, con el fin de obtener datos correctos con la misma facilidad.
vector::Deals( void* Filter );
En consecuencia, es necesario llenar la sección Estadísticas no sólo con métodos matemáticos, sino también financieros: Gain, MaxDD, PF, etc.
Aquí está el método CopyRates y un ejemplo en él
//+------------------------------------------------------------------+ //| Función de inicio del programa de script| //+------------------------------------------------------------------+ void OnStart() { //--- introduce las comillas en la matriz matrix matrix_rates; if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLCT, 1, 10)) Print("matrix rates: \n", matrix_rates); else Print("matrix_rates.CopyRates failed. Error ", GetLastError()); //--- comprobar MqlRates mql_rates[]; if(CopyRates(Symbol(), PERIOD_CURRENT, 1, 10, mql_rates)>0) { Print("mql_rates array:"); ArrayPrint(mql_rates); } else Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error ", GetLastError()); //--- get quotes to vector = llamada inválida vector vector_rates; if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_OHLC, 1, 15)) Print("vector_rates COPY_RATES_OHLC: \n", vector_rates); else Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error ", GetLastError()); //--- obtener los precios de cierre en un vector if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENT, COPY_RATES_CLOSE, 1, 15)) Print("vector_rates COPY_RATES_CLOSE: \n", vector_rates); else Print("vector_rates.CopyRates failed. Error ", GetLastError()); }; /* matriz tasas: [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001] [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957] [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922] [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259] [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]] mql_rates array: [time] [open] [high] [low] [close] [tick_volume] [spread] [real_volume] [0] 2022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641 44630 0 [1] 2022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588 45190 0 [2] 2022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441 30600 0 [3] 2022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464 38670 0 [4] 2022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594 52800 0 [5] 2022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697 72270 0 [6] 2022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758 101300 0 [7] 2022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581 70120 0 [8] 2022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528 61660 0 [9] 2022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259 69500 0 vector_rates.CopyRates COPY_RATES_OHLC ha fallado. Error 4003 vector_rates COPY_RATES_CLOSE: [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259] */
- www.mql5.com
Parece que no he formulado bien el problema. Al rellenar la matriz para calcular la correlación de símbolos, puede ocurrir que EURUSD[5].BarTime no coincida con GBPUSD[5].BarTime. Esto se llama no sincronización multibarra. Hay que dedicar bastante tiempo/esfuerzo a esa preparación de los datos antes de los cálculos. Si se pudiera resolver con una línea, sería estupendo.
Dice el artículo:
Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.
La instrucción contiene lo siguiente
| void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) | Crea una matriz a partir de un array unidimensional |
pero en realidad no funciona. ¿Hay alguna otra forma de copiar un array unidimensional en una matriz?
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Artículo publicado Trabajamos con matrices y vectores en MQL5:
Para resolver problemas matemáticos, se han añadido a MQL5 matrices y vectores. Los nuevos tipos tienen métodos incorporados para escribir un código conciso y fácilmente comprensible que se acerque a una notación matemática. Los arrays son algo bueno, pero las matrices, en muchos casos, resultan mejores.
En los últimos años, hemos hecho mucho por incorporar tecnología avanzada al lenguaje MQL5:
El lenguaje MQL5 seguirá evolucionando y el aprendizaje automático supone una prioridad. Tenemos grandes planes, y no nos conformaremos con las metas alcanzadas. Quédese con nosotros, apóyenos y aprenda cosas nuevas con nosotros.
Autor: MetaQuotes