matrix corr_from_matrix=rates.CorrCoef(false); // false bedeutet, dass Vektoren in Strings vorliegen матрицы
Sind Sie sicher, dass es nicht in den Spalten steht?
//--- Schließen der Preise in einen Vektor umwandeln if(close.CopyRates(symbols[i], InTF, COPY_RATES_CLOSE, 1, InBars)) { //--- Einfügen des Vektors in die Zeitreihenmatrix rates.Col(close, i);
Leider hat diese einfache Art, die Matrix zu füllen, einen schwerwiegenden Fehler: Mehrwährungsbalken werden nicht synchronisiert.
Vielleicht wäre es sinnvoll, die standardmäßige CopyRates-Methode auch für Matrizen zu verwenden, um so einfach korrekte Daten zu erhalten.
vector::Deals( void* Filter );
Dementsprechend ist es notwendig, den Abschnitt Statistik nicht nur mit mathematischen, sondern auch mit finanziellen Methoden zu füllen: Gain, MaxDD, PF, etc.
Hier ist die CopyRates-Methode und ein Beispiel in ihr
//+------------------------------------------------------------------+ //| Skript-Programmstartfunktion| //+------------------------------------------------------------------+ void OnStart() { //--- Anführungszeichen in die Matrix übertragen 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()); //--- prüfen 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()); //--- Anführungszeichen in Vektor umwandeln = ungültiger Aufruf 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()); //--- die Schlusskurse in einen Vektor umwandeln 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()); }; /* matrix rates: [[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 ist fehlgeschlagen. Fehler 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
Offenbar habe ich das Problem nicht gut formuliert. Beim Füllen der Matrix zur Berechnung der Symbolkorrelation kann es passieren, dass EURUSD[5].BarTime nicht mit GBPUSD[5].BarTime übereinstimmt.Dies wird als Multi-Bar-Nichtsynchronisierung bezeichnet. Für eine solche Datenaufbereitung vor den Berechnungen müssen Sie ziemlich viel Zeit/Aufwand aufwenden. Wenn das Problem mit einer Zeile gelöst werden könnte, wäre das großartig.
In dem Artikel heißt es:
Над матрицами и векторами можно поэлементно производить математические операции — сложение, вычитание, умножение и деление. Для этого оба объекта должны быть одного и того же типа и должны иметь одинаковые размеры. Каждый член матрицы/вектора оперирует с соответствующим элементом второй матрицы/вектора.
Die Anweisung enthält Folgendes
void matrix.FromBuffer(const int rows, const int cols, const scalar array[], const int count=-1, const int offset=0) | Erzeugt eine Matrix aus einem eindimensionalen Array |
aber tatsächlich funktioniert es nicht. Gibt es eine andere Möglichkeit, ein eindimensionales Array in eine Matrix zu kopieren?

- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Matrix- und Vektoroperationen in MQL5 :
Matrizen und Vektoren wurden in MQL5 für effiziente Operationen mit mathematischen Berechnungen eingeführt. Die neuen Typen bieten integrierte Methoden zur Erstellung von prägnantem und verständlichem Code, der der mathematischen Notation nahe kommt. Arrays bieten umfangreiche Möglichkeiten, aber es gibt viele Fälle, in denen Matrizen viel effizienter sind.
In den letzten Jahren haben wir viel getan, um fortschrittliche Technologien in die MQL5-Sprache einzuführen:
Die MQL5-Sprache wird sich weiter entwickeln, wobei das maschinelle Lernen eine der wichtigsten Prioritäten ist. Wir haben große Pläne für die weitere Entwicklung. Bleiben Sie uns also treu, unterstützen Sie uns und lernen Sie weiterhin mit uns.
Autor: MetaQuotes