Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools  
Zurück   Metatrader Forum | Forex Expert-Advisor | Broker & Forex Tools > Metatrader 4 > Programmierung MQL4

Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4.

Login
Benutzername:
Kennwort:


Statistik
Themen: 4340
Beiträge: 39924
Benutzer: 6.672
Aktive Benutzer: 194
Links: 80
Wir begrüßen unseren neuesten Benutzer: Rupp
Mit 1.311 Benutzern waren die meisten Benutzer gleichzeitig online (16.09.19 um 01:18).
Neue Benutzer:
vor 2 Tagen
- Rupp
vor 5 Tagen
- walkn
vor einer Woche
- hakanhukum...
vor einer Woche
- Marco_FX
vor einer Woche
- Manoo

Onlineuser
'Wer ist online' anzeigen Benutzer: 0
Gäste: 410
Gesamt: 410
Team: 0
Team:  
Benutzer:  
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 17.06.19
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard 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...?
__________________
MQL4-Interessiert... und noch gaaaanz am Anfang
  #2 (permalink)  
Alt 17.06.19
Mitglied
 
Registriert seit: Dec 2017
Ort: 76891
Beiträge: 117
Angel befindet sich auf einem aufstrebenden Ast
Standard

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
Thema geschlossen

Lesezeichen


Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus




Alle Zeitangaben in WEZ +1. Es ist jetzt 07:44 Uhr.


Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2019 vbdesigns.de
SEO by vBSEO 3.6.1
Copyright ©2009 - 2017 by Expert-Advisor.com - Das Metatrader Forum
MetaTrader bzw. MetaTrader 4 und MetaTrader 5 sind eingetragene Marken der MetaQuotes Software Corp.
-----------------------------------------------------------------------------------------------------------------------------