How can I get an variable of an indicator?

Einloggen oder registrieren, um einen Kommentar zu schreiben
Daniel Mauker
163
Daniel Mauker  

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:
amando
2891
amando  
Über icustom kannst du die werte auslesen
Otto Pauser
2166
Otto Pauser  
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.

amando
2891
amando  
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;)

Otto Pauser
2166
Otto Pauser  
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);
}
lippmaje
1190
lippmaje  

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

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

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

Daniel Mauker
163
Daniel Mauker  
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.

Otto Pauser
2166
Otto Pauser  
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.

Daniel Mauker
163
Daniel Mauker  
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();
}
Einloggen oder registrieren, um einen Kommentar zu schreiben