[ARCHIV]Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht daran vorbei. Ohne dich kann ich nirgendwo hingehen - 5. - Seite 289
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
Ich habe geschrieben, was passiert, wenn Sie das Skript einfach in einen Ordner mit Experten verschieben. Es funktioniert, aber nicht so, wie es sollte. Das Skript erstellt 8 Pending Orders, aber wenn wir es nur im Ordner mit Expert Advisors speichern, erstellt es 8 Pending Orders nach jedem Tick. Ich brauche es, um 8 neue Aufträge erst dann zu erteilen, wenn die alten abgeschlossen sind.
Haben Sie nur eine "Verschiebung" in Ihr Drehbuch geschrieben? Dann wird er nur zögern: Es kommen so viele Zecken rein, wie er braucht... Ups... .........
Sie müssen einen dritten Checker-Inhibitor hinzufügen...
Dies geschieht, wenn das Skript einfach in den Ordner "Experten" verschoben wird. Es funktioniert, aber nicht so, wie es sollte. Das Skript erstellt 8 schwebende Aufträge, aber wenn Sie es nur im Expertenordner speichern, erstellt es nach jedem Tick 8 schwebende Aufträge. Ich brauche es, um 8 neue Aufträge erst dann zu erteilen, wenn die alten abgeschlossen sind.
Ich habe einen Fehler gefunden. In der Bibliothek für diese Funktion in der Zeile
sollte in der 13., 14. und 15. Zahl jeweils die Null löschen.Jetzt richtig
Hallo Bibliotheksfunktionen.
Нашел ошибку. В библиотеке для данной функции в строке
надо удалить по нулю в 13, 14 и 15 числе.
Теперь правильно
Hallo Bibliotheksfunktionen.
Haben Sie nur eine "Verschiebung" in Ihr Drehbuch geschrieben? Dann wird er nur zögern: Es kommen so viele Zecken rein, wie er braucht... Ups... .........
Sie müssen dort auch einen Verbots-Checker einbauen...
))))) Kann nicht widerstehen)))))
Also gut, kommen wir zur Sache. Ich arbeite an der Optimierung des Codes der zweiten TF, ich habe beschlossen, double in int[2] zu übersetzen, um die RateInfo-Struktur in einen Block zu schreiben. Ich habe darüber nachgedacht und beschlossen, alle möglichen Wege zu beschreiben, auch dienicht realisierbaren, damit jemand vor Fehlern gewarnt werden kann.
1. die WinAPI (msdn). Im Allgemeinen gibt es nicht viel an Umrechnungsfunktionen. Dies liegt daran, dass bei der Konvertierung ausgiebig von der c-Typ-Übersetzung Gebrauch gemacht wird, die in etwa wie folgt aussieht
in der vorletzten Zeile wirdint i1 in char umgewandelt und in der letzten Zeile wird char s2 in int umgewandelt. Das Ergebnis ist, dass all diese Dinge in so genannten "Konvertierungsfunktionen" verwendet werden, die in Wirklichkeit in keiner WinAPI-DLL enthalten sind, sondern in Header-.h-Dateien mit Makros wie
die der Präprozessor bei der Kompilierung wie im ersten Code in einen String umwandelt. Und Header-.h-Dateien sind keine DLLs und werden nur in der Entwicklungsumgebung (Studio, Borland, gcc, etc.) verwendet. Daher ist es weder gut noch schlecht für MQL4. Sie können jedoch immer überprüfen, ob die Funktion nur in der Header-.h-Datei oder in den vor neugierigen Augen versteckten exportierten Funktionen einer Dll in System32 deklariert ist.
2) WinAPI (CRT dll). Diese DLLs heißen msvcp*, msvcr*, msvcrt*, msvci*, msvcirt. Hier ist die Auswahl größer: _atodbl, _atoi64, _atoldbl, _ftol, _i64toa, _itoa, _ltoa, _strtoi64, _strtoui64 _ui64toa, _ultoa, atof, atoi, atol, strtod, strtol, strtoul. Die Symbole im Namen haben die folgende Bedeutung:
Aber das erwartete _dtoi64/_dtoui64 fehlt immer noch. Die Verwendung der Definitionen msvcrt*, msvci*, msvcirt.dll hingegen
ist nur als Datei-Operation verfügbar, auch wenn Sie sich verheddern (es handelt sich um Konsolenoperationen).
Sie können neben msdn auch aufdieser Websitesuchen, hier ist die Suchleiste der Website. Ein ähnlicher "praktischer" msdn-Suchbegriff findet sich hier. Wie unterscheiden sie sich? Die msdn hat eine gute Beschreibung der Funktionen, aber einige sind überhaupt nicht vorhanden (NativeAPI, zum Beispiel). In der alternativen Version hingegen ist zwar jede System-DLL-Exporttabelle vorhanden, aber keine Beschreibung. Grundsätzlich ist ein Satz von Exporttabellen auf der Website einfacher, als selbst Exporttabellen aus der DLL zu ziehen (IDA, PE Explorer, etc.).
3. Assembler-Einfügungen (genauer gesagt, Maschinencode-Einfügungen). Ich werde das gleich erklären, denn die offiziellen Unterlagen sind in dieser Hinsicht sehr vage. Die C++ Einsätze in MQL4
asm/_asm ist keine Funktion, sondern eine Präprozessoranweisung und ist nirgendwo in system32/*.dll definiert (siehe Suche auf der Website). Mit anderen Worten: So etwas gibt es nicht.
Sie können reinen Maschinencode in MQL4 schreiben, aber nur in einem Fall: wenn laut Definition WinAPI-Funktion in msdn sollte es einen Zeiger auf Funktion/Prozedur wielpTimerFunc übergeben(komplettesBeispiel hier im Forum), in msdn ist es deklariert als:
UINT_PTR SetTimer( HWND hWnd, UINT_PTR nIDEvent, UINT uElapse, TIMERPROC lpTimerFunc//<- );
oderlpfnWndProc (unfertigesBeispiel hier im Forum, msdn-Deklaration und versuchte mql4-Strukturdeklaration). Es gibt keinen anderen Weg, MQL4 ist ein Interpreter, die Adresse der Funktion gibt es nicht, es gibt nichts zu übergeben, nur wenn der Code in Maschinencode geschrieben ist. Sie werden dann in ein int-Array gepackt und per Referenz an die Funktion übergeben.
Kompilierte Assembler-Inserts (d.h. Maschinencode) sind also für diese Aufgabe nicht geeignet - sie haben einen völlig anderen Anwendungsbereich. Es scheint, dass die Befehlszeile dort nicht übergeben werden kann, aber sie kann mit den virtuellen Tasten über keybd_event geschrieben werden.
4. Ich schreibe meine eigene Funktion, um double in int[2] in reinem MQL4 ohne Einfügungen zu konvertieren. Aber ich habe die Größe des Codes und seine Leistung abgeschätzt und aufgegeben. Ich habe das Modul selbst noch nicht geschrieben, aber ich glaube, der Algorithmus sieht folgendermaßen aus:
Die Ausführung würde sehr lange dauern. So kam ich schließlich auf die offensichtlichste und einfachste Lösung
5. Verwendung einer selbst geschriebenen DLL in C++. Der Code lautet wie folgt:
Im Drehbuch.
Int upper[0] ist umgekehrt, weil wir es per Referenz übergeben. Wir bekommen:
...es hat funktioniert, die Zeilen im Dump sind identisch. Angehängter Ordner, darin in Bibliotheken ist double.dll, in Samples - source dll, in Skripte - Skript.
Am Abend habe ich das Archiv erneut heruntergeladen und den Skript- und DLL-Code ein wenig verändert.
Ich verstehe nicht, was ich falsch gemacht habe. Aus irgendeinem Grund wird die Position nicht wie geplant geschlossen?
Hier das Kriterium für die Eröffnung einer Position
Das ist das Kriterium für die Schließung einer Position
und das ist, was wir bekommen:
Nein! Sie können keine Funktionen aus der Standardbibliothek anfassen! Dima verbannt :-))
Warum machen Sie hier eine Clownerie? Wenn ein Fehler vorliegt, müssen Sie ihn entweder an servicedesk melden oder eine eigene Kopie der Datei erstellen.
Ich verstehe nicht, was ich falsch gemacht habe. Aus irgendeinem Grund wird die Position nicht wie geplant geschlossen?
Hier das Kriterium für die Eröffnung einer Position
Das ist das Kriterium für die Schließung einer Position
und das ist, was wir bekommen:
Und wie oft wird das Abschlusskriterium überprüft? Nicht zufällig in einer Bar?
Und wie oft wird das Abschlusskriterium überprüft? Nicht zufällig von Bars?
Ich verstehe den Sinn der Frage nicht ganz. Eröffnungskurs-Testmodell (Schnellmethode auf geformten Balken)