How can I get an variable of an indicator?

 

Hei there,

I have an indicator for currency strength. Now i want to use it for my EA. 

how can i get the value of the variable? 


Thanks in advance


PS: in the attachment is die indicator and i want to get the "PairVal"

Dateien:
 
Über icustom kannst du die werte auslesen
 
amando:
Über icustom kannst du die werte auslesen

Amando, hast du dir den Code angesehen? Dieser Indi hat keine Buffer, er erzeugt nur Chartobjekte (OBJ_LABEL).

Da nutzt dir iCustom() leider gar nix.

Im übrigen ist das ein uralter Hund der Stringfunktionen wie StringUpper(), StringLower() definiert, (und das noch grauenhaft) die doch Systemfunktionen sind.

Heissen halt StringToUpper(), StringToLower(). StringLower() wird definiert aber nirgendwo verwendet.

Wenn man den ganzen Müll rausschmeisst, kan man das leicht in einen EA einbauen.

 
Otto Pauser:

Amando, hast du dir den Code angesehen? Dieser Indi hat keine Buffer, er erzeugt nur Chartobjekte (OBJ_LABEL).

Da nutzt dir iCustom() leider gar nix.

Im übrigen ist das ein uralter Hund der Stringfunktionen wie StringUpper(), StringLower() definiert, (und das noch grauenhaft) die doch Systemfunktionen sind.

Heissen halt StringToUpper(), StringToLower().

Wenn man den ganzen Müll rausschmeisst, kan man das leicht in einen EA einbauen.

Nachem es mq4 ist hab ichs mir nicht angesehen 😂😂😂

du hast natürlich recht Otto (von Calli geändert;)

 
amando:

Nachem es mq4 ist hab ichs mir nicht angesehen 😂😂😂

du hast natürlich recht Calli

Hey, ich bin's, Otto!

Hie und da schau ich mir auch gerne MQL4 Code an. Da schaudert es mich meistens ;)

Die ganze Logic dieses Indis ist in den ersten 20 Zeilen der Funktion plot_obj() definiert und lässt sich spielend in einen EA übernehmen.

Die Funktion DivZero() ist wichtig. Ich tät sie halt anders nennen, zB. SecureDiv()

edit: aber auch die ist Schrott.

Das Original

double DivZero(double n, double d)
{
   if (d == 0) return(0);
   else return(1.0*n/d);    // was soll das 1.0* hier bewirken ??? 
}

So geht das

double SecureDiv(double n, double d)
{
   return(d==NULL?0:n/d);
}
 

Warum sollte eine Division durch 0 wieder 0 ergeben? Wie wärs so:

return d!=0 ? n/d : (n>=0 ? DBL_MAX : -DBL_MAX);
 

weil Du sonst im Ergebnis eine Division durch 0 hast, was dir den EA beendet.

Wenn Du diese halt auf 0 setzt und sagst, mach bei 0 oder kleiner keine Division läuft der EA weiter

 
Otto Pauser:

Hey, ich bin's, Otto!

Hie und da schau ich mir auch gerne MQL4 Code an. Da schaudert es mich meistens ;)

Die ganze Logic dieses Indis ist in den ersten 20 Zeilen der Funktion plot_obj() definiert und lässt sich spielend in einen EA übernehmen.

Die Funktion DivZero() ist wichtig. Ich tät sie halt anders nennen, zB. SecureDiv()

edit: aber auch die ist Schrott.

Das Original

So geht das

Danke Otto,

leider bin ich immer noch nicht wirklich weiter gekommen... wie übernehme ich es denn dann spielend?

ich brauche an sich nur den PairVal wert, der nicht mal angezeigt werden muss.

 
TraderMkr:

Danke Otto,

leider bin ich immer noch nicht wirklich weiter gekommen... wie übernehme ich es denn dann spielend?

ich brauche an sich nur den PairVal wert, der nicht mal angezeigt werden muss.

         double day_high     = MarketInfo(_Symbol,MODE_HIGH);
         double day_low      = MarketInfo(_Symbol,MODE_LOW);

         double curr_bid     = MarketInfo(_Symbol,MODE_BID);
         double bid_ratio    = DivZero(curr_bid - day_low, day_high - day_low);

Wenn du das für das aktuelle Symbol erhalten willst.

         double                 ind_strength = 0;
         if (bid_ratio >= 0.97) ind_strength = 9; else 
         if (bid_ratio >= 0.90) ind_strength = 8; else 
         if (bid_ratio >= 0.75) ind_strength = 7; else 
         if (bid_ratio >= 0.60) ind_strength = 6; else 
         if (bid_ratio >= 0.50) ind_strength = 5; else 
         if (bid_ratio >= 0.40) ind_strength = 4; else 
         if (bid_ratio >= 0.25) ind_strength = 3; else 
         if (bid_ratio >= 0.10) ind_strength = 2; else 
         if (bid_ratio >= 0.03) ind_strength = 1;

Das könnte man auch durch multiplizieren mit 10 und auf eine oder zwei Dezimale runden ersetzen.

Diesen if-Block habe ich umformatiert so wie ich ihn schreiben würde und ich denke so ist es besser.

Aber wie gesagt, eigentlich ist er unnötig.

PS: Sch....lechter Editor hier, kann ich keine Zeile mehr einfügen wenn ich mir keine Leerzeile 'reserviert' habe.

 
Otto Pauser:

Wenn du das für das aktuelle Symbol erhalten willst.

Das könnte man auch durch multiplizieren mit 10 und auf eine oder zwei Dezimale runden ersetzen.

Diesen if-Block habe ich umformatiert so wie ich ihn schreiben würde und ich denke so ist es besser.

Aber wie gesagt, eigentlich ist er unnötig.

PS: Sch....lechter Editor hier, kann ich keine Zeile mehr einfügen wenn ich mir keine Leerzeile 'reserviert' habe.

okay anscheinend stehe ich dermaßen auf dem schlauch...

Wo füge ich denn welchen der beiden Blöcke ein?

erstelle ich das so?

double DivZero(double n, double d)
{
   return(d==NULL?0:n/d);
}
void plot_obj()
{
   
   double day_high     = MarketInfo(_Symbol,MODE_HIGH);
   double day_low      = MarketInfo(_Symbol,MODE_LOW);

   double curr_bid     = MarketInfo(_Symbol,MODE_BID);
   double bid_ratio    = DivZero(curr_bid - day_low, day_high - day_low);
   
   
   double                 ind_strength = 0;
   if (bid_ratio >= 0.97) ind_strength = 9; else 
   if (bid_ratio >= 0.90) ind_strength = 8; else 
   if (bid_ratio >= 0.75) ind_strength = 7; else 
   if (bid_ratio >= 0.60) ind_strength = 6; else 
   if (bid_ratio >= 0.50) ind_strength = 5; else 
   if (bid_ratio >= 0.40) ind_strength = 4; else 
   if (bid_ratio >= 0.25) ind_strength = 3; else 
   if (bid_ratio >= 0.10) ind_strength = 2; else 
   if (bid_ratio >= 0.03) ind_strength = 1;
   
 
   //Comment();
}
Grund der Beschwerde: