![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Kurz und bündig.
Funktionen der Systembibliotheken für x86 (32-Bit)-Prozesse haben einen speziellen Wrapper, durch den sie an x64 weitergegeben, ausgeführt und wieder an x86 zurückgegeben werden.
Um es kurz zu machen: Das Problem der 32/64 Bits ist im MT5 akut geworden.
Dies ist ein sehr wichtiges Thema , und es ist an der Zeit, dass es angegangen wird.
oder fügen Sie einen libraries64-Ordner hinzu, damit das Terminal weiß, woher es die Bibliotheken beziehen soll
oder fügen Sie eine Möglichkeit hinzu, DLLs in die Windows-Ordner System32/SysWow64
zu verteilen oder lassen Sie sie #ifdef
https://www.mql5.com/ru/forum/6729#comment_199764
ZS.
Anwendung auf SD #381730
Array mit beliebiger Dimensionalität (der Klarheit halber beschränken wir es auf ^16).
Die Dimensionalität wird bei der Erstellung durch die Anzahl der Parameter festgelegt, wie bei normalen Arrays.
XXArray xx2(5,7), xx5(12,12,16,16,8);
Indexer sollten für alle Dimensionen funktionieren ( A[i][j][k][n][m]....)
Nun, da die Gemeinschaft schweigt, werde ich fortfahren...
Eine Skizze einer N-dimensionalen (double) Array-Klasse und ein Test, um sie zu testen.
Die Dimensionalität wird durch (int) array im Konstruktor beschrieben.
Die zweite Variante ist ein N-dimensionales (doppeltes) Array. Die Struktur des Arrays wird ebenfalls im Konstruktor durch ein weiteres (int) Array angegeben.
Diese Variante ist ein wenig schneller als die vorherige. Und bei dieser Variante ist es einfacher, Operationen mit Subarrays zu erstellen.
Die zweite Variante ist ein N-dimensionales (doppeltes) Array. Die Struktur des Arrays wird ebenfalls im Konstruktor durch ein weiteres (int) Array angegeben.
Diese Variante ist ein wenig schneller als die vorherige. Und bei dieser Variante ist es einfacher, Operationen mit Subarrays zu erstellen.
Yurich, du bist ein cooler Typ. Ich war ein paar Tage vom Forum abgelenkt, und du hast schon ein paar Varianten gemacht.
Erster Eindruck - die erste Variante ist voller Pannen bei falschen Aufrufen mit weniger Indizes: z.B. double x=A[i][j][k]; "dreidimensionaler Aufruf" für vierdimensionales Array gibt double als keine große Sache zurück, aber von jeder anderen Position des Arrays, die der Benutzer wollte.Und es ist nicht klar, wie man solche Fehler aufspüren und behandeln soll. Aber der unbestreitbare Vorteil der ersten Implementierung ist die Speicherersparnis. Der zweite Weg ist viel verschwenderischer. Aber, wie Sie richtig bemerkt haben, können Sie versuchen, darin zu Subarrays durchzukommen, und alle Schwierigkeiten sind in diesem Fall recht überschaubar.
Ich habe ein paar Ideen, aber ich werde erst am Abend vorher Zeit haben, wenn ich überhaupt dazu komme. Aber wir werden es schaffen, das verspreche ich. :)
--
Grundidee: Verwenden Sie eine weitere Klasse, so etwas wie "linke Indizes Controller", und die ganz rechts Index von Hauptklasse zu verarbeiten (wenn es funktioniert. Wenn nicht, dann eine weitere Klasse für den rechten Index). Dabei sollte das Basis-Array double (eindimensional und das einzige) zu einem Mitglied der Hauptklasse CNArray gemacht werden. Das geht so.
Tx. Erster Eindruck - die erste Variante ist voller Pannen bei falschem Aufruf mit weniger Indizes: z.B. double x=A[i][j][k]; "dreidimensionaler Aufruf" für vierdimensionales Array gibt double zurück, als wäre nichts passiert, aber gleichzeitig von der Array-Position, die der Benutzer wollte. Außerdem ist nicht ersichtlich, wie man solche Fehler aufspüren und behandeln soll.
Ich habe mit Yurichs erster Methode herumgespielt, und es scheint möglich zu sein, den Array-Rang auf diese Weise zu steuern:
Aufgabe:
- Zur Übergabe eines Zahlenfeldes vom Expert Advisor an den Indikator.
Anforderungen.
Nicht verwenden
- Ereignisse aufzeichnen,
- Dateien,
- globale Variablen (auch als Dateien bezeichnet),
- DLL
Aufgabe:
- Zur Übergabe eines Zahlenfeldes vom Expert Advisor an den Indikator.
Anforderungen.
- Verwenden Sie keine Diagrammereignisse, Dateien, dll für die Datenübertragung
Dann bleiben die genannten Kanäle übrig.
Aufgabe:
- Zur Übergabe eines Zahlenfeldes vom Expert Advisor an den Indikator.
Bedingungen.
Nicht verwenden
- Ereignisse aufzeichnen,
- Dateien,
- globale Variablen (auch Dateien genannt),
- DLL
Es gibt niemanden, der das macht :)
Dann schlage ich eine andere Variante vor - die Verwendung von Subcharts undChartSetString()- undChartGetString()-Funktionen.