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
Kein Problem, angevogeur
Der Code sah ursprünglich so aus:
Ich habe ihn einfach zu diesem geändert:
Wie Sie sehen können, habe ich das "Fleisch" der Funktionen nicht verändert. Ich habe lediglich die notwendigen Änderungen vorgenommen, um den neuen Funktionen zu entsprechen. Eine Sache, die ich noch nicht ganz verstanden habe, ist der Wechsel von start() zu OnStart() oder OnTick(), was auch immer es ist (ich habe es im Moment vergessen, aber ich benutze immer noch start() ohne Probleme. Ich sollte erwähnen, dass dies ein benutzerdefinierter Indikator ist. Eine weitere Sache, über die ich mich ärgere, sind die Einschränkungen, was man verwenden kann, je nachdem, ob man einen EA, einen Indikator oder ein Skript programmiert. Es gibt einige Dinge, die Sinn machen (z. B. dass Trades nur dann implementiert werden können, wenn Sie einen EA programmieren), und andere, die keinen Sinn machen (z. B. das Verbot der Verwendung einer MessageBox in einem Indikator). Eine weitere Sache, die mich wirklich stört, ist das Fehlen von Ereignissen für Dinge wie Handelseröffnungen und -schließungen. Dies wäre wirklich hilfreich für das, was ich im Moment zusammenstelle.
Ein Beispiel dafür, worauf ich mit meiner letzten Aussage hinaus will, ist Folgendes: Ich möchte in der Lage sein, ein Kaufsignal anzuzeigen, wenn bestimmte Kriterien erfüllt sind, ein Signal zum Schließen des Kaufs anzuzeigen, wenn bestimmte Kriterien erfüllt sind, aber ich möchte dem Benutzer auch die Möglichkeit geben, das Kaufsignal abzubrechen und auf ein anderes zu warten, wenn er dies wünscht, und das Gleiche gilt für das Schließungssignal. Wenn er sich entscheidet, den Handel zu schließen, möchte ich, dass die Buy- und Close-Buy-Signale verschwinden und der Indikator auf Einstiegskriterien für einen weiteren Handel wartet. Die Annullierungsteile funktionieren perfekt, aber ich kann die Open- und Close-Ereignisse nicht erkennen, weil MQL4 die Nachrichtenübermittlung dafür nicht bereitstellt.
Wenn Sie sich mein Profil angesehen haben, werden Sie gesehen haben, dass ich keineswegs ein unerfahrener Programmierer bin. Die Sprache bietet einfach nicht alle Funktionen, die ein Profi von einer modernen Entwicklungsplattform erwartet und braucht. Ein weiterer Punkt ist, dass ich das Debugging nicht zum Laufen bekomme, was ein großes Problem darstellt. Ich bin der Dokumentation gefolgt, aber als ich versuchte, den Debugger in Gang zu setzen, bekam ich ein Diagramm, das den Eigenschaftsdialog für die Initialisierung meines Indikators öffnete, aber als ich auf Okay drückte, um die Einrichtung des Indikators zu beenden, verschwand das Diagramm und das war's. Vielleicht geht bei der Übersetzung vom Russischen ins Englische etwas verloren und ich übersehe etwas oder der "Kuchen" ist noch nicht ganz fertig. Als Fachmann weiß ich, welch monumentale Aufgabe es ist, eine Entwicklungssprache und -umgebung wie diese zu schaffen. Meine Bemerkungen sind eher als Hinweise für das Entwicklungspersonal gedacht und nicht als Beschwerden.
Prof
Kein Problem, angevogeur
Der Code war ursprünglich dieser:
Prof
Wenn Sie die Variablen, die ich setze, nicht deklariert haben und auch die Methoden, die ich aufrufe, nicht deklariert und ausgearbeitet haben, lässt es sich nicht kompilieren. Das kann es nicht. Ich hätte erwartet, dass Sie das wissen. Ich habe gepostet, wonach ich dachte, dass Sie fragen würden - die Lösung, die mein Problem behebt. Wenn Sie mit MetaQuotes arbeiten und versuchen, herauszufinden, was mit MetaTrader los ist, und es zu beheben, habe ich weiter unten mehr gepostet. Kommentieren Sie den if-Block in init() aus, deklarieren Sie MA_Display_Time_Frame global als Ganzzahl und fügen Sie diese Methoden hinzu :
Da es sich hier um ein kommerzielles Produkt handelt, ist das keineswegs der gesamte Code des Indikators, aber er sollte kompilierbar sein und möglicherweise das Problem mit den ursprünglichen init()- und deinit()-Methoden verursachen. Es reicht aus, um ein paar Beschriftungen und Schaltflächen zu erstellen. Wie einer der Poster erwähnte, trat der Fehler nur sporadisch auf. Es hing jedoch mit jeder Aktion zusammen, die den Indikator zur Deinitialisierung veranlasste, wie z. B. das Ändern von Indikatoreigenschaften, das Ändern von Zeitrahmen oder das Stoppen und Neustarten des Terminals. Wenn Sie die Änderung der Eigenschaften testen möchten, fügen Sie diese Externs zu den Globals hinzu:
Wenn Sie die Externs hinzufügen, brauchen Sie den if-Block, der auf sie verweist, nicht auszukommentieren, und das sollte ausreichen, um das Problem zu kompilieren und zu reproduzieren. Das Problem ist nicht mehr aufgetreten, seit ich die alten Initialisierungs- und Deinitialisierungsfunktionen geändert und auf die neuen Versionen umgestellt habe. Wenn Sie noch etwas brauchen, lassen Sie es mich wissen. Ich werde den Thread im Auge behalten.
Ich hatte eine ähnliche Situation, die indi funktionierte gut, wenn auf der Karte fallen gelassen.
Es funktionierte gut nach Parameter ändern, es funktionierte gut nach Tf Verschiebung.
Nach dem Schließen des MT4 und Neustart, der indi nicht angezeigt.
Er war zwar in der Indikatorenliste auf dem Chart zu sehen, aber er funktionierte nicht.
Nachdem ich das Parameterfenster geöffnet und auf die Schaltfläche OK geklickt hatte, verschwand der Indi sofort aus der Liste.
Ich habe alle Tricks ausprobiert, einschließlich derer, die in den oben genannten Beiträgen beschrieben wurden, aber nichts hat funktioniert.
Es stellte sich heraus, dass es an der Division durch 0 lag!
Die einfache Bedingung: if(x!=0) löste das Problem.
Ja, ich hatte gerade das gleiche Problem mit einem anderen indi.
Ohne die "if" jedes Mal, wenn die Plattform gestartet wird, hat die indi die Division durch 0 Problem,
der neue MT4 scheint keine Informationen zu speichern, bis er angekreuzt wird.
Die andere Lösung wäre die Verwendung von OnCalculate() anstelle von start() oder OnStart(), nehme ich an?
Aber das ist etwas, worüber man sich bei MetaQuotes beschweren muss.
Sie müssen den Return(0) -Trick anwenden.
Jemand wird ein bisschen ausarbeiten, wenn es Interesse gibt.
Sie müssen den Return(0) -Trick anwenden.
Wenn Interesse besteht, wird das jemand näher erläutern.
Nun, alte Indikatoren, die Sie überall im Internet finden können, werden nicht automatisch geändert.
Wenn jemand Codes optimieren kann und das Problem versteht, kann er es selbst tun.
Alle anderen müssen sich damit abfinden, dass sie ihre Indizes nicht jedes Mal sehen, wenn sie den MT4 öffnen.
Wenn sie eine Vorlage haben, können sie diese verwenden, um die Indizes wiederherzustellen, aber das bedeutet, dass sie dies jedes Mal tun müssen.
Templates sind eine andere Geschichte, in der neuen Built 625.
Leute,
Ihr liegt alle daneben. Was ihr beschreibt, ist ein Zeitproblem, das schon immer ein Problem war. Das könnt ihr ganz einfach damit beheben:
Jeder Fehler, der bei der Division durch Null auftritt, ist darauf zurückzuführen, dass Sie versuchen, Berechnungen durchzuführen, bevor der Server zur Ruhe gekommen ist. Wenn Sie in der Initialisierungsfunktion Berechnungen durchführen - TUN SIE ES NICHT! Fügen Sie den obigen Code in Ihre start() oder OnStart() ein und tun DANN, was Sie tun müssen. Dadas, wenn du versuchst, es so einfach zu machen, wie du es tust, wird dich das teuer zu stehen kommen. Du hast Glück mit deinen Indi.
Wenn ein indi verschwindet, hast du einen Initialisierungsfehler. Wenn du dir deine Logs ansiehst, wirst du "global initialization failure" sehen. Du musst herausfinden, warum du das bekommst und es in Ordnung bringen. Wenn Sie das nicht tun, haben Sie nur ein Pflaster auf eine Wunde geklebt, die genäht werden musste, und es wird auf Sie zurückkommen.
Mir scheint, dass dieser Fehler nichts mit OnInit() zu tun hat und die Fehlerbeschreibung irreführend ist.
Mit nur einer einzigen Codezeile
Es wird der Fehler Array out of range ausgegeben.
Ändern Sie den Zeitrahmen und Sie erhalten Global initialisation failed und der Indikator wird aus dem Chart entfernt