Indikator Verschiedene Fragen - Seite 12

 

Es gibt keinen Grund, warum die Druckanweisung nicht etwas erzeugen sollte.

Wenn Sie den Indikator zu einem neuen Diagramm hinzufügen, wird er dann gedruckt (ohne dass Sie den Zeitrahmen ändern müssen)?

Wenn ja, könnte es daran liegen, dass Sie den Indikator bereits in einem Diagramm haben und dann neu kompilieren und erwarten, dass Sie die Änderung sehen.

 
honest_knave:

Es gibt keinen Grund, warum diese Druckanweisung nicht etwas erzeugen sollte.

Wenn Sie den Indikator zu einem neuen Diagramm hinzufügen, wird er dann gedruckt (ohne dass Sie den Zeitrahmen ändern müssen)?

Wenn ja, könnte es daran liegen, dass Sie den Indikator bereits in einem Diagramm haben und dann neu kompilieren und erwarten, dass Sie die Änderung sehen.


Danke für den prompten Kommentar, ich weiß das zu schätzen.

ja! Er druckt die unten stehende Meldung entweder Load Template oder Add Indicator.

20...   ... EURUSD,M1: This Year1900

Aber wie Sie wissen, dass der Code könnte mir geben " 2017 ".

//--- 2. Mal bearbeitet

Wenn ich neu kompiliere, zeigt es das richtige Ergebnis.

Aber ich kann nicht öffnen MetaEditor, dass ich neu kompilieren, wenn ich versuche, Indikator hinzufügen und laden Vorlage... Ich hoffe, Sie verstehen, was ich meine.

 
Max Enrik:


Danke für den prompten Kommentar, ich weiß das zu schätzen.

Yeah! Es druckt unten Nachricht entweder Load Template oder Add Indicator.

Aber wie Sie wissen, könnte dieser Code mir " 2017 " geben.

//--- 2. Mal bearbeitet

Wenn ich neu kompiliere, zeigt es das richtige Ergebnis.

Aber ich kann nicht öffnen MetaEditor, dass ich neu kompilieren, wenn ich versuche, Indikator hinzufügen und laden Vorlage... Ich hoffe, Sie verstehen, was ich meine.


Möglicherweise ist der Grund für die "falsche" Jahreszahl, dass OnInit() ausgeführt wird, bevor Sie sich mit Ihrem Broker verbunden haben.

Year() basiert auf der Serverzeit... wenn es keine Verbindung gibt, kennt es das Jahr nicht.

Vergleichen Sie es mit:

TimeYear(TimeLocal())
 
honest_knave:


Möglicherweise ist der Grund für die "falsche" Jahreszahl, dass OnInit() ausgeführt wird, bevor Sie sich mit Ihrem Broker verbunden haben.

Year() basiert auf der Serverzeit... wenn keine Verbindung besteht, kennt es das Jahr nicht.

Vergleiche es mit:


Ich weiß sicher, dass OnInit() undOnCalculate(...) einen anderen Codestil brauchen...
Ich werde versuchen, meine Indikatoren noch einmal neu zu schreiben.
(es ist möglich, dass ich aufgeben werde)

Vielen Dank für Ihren Kommentar.

 

Ich denke, ich könnte einen Code schreiben, um zuerst alle Indikatorobjekte zu löschen und sie dann neu zu schreiben.
Ich habe versucht, wie unten Code. Aber ich habe Zweifel an dieser Methode.

F: Ist diese Methode ausreichend, um alle Objekte des Indikators zu löschen, bitte?

Jeder Rat wäre besser, danke.

int OnInit()
 {
  ObjectsDeleteAll( 0, prefix );
  
  // then all my indicator code here...
 }
 
Max Enrik:

Ich denke, ich könnte einen Code schreiben, um zuerst alle Indikatorobjekte zu löschen und sie dann neu zu schreiben.
Ich habe versucht, wie unten Code. Aber ich habe Zweifel an dieser Methode.

F: Ist diese Methode ausreichend, um alle Objekte des Indikators zu löschen, bitte?

Jeder Rat wäre besser, danke.


Ist das der richtige Weg, um alle Objekte aus dem aktuellen Diagramm zu löschen, die mit 'prefix' beginnen?
 
honest_knave:

Das ist der richtige Weg, um alle Objekte aus dem aktuellen Chart zu löschen, die mit 'prefix' beginnen

Super! Vielen Dank für Ihre Antwort.
Jetzt muss ich nur noch sehen, wie mein Indikator am nächsten Tag funktionieren wird.

( p.s ich möchte meinen Indikator nicht mit Tester testen )

 

( Einmal sagte ich )

Ich benutze unten Methode Code für meine wenigen Indikatoren, die Indikatoren haben keine Probleme, aber nur ein Problem haben, wenn ich MT4-Plattform starten, die ist, dass Indikatoren braucht, um Plattform, die nur für korrekte Werte aktualisiert neu starten. Ich habe dieses Problem NUR einmal pro Tag.

F: Also, ist unten Teil des Codes kann ein Problem, das nicht aktualisiert werden können korrekte Werte, bitte verursachen?

Vielen Dank im Voraus.

int OnInit()
{
    //---
    datetime a = iTime( Symbol(), 0, 0 );
    int      b = iBarShift( Symbol(), 0, a );
    datetime c = iOpen( Symbol(), 0, b );
    //---
    return(0);
}
 

Der Code in OnInit() wird nur einmal ausgeführt.

Wenn Sie Ihr Terminal neu starten, kann OnInit() beendet werden, bevor Sie eine Verbindung zu Ihrem Broker hergestellt haben.

Ohne eine Verbindung zu Ihrem Broker wird die Zeit falsch sein.

Ich würde vorschlagen, den Code aus OnInit() auszulagern, oder zumindest IsConnected() zu überprüfen.

 
honest_knave:

Ich würde vorschlagen, den Code aus OnInit() zu verschieben, oder zumindest IsConnected() zu überprüfen.

Verwenden Sie niemals IsConnected(), ich werde darüber recherchieren.

Vielen Dank!