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)
-   -   automatisch Werte auslesen anhand der vertikalen Linie (http://www.expert-advisor.com/forum/showthread.php?t=6064)

sill3000 28.03.18 12:36

extern ENUM_LINE_STYLE Linien_Stil=STYLE_SOLID;
extern color Farbe_Linie=Yellow;
extern int Breite=5;

void OnTick()
{
for(int i=0;i<ObjectsTotal();i++)
{
string akt_Objekt = ObjectName(i);
if((ObjectType(akt_Objekt) == OBJ_VLINE)&&(ObjectGet(akt_Objekt,OBJPROP_SELECTED ) == FALSE)&&(ObjectGet(akt_Objekt,OBJPROP_COLOR) == Farbe_Linie)&&(ObjectGet(akt_Objekt,OBJPROP_STYLE) == Linien_Stil)&&(ObjectGet(akt_Objekt,OBJPROP_WIDTH) == Breite))
{
datetime date=(datetime)(ObjectGet(akt_Objekt, OBJPROP_TIME1));
double Eroeffnungskurs=iOpen(0,0,iBarShift(0,0,date,0));
Print("Eröffnungskurs der gelben Linie: ",Eroeffnungskurs);

//datetime date2=(datetime)(ObjectGet(akt_Objekt, OBJPROP_TIME1));

//Print("Eröffnungskurs der gelben Linie+1: ",date2);
//int Startwert=date;
//Print("Eröffnungskurs der gelben Linie+1: ",Startwert);
//Print("Openwert: ",Open[Startwert]);
}
}//Ende for(int i=0; i<ObjectsTotal();i++)
}//Ende OnTick()

Das ist mein Programm bis jetzt: Es wird die vertikale Linie abgefragt, aber jetzt weiss ich nicht wie ich die Werte links und rechts der vert. Linie überprüfe?

traderdoc 28.03.18 13:03

Zitat:

Zitat von sill3000 (Beitrag 40816)
Das ist mein Programm bis jetzt: Es wird die vertikale Linie abgefragt, aber jetzt weiss ich nicht wie ich die Werte links und rechts der vert. Linie überprüfe?

Welche Werte? Die Open-Kurse der einzelen Kerzen oder die Zeitwerte der einzelnen Linien? Ich tippe mal auf Ersteres:

Prinzipielles Vorgehen:
1. Ermittlung der Zeit der gelben Linie
2. Umrechnung dieser Zeit in den Index des entsprechenden Kerze mit iBarShift()
und dann
3.
Code:

//candle soll die Variable für den Kerzenindex der gelben Linie sein
int links = 20;  //Angabe der Anzahl von Kerzen, die nach links gecheckt werden sollen
for (int i = candle; i <= candle+links; i++) {
  double open = iOpen(NULL, 0, i);
  ...
  ...
}
for (int i = candle; i == 0; i--) {  //oder i > 0, wenn die akt. Kerze nicht mitgenommen werden soll
  double open = iOpen(NULL, 0, i);
  ...
  ...
}

traderdoc

sill3000 28.03.18 15:48

Danke traderdoc für diese extrem gute Hilfestellung.

Jetzt habe ich aber noch ein anderes Problem, die Syntax wie ich anhand von der Zeit, eine "HotPink" vertikale und der Breite von 5 Linie zeichne.

Mein erster Entwurf sieht folgendermassen aus.

#define PRICE_LINE1 "Hot Pink"

Print("Current bar time für rechts der gelben Linie: ",iTime(0,0,a));
Die Zeit wird korrekt ausgegeben. Mit Datum und Zeit.

Aber die Linie will nicht auf dem Bildschirm erscheinen :confused:

Hier mein erster NICHT-funktionierender Entwurf:

ObjectCreate(PRICE_LINE1, OBJ_VLINE, 0, 0, 0);
ObjectSet(PRICE_LINE1,OBJPROP_WIDTH,5);
ObjectSet(PRICE_LINE1, OBJPROP_COLOR, HotPink);
ObjectSet(PRICE_LINE1, OBJPROP_PRICE1,iTime(0,0,a))

Danke schonmal im Voraus

traderdoc 28.03.18 16:16

Als erstes würde ich mal schreiben:

ObjectSet(PRICE_LINE1, OBJPROP_TIME1,iTime(0,0,a));

traderdoc

sill3000 28.03.18 16:22

Vielen, vielen Dank, jetzt klappt es.

Danke traderdoc :D:D:D:D:

sill3000 10.04.18 09:15

keine 2 Linienarten werden angezeigt
 
Liste der Anhänge anzeigen (Anzahl: 2)
Hallo zusammen,

ich habe ein Problem, mit dem ich nicht weiterkomme.
Die vertikalen Linien werden hervorragend angezeigt. Siehe angehängte JPG's.

Aber leider nur getrennt voneinander. Wie schaffe ich es, die beiden Linienarten auf ein Chart zu legen.

Fkt. void navy_Linie_zeichnen(int Pos,int a)
{
ObjectCreate(a, OBJ_VLINE, 0, 0, 0);
ObjectSet(a,OBJPROP_WIDTH,5);
ObjectSet(a, OBJPROP_COLOR, Navy);
ObjectSet(a, OBJPROP_PRICE1,Pos);
ObjectSet(a,OBJPROP_STYLE,Linien_Stil);
ObjectSet(a, OBJPROP_TIME1,iTime(0,0,Pos));
}
void light_salmon_Linie_zeichnen(int Pos,int f)
{
ObjectCreate(f, OBJ_VLINE, 0, 0, 0);
ObjectSet(f,OBJPROP_WIDTH,5);
ObjectSet(f, OBJPROP_COLOR, LightSalmon);
ObjectSet(f, OBJPROP_PRICE1,Pos);
ObjectSet(f,OBJPROP_STYLE,Linien_Stil);
ObjectSet(f, OBJPROP_TIME1,iTime(0,0,Pos));
}


So werden die Linien aufgerufen:

for(int a=0;a<100;a++)
{
navy_Linie_zeichnen(navy[a],a);
light_salmon_Linie_zeichnen(light_salmon[a],a);
}

Aber es erscheint immer nur eine Farbe, nie beide zusammen.

Werden die irgendwie überschrieben ?

Im Voraus besten Dank Gruss sill3000

traderdoc 10.04.18 12:00

Ja klar!, weil beide farbigen Linien denselben Objektnamen haben.

Wenn man sich über F1 an die vorgegebenen Strukturen der Funktionen hält, dann kann man solche Fehler nahezu ausschließen.

Die relevante Funktionsstruktur sieht dann so aus:


bool ObjectCreate(
string object_name, // object name
ENUM_OBJECT object_type, // object type
int sub_window, // window index
datetime time1, // time of the first anchor point
double price1, // price of the first anchor point
datetime time2=0, // time of the second anchor point
double price2=0, // price of the second anchor point
datetime time3=0, // time of the third anchor point
double price3=0 // price of the third anchor point
);

Und dabei sind hier v.a. die ersten 5 Parameter existentiell!

traderdoc

sill3000 10.04.18 14:41

Danke traderdoc,

vielen Dank


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