Alle Fragen von einem PROFI an einen SUPER PROFI - 1. - Seite 20
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
Gegeben:
In der init()-Funktion des EA wird ein MQL-PSP-Generator initialisiert: MathSrand(...). Beim Starten des Terminals werden mehrere (der Übersichtlichkeit halber sagen wir drei) Kopien des Expert Advisors aus der Vorlage geladen. Das Laden erfolgt schnell, so dass es sehr wahrscheinlich ist (und fast immer der Fall ist), dass die Funktionen TimeLocal() und TimeCurrent() in allen Kopien die gleichen Werte zurückgeben.
Frage:
Welche Tricks gibt es, um den PRNG dazu zu bringen, verschiedene Zahlen in verschiedenen Kopien des EA zu initialisieren? Mit anderen Worten: Woher soll (mit minimalem Programmieraufwand) das Element des Zufalls kommen?
Gegeben:
In der init()-Funktion des EA wird ein MQL-PSP-Generator initialisiert: MathSrand(...). Beim Starten des Terminals werden mehrere (der Übersichtlichkeit halber sagen wir drei) Kopien des Expert Advisors aus der Vorlage geladen. Das Laden erfolgt schnell, so dass es sehr wahrscheinlich ist (und fast immer der Fall ist), dass die Funktionen TimeLocal() und TimeCurrent() in allen Kopien die gleichen Werte zurückgeben.
Frage:
Welche Tricks gibt es, um den PRNG dazu zu bringen, verschiedene Zahlen in verschiedenen Kopien des EA zu initialisieren? Mit anderen Worten: Woher soll (mit minimalem Programmieraufwand) das Element des Zufalls kommen?
GetTickCount ?
könnte funktionieren, ist aber nicht sicher...
Eine Millisekunde kann für ein Programm eine Ewigkeit sein.)
könnte funktionieren, ist aber nicht sicher...
Option 2 - Verwendung globaler Variablen zur Erstellung von "Semaphoren", um die Experten nacheinander zu initialisieren.
Frage zum Abrufen von Zeilen aus dll in mql.
Funktion mysql_fetch_row aus libmysql.dll gibt Typ MYSQL_ROW zurück
Dieser Typ ist definiert als: typedef char** MYSQL_ROW
Wie erreiche ich dieses zurückgegebene String-Array?
Sind die Abmessungen des Feldes bekannt?
aber die Länge der einzelnen Zeilen ist es nicht.
In diesem Link-Beispiel gibt es noch etwas anderes - einen *Längen-Zeiger zu erhalten.
, row[i] ? row[i] : "NULL"); }Es stellt sich heraus, dass es auch ein Array ist... Aber wie kommt man dorthin...
Hier ist, was Sie in MQL erhalten, wenn Sie einfach das Ergebnis von mysql_fetch_row an string übergeben
p0ƒu0ƒ;1;a
wobei
p0ƒu0ƒ ist die Adresse (8 Bytes) der Zeichenkette
;1;a sind seine verwertbaren Daten
aber wenn Sie es auf int einstellen, dann lautet die Adresse statt p0ƒ 42152040
Wenn sich der Zeiger auf die Zeichenkette nicht ändert, während das Programm läuft, können Sie den Zeiger auf die Zeichenkette zurückgeben, ohne ihn in den Puffer zu kopieren.
Es gibt also keine Möglichkeit, dies in MQL zu tun, nicht einmal in MQL5?
Wenn sich der Zeiger auf die Zeichenkette nicht ändert, während das Programm läuft, können Sie den Zeiger auf die Zeichenkette zurückgeben, ohne ihn in den Puffer zu kopieren.
Einfach