|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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. }//+------------------------------------------------------------------+ |
|
|||
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! |
Lesezeichen |
Stichworte |
hoch, tiefs |
|
|