Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 763
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
Es scheint so in Zyklen, und Sie können auf die Funktion verzichten
Ich danke Ihnen.
Allerdings entfernt die Funktion - die Bremsen bleiben.... verdammt.
Danke.
Allerdings entfernt die Funktion - die Bremsen bleiben.... Verdammt!
Ich habe einmal angefangen, das Programm von 4=>5 umzuschreiben, dann habe ich in 4 alle Konstruktionen wie Low[1], Time[0] und andere durch moderne ersetzt, d.h.CopyLow,CopyTime, das Programm wurde sogar in 4 schneller. Ich verwende keine alten Konstrukte mehr, sondern nur noch neue. Der Code ist also leicht auf die 5. Plattform übertragbar, Sie müssen nur die Handelsfunktionen ändern
Als ich anfing, das Programm von 4=>5 umzuschreiben und dann alle Konstruktionen wie Low[1], Time[0] und andere durch moderne ersetzte, d.h.CopyLow,CopyTime, wurde das Programm sogar in 4 schneller. Ich verwende keine alten Konstrukte mehr, sondern nur noch neue. Der Code ist also leicht auf die 5. Plattform übertragbar, Sie müssen nur die Handelsfunktionen ändern
Ist dasFüllen des Feldes bei jedem Niesen nicht ein Ressourcenverbrauch?
Vielleicht ist es sinnvoll, die Informationen beim Öffnen des Balkens in das Array zu kopieren und sie dann von dort zu übernehmen, während sich der Code entfaltet? Ich handele bei der Bareröffnung.
Verbraucht dasFüllen eines Arrays bei jedem Niesen nicht Ressourcen?
Vielleicht ist es sinnvoll, die Informationen in ein Array zu kopieren, wenn sich ein Balken öffnet, und sie dann von dort zu übernehmen, wenn der Code fortschreitet? Ich handele bei der Bareröffnung.
Das Array kann mit einem neuen Balken gefüllt werden, was weniger Ressourcen verbraucht. Wenn Sie an mehreren Stellen mit iLow[1] arbeiten, sollten Sie es einmal in einer Variablen speichern und diese anstelle des Arrays lesen.
Angenommen, dies
Dann arbeiten wir mit den VariablenTIME_0 undTIME_1 anstelle vonTM[0] undTM[1].Array kann auf einer neuen Leiste gefüllt werden, es wird weniger Ressourcen benötigen. Wenn Sie z. B. an mehreren Stellen mit iLow[1] arbeiten, ist es wünschenswert, es einmal in eine Variable zu schreiben und die Variable statt des Arrays zu lesen.
Angenommen so
Aber trotzdem ist MT4 viel schneller - ich bin enttäuscht.
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Wanzen, Wanzen, Fragen
Aleksey Vyazmikin, 2017.07.21 15:07
Warum phantasieren Sie? Ich habe Ihre Idee verstanden und bestätigt, dass sie funktioniert und Wirkung zeigt, wenn die Anfrage einmal gestellt wird und bekannt ist, wie viele Balken für den EA benötigt werden, um zu funktionieren.
Oder haben Sie vielleicht vorgeschlagen, die Struktur anders zu verwenden? Dann erklären Sie es bitte, aber seien Sie nicht beleidigt!
Keine Hirngespinste. Wenn Sie 2 oder mehr Parameter eines Candlesticks benötigen, müssen wir die Funktionen aus Ihren Nachrichten/Fragen für jeden Parameter des Candlesticks einzeln aufrufen. Das sind 2 oder mehr Aufrufe von Copy***(), aber mit CopyRates() brauchen Sie nur einen Aufruf von Copy.
Die Frage nach der zu kopierenden Anzahl ist eine andere. Vielleicht sollten wir zuerst den Balken berechnen, der den gewünschten Indikatorwert enthält, und ihn dann kopieren. Wenn ich mich richtig erinnere, sprachen wir von einer unbekannten Größe, die es zu kopieren galt. Von welcher Art von Fantasie reden wir?
Im Extremfall können wir z. B. 10 Takte kopieren und unter ihnen suchen. Wenn wir sie nicht finden, kopieren wir weitere 10 Takte. Kopieren ist ein zeitaufwändiger Vorgang, es ist billiger, ein Array zu kopieren.
Im Allgemeinen gibt es eine Vielzahl von Varianten. Das kann man nicht alles in die Dokumentation schreiben, dann wäre es gar keine Dokumentation mehr. Das wird im Programmierunterricht gelehrt. Aber leider sind nicht alle Lehrer dazu in der Lage, und nicht alle Schüler wollen es im Unterricht verstehen. Und ganz am Anfang steht der Rechenunterricht in den Klassen 2-5, wenn der Lehrer eine ausführliche Erklärung der Aufgabe verlangt. Aber hier sind die Probleme die gleichen.
Keine ausgefallenen Sachen. Wenn Sie 2 oder mehr Parameter eines Candlesticks benötigen, sollten Sie diese Funktionen mit Hilfe von Funktionen aus Ihren Nachrichten/Fragen für jeden Candlestick-Parameter separat aufrufen. Das bedeutet, dass Copy***() 2 oder mehr Mal ausgeführt werden muss, während bei Verwendung von CopyRates() nur ein Aufruf von Copy erforderlich ist.
Die Frage nach der zu kopierenden Anzahl ist eine andere. Vielleicht sollten wir zuerst berechnen, auf welchem Balken der gewünschte Wert des Indikators vorhanden ist, und ihn dann kopieren. Wenn ich mich richtig erinnere, war die Rede von einer unbekannten Größe, die es zu kopieren galt. Von welcher Art von Fantasie reden wir?
Und als letzten Ausweg können wir z. B. 10 Takte kopieren und sie durchsuchen, und wenn wir sie nicht finden, kopieren wir weitere 10 Takte. Das Kopieren ist ein ziemlich teurer Vorgang; es wäre billiger, das Array zu durchsuchen.
In diesem Fall gibt es eine Vielzahl von Varianten. All dies kann nicht in die Dokumentation aufgenommen werden; eigentlich wird es keine Dokumentation mehr sein. Das wird im Programmierunterricht gelehrt. Aber leider wissen nicht alle Lehrer, wie man es macht, und nicht alle Schüler wollen es im Unterricht verstehen. Und ganz am Anfang steht der Rechenunterricht in den Klassen 2-5, wenn der Lehrer eine ausführliche Erklärung der Aufgabe verlangt. Aber hier sind die Probleme die gleichen.
Über Fantasie - war eine Antwort auf Ihre Aussage "Anstatt zu versuchen zu verstehen, was gesagt wurde, um herauszufinden, was Sie bekommen, machen Sie einige unglaubliche Einwände", und nicht auf die Tatsache, dass die von Ihnen angebotene Version aus dem Bereich der Fantasie ist.
Ich verstehe Ihr Konzept sehr gut, und es war in der Antwort an Sie enthalten.
Allerdings verstehe ich nicht ganz, wie Sie vorschlagen, mit unbekannten Datenmengen zu arbeiten - können Sie mir ein Beispiel in Form von Code geben?
Bitte helfen Sie bei der Überprüfung und Optimierung des Indikators mit diesem Link https://www.mql5.com/ru/code/16805 - das Problem ist, dass der Indikator beginnt zu verlangsamen eine Menge, wenn eine große Anzahl von Bars erscheinen - es zeigt sich beim Testen.
Ich möchte wissen, wie es funktioniert, so dass es nicht bei jedem Tick berechnet wird, sondern nur beim Öffnen des Balkens? Die Methode aus dem Expert Advisor ist nicht geeignet - nach dem ersten Tick verschwinden alle Werte und erscheinen erst im nächsten Takt...
Was die Fantasie betrifft, so war dies eine Antwort auf Ihre Aussage "Anstatt zu versuchen, zu verstehen, was gesagt wird, um zu verstehen, was funktionieren wird, werden unglaubliche Einwände vorgebracht", und nicht, dass die von Ihnen vorgeschlagene Option aus dem Reich der Fantasie stammt.
Ich verstehe Ihr Konzept sehr gut, und es war in der Antwort an Sie enthalten.
Ich verstehe jedoch nicht ganz, wie Sie mit einer unbekannten Datenmenge umgehen wollen - können Sie mir ein Beispiel in Form von Code geben?
Die Antwort wurde vorher gegeben...
Alexey Viktorov:
Als letzten Ausweg können Sie z. B. 10 Takte auf einmal kopieren und unter ihnen suchen; wenn Sie sie nicht finden, kopieren Sie 10 weitere. Das Kopieren ist ein kostspieliger Vorgang, es ist billiger, das Feld zu durchsuchen.
Aber wir sollten nicht versuchen, die maximale Anzahl von Balken aus dem Array zu holen, sondern versuchen, mit einer Kopie auszukommen.
Ich werde kein Codebeispiel schreiben. Ein normaler Programmierer braucht nur einen Hinweis. Hier ist ein Beispielalgorithmus:
Auf diese Weise ist es möglich, zwei Schnittpunkte in einer Kopie und einem Zyklus zu finden, falls erforderlich. Es gibt sogar keine Notwendigkeit in ArraySetAsSeries(), weil bei der Suche nach der Kreuzung ist es möglich und meiner Meinung nach besser, die Zeit der Bar, nicht seine Nummer zu erinnern. Wenn man die Zeit der Bar kennt, ist es nicht schwer, ihre Anzahl zu bestimmen.
Frage: Was ist schneller, ein Zyklus mit Kopieren des Indikatorpuffers um 1 Wert und Kopieren des oberen Balkens um 1 und Vergleichen dieser Werte oder ein einzelnes Kopieren eines bestimmten Betrags und Vergleichen der Werte der beiden Arrays miteinander?
Ich habe das erst gestern geschrieben:
Aufgabe:
bei jedem Tick die "InpCountCopy"-Elemente open, high, low, close und time.
Umsetzung:
Merkmale:
Sie können wählen, wie die Prüfung erfolgen soll: in OnTick oder in OnTimer (1 Sekunde).