|
Startseite | Registrieren | Hilfe | Benutzerliste | Kalender | Suchen | Heutige Beiträge | Alle Foren als gelesen markieren |
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
High der letzten 100 Candles miteinander verbinden ? Wie?
Hallo,
ich stehe mal wieder vor einer programmiertechnischen Herausforderung, bei der ich nicht weiterkomme. Der Timeframe ist willkürlich auf M1 gewählt, da geht in der Erprobung vieles schneller. Wie verbindet man denn die Highs der letzten 100 Candles mit einer Linie? Ich habe es mal mit der Funktion "Trendlinie" versucht. Code:
#property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict int ii; string Nummer; int Zeittakt=1; datetime dt; bool NeueKerze=false; datetime An[101]; double Hi[101]; datetime En[101]; string NameHi; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ObjectsDeleteAll(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(dt!=iTime(_Symbol,Zeittakt,0)) { dt=iTime(_Symbol,Zeittakt,0); for(ii=1;ii<100;ii++) { An[ii]=iTime(_Symbol,1,ii);// Anfangszeit des ersten Bars (auf M1) Hi[ii]=NormalizeDouble(iHigh(_Symbol,1,ii),5);// Höhe des Bars En[ii]=An[ii];//Endzeit des auf den ersten folgenden Bars (auf M1) } Nummer=IntegerToString(ii);// Nummerierung der Linien und Umwandeln in einen String NameHi="MinuteBarHigh"+Nummer;// Namensgebung der jeweiligen Linie und indizieren des Namens ObjectCreate(0,NameHi,OBJ_TREND,0,An[ii],Hi[ii],En[ii+1],Hi[ii+1]); ObjectSetDouble(0,NameHi,OBJPROP_PRICE1,Hi[ii]); ObjectSetDouble(0,NameHi,OBJPROP_PRICE2,Hi[ii+1]); ObjectSetInteger(0,NameHi,OBJPROP_TIME1,An[ii]); ObjectSetInteger(0,NameHi,OBJPROP_TIME2,En[ii+1]); ObjectSetInteger(0,NameHi,OBJPROP_STYLE,1); ObjectSetInteger(0,NameHi,OBJPROP_WIDTH,5); ObjectSetInteger(0,NameHi,OBJPROP_COLOR,clrBlue); ObjectSetInteger(0,NameHi,OBJPROP_RAY_RIGHT,false); } NeueKerze=false; }
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
|
|||
Ok... nach Beinahe-Verzweifelung habe ich es hinbekommen.
Ich stelle den Code hier herein - für diejenigen, die einzelne Routinen gebrauchen können. Im Nachhinein - jetzt, da ich das Ergebnis sehe - erschließt sich mit der Sinn des Verbindens der Minutenkerzen NICHT, da man diese auf höheren Zeitebenen quasi als ähnlich dem Balkenchart sieht. Klar - da ist "vergrößert" auf Stunde ja kein "Zoom-Out", sondern auf Stunden eng begrenzte Slots. Nun - immerhin eine Erkenntnis und nützlich für "wandernde" Objekte, wenn auch nicht sonderlich "ressourcenschonend"... LG Angel (Bitte nicht schleßen, es könnten noch Kommentare kommen) Code:
//+------------------------------------------------------------------+ //| NewCandles.mq4 | //| Copyright 2019, MetaQuotes Software Corp. | //| by Angel, 17.06.2019| //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2019, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict int i=0; int x=0; int a=0; string Nummer; int Zeittakt=1; int AnzahlBars; int AnzahlVerbindungen; int Del; datetime dt; bool NeueKerze=false; datetime An[2000]; datetime En[2000]; double Hi[2000]; string Name; string NameHi; string NameDel; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { ObjectsDeleteAll(); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { ObjectsDeleteAll(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { if(dt!=iTime(_Symbol,Zeittakt,0)) //Jede 1 Minute soll auf neue Kerze geprüft werden; { dt=iTime(_Symbol,Zeittakt,0); NeueKerze=true; Nummer="";// Reset der Vaiablen (Zum Zeitpunkt des Erstellens wurden diese nach Durchlaufen der Schleifen nicht (!) zurückgesetzt, warum auch immer... //Reset auch daher, weil oft noch vor Ende der Minute die Schleife nicht vollständig durchleifen werden konnte i=0; a=0; x=0; AnzahlBars=2000;// Festlegen auf die Anzahl der Minuten-Bars, deren Hoch miteinander verbunden werden sollen AnzahlVerbindungen=AnzahlBars-1; for(Del=1;Del<AnzahlVerbindungen;Del++)// Löschroutine zum Löschen der Objekte zu Beginn der neuen Minute { Nummer=IntegerToString(Del);// Indizierung des Objektnamens NameDel="MinuteBar"+Nummer; ObjectDelete(0,NameDel);// Löschen der zuvor gezeichneten Objekte } if(NeueKerze==true) // Wenn eine neue Kerze begonnen hat, dann... { for(a=1;a<AnzahlBars;a++)// Schleife zum Berechnen der Werte der Minuten-Bars { An[a]=iTime(_Symbol,1,a);// (An)fangs-Zeit des Minuten-Bars "a" Hi[a]=NormalizeDouble(iHigh(_Symbol,1,a),5);// Hoch des Minuten-Bars "a" En[a]=An[a];// (En)d-Zeit des Minuten-Bars "a" Alert("1 x= ",x," a= ",a," i= ",i," NeueKerze= ",NeueKerze," dt= ",dt," An[a]= ",An[a]," Hi[a]= ",Hi[a]," En[a]= ",En[a]);// Check der Werte } for(x=1;x<AnzahlVerbindungen;x++)// Schleife zum Erstellen der einzelnen Highs der Minuten-Bars { Nummer=IntegerToString(x);// Indizierung des einzelnen Verbindungen Name="MinuteBar"+Nummer;// ObjectCreate(0,Name,OBJ_TREND,0,An[x+1],Hi[x+1],En[x],Hi[x]);// Verbindung des Minuten-Bars [x+1] zum Minuten-Bar An[x] ObjectSetInteger(0,Name,OBJPROP_STYLE,1);// 1=die Art der Linie ObjectSetInteger(0,Name,OBJPROP_WIDTH,5);// Dicke der Linie ObjectSetInteger(0,Name,OBJPROP_COLOR,clrBlue);// Farbe der Linie ObjectSetInteger(0,Name,OBJPROP_RAY_RIGHT,false);// "false" = die Linie soll nicht über die Ankerpunkte hinausgehen, sondern soll dort enden Alert("2 x= ",x," a= ",a," i= ",i," NeueKerze= ",NeueKerze," dt= ",dt," An[i]= ",An[i]," Hi[i]= ",Hi[i]," En[i]= ",En[i]);// Check der Werte } NeueKerze=false; // Nach getaner Arbeit / Berechnung zu Beginn der neuen Kerze soll die Kerze nun "alt" sein, damit nicht ständig weitergerechnet wird } } }
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang |
Lesezeichen |
Themen-Optionen | Thema durchsuchen |
Ansicht | |
|
|