![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
Mike = Terranin = ich :) Und den Emulator habe ich dir schon im Alpari-Forum gegeben. MTS interessiert mich nicht besonders, wenn Sie wüssten, wie viele davon auf meinem Emulator abgestürzt sind... :)
:)) Das habe ich auch gedacht. Wenn Sie Interesse haben, können Sie sich mein System hier ansehen
http://forum.alpari-idc.ru/viewtopic.php?t=45555
Es ist natürlich ein ziemliches Durcheinander...
Wenn Sie wollen, beschreibe ich Ihnen das System, denn Sie haben mir mit dem Emulator geholfen.
Wenn Sie eine externe DLL verwenden möchten, aktivieren Sie einfach die Schaltfläche "Bestätigen Sie jeden DLL-Funktionsaufruf" und sehen Sie, was dort aufgerufen wird. Auch das ist ein Schutz. Sowie Schutz aller eingebetteten Dateioperationen mit Zugriff nur auf die Verzeichnisse /history und /files.
Wenn jemand den Expert Advisor mit seiner DLL der Öffentlichkeit anbietet, kann der Benutzer dieser DLL vertrauen oder nicht. Wenn er ihr nicht vertraut, wird er sie nicht herunterladen. Wenn er ihr vertraut, muss er das Kästchen " Import von DLL-Funktionen zulassen" ankreuzen, sonst wird der Experte nicht funktionieren. Die Namen der Funktionen, die Sie aufrufen, sind für den Expert Advisor ebenfalls nicht hilfreich, denn um zu wissen, was eine Funktion tut, müssen Sie die DLL zerlegen, und nicht jeder ist dazu in der Lage. Und in dieser DLL kann man eine Menge böser Dinge tun, und das MT-Terminal kann das nicht verhindern. Der Begriff "Schutz" ist also sehr relativ und stellt in diesem Zusammenhang keinen wirklichen Schutz dar. Ich glaube, das hat Mike gemeint.
Die Möglichkeit, Funktionen von Benutzer-DLLs in MT 4 Expert Advisors aufzurufen, ist als Ersatz für die in MT 3 vorhandene API gedacht. Es besteht also die Möglichkeit, das MT 4-Terminal in einen Datafeed zu verwandeln und Orders zu platzieren, was einer der Gründe war (wenn man nach verschiedenen Themen in den Foren urteilt), warum die API entfernt wurde. Aber die API ist geblieben, sie ist sehr unangenehm, viele Nutzer sprechen darüber, und es erinnert an die Situation aus dem Witz: ".... Das ist mir egal, Hauptsache, du hast es satt". Und dieses Thema ist eine Bestätigung dafür. Der Autor hat keine konkreten und informativen Antworten auf seine Fragen erhalten. Diese Fragen sind auch für mich relevant, die Antworten sind sogar noch relevanter :-).
Vielleicht bin ich auch kein erfahrener Programmierer, aber im aktuellen Expert Advisor<->DLL-System kann man per Definition keine einfache und schöne Lösung haben. Um genau zu sein, im Rahmen von MQL4 mag es eine schöne Lösung sein, aber im Rahmen der Integration von MT4-Terminal mit kundenspezifischer Software ist es nichts, um es gelinde auszudrücken. Es gibt andere, funktionellere Lösungen, man muss sie nur finden :-). Wir können zum Beispiel eine DLL mit Funktionen wie in mtapi.dll erstellen, die aber nicht mit dem Server des Handelszentrums, sondern mit dem Client-Terminal interagiert. In diesem Fall bleiben sowohl die Interessen der Entwickler gewahrt (ohne MT4-Terminal kann die DLL nicht funktionieren) als auch die Leute, die in der Lage sind, etwas Komplexeres als MQL4 Expert Advisors zu entwickeln, haben eine gute Möglichkeit, ihre eigene Software (einschließlich ihrer eigenen Benutzeroberfläche) in das Handelssystem zu integrieren. Wenn eine solche Variante erwogen und diskutiert wurde, geben Sie mir bitte einen Link (ich bin nicht auf eine solche Variante gestoßen). Wenn nicht, würde ich gerne die Meinung der Entwickler zu diesem Thema erfahren.
P.S. Die Zeile "Möglichkeit der Nutzung der Client-API" in der Beschreibung des Handelsterminals ist sehr attraktiv. Das hat mich am MetaTrader gereizt, und ich war sehr enttäuscht über das Fehlen einer API in Version 4 des Terminals. Ich hoffe, dass die Entwickler auf der einen Seite und die API-Nutzer auf der anderen Seite einen Kompromiss finden werden. Der derzeitige Stand der Dinge (Aufruf von DLL-Funktionen aus ekperts) ist unbefriedigend.
Ich habe eine dll für VC++ kompiliert
gibt es eine Funktion:
void __stdcall process_arr(double *in, double *out, int size);
im Expert Advisor die folgende Erklärung:
#import "some.dll"
void process_arr(double in[], double& out[], int size);
Arrays werden als nächstes deklariert:
double arr1[100];
double arr2[100];
dann initialisiere ich das erste Array und gebe beide an die Funktion
process_arr(arr1,arr2,100);
alles wird übergeben, aber die Funktion weigert sich, es zurückzugeben
Nach der Rückkehr von der Funktion gebe ich den Testwert aus:
Print(arr2[1]);
und der folgende Eintrag erscheint im Protokoll
2005.09.19 18:30:03 arrtest EURUSD,H1: 2147483647
Das ist nicht der Punkt, was hat 2^31.... damit zu tun?
funktioniert es genauso mit jedem anderen Element des Arrays.
obwohl unter dem Debugger vor dem Verlassen der Funktion die Werte im Out-Array so sind, wie sie sein sollten (nahe am Preis - ~1,2)
2^31-1, um genau zu sein, was gleich Null sein sollte.
Hier ist die Erklärung im Expert Advisor:
#import "some.dll"
void process_arr(double in[], double& out[], int size);
Nur eine Anregung (da ich mich mit MQL nicht auskenne): ist & für den zweiten Parameter wirklich notwendig?
void process_arr(double in[], double& out[], int size);
zu VicK, das kaufmännische Und ist der springende Punkt, dank ihm kann ich den Inhalt des Arrays tatsächlich ändern...
das zweite Array ist ein Array mit Rückgabewerten
In diesem Fall hat das kaufmännische Und keinen Sinn (ich habe es gerade selbst ausprobiert), und Sie können den Inhalt des Arrays dank etwas anderem ändern :-). Haben Sie sich das DLL-Beispiel im Verzeichnis angesehen? Dort funktioniert alles einwandfrei. Tun Sie es auf dieselbe Weise.
aber alles funktioniert gut mit int[]. Ich habe den Verdacht, dass hier beginnt zu riechen bug.... :(
Ich würde gerne die Kommentare der Entwickler kennen
Wenn das Ding mit Quellcode geliefert würde, würde sich niemand die Mühe machen, aber... Nur zu, ich rufe um Hilfe.