Indikator Verschiedene Fragen - Seite 2

 

#Objekt Bestellung

Ich habe 3 Objekte erstellt, die sich gegenseitig überschneiden.

#1 Horizontale Linie, #2 Vertikale Linie, #3 Trendlinie

Ich muss ihre z-Positionen festlegen.

Wie kann ich ihnen also einen Wert für die z-Positionen geben?

Danke!

 
Marco vd Heijden:

Nun, Sie können alle Linien in OnInit() zeichnen und dann neue zeichnen, wann immer die opentime aus dem letzten bar ändert, werden Sie wissen, es war ein neuer bar.

Aber ich bin nicht sicher, was genau Sie tun wollen.

OK! Ich werde etwas ausprobieren. Dann werde ich hierher zurückkommen.

Danke!

 

@Marco vd Heijden

Bevor ich anfange, darüber zu recherchieren. Ich muss wirklich fragen, ist start() Funktion verlangsamt Chart (/ MT4 Plattformen)?

p.s Ich habe alle Codes in start() spezielle Funktion, dass Code's funktioniert für Period Lines- H1, H4, D1, W1, MN1.

Ein schönes Wochenende und vielen Dank im Voraus.

 
Max Enrik: Ich muss wirklich fragen, ist start() Funktion verlangsamt Chart (/ MT4 Plattformen)?
Während alle Indikatoren aktualisiert werden, tut das Terminal nichts anderes. Deshalb können Indikatoren nicht schlafen, kann nicht handeln, oder tun Web-Anfragen.
 
whroeder1:
Während alle Indikatoren aktualisiert werden, tut das Terminal nichts anderes. Deshalb können die Indikatoren nicht schlafen, nicht handeln und keine Webanfragen durchführen.

Ich danke Ihnen für Ihren Kommentar. (nach Ihrem Kommentar habe ich beschlossen, dass ich etwas in meinen Indikatoren ändern werde - weil ich fast alle meine Indikatoren in start() Funktion gemacht habe).

Ich habe den folgenden Code in die start() -Funktion eingefügt, können Sie mir also helfen, welcher Weg für meinen Indikator gut ist?

Eigentlich habe ich keine Ahnung, wie ich den untenstehenden Code bearbeiten kann, um die kontinuierliche Aktualisierung zu stoppen (ohne alle start() Codes in die init() Funktion zu setzen).

//---MN1
int _cnt_MN1 = 11; // 12 lines for a year 24 for two years and etc.
for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ )
{
    if ( _Period < PERIOD_MN1 )
    {
        //---time convert
        datetime _tltpMN1      = TimeToString( iTime( Symbol(), PERIOD_MN1, i_MN ), TIME_DATE );
        datetime _time         = iTime( Symbol(), PERIOD_MN1, i_MN );// + PeriodSeconds( PERIOD_MN1  );
        //---name
        string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );

        ObjectCreate     ( 0, _vlineName_MN, OBJ_VLINE          , 0, _time, 0     );
        ObjectSetString  ( 0, _vlineName_MN, OBJPROP_TOOLTIP    , _tltpMN1        );
        ObjectSetInteger ( 0, _vlineName_MN, OBJPROP_COLOR      , C'180,160,080'  );
        ObjectSet        (    _vlineName_MN, OBJPROP_BACK       , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_HIDDEN     , true            );
        ObjectSet        (    _vlineName_MN, OBJPROP_SELECTABLE , false           );
        ObjectSet        (    _vlineName_MN, OBJPROP_STYLE      , STYLE_SOLID     );
    }   //---if Close
}   //---for Close

Vielen Dank!

 

Ich brauche wirklich Hilfe, bitte jemand meine Frage zu beantworten.

Danke!

 
Max Enrik: Eigentlich habe ich keine Ahnung, wie ich den unten stehenden Code bearbeiten kann, um die ständige Aktualisierung zu stoppen
  1. Neuen Barcode für neuen Monat anpassen.
    Bars ist unzuverlässig (ein Refresh/Reconnect kann die Anzahl der Bars auf dem Chart ändern) Volumen ist unzuverlässig (miss ticks) Verwenden Sie immer time. Neue Kerze - MQL4 Forum
    Ich bin nicht damit einverstanden, eine neue Bar-Funktion zu machen, weil sie nur einmal pro Tick aufgerufen werden kann. Eine Variable kann mehrere Male getestet werden.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    Verwenden Sie keine Verschiebungsnummern in Objektnamen. Sobald ein neuer Balken beginnt, sind alle Ihre Objekte falsch benannt und Sie können kein neues "<Präfix>0" erstellen. Sie hatten es in Ihrem ursprünglichen Beitrag richtig (mit time)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    Oder konvertiere die Zeit in einen int in einen String.
 

Bitte legen Sie sie in einem Experten anstelle eines Indikators an, damit Sie sie in Zukunft leichter verwenden können, wenn Sie Ihre Handelsstrategie hinzufügen möchten.

Für das Problem mit den Balken speichern Sie die Eröffnungszeit des Balkens in einer datetime-Variablen und vergleichen Sie einfach die aufgezeichnete Zeit mit der realen Zeit, die dann jedes Mal ausgelöst wird, wenn ein neuer Balken auftaucht.

Hier ist ein Beispiel:

datetime M1,M5,M15,M30,H1,H4,D1,W1,MN1;
//+------------------------------------------------------------------+
int OnInit()
  {
//--- create timer
   EventSetMillisecondTimer(250);

//--- create some things

   CreateLines(); // Function that creates time lines

//--- load open times
   M1=iTime(Symbol(),PERIOD_M1,0);
   M5=iTime(Symbol(),PERIOD_M5,0);
   M15=iTime(Symbol(),PERIOD_M15,0);
   M30=iTime(Symbol(),PERIOD_M30,0);
   H1=iTime(Symbol(),PERIOD_H1,0);
   H4=iTime(Symbol(),PERIOD_H4,0);
   D1=iTime(Symbol(),PERIOD_D1,0);
   W1=iTime(Symbol(),PERIOD_W1,0);
   MN1=iTime(Symbol(),PERIOD_MN1,0);


//--- set timelines
   ObjectMove(0,"Time-M1",0,M1,0);
   ObjectMove(0,"Time-M5",0,M5,0);
   ObjectMove(0,"Time-M15",0,M15,0);
   ObjectMove(0,"Time-M30",0,M30,0);
   ObjectMove(0,"Time-H1",0,H1,0);
   ObjectMove(0,"Time-H4",0,H4,0);
   ObjectMove(0,"Time-D1",0,D1,0);
   ObjectMove(0,"Time-W1",0,W1,0);
   ObjectMove(0,"Time-MN1",0,MN1,0);



//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+


//+------------------------------------------------------------------+
//| Timer function                                                   |
//+------------------------------------------------------------------+
void OnTimer()
  {
   if(M1!=iTime(Symbol(),PERIOD_M1,0))
     {
      M1=iTime(Symbol(),PERIOD_M1,0);  // overwrite old value with new value  
      //Alert("New Bar on M1! ",TimeToString(M1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M1",0,M1,0);
     }

   if(M5!=iTime(Symbol(),PERIOD_M5,0))
     {
      M5=iTime(Symbol(),PERIOD_M5,0);
      //Alert("New Bar on M5! ",TimeToString(M5,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M5",0,M5,0);
     }

   if(M15!=iTime(Symbol(),PERIOD_M15,0))
     {
      M15=iTime(Symbol(),PERIOD_M15,0);
      //Alert("New Bar on M15! ",TimeToString(M15,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M15",0,M15,0);
     }

   if(M30!=iTime(Symbol(),PERIOD_M30,0))
     {
      M30=iTime(Symbol(),PERIOD_M30,0);
      //Alert("New Bar on M30! ",TimeToString(M30,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-M30",0,M30,0);
     }

   if(H1!=iTime(Symbol(),PERIOD_H1,0))
     {
      H1=iTime(Symbol(),PERIOD_H1,0);
      //Alert("New Bar on H1! ",TimeToString(H1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H1",0,H1,0);
     }

   if(H4!=iTime(Symbol(),PERIOD_H4,0))
     {
      H4=iTime(Symbol(),PERIOD_H4,0);
      //Alert("New Bar on H4! ",TimeToString(H4,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-H4",0,H4,0);
     }

   if(D1!=iTime(Symbol(),PERIOD_D1,0))
     {
      D1=iTime(Symbol(),PERIOD_D1,0);
      //Alert("New Bar on D1! ",TimeToString(D1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-D1",0,D1,0);
     }

   if(W1!=iTime(Symbol(),PERIOD_W1,0))
     {
      W1=iTime(Symbol(),PERIOD_W1,0);
      //Alert("New Bar on W1! ",TimeToString(W1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-W1",0,W1,0);
     }

   if(MN1!=iTime(Symbol(),PERIOD_MN1,0))
     {
      MN1=iTime(Symbol(),PERIOD_MN1,0);
      //Alert("New Bar on MN1! ",TimeToString(MN1,TIME_SECONDS));
      // do something...
      //ObjectMove(0,"Time-MN1",0,MN1,0);
     }

  }
//+------------------------------------------------------------------+
 
whroeder1:
  1. Passen Sie den neuen Barcode für den neuen Monat an.
    void OnTick(){
       static datetime BOMcur=0;                dateTime BOMpre     = BOMcur;  
       BOMcur = iTime( _Symbol, PERIOD_MN1, 0); bool     isNewMonth = BOMcur != BOMpre;
       if(isNewMonth){
          DO_UPDATE(); ...
       }

  2. for ( int i_MN = 0; i_MN < _cnt_MN1; i_MN++ ){ ...
       string _vlineName_MN = "PERIOD_MN1- " + IntegerToString( i_MN );
    Verwenden Sie keine Verschiebungsnummern in den Objektnamen. Sobald ein neuer Balken beginnt, sind alle Ihre Objekte falsch benannt und Sie können kein neues "<Präfix>0" erstellen. Sie hatten es in Ihrem ursprünglichen Beitrag richtig (mit time)
    string   _vlineName_MN1 = _prefix + "PERIOD_MN1 - " + TimeToStr( _timeCvrt_MN1, TIME_DATE )    ;
    Oder konvertiere die Zeit in einen int in einen String.

Vielen Dank für Ihren Kommentar.

Seit Ihrem Kommentar habe ich versucht, Ihren Kommentar zu recherchieren. (weil ich nie die Funktion 'Void OnTick()' benutzt habe)

Wenn ich den untenstehenden Link lese, verstehe ich, dass die Funktion 'OnTick()' nur für Expert Advisors verwendet wird.

Ich verwende bereits einen Expert Advisor (Trade Panel) in meinem Chart (ich muss alle meine Indikatoren und Expert Advisor in einem Chartfenster verwenden).

Wenn Sie meinten, dass ich Ihren Code im "Expert Advisor" verwenden könnte, werde ich das nicht tun, weil ich mein "Trade Panel" verbessern werde und außerdem möchte ich den Code separat schreiben. (Es ist möglich, dass ich in Zukunft dieseIndikatoren(die mir wichtig sind) kombinieren werde- aber nicht im Moment).

Wie dem auch sei, Mr. William, Ihr Kommentar hat mich wirklich auf eine Idee gebracht und mir auch etwas beigebracht.

(p.s. wenn ich falsch denke, lassen Sie es mich bitte wissen)

Und noch einmal vielen Dank!
Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference
 
Max Enrik(weil ich nie die Funktion 'Void OnTick()' verwendet habe)

Vor Build 600 (3. Februar2014) gab es nur start(). Jetzt gibt es OnTick (EAs), OnCalculate (Indikatoren) und OnStart (Skripte). Ich vergaß, dass Sie über einen Indikator sprechen.

Beginnen Sie mit der Verwendung der neuen Ereignisbehandlungsfunktionen - Funktionen - Grundlagen der Sprache - MQL4 Referenz. Siehe Wie Sie Ihre Rückblicke korrekt durchführen.

Event Handling Functions - Functions - Language Basics - MQL4 Reference
Event Handling Functions - Functions - Language Basics - MQL4 Reference
  • docs.mql4.com
Event Handling Functions - Functions - Language Basics - MQL4 Reference