Jede Anfängerfrage, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Nirgendwo ohne dich - 6. - Seite 739
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
Sie haben etwas Falsches geschrieben.
Ja, das ist ein Tippfehler, ich habe ihn korrigiert. Oder ist das Prinzip falsch? Der Punkt war, dass, wenn der Saldo durch 10 geteilt wird, ohne dass ein Rest übrig bleibt, die Partie als das Produkt aus der ursprünglichen Partie und 1/10 des Saldos betrachtet wird. Nicht wahr? Und wie?
Obwohl Vadim schrieb es einfacher hier, ja )))
Ja, das ist ein Tippfehler, ich habe ihn korrigiert. Oder ist das Prinzip falsch? Der Punkt war, dass, wenn der Saldo durch 10 geteilt wird, ohne dass ein Rest übrig bleibt, die Partie als das Produkt aus der ursprünglichen Partie und 1/10 des Saldos betrachtet wird. Nicht wahr? Wie machen Sie es dann?
Obwohl Vadim schrieb es einfacher hier, ja )))
Und MarketInfo()?
UND MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP?
Sie müssen noch in das zulässige Ziffernraster der Loswerte gelangen:
Ich habe es ausprobiert und etwas Ähnliches wie die Wahrheit erhalten:
Kein Fehler, denke ich.
Und MarketInfo()?
UND MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP?
Sie müssen noch in das zulässige Ziffernraster der Loswerte gelangen:
Ich habe es ausprobiert und etwas erhalten, das der Wahrheit ähnelt:
Ich scheine keinen Fehler gemacht zu haben.
Danke, das wurde mir schon erklärt :D
Es ist klar, dass für mich selbst schreibe ich mit allen Kontrollen, wie es sein sollte, gab es nur einen Entwurf, wie man das Los auf die Balance/10 Verhältnis zu bringen, aber die Idee war nicht erfolgreich ...
Aber Sie haben eine Menge Text, es könnte einfacher sein:
Und MarketInfo()?
UND MODE_MINLOT, MODE_MAXLOT, MODE_LOTSTEP?
Sie müssen noch in das zulässige Ziffernraster der Loswerte gelangen:
Ich habe es ausprobiert und etwas Ähnliches wie die Wahrheit erhalten:
Ich scheine es nicht falsch machen zu können.
warum, wenn ein natürlicher Programmierer eine Aufgabe übernimmt, aus einer einzigen Zeile, die zum Erreichen des Ziels erforderlich ist, eine einen halben Kilometer lange Auflistung wird?
Wie kommt es, dass, wenn ein natürlicher Programmierer eine Aufgabe übernimmt, eine einzige Codezeile, die zum Erreichen des Ziels erforderlich ist, zu einem einen halben Kilometer langen Listing wird?
Bei manchen Menschen ist die Schrittweite nicht 0,01, sondern z. B. 0,03. Und wie? Für alle Fälle sind Kontrollen erforderlich, die nicht viel Zeit in Anspruch nehmen.
double Min_Lot=MarketInfo(Symbol(), MODE_MINLOT);
Wie kommt es, dass, wenn ein natürlicher Programmierer eine Aufgabe übernimmt, eine einzige Codezeile, die zum Erreichen des Ziels erforderlich ist, zu einem einen halben Kilometer langen Listing wird?
Denn an jeder Ecke lauern Gefahren, und man muss sich schützen. Wenn Sie sich nicht schützen, wird die Qualität sehr niedrig sein, was Sie auf lange Sicht sehr viel Geld kosten kann. 90 % der Anstrengungen werden für die Abwehr des Teufels aufgewendet und nur 10 % für die Lösung des Problems. Im Falle von MT4 und MQL4++ ist das Verhältnis noch asymmetrischer.
Der Mist fängt schon beim Lesen der Dokumentation an:
Alles. Ist verpflichtet, die Informationen über das Finanzinstrument zurückzusenden, und nichts anderes. Es gibt keine anderen Ergebnisse. Wir erhalten Informationen über das Instrument:
Schauen wir uns an, was die Losparameter für dieses Werkzeug sind:
Interessante Parameter. Ich weiß nicht, warum in der Dokumentation nicht beschrieben wird, wie sich diese Funktion im Falle von Fehlern verhält. Wir werden undokumentierte Funktionen verwenden müssen, die wir bei der Beobachtung des Verhaltens dieser Funktion entdeckt haben.
Daher kann die Funktion MarketInfo() für diese angeforderten Parameter, deren Werte von Natur aus von 0 verschieden sein müssen, 0 zurückgeben, was eine undokumentierte Fehlersituation darstellt. Der Code muss prüfen, ob bei der Abfrage der einzelnen Parameter ein Fehler aufgetreten ist. Allein aus diesem Grund sind im Code 3 Kontrollen vorgesehen.
Nächste. Natürlich kann es sein, dass die berechnete Losgröße nicht in den Bereich der zulässigen Losgrößen passt. Wollen wir es nicht überprüfen? Oder sollten wir diese Situation explizit programmieren und dann die Reaktion darauf im übergeordneten Code programmieren, anstatt "wie es passiert"? Ein Beispiel dafür, wie es aussieht, wenn nicht alles programmiert ist und es so funktioniert, wie es von selbst geschieht, könnte eine weitere neue Version von MT4 sein, bei der sich irgendwo etwas verschoben hat, irgendwo auf wundersame Weise ein Fehler auftrat und irgendwo nicht mehr funktionierte. Vielleicht ist dies nicht das gewünschte Ergebnis?
Der Code ist erweitert und auskommentiert, so dass der Gedankengang und das verwendete Berechnungsmodell ersichtlich sind. Da das von MetaQuotes festgelegte Lot-Modell in Form eines "Spread Order Values Grid" implementiert ist, das durch die Parameter MINLOT, MAXLOT und LOTSTEP definiert ist, wäre es sinnvoller, den genauen Wert des Lots in diesen Begriffen zu berechnen. Deshalb ist das Berechnungsmodell auch so formuliert.
Ich sehe keine "Halbkilometer" oder etwas anderes. Das Einzige ist, dass der Code so ausgeführt wird, dass eine maximale Leistung erreicht wird, wenn Funktionen einmal aufgerufen und die resultierenden Werte in Variablen gespeichert werden, und jeder Aufruf erst nach einer weiteren Prüfung ausgeführt wird, wenn sich herausstellt, dass der zurückgegebene Wert kein Fehlerindikator ist und es noch sinnvoll ist, die Berechnungen fortzusetzen. Sobald klar ist, dass ein Fehler aufgetreten ist, werden die Rechenressourcen nicht mehr für sinnlose Aufrufe verschwendet.
Um den Code kompakter zu gestalten, könnten wir alle 3 Werte auf einmal ermitteln und alle 3 Bedingungen in einem if überprüfen. Aber im Falle eines Fehlers beim ersten Aufruf wären die anderen 2 Aufrufe eine Verschwendung von Rechenressourcen.
Beachten Sie, dass wir bei der Programmierung eines Ausdrucks, der die Division durch lotStep verwendet, absichtlich darauf geachtet haben, dass er unter den if's verwendet wird, die gerade geprüft haben, dass der Wert von lotStep von 0 verschieden ist, d.h., eine Division durch 0 kann dort nicht stattfinden. Im Prinzip kann der Code noch verbessert werden, indem alle Variablen als "double" und "int" und "const double" und "const int" deklariert werden, um sich bei weiteren möglichen Codeänderungen vor sich selbst zu schützen. Insbesondere, wenn unter if's Code, der gerade überprüft, ob der Wert der lotStep Variable von 0 verschieden ist, versehentlich in einigen neu hinzugefügt an dieser Stelle Code fälschlicherweise den Wert 0 zu dieser Variable zuweisen, dann weitere Division durch 0 wird in Ausdruck auftreten. Wenn die Variable als "const double" deklariert ist, dann hoffe ich, dass der Compiler sofort einen unbefugten Versuch, lotStep Variable zu ändern, zu melden, wodurch von einem solchen Fehler zu verhindern.
Die "halben Kilometer" sind also auf strenge objektive Bedingungen zurückzuführen, nicht auf die Laune eines Menschen.
Wie heißt der Zweig? Wenn Sie helfen wollen, dann tun Sie es richtig, damit Sie wirklich etwas lernen können.