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)
-   -   Pivot-Linien über 3 Tage hinweg anzeigen (http://www.expert-advisor.com/forum/showthread.php?t=6065)

Angel 28.03.18 00:45

Pivot-Linien über 3 Tage hinweg anzeigen
 
Hi,

ich möchte mir die Pivotlinien über einen Zeitraum der letzten 3 Tage und gleichzeitig von heute anzeigen lassen. Die Pivotlinien sollen natürlich dauerhaft im Chart bleiben bzw. vielleicht (Resourcengründe) nach 10 Tagen gelöscht werden.
Nun will ich nur das Prinzip verstehen, und daher konzentriere ich mich nur auf die Tagespivotlinie.
Ich habe massive Probleme mit der Definition und Begrenzung der Linien, zb. von vorgestern 00:00 Uhr bis vorgestern 23:00 Uhr, also nur 23 Stunden.
Ich habe zum Linienzeichnen mal OBJ-TREND genommen.

PHP-Code:

ObjectDelete(0"LINIE"); //Falls die Linie mal verschoben wird, so wir sie gelöscht und neu gezeichnet
DH1=iHigh(NULL,PERIOD_D1,1);
DC1=iClose(NULL,PERIOD_D1,1);
DL1=iLow(NULL,PERIOD_D1,1);
DPP NormalizeDouble((DH1+DL1+DC1)/3,Digits);

ObjectCreate(0,"LINIE",OBJ_TREND,0,Time[0],DPP,iTime(Symbol(),PERIOD_D1,0),DPP);
ObjectSetInteger(0,"LINIE",OBJPROP_COLOR,Col );
ObjectSetInteger(0,"LINIE",OBJPROP_WIDTH,);
ObjectSetInteger(0,"LINIE",OBJPROP_SELECTABLE,true);
ObjectSetInteger(0,"LINIE",OBJPROP_SELECTED,true);
ObjectSetInteger(0,"LINIE",OBJPROP_FILL,false);
ObjectSetInteger(0,"LINIE",OBJPROP_BACK,false); 

Kann mir jemand helfen, wie ich die Zeiten von 00:00 Uhr bis 23:00 Uhr in der ObjectCreate-Funktion angebe? Das ist noch so eine große Schwierigkeit für mich.... :(:(:(

Angel 28.03.18 08:03

Hm.... mir fällt gerade auf.... mit "OBJ_TREND" wird es kaum gehen... da geht die Linie auf der einen Seite ins "Unendliche"...
Was könnte man denn noch nehmen?

traderdoc 28.03.18 10:32

OBJ_TREND ist schon völlig korrekt, nur fehlt bei Dir folgende Zeile:

ObjectSet(objectname, OBJPROP_RAY, false);

und dann klappt es auch mit der zeitlichen Begrenzung und der Darstellung der Geraden als Strecke.

Code:

ObjectCreate(0,"LINIE",OBJ_TREND,0,StringToTime("00:00"),DPP,StringToTime("23:00"),DPP);
Damit wird erst einmal die Linie am aktuellen Tag von 00:00 bis 23:00 gezeichnet.
Wenn nun die Linie zu diesen Zeiten am gestrigen (i = 1) oder vorgestrigen Tag (i = 2) gezeichnet werden soll, dass muss einfach ein Vielfaches der Tagessekunden jeweils abgezogen werden:

Code:

int x = 86400;
int i;              // mit i = 0 ... n
ObjectCreate(0,"LINIE",OBJ_TREND,0,StringToTime("00:00")-i*x,DPP,StringToTime("23:00")-i*x,DPP);

Viel Spaß!

traderdoc

Angel 28.03.18 11:00

Oh... Traderdoc... weißt Du, wie lange ich nach diesem Prozedere suchte und wie lange ich rumknobeln musste..? Ich freue mich so sehr... Danke sehr !!! :)

Soblad es fertig ist, stelle ich den Code hier online...!

Boa, das bringt mich jetzt sehr viel weiter..!!!

traderdoc 28.03.18 11:06

Na dann, fasse es als mein spezielles Ostergeschenk für Dich auf.

traderdoc

Angel 29.03.18 02:39

So, ich habe mal etwas programmiert :-)
Es werden die (klassischen) Pivotpunkte auch brav angezeigt... Aber nur von heute - trotz Schleife!!!
Da sitzt man vor dem Metaeditor... dreht hier ein bisschen, und da ein bisschen, verändert dies und das.... und es verändert sich nix :mad:
Es werden wohl die heutigen Werte angezeigt (Habe ich mit einem bewährten Pivot-Template gecheckt, das ich drübergelegt habe), aber es werden keine Linien für die vorigen 2 bzw. 3 Tage angezeigt. Die Linien der vergangenen Tage werden einfach nicht gezeichnet.... Dies auch wieder nur eine vereinfachte Form, denn ich habe vor, diese Tagesschleife später in einer Wochenschleife für die Wochen-Pivots laufen zu lassen. Aber zuerst muss ich wissen, wie ich die Zeitwerte der X-Achse hinbekomme und wie die Linien der vergangenen Tage gezeichnet werden. Die Profis haben es doch sicher auf einen Blick erkannt, was da faul ist ?!?!
PHP-Code:

{             //Tagespivotpunkte
               
for (D=1;D<=3;D++)
                  { 
//Tages-Schleife-Anfang                 

                  
DHl=iHigh(0,PERIOD_D1,D);
                  
DCl=iClose(0,PERIOD_D1,D);
                  
DLl=iLow(0,PERIOD_D1,D);
                  
DPP NormalizeDouble((DHl+DLl+DCl)/3,Digits);
                  
DR1 NormalizeDouble((2*DPP)-DLl,Digits);
                  
DR2 NormalizeDouble(DPP+(DHl-DLl),Digits);
                  
DR3 NormalizeDouble(2*(DPP-DLl)+DHl,Digits);
                  
DS1 NormalizeDouble((2*DPP)-DHl,Digits);
                  
DS2 NormalizeDouble(DPP-(DHl-DLl),Digits);
                  
DS3 NormalizeDouble(DS1-(DHl-DLl),Digits);
                  
ObjectCreate(0,"TAGES-Pivot",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DPP,StringToTime("23:00")-((D-1)*86400),DPP);
                  
ObjectCreate(0,"TAGES-R1",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DR1,StringToTime("23:00")-((D-1)*86400),DR1);
                  
ObjectCreate(0,"TAGES-R2",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DR2,StringToTime("23:00")-((D-1)*86400),DR2);
                  
ObjectCreate(0,"TAGES-R3",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DR3,StringToTime("23:00")-((D-1)*86400),DR3);
                  
ObjectCreate(0,"TAGES-S1",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DS1,StringToTime("23:00")-((D-1)*86400),DS1);
                  
ObjectCreate(0,"TAGES-S2",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DS2,StringToTime("23:00")-((D-1)*86400),DS2);
                  
ObjectCreate(0,"TAGES-S3",OBJ_TREND,0,StringToTime("00:00")-((D-1)*86400),DS3,StringToTime("23:00")-((D-1)*86400),DS3);                  
 
                  
ObjectSetInteger(0,"TAGES-Pivot"OBJPROP_RAYfalse);
                  
ObjectSetInteger(0,"TAGES-Pivot",OBJPROP_COLOR,250);
                  
ObjectSetInteger(0,"TAGES-Pivot",OBJPROP_WIDTH,);
                  
ObjectSetInteger(0,"TAGES-Pivot",OBJPROP_SELECTABLE,true);
                  
ObjectSetInteger(0,"TAGES-Pivot",OBJPROP_SELECTED,true);
                  
ObjectSetInteger(0,"TAGES-Pivot",OBJPROP_FILL,false);
                  
ObjectSetInteger(0,"TAGES-Pivot",OBJPROP_BACK,false); 
                          
}
//Tagesschleife-Ende 

Für die ObjectSetInteger-Abteilung muss ich mir auch noch was überlegen... wie ich das mit einer Schleife hinbekomme... Sonst wären das ja 7 x 7 Zeilen.. und das pro Tag! Ich habe mir überlegt, dass die Funktion "StringConcatenate" vielleicht geeignet wäre, mehrere Strings zusammenzukleben.. Vielleicht so:
PHP-Code:

for (i=1;i<=7;++)
{
Bezeichnung=StringConcatenate("TAGES-R",i);
                  
ObjectSetInteger(0,BezeichnungOBJPROP_RAYfalse); 
                  
ObjectSetInteger(0,Bezeichnung,OBJPROP_COLOR,250);
                  
ObjectSetInteger(0,Bezeichnung,OBJPROP_WIDTH,);
                  
ObjectSetInteger(0,Bezeichnung,OBJPROP_SELECTABLE,true);
                  
ObjectSetInteger(0,Bezeichnung,OBJPROP_SELECTED,true);
                  
ObjectSetInteger(0,Bezeichnung,OBJPROP_FILL,false);
                  
ObjectSetInteger(0,Bezeichnung,OBJPROP_BACK,false);  


Mal sehen, ich werde es später ausprobieren, wichtiger erscheint mir, warum nicht an den anderen Tagen die Pivotlinien gezeichnet werden..:(

Angel 29.03.18 10:01

Offensichtlich muss für jeden Tag, an dem eine Linie gezeichnet werden soll, ein neuer Name für die Linie vergeben werden :eek:
Das bedeutet, wenn man die Pivots der vergangenen 3 Tage mit einer for-Schleife durchrechnen lassen will, so muss man bei Zeichnen der Pivot-Linien deren unterschiedliche Namensvergabe berücksichtigen, d.h. Pivot1, Pivot2 usw. Was mich wiederum zu dem zweiten Teil der Frage bringt: Wie füge ich denn einem String (der zwingend erforderlichen Bezeichnung einer Pivotlinie) eine Zählvariable hinzu, so dass aus "Pivot" dann "Pivot1" , Pivot2" usw. wird?! :(

AVT 29.03.18 10:52

Zitat:

Zitat von Angel (Beitrag 40832)
Wie füge ich denn einem String (der zwingend erforderlichen Bezeichnung einer Pivotlinie) eine Zählvariable hinzu, so dass aus "Pivot" dann "Pivot1" , Pivot2" usw. wird?! :(

Code:

  string PivotLevelName="Pivot";
  for(int i=1; i<=6; i++)  // mal angenommen es sind 6
  {
      string Levelname=( PivotLevelName+IntegerToString(i) );
      Print("Levelname=",Levelname);
  }

wäre meine Lösung. AVT

Angel 29.03.18 12:03

Super - Einwandfrei!
Ich habe das Prinzip verstanden und es klappt auch.
Nun fängt die Schachtelung an.
ABER was ich soooooo nicht bedacht habe:
An den Sonntagen zwischen 23:00 Uhr und 00:00 Uhr bildet er mir nun Pivotpunkte. Das sowie das Ergebnis ist natürlich der größte Unsinn.
Kann man diese Zeit irgendwie herausfiltern? So "Alles was Sonntag ist" oder "alles, was generell zwischen 23:00 Uhr und 00:00 Uhr liegt".

Aufgrund der Länge meiner Pivotpunkte, die sich über den gesamten Tag erstreckt, kann ich sagen, dass sie sich wirklich auf den Zeitraum 0000 - 2300 beziehen und nicht umgekehrt auf den Zeitraum 23:00 - 0000.

Angel 04.04.18 19:18

So, nun habe ich mal einen Tages-Pivot programmiert, der die Tagespivotpunkte der vergangenen 6 Tage anzeigen soll. Das war gar nicht sooooo einfach :eek:
Nun macht er mir bei den letzten beiden Tagespivotpunkten eine Linie über die letzten beiden Tage, was vermutlich wegen der Osterfeiertage / Monatswechsel geschuldet ist - oder findet jemand den Fehler? :(
Die Linie soll natürlich nur über dem jeweiligen Tag liegen.

PHP-Code:

#property copyright "Angel (c)"
#property link      "https://www.mql5.com"
#property version   "1.00"
#property indicator_chart_window

double DHl,DCl,DLl,DPP,DR1,DR2,DR3,DS1,DS2,DS3;
int Z;

//+-----------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {  
   
ObjectsDeleteAll();
   return(
0);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   
ObjectsDeleteAll();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
int start()
 {           
            {for (
Z=Z<=6Z++)
 
                { 
                  
Comment("   Z = ",Z);
                  
DHl=iHigh(NULL,PERIOD_D1,Z);
                  
DCl=iClose(NULL,PERIOD_D1,Z);
                  
DLl=iLow(NULL,PERIOD_D1,Z);
                  
DPP NormalizeDouble((DHl+DLl+DCl)/3,Digits);

                  
ObjectCreate(0,(Z-1),OBJ_TREND,0,(iTime(NULL,PERIOD_D1,(Z-1))),DPP,(StringToTime("22:59")-((Z-1)*86400)),DPP);                                       
                  
ObjectSetInteger(0,Z-1,OBJPROP_RAYfalse);
                  
ObjectSetInteger(0,Z-1,OBJPROP_COLOR,White );
                  
ObjectSetInteger(0,Z-1,OBJPROP_WIDTH,);
                  
ObjectSetInteger(0,Z-1,OBJPROP_SELECTABLE,true);
                  
ObjectSetInteger(0,Z-1,OBJPROP_BACK,true); 
                }    
            }

return(
0);




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