[ARCHIV!] Alle Fragen von Anfängern, um das Forum nicht zu überladen. Fachleute, gehen Sie nicht vorbei. Ohne dich kann ich nirgendwo hingehen - 4. - Seite 99
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
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
Ich hab's... Wenn ein anderer Weg mit einem Redraw?
Guten Tag, bitte helfen Sie mir mit der Funktion ArrayMo (sie liefert das Maximum der Dichtekurve).
Es haben sich folgende Fragen ergeben:
1. was ist der Zweck der Erstellung eines temporären Arrays
2. es ist nicht klar, woher die Werte des temporären Arrays genommen werden, und daher ist es nicht klar, wie dieses Array durchsucht werden kann:
3. und dann ist die Wahrheit für mich im Allgemeinen tief verborgen))))) Nachdem wir festgestellt haben, dass es keinen Wert gibt, beginnen wir damit, die Größe des Feldes der "unklaren Werte" zu bestimmen.
Ich wäre sehr dankbar für einen Lichtblick in dieser Geschichte))))Ich glaube, die Funktion ist doch nicht ganz richtig geschrieben. Der Hauptgrund ist, dass nach der Ankündigung.
es ist notwendig
sonst(ich zitiere)
Hinweis: Ein lokal in einer Funktion deklariertes Array, dessen Größe geändert wurde, bleibt nach der Ausführung der Funktion unverändert. Wenn die Funktion erneut aufgerufen wird, hat ein solches Array eine andere Größe als das deklarierte!!!!
Und so wird die Funktion bei mehreren Aufrufen "in die Vergangenheit fallen")
Darüber, wie der Algorithmus funktioniert. Das Array m[][2] selbst ist eine direkte Darstellung der empirischen Verteilung der Anzahl der Treffer der Variable x[i] durch ihre verschiedenen Werte. Das heißt, jedes Element des Arrays besteht aus zwei Zahlen - der Anzahl der Treffer auf einen Wert (das erste Feld) und dem Wert selbst. Die Schleife sucht für jedes x[i] nach dem gleichen Wert im Array m, und wenn er gefunden wird, wird das Zahlenfeld hinzugefügt, andernfalls wird mit ArrayResize() ein neues Element erstellt und unser x[i] dorthin geschrieben.
Sobald das Feld gefüllt ist, müssen wir nur noch das Element mit der höchsten Trefferzahl finden, d. h. per Definition den Modulus der Verteilung x.
Dies geschieht durch Zeichenketten
Obwohl es mir so vorkommt (ich bin mir nicht sicher, was das mehrdimensionale Array angeht), könnten Sie einfach
Alles in allem kann ich sagen (bei allem Respekt für den Autor des Codes), dass dieser Algorithmus selbst bei Korrektur aller Fehler extrem ineffizient ist und oft falsche Ergebnisse liefert. Der Grund dafür ist, dass wir mit dem Typ double arbeiten, was bedeutet, dass die Wahrscheinlichkeit, dass die Werte von x[i] nahe beieinander liegen, aber dennoch unterscheidbar sind, recht hoch ist. Dies ist möglicherweise nicht so auffällig, wenn der Stichprobenumfang viel größer ist (Hunderte Male oder mehr) als die Gesamtzahl der Intervalle, in die x[i] eingeteilt ist. In den vielen Fällen, in denen diese Bedingung nicht erfüllt ist, kommt es jedoch zu einer Vielzahl von Fehlberechnungen.
Die korrektere Methode zur Berechnung des Modus ist folgende: Man konstruiert eine empirische Verteilungsfunktion (nicht zu verwechseln mit der Häufigkeitsverteilung), interpoliert sie stückweise linear bis glatt und sucht schließlich den Punkt der maximalen Ableitung. Ein solcher Algorithmus ist frei von den oben genannten Nachteilen und funktioniert auch bei kleinen Stichprobengrößen recht effektiv. Zumindest hatte ich nur die Aufgabe zu lösen, einen Modus für Stichproben von 50-100 Elementen mit einer vergleichbaren Anzahl von Intervallen mit MQL zu finden - und alles war in Ordnung. Der einzige Nachteil besteht darin, dass Interpolationen in der Regel zu einer erheblichen Verringerung der Berechnungsgeschwindigkeit führen, natürlich nur, wenn wir qualitativ glätten wollen.
hier: https://www.mql5.com/ru/job
Ich danke Ihnen. Vielleicht gibt es mehr Möglichkeiten.
Ich danke Ihnen. Vielleicht gibt es mehr Möglichkeiten.
Versuchen Sie, "martingale" in eine Website-Suche einzugeben, und Sie werden überrascht sein
Schon gesehen! Aber das, was ich will, fehlt(
Schauen Sie hier nach
https://www.mql5.com/ru/forum/136747
Hallo. Ich habe gerade mit MQL4 begonnen.
Bitte informieren Sie mich über die Funktion OrderModify. Die Handbücher und Beispiele zeigen, dass diese Funktion für das Trawling, d.h. die Änderung des Stop-Loss, verwendet wird. Ich muss nur den Take-Profit einer offenen Order ändern. Der Stop-Loss wird nicht gesetzt, wenn die Order geöffnet wird und muss auch während der Änderung auf 0 bleiben .
Wie soll die Berechnung und Auswahl der Aufträge aussehen?
Das endgültige Ziel sollte etwa so aussehen
if (OrderType()==OP_BUY && OrderOpenPrice()-Bid>kof*Point) // es liegt ein Kauf vor, aber er ist um kof gesunken
{
OrderModify(OrderTicket(),OrderOpenPrice(),0,OrderOpenPrice()+tpnew*Point,0,CLR_NONE);// wir verschieben den TP tiefer als den zuvor platzierten
Dasselbe gilt für den Verkauf.
Ich danke Ihnen für jede Antwort.
Hallo nochmal :)
Wie ich vermutet habe, sind Probleme aufgetreten. Hier ist der Code. Der Punkt ist, dass Aufträge auf dem Tester durch TP geschlossen werden, und durch die Funktion TP wird entfernt, wenn der Auftrag während des Trailing Stop geändert wird.
Das heißt, der Trailing-Stop wird nicht ausgeführt, und es gab keine Fehler mit falschen TP und SL im Protokoll des Testers. Was ist also los?