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 27.03.18 19:47

automatisch Werte auslesen anhand der vertikalen Linie
 
Hallo zusammen, ich benötige Hilfe.

Ich lege von Hand eine vertikale, gelbe und einer Breite von 5 Linie in das Chart
rein zufällig. Das ist sozusagen mein Startpunkt.

1.Jetzt benötige ich den Open,Close,High und Low Wert der Kerze, der unterhalb der o.g. Linie ist.

2. Dann will ich das Chart entweder in die Vergangenheit oder in der Zukunft
betrachten. Bzw. wie bewege ich diese o.g. Linie nach links und rechts ?

Ich habe da mal etwas vorbereitet:

#property copyright ""
#property link "https://www.mql5.com"
#property version "1.00"
#property strict

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

//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
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))
{
Preis=ObjectGet(akt_Objekt,OBJPROP_PRICE1);
Print("Preis : ",DoubleToStr(Preis,Digits));
}
}//Ende for(int i=0; i<ObjectsTotal();i++)
}//Ende OnTick()

Kann mir das evtl. jemand helfen ? Im Voraus Besten Dank

next user 27.03.18 21:04

Zitat:

Zitat von sill3000 (Beitrag 40781)
1.Jetzt benötige ich den Open,Close,High und Low Wert der Kerze, der unterhalb der o.g. Linie ist.

2. Dann will ich das Chart entweder in die Vergangenheit oder in der Zukunft
betrachten. Bzw. wie bewege ich diese o.g. Linie nach links und rechts ?

Zu 1: Eine vertikale Linie hat als Koordinate ja ebend die Zeit. Da musst du einfach nur ihre Koordinate nehmen und die
Werte abfragen:
Code:

iOpen(0,0,iBarShift(0,0,KOORDINATE,0));
Zu 2: Manuell kannst du sie einfach im Chart verschieben, meinst du im Code?

"OBJPROP_PRICE1" kannst du bei einer vertikalen Linie schlecht abfragen!
Deine Bedingungen sind bischen umständlich. Arbeite doch mit etwas eindeutigem, wie dem Namen.

sill3000 27.03.18 21:12

Zu 1: Eine vertikale Linie hat als Koordinate ja ebend die Zeit. Da musst du einfach nur ihre Koordinate nehmen und die
Werte abfragen:

Und welche Funktionen nehme ich dazu, um die Werte abzufragen.

Zu 2: Manuell kannst du sie einfach im Chart verschieben, meinst du im Code?

Ich möchte den z.B. Close-Wert nehmen unter der gelben Linie und dann
vergleichen, mit den anderen Werten sozusagen ein scannen der Kerzen.

next user 27.03.18 21:22

Zitat:

Zitat von sill3000 (Beitrag 40786)
Und welche Funktionen nehme ich dazu, um die Werte abzufragen.

Habe ich dir doch gepostet...
Für Open, Close, High und Low nimmst du die Funktionen mit einem "i" davor.
Deren letzter Parameter ist der Index der gewünschten Kerze,
welchen du mit der Funktion "iBarShift()" ermitteln kannst.

Zitat:

Zitat von sill3000 (Beitrag 40786)
Ich möchte den z.B. Close-Wert nehmen unter der gelben Linie und dann
vergleichen, mit den anderen Werten sozusagen ein scannen der Kerzen.

Und was willst du da verschieben? Eine vertikale Linie nach oben und unten???

sill3000 27.03.18 21:31

Habe ich dir doch gepostet...
Für Open, Close, High und Low nimmst du die Funktionen mit einem "i" davor.
Deren letzter Parameter ist der Index der gewünschten Kerze,
welchen du mit der Funktion "iBarShift()" ermitteln kannst.

Und dann ersetzte ich nur iBarShift() und wie bekomme ich den z.B. Openkurs der Kerze "iOpen" ??

Und was willst du da verschieben? Eine vertikale Linie nach oben und unten???

Ich will das Chart abscannen von links nach rechts, basierend von der "gelben Linie". Das weiss ich auch noch nicht, wie das fkt. !

next user 27.03.18 21:43

Zitat:

Zitat von sill3000 (Beitrag 40790)
Und dann ersetzte ich nur iBarShift() und wie bekomme ich den z.B. Openkurs der Kerze "iOpen" ??

Du hast ja eine vertikale Linie erstellt. Deren Koordinate ist die Zeit. "iBarShift()" wandelt die Zeit in den entsprechenden Kerzen-Index um.

Was soll denn "iOpen" für eine Kerze sein? "iOpen" ist eine FUNKTION!
Die ganzen Kurse bekommst du ebend durch besagte Funktionen.

Zitat:

Zitat von sill3000 (Beitrag 40790)
Ich will das Chart abscannen von links nach rechts, basierend von der "gelben Linie". Das weiss ich auch noch nicht, wie das fkt. !

Von Hand, oder willst du von jeder Kerze entsprechende Kurse "abscannen"? Verstehe grad nicht, was du da verschieben willst...

sill3000 27.03.18 21:50

Du hast ja eine vertikale Linie erstellt. Deren Koordinate ist die Zeit. "iBarShift()" wandelt die Zeit in den entsprechenden Kerzen-Index um.

Was soll denn "iOpen" für eine Kerze sein? "iOpen" ist eine FUNKTION!
Die ganzen Kurse bekommst du ebend durch besagte Funktionen.


Und das Anwenden der besagten Funktionen ist eben das Problem.
Was schreibe ich wohin, auf was muss ich achten ?

Von Hand, oder willst du von jeder Kerze entsprechende Kurse "abscannen"? Verstehe grad nicht, was du da verschieben willst...

Die gelbe Linie gebe ich vor, ich klicke sie ins Chart und dann soll z.B. eine neue vertikale Linie erscheinen, bei der ich optisch erkennen kann, jetzt ist der Kurs beispielsweise 20 Pips weniger und es erscheint eine schwarze Linie.
Nur für optische Zwecke :o

Das soll dann automatisch passieren !

sill3000 27.03.18 23:18

Habe jetzt mal einen Ansatz,mit Hilfe von "next user", der auch mal teilweise mein Problem löst.

Hier ist der Quellcode:

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);
}
}//Ende for(int i=0; i<ObjectsTotal();i++)
}//Ende OnTick()


Hier wird geprüft, ist es eine gelbe vertikale Linie mit der Breite von 5 und dem richtigen Style auf dem Chart.

Dann wird gesucht und die datetime-Variable "date" übergibt das Datum und nun wird der Open-Kurs der Kerze angezeigt.


Frage: Ich will jetzt das Chart absuchen, bis der Open-Kurs z.B. 40 Pips kleiner ist als die "gelbe vert. Linie" und dann soll dort eine "blaue vert. Linie" erscheinen ?

Im Voraus besten Dank

next user 28.03.18 02:05

Hi sill3000,

die ganzen Abfragen sind doch ein wenig unkomfortabel. Wieso nutzt du nicht z.B. den Objektnamen, um sie anzusprechen?

=== === === === === === === === === === === ===

Ok, fassen wir deine Angaben mal zusammen...
  • Du erstellst im Chart eine vertikale, gelbe Linie.
  • Die ist dann sozusagen die Basis deiner weiteren Vorhaben.
  • Von ihr ausgehend sollen jetzt alle Folgekerzen überprüft werden, bis der (Open)Kurs einer Kerze xx Pips über/unter
    dem (Open)Kurs der Kerze der gelben Linie ist. Diese Kerze soll dann mit einer anderen, vertikalen Linie markiert werden.

Im Startpost schreibst du in Punkt 2, das du z.B. Vergangenheit oder Zukunft betrachten willst. Ist damit gemeint,
das du die gelbe Linie manuell verschieben möchtest, um den Prüfungsbereich zu verändern?

sill3000 28.03.18 07:49

Liste der Anhänge anzeigen (Anzahl: 1)
Die erste vertikale gelbe Linie, wird von Hand ins Chart gesetzt
und ist der Startwert für das Programm und bleibt stehen.

1. Das Programm erkennt, wo steht die gelbe Linie und welcher Eröffnungskurs hat die dazugehörige Kerze.

Wenn jetzt der Chart links neben der gelben Linie durchsucht wird, dann eine blaue Linie, wenn der Kerzenkurs z.B. 10 Pips unter dem Eröffnungskurs ist oder eine rote Linie, bei einer weiteren Unterschreitung.

Aber alles sollte abhängig sein von der gelben Linie.

2. Die Hauptfrage: Wie scanne ich den Chart links oder rechts der gelben Linie.


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