Jump to content
Tom Next - Daytrading Community

ObjectCreate


Krawummska

Recommended Posts

Hallo,

 

ich möchte ein Textlabel im ChartShift Bereich erstellen lassen.

 

datetime LabelShiftTime;
LabelShiftTime = Time[LabelShift];
bool  ObjectCreate(object_name, ENUM_OBJECT object_type,sub_window,time1,price1)

 

 

 

Dazu gebe ich die Zeitkoordinaten in Time1 ein.

 

0 bedeutet die aktuelle Kerze

1 die vorherige Kerze.

-1 die erste (älteste Kerze im Chart)

 

soweit alles klar.

 

Aber wie kann ich den Objekt weiter nach rechts rücken. Also das der Text nicht in Bar0 anfängt sondern etwas Platz dazwischen bleibt?

 

Hat jemand eine Idee?

Sollte ich eine andere Funktion verwenden?

 

Gruß

Krawummska

 

 

 

 

 

 

Link to comment
Share on other sites

Dazu gebe ich die Zeitkoordinaten in Time1 ein.

 

0 bedeutet die aktuelle Kerze

1 die vorherige Kerze.

-1 die erste (älteste Kerze im Chart)

 

soweit alles klar.

 

Wieso sollte -1 die älteste Kerze sein? Normalerweise hat die den Wert der Kerzenanzahl. -1 ist eine (virtuelle) Kerze nach rechts gezählt. Also müsstest Du mal -10 oder so probieren.

Oder Du arbeitest mit dem Attribut "OBJPROP_CORNER" und dann mit "OBJPROP_XDISTANCE".

 

Beispiel: http://book.mql4.com/functions/objects

Link to comment
Share on other sites

-1 ist eine (virtuelle) Kerze nach rechts gezählt. Also müsstest Du mal -10 oder so probieren.

Das wird so nicht funktionieren. MT4 kann die "virtuellen" Kerzen nicht berechnen.

Es ist also tatsächlich so, dass bei -1 ( und auch bei -10 ) wird tatsächlich die älsteste Kerze im Chart genommen, da hat Krawummska schon recht.

Da der Wert Time[-1] nicht existiert, nimmt der MT4 den 01.01.1970 00:00, also Anfang der Unix-Zeit und wenn nicht so viele Daten da sind, wird die älteste Kerze genommen.

Link to comment
Share on other sites

Das habe ich wohl etwas unzureichend erklärt.

Ich nutze in der ObjectCreat Funktion unter Time 1 noch zusätzlich die Timefunktion.

 

DIe Timefunktion verlangt die nr. der Kerze und gibt dann die aktuelle Uhrzeit als X-Kordinate zurück.

Series array that contains open time of each bar of the current chart. Data like datetime represent time, in seconds, that has passed since 00:00 a.m. of 1 January, 1970.                                                                                                                                                                   Series array elements are indexed in the reverse order, i.e., from the last one to the first one. The current bar which is the last in the array is indexed as 0. The oldest bar, the first in the chart, is indexed as Bars-1.

Also müsste ich zu der zurückgegebenen Uhrzeit noch 60 sekunden addieren für den TF M1 für 1BAR, und die 60 Sek. mit den jeweiligen TF 5, TF15...........u.s.w multiplizieren

 

 

datetime LabelShiftTime;
int LabelShiftTime = Time[LabelShift];

datetime time1 = LabelShifttime +60


bool  ObjectCreate(object_name, ENUM_OBJECT object_type,sub_window,time1,price1)

 

So ungefähr .

 

für die versch. TF würde ich dann mit if else für die TF5 300sek, TF15 900 Sek. ......u.s.w arbeiten.

 

"OBJPROP_CORNER" geht nicht, da die y Achse der errechnete Kurs im Chart ist (double).

Edited by Krawummska
Link to comment
Share on other sites

Hallo,

 

ich möchte ein Textlabel im ChartShift Bereich erstellen lassen.

 

datetime LabelShiftTime;
LabelShiftTime = Time[LabelShift];
bool  ObjectCreate(object_name, ENUM_OBJECT object_type,sub_window,time1,price1)

 

 

 

Dazu gebe ich die Zeitkoordinaten in Time1 ein.

 

0 bedeutet die aktuelle Kerze

1 die vorherige Kerze.

-1 die erste (älteste Kerze im Chart)

 

soweit alles klar.

 

Aber wie kann ich den Objekt weiter nach rechts rücken. Also das der Text nicht in Bar0 anfängt sondern etwas Platz dazwischen bleibt?

 

Hat jemand eine Idee?

Sollte ich eine andere Funktion verwenden?

 

Gruß

Krawummska

 

Du schreibst von TextLabel aber meinst bestimmt normalen TextObjekt oder?

TextObjekt brauch Zeit und Preis als Koordinaten und

TextLabel X und Y Koordinaten, das wäre dann zu einfach, sonst würdest du bestimmt nicht fragen.

 

Wenn du also normalen TextObjekt um einige Kerzen von Bar[0] rechts platzieren möchtest, dann geht es mit normalen Offset in Bars nicht.

Ich verwende folgendes Konstrukt:

 

 

datetime bartime = Time[0]+ n*60*Period();
 

wo n= Versatz um n Bars nach rechts und

bartime die Zeit die du dann in deiner ObjectCreate Funktion verwenden kannst

  • Upvote 2
Link to comment
Share on other sites

Okay, bei Timeangaben mag das anders sein - ich bin halt generell vom Shift bei Kerzen ausgegangen. Die kann man wirklich nach rechts zählen.

 

 

Gut zu wissen. Wo bzw. in welchen Funktionen kann man das gebrauchen?

 

Kann ich mir evtl die Uhrzeit der Kerze -1 ausgeben lassen und damit den if esle Kramm umgehen?

 

 

PS.

Sorry, für die vielen dummen Fragen. Der Indikator ist mein erstes Projekt mit Mql, bzw. Programmierung überhaupt.

 

 

Edit:

 

 

 

Du schreibst von TextLabel aber meinst bestimmt normalen TextObjekt oder?

nochmal Sorry, du hast natürlich recht.

 

Edited by Krawummska
Link to comment
Share on other sites

"OBJPROP_CORNER" geht nicht, da die y Achse der errechnete Kurs im Chart ist (double).

 

Hä? Du hast geschrieben, dass Du ein Textobjekt rechts im Chartshiftbereich platzieren willst. Das sollte mit Corner und den X und Y Distances funktionieren.

Was hat das mit der "Y-Achse" und "errechneten Kurs" zu tun?

Link to comment
Share on other sites

Wenn du also normalen TextObjekt um einige Kerzen von Bar[0] rechts platzieren möchtest, dann geht es mit normalen Offset in Bars nicht.

Ich verwende folgendes Konstrukt:

 

 

datetime bartime = Time[0]+ n*60*Period();
 

wo n= Versatz um n Bars nach rechts und

bartime die Zeit die du dann in deiner ObjectCreate Funktion verwenden kannst

 

 

Danke titan.

 

Das wird funktionieren. Einfach aber genial.

 

 

 

@conglom

 

titan hat es schon richtig erkannt, was ich beabsichtige.

 

Ich werde mich in zukunft bemühen etwas ausfühlicher und mit den richtigen Begriffen zu posten.

 

Ich danke Dir natürlich auch für deine Hilfe.

Link to comment
Share on other sites

Hä? Du hast geschrieben, dass Du ein Textobjekt rechts im Chartshiftbereich platzieren willst. Das sollte mit Corner und den X und Y Distances funktionieren.

Was hat das mit der "Y-Achse" und "errechneten Kurs" zu tun?

 

 

Ich möchte einen Text im Chart platzieren auf Basis von Kurs und Zeitdaten mit ein wenig Abstand (1 oder 2 Bar) zur aktuellen Kerze,

Abstand deswegen, da sonst der Anfang des Textes die Bar0 verdecken würde.

 

Mit "OBJPROP_CORNER" kann ich den Text nur xy Pixel von den Ecken aus, fixiert, platzieren.

Link to comment
Share on other sites

Danke Finger, aber ich versteh es nicht.

 

Kannst du das bitte für die Krappelgruppe erklären.

 

Ich versuchs mal selbst.

 

Die Schleife wird 20 mal ausgeführt. Aber wieso gerade 20 x?

Die Range der Bsp. Kerze 1 * 0,1 /20 +dy (als Ergebniss der vorherigen Schleife) = dy

nach dem break der Schleife hab ich dann das Endergebnis von dy

Bsp. bei einer Range von 1 Pip dy= 0.000000526315789473684

 

hmm, völlige Ratlosigkeit macht sich breit. noidea.gif

 

low-1

i ist 0 -1 heißt die Bar -1. die letzte Bar im Chart?

 

+dy = ergibt für mich keinen Sinn. noidea.gif noidea.gif noidea.gif noidea.gif

Edited by Krawummska
Link to comment
Share on other sites

So wie ich es verstehe, berechnet FinGeR 10% der Range der letzten 20 Kerzen. Das nimmt er dann als Abstand, wo Dein Textfeld hin soll (bspw. unter das low).

 

 

Sollte es dann nicht besser so heißen?

 

double dy=0; for(int a=1; a<=20; a++) dy+=0.1*(high[a]-low[a];
dy=dy/20;  

low[i]-1*dy

 

i kommt dann wohl aus einer anderen Funktion und besagt unter welcher Kerze ich das Textfeld haben möchte.

Link to comment
Share on other sites

 

So wie ich es verstehe, berechnet FinGeR 10% der Range der letzten 20 Kerzen. Das nimmt er dann als Abstand, wo Dein Textfeld hin soll (bspw. unter das low).

Eventuelle irre ich mich aber auch cleanglasses.gif .

Genau so.

Aber wie kann ich den Objekt weiter nach rechts rücken. Also das der Text nicht in Bar0 anfängt sondern etwas Platz dazwischen bleibt?

Jetzt lese ich erst richtig, du möchtest nach rechts.

Das Funktioniert anders.

Ich programmiere mal ein Beispiel und Erkläre wie.

  • Upvote 1
Link to comment
Share on other sites

Ein ganz einfaches Beispiel ohne Extras.

 

So wie titanfx schon geschrieben hat.

 

Wenn du also normalen TextObjekt um einige Kerzen von Bar[0] rechts platzieren möchtest, dann geht es mit normalen Offset in Bars nicht.

Ich verwende folgendes Konstrukt:

datetime bartime = Time[0]+ n*60*Period();

 

 

1. Du musst erstmal schauen ob du den Platz nach rechts sichtbar hast. Also ob Chart Shift aktiviert ist und die Breite dir genügt.

Das ganze nennt sich Chart Shift & Chart Shift Size.

ChartSetInteger(0,CHART_SHIFT,true); 
ChartGetDouble(0,CHART_SHIFT_SIZE,0,Get); 

Windows_8_1.png

 

2. Wenn der Bereich nicht Sichtbar ist, musst du ihn für dich setzten.

ChartSetDouble(0,CHART_SHIFT_SIZE,50);  

 

3. Dann kannst du dein Text Objekt an diesen Sichtbaren Bereich bewegen, so wie titanfx schon beschrieben

 ObjectMove(Name,0, time[0]+Period()*60*6, high[0] ); 

 

Im Anhang ein ganz einfaches Beispiel, Indikator für MetaTrader 4 Build 600+

 

 

 

-

TextOnChartShift.mq4

  • Upvote 3
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...