|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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 |
|
|||
Zitat:
Werte abfragen: Code:
iOpen(0,0,iBarShift(0,0,KOORDINATE,0)); "OBJPROP_PRICE1" kannst du bei einer vertikalen Linie schlecht abfragen! Deine Bedingungen sind bischen umständlich. Arbeite doch mit etwas eindeutigem, wie dem Namen. |
|
|||
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. |
|
|||
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 was willst du da verschieben? Eine vertikale Linie nach oben und unten??? |
|
|||
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. ! |
|
|||
Zitat:
Was soll denn "iOpen" für eine Kerze sein? "iOpen" ist eine FUNKTION! Die ganzen Kurse bekommst du ebend durch besagte Funktionen. Von Hand, oder willst du von jeder Kerze entsprechende Kurse "abscannen"? Verstehe grad nicht, was du da verschieben willst... |
|
|||
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 Das soll dann automatisch passieren ! |
|
|||
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 |
|
|||
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...
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? |
|
|||
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. |
Lesezeichen |
Stichworte |
mql4, programmierung, programmierung metatrader, programmierung mql4, variblen, vertikale linie, werte vertikale line |
|
|