Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 1689
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 Sie "-1" nicht mögen, können Sie dies tun.
Nein, das können Sie nicht - das Programm stürzt ab, wenn Sie auf diese Weise auf Ihr Array zugreifen.
Wenn Sie auf Ihre internen Arrays zugreifen, verpassen Sie bestenfalls die benötigten Daten oder erreichen sie in der Schleife einfach nicht.
Im Grunde ist es ganz einfach: Ihr Unikat fasst alle nicht übereinstimmenden Aufträge zwischen verschiedenen Magiern zusammen...
Zum Beispiel gibt es 3 Aufträge
Die erste Iteration von magic=1 unique=0, am Ende der Iteration wird unique=2 sein.
Die zweite Iteration magik=2unique=2, am Ende der Iterationwird unique=3 sein
Da 3>=Anzahl aller Aufträge, wird die while-Schleife unterbrochen... Und Magie =3 wurde nie überprüft... Also wieder Magie =2 und so weiter mit allen...
Die erste Ordnung wird standardmäßig mit magisch =1 angegeben.
Dann tritt die Schleife in Aktion:
Beginn der Iteration magic = 1 unique = 0, am Ende (wenn es bereits einen Auftrag mit magic = 1 gibt) ist magic = 1 immer noch 1 und unique = 0
Zweite Iteration magic = 2 unique = 0, am Ende magic = 2 und unique = 1 (keine Übereinstimmung) und der Retorn wird an den 2.
Ich wollte den gesamten Prozess ausdrucken, aber irgendetwas ging schief:
Die erste Ordnung wird standardmäßig mit magic = 1 angegeben. Dann wird eine Schleife gestartet:
Beginn der Iteration magic = 1 unique = 0, am Ende (wenn es schon einen Auftrag mit magic = 1 gibt) ist magic immer noch 1 und unique = 0
Zweite Iteration magic = 2 unique = 0, am Ende ist magic = 2 und unique = 1 (keine Übereinstimmung) und der Retorn wird dem 2. Auftrag magic = 2 zugewiesen.
Die dritte sollte genauso sein...
Ich wollte den gesamten Prozess ausdrucken, aber irgendetwas ging schief:
Streben Sie nachmehr- ALLE Programmiersprachen.
Es ist ganz einfach: In Programmiersprachen beginnt die Zählung bei Null. Die erste Zelle eines Arrays hat einen Index von 0. Daher müssen Sie eine umgekehrte Schleife machen, BEVOR Sie die Null einbeziehen. D.h. >=0
OrdersTotal() gibt z. B. den Wert 10 aus. Und Sie beginnen eine Schleife bei 10, während der letzte Index des Arrays 9 ist (Sie erinnern sich, wir beginnen bei Null?). Und was passiert, wenn Sie auf eine nicht existierende Array-Zelle zugreifen? Das ist richtig - das Programm stürzt bei einem kritischen Fehler ab, weil Sie in einen nicht zugewiesenen Speicherbereich eingedrungen sind und die Grenzen des Arrays überschritten haben.
Das sind auf jeden Fall solide Krücken. Lies, lerne und alles wird zu dir kommen.
Es gibt eine Vielzahl von kostenlosen und guten Kursen zu C/C++.
Mql ist in ihrer Nähe, und Sie können frei lernen. Zum Glück sind dafür keine tiefgreifenden Kenntnisse erforderlich. Zumindest aber die Syntax der Sprache und die Grundlagen der Algorithmen.
Andernfalls wird das Thema unsinnig, und anstelle von Konsultationen über die Plattform und die Algorithmen werden Dialoge auf Grundschulniveau geführt - wohin soll man setzen, was ist eine Schleife und warum sind Indizes 0.
Es gibt zum Beispiel eine Website intuit.ru - dort werden Kurse über C und Algorithmen angeboten, die höchstens ein paar Wochen dauern. Gleichzeitig können Sie eine Zeitung kaufen :-)
Andernfalls wird das Thema unsinnig, und anstelle von Konsultationen über die Plattform und die Algorithmen werden Dialoge auf Grundschulniveau geführt - wohin soll man setzen, was ist eine Schleife und warum sind Indizes 0.
Es gibt zum Beispiel eine Website intuit.ru - dort werden Kurse über C und Algorithmen angeboten, die höchstens ein paar Wochen dauern. Vielleicht bekommst du gleichzeitig eine Zeitung:-)
Etwa so?
OrdersTotal() ergibt zum Beispiel 10. Und Sie beginnen die Schleife bei 10. Der letzte Index des Arrays ist 9 (Sie erinnern sich, wir beginnen bei Null?). Und was passiert, wenn Sie auf eine nicht existierende Array-Zelle zugreifen? Das ist richtig - das Programm stürzt bei einem kritischen Fehler ab, weil Sie in einen nicht zugewiesenen Speicherbereich eingedrungen sind und die Grenzen des Arrays überschritten haben.
Ich nehme alles zurück... Es wird kein kritischer Fehler auftreten, nur der boolesche Wert von OrderSelect wird false zurückgeben... und das ist alles... Aber natürlich ist es besser, das zu vermeiden... Denn wenn Sie falsche Code-Merkmale verwenden, ist es schwierig, mögliche Fehler vorherzusagen...
Die erste Ordnung wird standardmäßig mit magic = 1 angegeben. Dann wird eine Schleife gestartet:
Start Iteration magic = 1 unique = 0, am Ende (wenn es bereits eine Ordnung mit magic = 1 gibt) magic = 1 und unique = 0
Zweite Iteration magic = 2 unique = 0, am Ende magic = 2 und unique = 1 (keine Übereinstimmung) und die Retorn wird der 2. Ordnung magic = 2 zugeordnet.
Die dritte sollte die gleiche sein...
Ich sehe nur, dass das Auffüllen von Unique sehr schnell geht und die Grenze erreicht, und Magie wächst kaum... Generell war es falsch, dieselbe Variable sowohl für die Schleifensteuerung als auch für die Logik innerhalb der Schleife zu verwenden, wo diese Variable sich aufbläht...
Drucken, um eine Lösung in diesem Zusammenhang zu finden, aber ich würde vorschlagen, das Problem einfach neu zu formulieren... Zum Beispiel die maximale Magie in Aufträgen durch die Schleife zu finden und sie mit +1 zurückzugeben, das wäre die richtige einfache Lösung.
Sie können es so machen, der Code wird nach Bedarf aufgerufen, daher ist sein Gewicht kein Problem
Für den Test habe ich Buy/Sell
Forum für Handel, automatisierte Handelssysteme und Strategietests
Alle Fragen von Neulingen zu MQL4 und MQL5, Tipps und Diskussionen zu Algorithmen und Codes
Vitaly Muzichenko, 2021.10.19 23:08
Ich werde sie ein wenig korrigieren. Es wird kein kritischer Fehler auftreten, nur der boolesche Wert OrderSelect wird false zurückgeben ... und das ist alles... Aber natürlich ist es besser, das zu vermeiden... Denn wenn die Code-Funktionen nicht richtig genutzt werden, ist es schwer, die möglichen Fallstricke vorherzusehen...
Ich sehe nur, dass sich das Unique sehr schnell füllt und an seine Grenzen stößt, während die Magie kaum wächst... Generell war es falsch, dieselbe Variable sowohl für die Schleifensteuerung als auch für die Logik innerhalb der Schleife zu verwenden, wobei diese Variable...
Drucken, um eine Lösung in diesem Zusammenhang zu finden, aber ich würde vorschlagen, das Problem einfach neu zu formulieren... Zum Beispiel die maximale Magie in Aufträgen durch die Schleife zu finden und sie mit +1 zurückzugeben, das wäre die richtige einfache Lösung.
Sie können es so machen, der Code wird nach Bedarf aufgerufen, daher ist sein Gewicht kein Problem
Für den Test habe ich Buy/Sell