Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 235
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
Wenn es nicht mehr funktioniert, wäre es gut zu wissen, ob es richtig ist.
Wenn Sie Zeiger anstelle von Objekten erzeugen, funktioniert auch die alte Version.
Wenn es nicht mehr funktioniert, ist es gut zu wissen, ob es das Richtige ist, das zu tun.
Wenn Sie Zeiger anstelle von Objekten erzeugen, funktioniert auch die alte Version.
Toller Punkt und danke für den Tipp!
Ja, in der Tat, die Situation ist perfekt mit einem Zeiger gelöst:
Fans von schnellen Algorithmen. Diejenigen, die um Nanosekunden kämpfen :)
Aufgabe: Finden Sie den Zeitpunkt der Balkeneröffnung entsprechend der vorgegebenen Zeit und TF, wenn bekannt ist, dass der Balken zu diesem Zeitpunkt existiert. Zum Beispiel durch den Zeitpunkt der Eröffnungs- und Schlusspositionen.
Die meisten Programmierer werden eine Kombination aus iTime und iBarShift verwenden. Dies ist die langsamste Implementierung, zumal eine solche Implementierung einen aktuellen Verlauf der hochgeladenen Daten oder gekämmten Arrays erfordert. Außerdem kann dieser Ansatz zu Fehlern führen, wenn die erforderliche Historie nicht vorhanden ist.
Fortgeschrittene Programmierer werden dieses Problem mit der MqlDateTime-Struktur und der Funktion TimeToStruct() lösen. Dies ist keine schlechte Lösung und schnell genug.
Es gibt jedoch noch eine dritte Lösung, die um ein Vielfaches produktiver ist als die vorherige Lösung:
Die Hauptschwierigkeit bei diesem Algorithmus ist die Berechnung der Uhrzeit des Monatsanfangs (grün hervorgehoben). Bitte versuchen Sie nicht, die Funktionsweise des Algorithmus zu verstehen. Hier geht Magie vor sich, die das Ergebnis des Übergangs vom Einfachen zum Komplexen ist. Der umgekehrte Weg vom Komplexen zum Einfachen ist viel schwieriger zu bewältigen.
Der Leistungsgewinn ergibt sich auch aus dem Algorithmus, der die Sekunden eines Balkens aus der TF ermittelt, anstatt aus der Standardfunktion PeriodSeconds() - gelb hervorgehoben.
Ich füge ein Testskript bei, das die Leistung aller drei Methoden berechnet und vergleicht:
Die Prüfsumme mit iBarShift wird nicht übereinstimmen , da iBarShift mit echten Balken arbeitet. Die Prüfsumme stimmt nur bei den Zeitrahmen MN1 und W1 überein, da es in der Historie dieser Balken keine Löcher gibt.
Die Leistung ist höher, wenn Sie einen kleinen Zeitschritt in der Schleife verwenden (weniger als einen Tag), wenn der Algorithmus zu arbeiten beginnt, um frühere Berechnungen zu speichern:
Überhöhte Werte für den Algorithmus über iBarShift (blau hervorgehoben) werden durch das Fehlen der notwendigen Historie oder der vom Array berechneten TFs verursacht, was deren Hochladen einleitet.
Nach dem Hochladen sieht das Ergebnis wie folgt aus:
Fans von schnellen Algorithmen. Diejenigen, die für Nanosekunden kämpfen :)
...😮😲😳🥴🤪
...
ah ...
mmm....
oooh....
gkghm... Ich hätte nicht gedacht, dass meine einfache Frage so ausfallen würde.
Einfach so. Oh.
😮😲😳🥴🤪
...
ach ...
mmm.
ohhhh....
hm. Ich hätte nicht gedacht, dass meine einfache Frage so enden würde.
Oh.
Ja, Artem, du hast mich für eine Weile getäuscht.
Es war ein sportliches Interesse.
Ich hoffe, es wird jemandem nützlich sein, mich eingeschlossen. :))
Ja, Artem, haben Sie mich für eine Weile betrogen.
Ich arbeitete an sportlichen Interesse.
Ich hoffe, es wird nützlich sein, jemanden, und mich unter anderem. :))
Natürlich wird es das. Großartig! Nochmals vielen Dank!
S.F. Das hat mich amüsiert: "zählt nur bis zum 28.02.2100 korrekt !!!!".
Und was machen wir danach?
Natürlich wird es sich als nützlich erweisen. Sehr gut. Nochmals vielen Dank!
S.F. Das hat mich amüsiert: "zählt nur bis zum 28.02.2100 korrekt !!!!".
Und was machen wir danach?
haha.
Ich bezweifle, dass dieser Algorithmus noch 75 Jahre lang gefragt sein wird. Quantencomputer werden wahrscheinlich schon die Welt beherrschen, mit einer völlig anderen Programmierung.
Um ehrlich zu sein, war es faul, den gregorianischen Kalender zu berücksichtigen. 2000 stand viel auf dem Spiel, 2100 ist es nicht mehr.
haha.
Ich bezweifle, dass dieser Algorithmus noch 75 Jahre lang gefragt sein wird. Quantencomputer werden wahrscheinlich schon die Welt beherrschen, mit einer völlig anderen Programmierung.
Um ehrlich zu sein, war es faul, den gregorianischen Kalender vollständig zu berücksichtigen. 2000 stand viel auf dem Spiel, 2100 ist es nicht mehr.
Für MN kann man ein vorberechnetes Array verwenden, da ist fast nichts drin
Ln2(12 Monate * hundert Jahre)...11 if`'s und Vergleiche in binärer Suche, aber ohne andere Berechnungen.
Sie können ein vorberechnetes Array für MN verwenden, da es dort kaum Daten gibt.
Ln2(12 Monate * hundert Jahre)...11 if`'s und Vergleiche in binärer Suche, aber ohne andere Berechnungen.
Sie können ein vorberechnetes Array für MN verwenden, da es dort kaum Daten gibt.
Ln2(12 Monate * hundert Jahre)...11 if`'s und Vergleiche in binärer Suche, aber ohne andere Berechnungen.
ah, ich habe es zuerst falsch gelesen.
Nein, du liegst falsch. Die Leistungssteigerung wird nicht funktionieren. Sie werden immer noch in Berechnungen stecken bleiben. Und der Zugriff auf Array-Elemente verlangsamt den Algorithmus sehr stark.