Nützliche Funktionen von KimIV - Seite 126

 
khorosh:
Versetzen Sie sich in seine Lage. Das Leben in einem fremden Land, weit weg von der Heimat, geht nicht vorbei. Ich bin gereizt, wütend auf mich selbst, weil ich einen nicht wieder gutzumachenden Fehler gemacht habe, als ich Gastarbeiter wurde.)
Die Fehlerprüfung funktioniert ordnungsgemäß, aber bisher sind keine Fehler aufgetreten, trotz zahlreicher Versuche, das normale Funktionieren zu verhindern. Ausreichender Schutz gegen alle möglichen Eventualitäten. Auch hier wird die Zukunft zeigen!
 
artmedia70:

Ich habe if(OrderSelect(i,SELECT_BY_POS)) absichtlich zu einem separaten Block gemacht. Um den Fehlerwert während der Fehlersuche zurückgeben zu können. else {/// Schreiben Sie den Selektionsfehler nach Belieben und geben Sie ihn zurück, zum Beispiel EMPTY}.

Stellen wir uns eine Situation vor, in der ein Fehler bei der Auswahl eines auf dem Markt zu erteilenden Auftrags vorliegt. Lassen Sie uns darüber diskutieren. Ich bin noch nicht auf eine gestoßen.

Roger:

Und nennen Sie mindestens einen Grund, warum eine korrekt erstellte Auftragsschleife "falsch" zurückgeben kann.

Ups, ich habe nicht bemerkt, dass Artem bereits gefragt hat, oops. Und doch.

Welchen Unterschied macht das?

Im allgemeinen Fall kann sie zurückkehren. Was also, wenn die Beobachtung einiger Bedingungen oder sogar einer Reihe verschiedener Bedingungen zeigt, dass sie nicht falsch ist?

Wir kennen die Einzelheiten der Implementierung dieser Funktion nicht und die Dokumentation enthält keine diesbezüglichen "Vermutungen". Was ist, wenn die Funktion bei der nächsten Bedingungsreihe beim nächsten Makler plötzlich falsch zurückgibt?

Ich werde die Frage nach dem Grund bzw. der Situation trotzdem beantworten, denn es ist ganz einfach: Der Grund könnte ein Implementierungsfehler dieser Funktion sein, den das Entwicklungsteam bei der Veröffentlichung der nächsten Version von MT gemacht hat. Ich hoffe, dieses Ereignis ist wahrscheinlich genug, um ernsthaft in Betracht gezogen zu werden.

Nehmen wir an, dass die Funktion aufgrund dieses hypothetischen Fehlers nach dem Zufallsprinzip, aber im Durchschnitt nur bei jeder fünften Anfrage anfängt, falsch zurückzugeben.

Normalerweise kann man sich nicht im Voraus Dinge ausdenken, die man nicht weiß. Es hat also wenig Sinn zu fragen, woran es liegen könnte. Wenn dies geschieht, können Sie leicht erklären, warum.

Aber nicht zu wissen, was in der Zukunft passieren könnte, hindert Sie nicht daran, sich dagegen zu wehren. Es kann sich herausstellen, dass einige High-Level-Algorithmen wegen eines empfangenen falschen Wertes eine Menge Ärger machen werden. Sie werden nicht wissen, dass der Wert falsch ist.

Aber wenn sie wissen, dass es keinen Wert gibt, und wenn es einen gibt, dann ist er wahr, dann werden sie kein Chaos anrichten, wenn es keine eigenen Fehler gibt. Deshalb sollte die Information über die Unmöglichkeit, den Wert zu berechnen, nicht nur im Debugging-Modus, sondern auch im Kampfmodus gegeben werden.

 

Ist es möglich, externe Daten in den Indikator zu laden, beispielsweise aus einer Textdatei?

Gibt es z.B. einen Tagespreis und es muss eine Linie auf einem beliebigen Zeitdiagramm erstellt werden?

DATE Preis

04.12.2014 100.00

03.12.2014 101.12

02.12.2014 102.45

01.12.2014 103.23

28.11.2014 102.43

27.11.2014 101.90

 
Gute Funktionen, danke an Igor für seine harte Arbeit.
 
KimIV:

Beispiele für die Verwendung der Funktion OpenPosition().

1. 0,1 Lot des aktuellen Instruments kaufen

2. Verkaufe 0,2 Lots EURUSD

3. Verkaufen Sie 0,12 Lots USDCAD mit einem Stopp von 20 Pips

4. Kaufen Sie 0,15 Lot USDJPY mit 40 Pips Stopp

5. Verkaufe 0.1 Lot GBPJPY mit Stop 23 und Takeaway 44 Pips

Im Anhang finden Sie das Skript zum Testen der Funktion OpenPosition(). Die ersten 4 Beispiele sind auskommentiert.
Ich weiß nicht, ob Sie antworten werden oder nicht. Ich sitze hier und weiß nicht, wie ich meinen EA mehrwährungsfähig machen kann!
 
logut:
Ich weiß nicht, ob Sie mir antworten werden oder nicht. Ich sitze hier und weiß nicht, wie ich meinen EA mehrwährungsfähig machen kann!
Dmitry, normalerweise schreibe ich die ganze Logik auf ein Blatt Papier. Was ist wann und womit zu tun?
 
Roger:

Und nennen Sie mir einen Grund, warum eine korrekt erstellte Auftragsschleife "falsch" zurückgeben könnte.

Ups, ich habe nicht bemerkt, dass Artem bereits gefragt hat, oops. Und doch.

Vorsicht!

Nach einer weiteren Aktualisierung startete das Terminal neu und zeigte nur noch die Aufträge vom letzten Tag an. Die Bestellhistorie wird nicht angezeigt. Die Funktion sollte etwas zurückgeben - z. B. keinen Verlauf.

Der Makler hat einige Aufträge gelöscht.

Es gibt ein Loch im Hauptspeicher. Ihr Speicher ist abgestürzt, und die Funktion belegt eine minderwertige Speicherzelle. Sie kann auf dem Monitor angezeigt werden. Sie kann erscheinen oder auch nicht. Möglicherweise liegen andere Hardwareprobleme vor.

Das Terminal wird neu gestartet und "verliert" die Kommunikation mit dem Server. Ich habe Mt3 mit einem Proxyserver verwendet. Früher hatte ich eine Einwahlverbindung mit sehr begrenzter Bandbreite und Zeit, und die Qualität des Internets war grauenhaft. Ich sehe Ticks kommen und das Diagramm ist in Bewegung. Als ich versuchte, eine Bestellung zu öffnen, meldete das Terminal "keine Verbindung mit dem Server".

Ich stand vor einem Problem in MT4 und es besteht immer noch: Ich bekam einen Tick und einen schwarzen (leeren) Chart-Bildschirm. Wenn ich das Diagramm mit der Maus ziehe oder der Roboter einen Fehler meldet, erhalte ich eine Fehlermeldung und der Roboter stürzt ab. Wenn ich den Chart mit der Maus ziehe oder ein neuer Tick kommt, ist alles normal. Deshalb prüfe ich beim Dividieren zuerst, durch was ich dividieren soll, und wenn es nicht gleich Null ist, mache ich weiter!

 

Lieber KimIV, ich verwende Ihre Funktion, um alle Positionen zu schließen, wenn ein bestimmter Gewinn erreicht wurde, und ich bin auf eine Situation gestoßen, in der ein schwebender Auftrag eine andere Position ausgelöst hat, die noch nicht geschlossen wurde. Ich habe jetzt eine zusätzliche Überprüfung einer solchen Situation und einen wiederholten Aufruf Ihrer Funktion implementiert. Sind Sie der Meinung, dass diese Verbesserung innerhalb der Funktion implementiert werden sollte, nachdem der Hauptabschlusszyklus beendet ist?

Dies sind die Funktionen ClosePosBySortLots() und ClosePositions();

 

Es gibt Funktionscodes zum Entfernen von ausstehenden Aufträgen sowohl für Online- als auch für History-Tests - https://forum.mql4.com/ru/38949#434195

Können Sie den Unterschied zwischen Tests und Online erklären?

 
Die Funktionen isCloseLastPosByStop() und isCloseLastPosByTake() funktionieren nicht immer korrekt, da der Schlusskurs der Order und der Stop Loss (TakeProfit) nicht immer übereinstimmen. Ich habe es in meinem neu gemacht. Ich habe die Bedingung der Gleichheit dieser Werte durch die Bedingung ersetzt, dass der absolute Wert der Differenz dieser Werte (bei 5-Bit-Anführungszeichen) kleiner als 5*Point sein muss.
Grund der Beschwerde: