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)
-   -   EA für Klassische Chartanalyse (http://www.expert-advisor.com/forum/showthread.php?t=6791)

Mino1337 03.10.20 13:52

EA für Klassische Chartanalyse
 
Hallo,

ich versuche gerade einen EA zu programmieren der nach der klassischen Chartanalyse vorgeht. Er soll für den Anfang eine Trendlinie einzeichnen welche sich auf den höchsten Wert der letzten X Kerzen und Y weiteren Werten stützt.

Im Moment ist nder EA gerade am Anfang und tut noch etwas ganz anderes. Er sollte eine Trendlinie einzeichnen welche sich auf den Höchsten Wert der letzten X Kerzen und den zweit höchsten Wert stützt wenn Y weitere Werte im selben Bereich liegen.

Das ist nur ein Zwischenstand.

Mein Problem ist allerdings das die Trendlinie nicht eingezeichnet wird. Ich schaffe es eine Horizontale Linie einzuzeichnen aber eine Vertikale funktioniert schon nicht mehr. Keine Ahnung warum. Könnte sich das bitte mal jemand ansehen ?


Code:


extern int KerzenZurueck;



bool Wert1IstImBereichVonWert2(double Wert1, double Wert2, double Bereich){
if(Wert1<Wert2+Bereich&&Wert1>Wert2-Bereich){
return true;
}else{
return false;
}
}



//Maximal 100 Kerzen zurück
void TrenbdlinieEinzeichnen(int Periode, int minimaleStuetzpunkte, double Bereich){

double Werte[100];
double WerteOrt[100];
double OrtSortierterArray[100];
int Stuetzpunkte;
double StuetzpunktWerte[2];
double StuetzpunktOrte[2];

for(int i = 0; i<=Periode; i++){
Werte[i]=High[i];
WerteOrt[i]=High[i];
}

ArraySort(Werte,WHOLE_ARRAY,0,MODE_DESCEND);

for(int j = 0; j<=Periode; j++){
for(int o = 0; o<=Periode; o++){
if(Werte[j]==WerteOrt[o]){
OrtSortierterArray[j]=o;
}
}
}


//Der Werte-Array hat nun die Höchstkerzenstände in absteigender Reihenfolge gespeichert und OrtSortierterArray hat die dazugehöhrigen Kerzen gespeichert an selber Stelle wie der Wert in Werte-Array


for(int k=0; k<Periode; k++){

bool ZielErreicht = false;

if(Wert1IstImBereichVonWert2(Werte[k],Werte[k+1],Bereich*Point)&&!ZielErreicht){
Stuetzpunkte=Stuetzpunkte+1;
}else{
Stuetzpunkte=0;
}
if(Stuetzpunkte>=minimaleStuetzpunkte&&!ZielErreicht){
ZielErreicht=true;
StuetzpunktWerte[0]=Werte[k];
StuetzpunktWerte[1]=Werte[k+1];
StuetzpunktOrte[0]=OrtSortierterArray[k];
StuetzpunktOrte[1]=OrtSortierterArray[k+1];
}
}


//In Stuetzpunkt Werte sollten nun zwei Werte und Stuetzpunkt Orte sollten nun zwei Kerzennummern stehen sodass nun eine Linie gezogen werden könnte

ObjectCreate(ChartID(),"Trend", OBJ_TREND, 0, iTime(NULL,PERIOD_CURRENT,StuetzpunktOrte[1]),StuetzpunktWerte[1], iTime(NULL,PERIOD_CURRENT,StuetzpunktOrte[0]),StuetzpunktWerte[0]);

}














void OnTick()
  {

TrenbdlinieEinzeichnen(KerzenZurueck,3,3);
 /*  ObjectCreate(ChartID(),"Trend", OBJ_VLINE, 0, iTime(NULL,PERIOD_CURRENT,0),Ask);
  ObjectSetInteger(ChartID(),"Trend",OBJPROP_COLOR,clrRed);
  ObjectCreate("low",OBJ_TREND,0,TimeCurrent(),Ask,TimeCurrent()+5,Ask);
  ObjectSet("low",OBJPROP_COLOR,LimeGreen);
  ObjectSetInteger(ChartID(),"low",OBJPROP_WIDTH,3);
  ObjectSetInteger(ChartID(),"low",OBJPROP_BACK,back);
 
  */
 
  /*
  double AB = Ask+(1*Point);
 
      ObjectCreate(NULL,"NAME",OBJ_TREND,0,iTime(NULL,PERIOD_CURRENT,5),AB,iTime(NULL,PERIOD_CURRENT,1),Ask);
      ObjectSetInteger(NULL,"NAME",OBJPROP_COLOR,clrRed);
      ObjectSetInteger(NULL,"NAME",OBJPROP_STYLE,STYLE_SOLID);
     
     
      */
  }


Vielen Dank für eure Anregungen

Mino1337 03.10.20 20:20

Ich bin nun einen Schritt weiter. Ich habe festgestellt das die Trendlinie korrekt eingezeichnet wird ich sie nur nicht sehen kann. Wenn man in das Chart rechtsklickt und dann Objekte auswählt, kann man die Linie sehen und auf Anzeigen klicken. Dann wird sie auch angezeigt.

Jemand eine Idee wie ich das per Code hinbekommen kann ?

Bobs 06.10.20 10:21

Es gibt Standardfunktionen:
ObjectSetDouble(chart_ID,object_name,OBJPROP_PRICE ,0,Price);
ObjectSetInteger(chart_ID,object_name,OBJPROP_TIME ,0,Time);


Alle Zeitangaben in WEZ +2. Es ist jetzt 23:13 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