matrix corr_from_matrix=rates.CorrCoef(false); // false signifie que les vecteurs sont dans des chaînes de caractères матрицы
Vous êtes sûr que ce n'est pas dans les colonnes ?
//--- Obtenir les prix de clôture dans un vecteur if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars)) { //--- insérer le vecteur dans la matrice des séries temporelles rates.Col(close, i);
Malheureusement, cette façon simple de remplir la matrice présente un sérieux défaut : les barres multidevises ne sont pas synchronisées.
Il serait peut-être judicieux d'appliquer la méthode standard CopyRates aux matrices également, afin d'obtenir des données correctes aussi facilement.
vector::Deals( void* Filter );
Par conséquent, il est nécessaire de remplir la section Statistiques non seulement avec des méthodes mathématiques, mais aussi avec des méthodes financières : Gain, MaxDD, PF, etc.
Voici la méthode CopyRates et un exemple qui s'y rapporte
//+------------------------------------------------------------------+ //| Fonction de démarrage du programme de script| //+------------------------------------------------------------------+ void OnStart() { //--- introduire les guillemets dans la matrice 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()); //--- vérifier 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()); //--- obtenir des guillemets pour le vecteur = appel non valide 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()); //--- obtenir les prix de clôture dans un vecteur 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()); }; /* Taux de la matrice : [[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 a échoué. Erreur 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
Apparemment, je n'ai pas bien formulé le problème. Lorsque l'on remplit la matrice pour calculer la corrélation des symboles, il peut arriver que EURUSD[5].BarTime ne corresponde pas à GBPUSD[5].BarTime. C'est ce qu'on appelle la non-synchronisation multi-barre. Vous devez consacrer beaucoup de temps et d'efforts à la préparation des données avant les calculs. Si cela pouvait être résolu en une seule ligne, ce serait formidable.
L'article précise que
Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.
L'instruction contient ce qui suit
| void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) | Crée une matrice à partir d'un tableau unidimensionnel |
mais en fait cela ne fonctionne pas. Existe-t-il un autre moyen de copier un tableau unidimensionnel dans une matrice ?
- Applications de trading gratuites
- Plus de 8 000 signaux à copier
- Actualités économiques pour explorer les marchés financiers
Vous acceptez la politique du site Web et les conditions d'utilisation
Un nouvel article Opérations sur les Matrices et les Vecteurs en MQL5 a été publié :
Les matrices et les vecteurs ont été introduits en MQL5 pour améliorer les opérations mathématiques. De nouvelles méthodes sont intégrées avec ces nouveaux types pour créer un code concis et compréhensible, proche de la notation mathématique. Les tableaux offrent des possibilités étendues, mais il existe de nombreux cas dans lesquels les matrices sont beaucoup plus efficaces.
Au cours des dernières années, nous avons développé de nouvelles fonctionnalités pour introduire des technologies avancées dans le langage MQL5 :
Le langage MQL5 va continuer à se développer. L’une des orientations prioritaires est l'apprentissage automatique. Nous avons de grands projets pour des développements futurs. Restez donc avec nous, soutenez-nous et continuez à apprendre avec nous.
Auteur : MetaQuotes