Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 821

 

Bitte achten Sie auf meine Frage. Ich schreibe einen Indikator, der einige Berechnungen durchführt und diese in einem Array (keine Zeitreihe) speichert, das genauso groß ist wie die Anzahl der Kerzen im Diagramm. Ursprünglich dachte ich, dass, wenn ich 2000 Candlesticks im Diagramm in der Terminal-Parameter haben, dann beim Erscheinen eines neuen, die erste wird der Wert des zweiten, die zweite - die dritte, usw. Daher, wenn immer prev_calculated gleich Null, ich neu berechnen das gesamte Array, sonst nur die letzte Bar tun. Ich habe jedoch festgestellt, dass mit jeder neuen Kerze der Wert von rates_total steigt und den Grenzwert von 2000 überschreitet.

Es ist daher nicht sinnvoll, das Feld neu zu berechnen.

Aber warum passiert das, wenn das Terminal genau 2000 Candlesticks setzt?


Wenn das Terminal schließt, wird die Anzahl der Balken wieder auf 2000 erhöht und beginnt wieder zu steigen, wenn neue Kerzen erscheinen.


ruslanzip:
Nachmittag . Könnten Sie mir einen Tipp geben? Wie würde der Code für diese Bedingung lauten? Wenn sich der Kontostand erhöht oder verringert hat, dann führen Sie die Funktion

//Deklarieren Sie eine Variable außerhalb von Funktionen:

double Balance=Kontostand();

//Ergänzen der Tick-/Berechnungsfunktion:

if (Kontostand!=Kontostand())

{

Saldo=KontoSaldo();

MeineFunktion(); // <-- Ihre Funktion

}

 
Ich habe Geld auf meinem echten Konto, aber hier steht, dass man nur Löhne abheben kann?
 
Roza75:
Ich habe Geld auf meinem echten Konto, aber hier steht, dass man nur Löhne abheben kann?
Echtes Konto, wo haben Sie es?
 
Artyom Trishkin:
Echtes Konto, wo haben Sie es?
Metatreder 4 Anwendung
 
Igor Makanu:

weil das Terminal folgendermaßen funktioniert

Es handelt sich also um ein normales Verhalten und nicht um einen Fehler? Denn einige grundlegende benutzerdefinierte Indikatoren werden ohne Berücksichtigung dieses Faktors geschrieben und führen bei jedem prev_calculated==0 eine vollständige Neuberechnung durch.


Igor Makanu:

diese Lösung ist nur für den Tester, was passiert, wenn ich das Terminal überladen? was, wenn ich eine zweite EA auf diesem Konto laufen?

Sie müssen mit der Auftragshistorie arbeiten, es gibt keine offenen Aufträge bei unserem Magier - prüfen Sie den Gewinn des letzten Auftrags in der Historie

Nachladen? Oder nachladen? Ist letzteres der Fall, ändert sich das Verhalten des EA nicht. Wenn Sie einen zweiten EA starten, wird der Algorithmus auf ähnliche Weise und ohne Fehler ausgeführt.

Womit der Autor arbeiten muss, hängt von der Aufgabe ab, die er sich gestellt hat. So wie er die Frage gestellt hat, habe ich sie beantwortet. Ich habe meine Frage nicht genauer formuliert.

 
The_Sheikh:

Bitte achten Sie auf meine Frage. Ich schreibe einen Indikator, der einige Berechnungen durchführt und diese in einem Array (keine Zeitreihe) speichert, das genauso groß ist wie die Anzahl der Kerzen im Diagramm. Ursprünglich dachte ich, dass, wenn ich 2000 Candlesticks im Diagramm in der Terminal-Parameter haben, dann bei Erscheinen einer neuen Kerze, die erste wird die zweite, die zweite - die dritte, usw. Daher, wenn immer prev_calculated gleich Null, ich neu berechnen das gesamte Array, oder nur die letzte Bar. Ich habe jedoch festgestellt, dass mit jeder neuen Kerze der Wert von rates_total steigt und den Grenzwert von 2000 überschreitet.

Es ist daher nicht sinnvoll, das Feld neu zu berechnen.

Aber warum passiert das so, wenn das Terminal genau 2000 Candlesticks setzt?


Wenn das Terminal schließt, wird die Anzahl der Balken wieder auf 2000 erhöht und beginnt wieder zu steigen, wenn neue Kerzen erscheinen.


//Deklarieren Sie eine Variable außerhalb von Funktionen:

double Balance=Kontostand();

//Ergänzen der Tick-/Berechnungsfunktion:

if (Kontostand!=Kontostand())

{

Saldo=KontoSaldo();

MeineFunktion(); // <-- Ihre Funktion

}



Vielen Dank, es hat funktioniert!

 
Artyom Trishkin:

Ich habe die App Metatreder 4 auf meinem Handy.
 
Alexey Viktorov:

Und warum sollte man versuchen, herauszufinden, wie es intern funktioniert? Nun, wenn Sie Ihre eigene Funktion schreiben wollen, ist es wahrscheinlich bequemer, zu sortieren und den Wert eines der äußersten Indizes zu nehmen. Aber sie wird kaum schneller sein als die eingebaute Funktion. Außerdem können Sie mit der integrierten Funktion nach einem Wert innerhalb der festgelegten Indexgrenzen suchen. Eine einfache Sortierung wird also nicht funktionieren. Wir müssen also einen Teil des Arrays in ein Zwischenarray kopieren und dieses bereits sortieren und den gewünschten Wert daraus entnehmen, aber das Kopieren von Arrays ist keine sehr "billige" Funktion.

Sie müssen es verstehen, damit sich Ihr Gehirn entwickeln kann. Gestern saß ich lange und machte Skizzen, es scheint, dass es möglich ist, ohne Sortierung auf dem Prinzip der Aufzählung zu tun, aber wir brauchen immer noch Variablen, die Werte zu speichern, und noch mehr können wir den Wert auf einmal zurück, nicht der Index, der die Arbeit vereinfacht. Sie können besser Ihre eigenen Funktionen im Bereich und verschiedene Modifikationen zu speichern Berechnungen. Bei den eingebauten Funktionen fehlen viele Details. Aber eingebaute Funktionen sind sehr schnell, ich verstehe nicht, woran das liegt, vielleicht sind sie in C++ geschrieben, denn ich schreibe meine Funktionen sehr sorgfältig und berücksichtige dabei alle Details: Geschwindigkeit, Qualität, Codeeinsparungen, implementiere Änderungen, die die Anzahl der Überprüfungen und Durchläufe innerhalb von Funktionen reduzieren, aber aus irgendeinem Grund gehen eingebaute Funktionen immer noch an der Geschwindigkeit vorbei, nicht an der Qualität, aber ich wende mich mit dieser Frage schon lange an die Forumsgemeinschaft.

 
Guten Tag an alle Forumsnutzer! Mit einem Problem konfrontiert, der zweite Tag Kopfschmerzen, kann ich nicht herausfinden, wie man die Idee umzusetzen! Wie man ein Rechteck, einen Kreis, ein Oval (egal welche Figur) an einer bestimmten Kerze zeichnet, ohne in neuen Koordinaten neu zu zeichnen. Und was, wenn bestimmte Bedingungen eine Zahl auslösen? Jede Figur auf einem eigenen Kerzenständer. Ich habe erst vor kurzem mit dem Studium von mql4 begonnen, daher bin ich mit der Diagrammerstellung nicht vertraut. Ich habe gestern beschlossen, ein Quadrat auf den 10. Balken zu drucken (als Beispiel). Ich habe eines bekommen und es wird nicht mehr gezeichnet. Gestern, ich stocherte und stocherte den Code, und schließlich funktionierte es, aber das Quadrat ist ständig in seinem alten Ort gelöscht und in einem neuen gezeichnet, dann gestört, dass die Ausgabe Quadrat nur einmal. Hinweis, wer weiß, wie man es umsetzt! Oder teilen Sie uns mit, wo es im Forum eine Niederlassung gibt. Aka bereits eine Reihe von Informationen gelesen, nur mehr verwirrt! Vielen Dank im Voraus für die Antworten!