Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4229
Beiträge: 39207
Benutzer: 6.529
Aktive Benutzer: 255
Links: 80
Wir begrüßen unseren neuesten Benutzer: mt4user
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor einem Tag
- mt4user
vor einem Tag
- htnob77
vor 2 Tagen
- pitpitrows...
vor 2 Tagen
- Neldam
vor 3 Tagen
- Gerik

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 72
Gesamt: 72
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Antwort
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 20.04.19
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 6
stoffel befindet sich auf einem aufstrebenden Ast
Unhappy Meine W52-Funktion gibt rätsel auf

Moin und Grüße @all,

ich schreibe gerade einen Indi der eine Liste mit Symbolen auslist und mir die 52 Wochen Hoch/Tief als Tooltip anzeigen soll. iHighest, iHigh etc. alles korrekt, habe ich händisch geprüft, aber wenn sie den %abstand berechnet kommt es zu unsinnigen Ergebnissen. Zusätzlich habe ich für den aktuellen Chart ein Label-objekt erstellt. Da werden die Ergebnisse korrekt angezeigt

Kling vllt etwas kompliziert ist es aber nicht. Ich hänge einen Screenshot an.

hier mal meine Funktion:

Code:
void w52Function()
{
   Print("Symbol set-file: ",Set_File," Anzahl Symbols: ",ArraySize(Symbols)," ",nCurrency);
    for(int i=0; i<nCurrency; i++)
       {
         Print("Start ",GetMicrosecondCount());
            ResetLastError();
         int w52iHighest = iHighest(Symbols[i], PERIOD_W1, MODE_HIGH, 52);
            if(w52iHighest == -1)Print("w52 ERROR w52iHighest ",w52iHighest," ",GetLastError()," ",ErrorDescription(GetLastError()));//
            
            ResetLastError();
         int w52iLowest =  iLowest( Symbols[i], PERIOD_W1, MODE_LOW, 52);
            if(w52iLowest == -1)Print("w52 ERROR w52iLowest ",w52iLowest," ",GetLastError()," ",ErrorDescription(GetLastError()));//
            
            ResetLastError();
         double w52High = iHigh(Symbols[i], PERIOD_W1,w52iHighest);
            if(w52High == 0)Print("w52 ERROR w52High ",w52High," ",GetLastError()," ",ErrorDescription(GetLastError()));//
            
            ResetLastError();
         double w52Low  = iLow(Symbols[i], PERIOD_W1,w52iLowest);
            if(w52Low == 0)Print("w52 ERROR w52Low ",w52Low," ",GetLastError()," ",ErrorDescription(GetLastError()));//
            
         double w52Prozent = (w52High-w52Low)/100;
         double w52HighProzent1 = NormalizeDouble(w52High-Close[0],2);
         double w52HighProzent  = NormalizeDouble(w52HighProzent1/w52Prozent,2);
            if(w52HighProzent > 100 || w52HighProzent < 0)Print("w52 ERROR w52HighProzent ",w52HighProzent," ",GetLastError()," ",ErrorDescription(GetLastError()));
            
         double w52LowProzent1  = NormalizeDouble(Close[0]-w52Low,2);
         double w52LowProzent   = NormalizeDouble(w52LowProzent1/w52Prozent,2);
            if(w52LowProzent > 100 || w52LowProzent < 0)Print("w52 ERROR w52LowProzent ",w52LowProzent," ",GetLastError()," ",ErrorDescription(GetLastError()));
            
         string getTooltip = ObjectGetString(0,Symbols[i],OBJPROP_TOOLTIP,0);
         ObjectSetString(0,Symbols[i],OBJPROP_TOOLTIP,getTooltip+"\n"+MarketClose+"\n"+Symbols[i]+" w52 High: "+w52HighProzent+"\n"+Symbols[i]+" w52 Low: "+w52LowProzent);
         
         if(  Symbols[i]==_Symbol)
         {
            ObjectDelete(0,"w52High"); 
            LabelCreate(0,"w52High",0,10,15,0,Symbols[i]+" W52 High: "+w52HighProzent+" %","Arial",10,clrGreen,0,0);
            ObjectDelete(0,"w52Low");             
            LabelCreate(0,"w52Low",0,10,30,0,Symbols[i]+" W52 Low: "+w52LowProzent+" %","Arial",10,clrRed,0,0);
         }
        /* while(GetMicrosecondCount()<ul+1000 && !IsStopped()) 
           { 
            Print(Symbols[i]," GetMicrosecondCount() ",GetMicrosecondCount()," ul+1000 ",ul+1000);
           }*/
           Print("end ",GetMicrosecondCount());
           Print(Symbols[i],"w52Prozen: ",w52Prozent," W52 iHighest: ",w52iHighest," W52 High: ",w52High," W52 High % ",w52HighProzent);
           Print(Symbols[i]," W52 iLowest: ",w52iLowest," W52 Low: ",w52Low," W52 Low % ",w52LowProzent);
      }
}
Ich hoffe ich habe mich halbwegs klar ausgedrückt.

Im Screenshot unten kann man den Tooltip mit den W52 High/Low % sehen.

Hat jemand eine Idee warum die Berechnung für den aktuellen Chart korrekt ist, nicht aber bei den Tooltips
Angehängte Grafiken
Dateityp: jpg w52.jpg (180,9 KB, 5x aufgerufen)
Mit Zitat antworten
  #2 (permalink)  
Alt vor 4 Wochen
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 148
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von stoffel Beitrag anzeigen
... aber wenn sie den %abstand berechnet kommt es zu unsinnigen Ergebnissen. Zusätzlich habe ich für den aktuellen Chart ein Label-objekt erstellt. Da werden die Ergebnisse korrekt angezeigt
Kling vllt etwas kompliziert ist es aber nicht. Ich hänge einen Screenshot an.
hier mal meine Funktion:
8< --- SNIP ---
Ich hoffe ich habe mich halbwegs klar ausgedrückt.
Im Screenshot unten kann man den Tooltip mit den W52 High/Low % sehen.
Hat jemand eine Idee warum die Berechnung für den aktuellen Chart korrekt ist, nicht aber bei den Tooltips
So ganz klar ist das nicht und Dein Bild sieht eher aus wie der Negekampf im Tunnel. Ich habe folgendes gemacht:
1. _Symbol eingesetzt, damit ich das zum Testen auf ein paar Paare schmeißen kann.
2. die w52Prozent erst mal als reinen Wert genommen
3. alle Berechnungen auf _Digit Wert Genauigkeit
4. dann beim Prozent die *100
5. ganz zum Schluß die 2-er Digits für die Prozente
Hier stimmt alles. Code:
Code:
         double w52Prozent = NormalizeDouble((w52High-w52Low),_Digits);
         
         double w52HighProzent1 = NormalizeDouble(w52High-Close[0],_Digits);
         double w52HighProzent  = NormalizeDouble(w52HighProzent1/w52Prozent*100,_Digits);
            if(w52HighProzent > 100 || w52HighProzent < 0)Print("w52 ERROR w52HighProzent ",w52HighProzent," ",GetLastError());
            
         double w52LowProzent1  = NormalizeDouble(Close[0]-w52Low,_Digits);
         double w52LowProzent   = NormalizeDouble(w52LowProzent1/w52Prozent*100,_Digits);
            if(w52LowProzent > 100 || w52LowProzent < 0)Print("w52 ERROR w52LowProzent ",w52LowProzent," ",GetLastError());

           //Print("end ",GetMicrosecondCount());
           Print(_Symbol," w52Prozent Range(100%): ",w52Prozent);
           Print(_Symbol," summ H%1+L%1: ",w52HighProzent1+w52LowProzent1);
           Print(_Symbol," W52 iHighest: ",w52iHighest," W52 High: ",w52High," W52 High % ",w52HighProzent);
           Print(_Symbol," W52 iLowest: ",w52iLowest," W52 Low: ",w52Low," W52 Low % ",w52LowProzent);
           Print(_Symbol," summ H%+L%: ",w52HighProzent+w52LowProzent);

LabelCreate(0,"Label",20,20,"text","Arial",12,clrYellow,0,1,"tooltip");         
ObjectSetString(0,"Label",OBJPROP_TOOLTIP,
                   "MarketClose="+DoubleToStr(Close[0],_Digits)
                +"\nw52 High="+DoubleToStr(w52High,_Digits)
                +"\nw52 Low ="+DoubleToStr(w52Low,_Digits)
                +"\nLow % ="+DoubleToStr(w52LowProzent,2)
                +"\nHigh %="+DoubleToStr(w52HighProzent,2)
               );
Vielleicht geht es so bei Dir. AVT
Mit Zitat antworten
  #3 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 6
stoffel befindet sich auf einem aufstrebenden Ast
Standard leider nicht besser

hallo AVT und frohe Ostern

vielen Danke für deine Antwort. Ich habe deinen Code eingefügt. Wie man am Screenshot sehen kann ist das Ergebnis leider auch nicht besser.

Die Berechnung ist an sich ja richtig wie man in meinem ersten Screenshot sehen kann. Das Problem ist das es nur für den aktuell offene chart richtig ist, nicht aber für alle anderen.

ich werde mal einen mini Indi mache mit dem man ein .set-file laden kann.

Mein Gedanke war, das es vllt ein Zeitproblem ist und habe verschiedene .set-files mit 1,3, und 5 Symbole ausprobiert. es ist immer das gleiche. Aktuell richtig, alle anderen falsch.

Vllt fällt dir noch was ein.
Angehängte Grafiken
Dateityp: png w52.png (176,0 KB, 4x aufgerufen)
Mit Zitat antworten
  #4 (permalink)  
Alt vor 4 Wochen
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 148
AVT befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von stoffel Beitrag anzeigen
hallo AVT und frohe Ostern
vielen Danke für deine Antwort. Ich habe deinen Code eingefügt. Wie man am Screenshot sehen kann ist das Ergebnis leider auch nicht besser.

Die Berechnung ist an sich ja richtig wie man in meinem ersten Screenshot sehen kann. Das Problem ist das es nur für den aktuell offene chart richtig ist, nicht aber für alle anderen.

ich werde mal einen mini Indi mache mit dem man ein .set-file laden kann.

Mein Gedanke war, das es vllt ein Zeitproblem ist und habe verschiedene .set-files mit 1,3, und 5 Symbole ausprobiert. es ist immer das gleiche. Aktuell richtig, alle anderen falsch.

Vllt fällt dir noch was ein.
Frohe Ostern auf dem Bild sehe ich wenigstens was
Am .set liegt es nicht, das holt ja nur alle benötigten Symbole in Deine Liste der aktiven.
Zu welchem Objekt gehört Tooltip, zu der 52er HighLinie?
Hat die einen eindeutigen Namen?
Und eigentlich sollte der Wert im aktuellen Chart dann richtig sein.
Was heißt das, aktuell richtig und alle anderen falsch?
Erwartest Du, daß im eur/usd Chart ein Tooltip für usd/jpy kommt?
Das verstehe ich noch nicht. AVT
Mit Zitat antworten
  #5 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 6
stoffel befindet sich auf einem aufstrebenden Ast
Standard hier der mini-indi

Tooltip gehört zu den einzelnen Symbolen im Indikatorfenster, siehe Screenshot 1.

Die Label in Chart dienen nur der Kontrolle, Da ist das Ergebnis korrekt. Aber der Tooltip der einzelnen Symbolnamen im Indi-fenster sind nicht korrekt obwohl sie der gleichen Berechnung entstammen. Genau das ist mein Problem.

habe mal einen mini-indi geschrieben. Einfach eins .set-file mit Symbolnamen erstellen un unter \MQL4\files ablegen. Die Symbolnamen müssen so geschrieben werden wie sie im MarketWatch angezeigt werden. Pro Zeile ein Symbol.

Schon mal vielen Dank für deine Mühe

Ps Im mini-indi sind die Label im Chart anklick bar, dann öffnet sich der angeklickte Chart
Angehängte Dateien
Dateityp: mq4 mini-indi.mq4 (13,2 KB, 1x aufgerufen)
Mit Zitat antworten
  #6 (permalink)  
Alt vor 4 Wochen
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 148
AVT befindet sich auf einem aufstrebenden Ast
Standard

Ich hab ne Idee woran es liegen könnte: Die w52High und w52Low Berechnungen werden explizit über Symbols[i] gemacht, also für jedes Symbol extra, dann wird damit weitergemacht, für die Berechnungen ist die Schleife meiner Meinung nach ok.
Aber wenn Du dann z.B. das Label (das liegt in der Schleife) machst, dann benutzt nur diesen einen Schleifenwert - das heißt jedesmal wenn er die Schleife durchläuft, wird der Labelwert wieder auf den neuen Schleifenwert angepaßt. AVT
Mit Zitat antworten
  #7 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 6
stoffel befindet sich auf einem aufstrebenden Ast
Standard

Die Werte für die Label werden am Ende der Schleife verwendet. Schon vorher wird der Tooltip mit diesen Werten zusammen gefügt. Von daher sollten die Tooltips für die Symbolnamen im indi-Fenster eigentlich auch richtig sein.

Danke für deine Mühe.
Muss für heute Schluss machen. Melde mich morgen wieder. Guts Nächtle
Mit Zitat antworten
  #8 (permalink)  
Alt vor 4 Wochen
AVT AVT ist offline
Mitglied
 
Registriert seit: Mar 2018
Ort: Hamburg
Beiträge: 148
AVT befindet sich auf einem aufstrebenden Ast
Standard

ersetze:
Code:
Close[0] durch iClose(Symbols[i],PERIOD_M1,0)
Mein Handcode zeigt jetzt alle Werte korrekt an. Close[0] bezieht sich immer auf den aktuellen Chart, das kann natürlich nicht gut gehen. Hoffentlich war's das AVT
Mit Zitat antworten
  #9 (permalink)  
Alt vor 4 Wochen
Neues Mitglied
 
Registriert seit: Apr 2019
Beiträge: 6
stoffel befindet sich auf einem aufstrebenden Ast
Thumbs up Super, klappt

Moin AVT,

manchmal sieht man den Wald vor lauter Bäumen nicht. Eigentlich klar das dass nicht so klappen kann. Super das du das bemerkt hast.

Jetzt kann es endlich weiter gehen

Ich werde mich sicher noch öfters melden. Aber bis dahin vielen Dank für deine Mühe und noch happy Trading

Gruß
stoffel
Mit Zitat antworten
Antwort

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +2. Es ist jetzt 08:16 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------