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)
-   -   High der letzten 100 Candles miteinander verbinden ? Wie? (http://www.expert-advisor.com/forum/showthread.php?t=6443)

Angel 17.06.19 13:29

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;
  }

Also, ich weiß da echt nicht weiter. Kann mir da jemand bitte mal weiterhelfen...? :confused:

Angel 17.06.19 17:03

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
        }
    }
  }



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