matrix corr_from_matrix=rates.CorrCoef(false); // falso significa che i vettori sono in stringhe матрицы
Sicuro che non sia nelle colonne?
//--- ottenere i prezzi di chiusura in un vettore if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars)) { //--- inserire il vettore nella matrice delle serie temporali rates.Col(close, i);
Purtroppo, questo semplice modo di riempire la matrice ha un grave difetto: le barre multicurrency non sono sincronizzate.
Forse avrebbe senso rendere il metodo standard CopyRates anche per le matrici, in modo da ottenere i dati corretti con la stessa facilità.
vector::Deals( void* Filter );
Di conseguenza, è necessario riempire la sezione Statistiche non solo con metodi matematici, ma anche con metodi finanziari: Gain, MaxDD, PF, ecc.
Ecco il metodo CopyRates e un esempio che lo contiene
//+------------------------------------------------------------------+ //| Funzione di avvio del programma di script| //+------------------------------------------------------------------+ void OnStart() { //--- inserire le citazioni nella 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()); //--- controllo 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()); //--- ottenere le virgolette al vettore = chiamata non valida 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()); //--- ottenere i prezzi di chiusura in un vettore 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()); }; /* Tassi della 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 non è riuscito. Errore 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
A quanto pare non ho formulato bene il problema. Quando si riempie la matrice per calcolare la correlazione dei simboli, può accadere che EURUSD[5].BarTime non corrisponda a GBPUSD[5].BarTime. Si tratta della cosiddetta non sincronizzazione multi-bar. È necessario dedicare molto tempo/sforzo alla preparazione dei dati prima dei calcoli. Se si potesse risolvere il problema con una sola riga, sarebbe fantastico.
L'articolo afferma che:
Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.
L'istruzione contiene quanto segue
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) | Crea una matrice da una matrice monodimensionale |
ma in realtà non funziona. Esiste un altro modo per copiare un array monodimensionale in una matrice?

- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Accetti la politica del sito e le condizioni d’uso
Il nuovo articolo Operazioni con matrici e vettori in MQL5 è stato pubblicato:
Le matrici e i vettori sono stati introdotti in MQL5 per un’operatività efficiente con soluzioni matematiche. I nuovi tipi offrono metodi integrati per creare codice conciso e comprensibile, vicino alla notazione matematica. Gli array offrono ampie possibilità, ma ci sono molti casi in cui le matrici sono molto più efficienti.
Negli ultimi anni abbiamo fatto molto per introdurre tecnologie avanzate nel linguaggio MQL5:
Il linguaggio MQL5 continuerà a svilupparsi, mentre una delle principali priorità è l'apprendimento automatico. Abbiamo grandi progetti di sviluppo. Quindi, restate con noi, sosteneteci e continuate ad imparare con noi.
Autore: MetaQuotes