Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools

Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools (http://www.expert-advisor.com/forum/index.php)
-   Programmierung MQL4 (http://www.expert-advisor.com/forum/forumdisplay.php?f=220)
-   -   Hochs und Tiefs verbinden! (http://www.expert-advisor.com/forum/showthread.php?t=6741)

janbuk63 05.08.20 21:18

Hochs und Tiefs verbinden!
 
Hallo allerseits!
ich versuche mir ein Behelfsmittel für eine bestimmte Strategie zu basteln und bleibe an einem Problem stecken.
Der Script soll Linien zeichnen zwischen letzten Hoch und laufende Kerze wenn sie höher als die vorherige ist und das gleiche für Tief nur umgekehrt.

Jede Linie braucht 4 Variablen die im Arrays gespeichert werden sollen.
Das Problem ist dass ich es nicht fertig kriege den Code so zu schreiben dass nur 1 Linie zwischen dem letzten Hoch und der Laufender Kerze gezeichnet wird.
Nach Fertigstellung der Linie wird ein Index um 1 verkleinert damit jede Linie eine neue Variable bekommt.
Das Problem ist dass der index obwohl es eine Linie schon gibt - wird verkleinert und wieder eine Linie gezeichnet auf der gleicher Kerze und so habe ich nach ein Paar Minuten 100 Linien : völlig sinnlos!!
Ich habe schon alles probiert aber irgendwie wird die "alte" Linie nicht gesehen
und immer weiter gezeichnet!!
Wer weiß die Lösung?:(
Gruß

hier der Code:
Code:

      int kerze_highest_Nummer = iHighest(NULL,Period(),MODE_HIGH,Wieviel_Kerzen,2); // Kerzen Nr. wo der größte Preis
        kerze_highest_Preis[0]=iHigh(NULL,Period(),kerze_highest_Nummer);          // höchste Preis dieser bestimmten Kerze
  double  kerze_highest_Preis_davor1  =iHigh(NULL,Period(),kerze_highest_Nummer+1);          // höchste Preis 1 Kerze davor
 //-----------------------------------------------

    //--Laufende Kerze
          high_current[0]=iHigh(NULL,Period(),0);// höchste Preis dieser bestimmten Kerze: KERZE NULL (current)
  double high_1=iHigh(NULL,Period(),1);        // höchste Preis dieser bestimmten Kerze: KERZE Nr.1
//-------überprüfe ob es ein Hoch gibt d.h. Kerze davor und danach ist kleiner
        if(kerze_highest_Preis_davor1<kerze_highest_Preis[0]
          && high_current[0]>=high_1
          )   
 
 
  {                // der Index: "indx1" fängt bei 100 und läuft nach unten bis 1
Sleep(2000);           
                  // Linien Name: "Div_hochs "+IntegerToString(indx1)   
  if( (ObjectFind("Div_hochs "+IntegerToString(indx1))<0))    // suchen nach Object "Linie" - wenn Eregebnis -1 bedeutet Keine Linie mit  dem Namen
    if( (ObjectFind("Div_hochs "+IntegerToString(indx1))<0))  // Wiederholung der Suche wenn beim ersten mal der Object nicht gesehen wurde obwohl er da ist!!
    {//0.
      {//1.
      if(kerze_highest_Preis[indx1]==0      // Anfangspunkt ist noch leer (laufende Index: indx1)
          && div_hochs_time[indx1+1]!=Time[0] // Index : indx1+1 - Zeitpunkt wo Linie endet ist nicht gleich(!=) mit laufende Kerze 
          && TimeCurrent()>=Time[0]+250      // gezeichnet wird wenn die Laufende Kerze (5 Min) fast zu Ende ist
        )
         
        {//2.
        CreateTLine("Div_hochs "+IntegerToString(indx1),clrBlueViolet,Time[kerze_highest_Nummer],kerze_highest_Preis[0],Time[0],high_current[0],0,0,2,2);
       
        kerze_highest_Preis[indx1] = kerze_highest_Preis[0]; // Anfangspunkt wird gespeichert
        high_current[indx1]=high_current[0];                // Endpunkt wird gespeichert
        LiniaAnfangHochs_time[indx1]=Time[kerze_highest_Nummer]; //Anfangszeit
        div_hochs_time[indx1]=Time[0];                          // Endzeit
   
        // überprüfe ob Linie aufsteigend od fallend ist
        if (kerze_highest_Preis[0]<high_current[0]){div_hoch[indx1] =1;} else {div_hoch[indx1] =0;}// Linie Aufsteigend dann ist der Schalter auf "1"
            Sleep(2000);
            indx1=indx1-1;  // index für Arrays wird geändert
                      if(indx1 ==1)
            {
            indx1=100; // wenn index 100 erreicht wird er zurückgesetzt und alle Objecte gelöscht
            for(int i=1;i<=100;i++)
              {ObjectDelete("Div_hochs "+IntegerToString(i));
              kerze_highest_Preis[i]=0;
              high_current[i]=0;               
              LiniaAnfangHochs_time[i]=0
              div_hochs_time[indx1]=Time[0];                         
              }
            } 
        }//2.
      }//1.
    }//0.
  }//+------------------------------------------------------------------+


janbuk63 08.08.20 17:10

wie ich sehe hat keiner geantwortet aber ist nicht schlimm.
Mittlerweile hat sich das Problem selbst gelöst.
Der Code funktioniert genau wie in meinem Post dargestellt.
Die doppelte Überprüfung ob die Linie existiert hat es doch geholfen.
Jetzt werden die Linien gesehen und alles ist OK!:)


Alle Zeitangaben in WEZ +2. Es ist jetzt 01:33 Uhr.

Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.6.1
Powered by vBCMS® 2.7.0 ©2002 - 2024 vbdesigns.de
Copyright ©2009 - 2023 by Expert-Advisor.com - Das Metatrader Forum