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: 3990
Beiträge: 38004
Benutzer: 6.303
Aktive Benutzer: 352
Links: 80
Wir begrüßen unseren neuesten Benutzer: Donani
Mit 483 Benutzern waren die meisten Benutzer gleichzeitig online (21.04.16 um 17:12).
Neue Benutzer:
vor 3 Stunden
- Donani
vor einem Tag
- dularus
vor 3 Tagen
- beeo
vor 5 Tagen
- mkraibache...
vor 5 Tagen
- fob

Onlineuser
'Wer ist online' anzeigen Benutzer: 2
Gäste: 61
Gesamt: 63
Team: 0
Team:  
Benutzer:  Leopold, traderdoc
Freunde anzeigen

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 10.03.17
Neues Mitglied
 
Registriert seit: Mar 2017
Beiträge: 3
limit befindet sich auf einem aufstrebenden Ast
Post Verwendung dynamischer Arrays in mql4

Ich beschäftige mich gerade mit effektiveren Möglichkeiten Arrays zu befüllen und bin auf diesen Artikel gestoßen: https://www.mql5.com/de/articles/567
Es geht mir um den Punkt: "Verwendung dynamischer Arrays" im Artikel.
Der Author beschreibt dort leider nur die Variante für mql5, doch das Ergebnis ist beachtlich.

Ich hab mich dran versucht und stehe gedanklich auf dem Schlauch wie ich das Problem in mql4 lösen kann.

Hier der Code:
Code:
#property strict
#property indicator_chart_window

int size1=0,size2=0;
double      Element[];  

class CDynamicArray2
  {
private:
   int   m_ChunkSize, m_ReservedSize, m_Size;       
public:
                                                   
   void CDynamicArray2(int ChunkSize=1024)
     {m_Size=0;                            // Number of active elements
      m_ChunkSize=ChunkSize;               // Chunk size
      m_ReservedSize=ChunkSize;            // Actual size of the array
      ArrayResize(Element,m_ReservedSize); // Prepare the array
     }
   void AddValue(double Value)
     {m_Size++; // Increase the number of active elements
      if(m_Size>m_ReservedSize)
        { // The required number is bigger than the actual array size
         m_ReservedSize+=m_ChunkSize; // Calculate the new array size
         ArrayResize(Element,m_ReservedSize); // Increase the actual array size
        }
      Element[m_Size-1]=Value; // Add the value
     }
   int Size()
     {
      return(m_Size);
     }
  };
int OnCalculate(const int rates_total,const int prev_calculated,
                const datetime &time[],const double &open[],
                const double &high[],const double &low[],
                const double &close[],const long &tick_volume[],
                const long &volume[],const int &spread[])
  {
     int n=200000;
  
  CDynamicArray2 da;
   for(int k=0;k<n;k++)
     {
      da.AddValue(k);   
     }
     size2=ArraySize(Element);
     
   PrintFormat("Chunk Array: "+(string)size2); // Message regarding the amount of time required to perform the second option
   PrintFormat("Durchläufe: "+(string)n); // Message regarding the amount of time required to perform the second option

   return(rates_total);
  }
Wie man sehen kann, das Array zu befüllen klappt schon wunderbar, nur leider wirkt sich die Chunksize auf die Durchläufe aus, statt also der gewünschten 200000, bekomm ich 200000/1000*1024 raus, also 200704.
Mein Ziel ist natürlich eine korrekte Arbeitsweise mit dem Vorteil der Zeitersparnis bei der Berechnung.

Kann man das überhaupt so umschreiben, dass die Funktion für mt4 Sinn macht? Und lässt sich diese Funktion auch variabel einsetzen, so das ich den Code nicht für jedes Array anpassen muss?
  #2 (permalink)  
Alt 12.03.17
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 405
Raul0 befindet sich auf einem aufstrebenden Ast
Standard

Ich mach das nicht so umständlich.
Bei jedem zusätzlichen Wert, der in das Array geschrieben wird, kommt automatisch ein Resize hinzu.
Damit ist immer nur soviel genutzt wie gebraucht.

PHP-Code:
ArrayResizeElementArraySize(Element) + ); 
Abfrage Größe und Eins hinzuaddieren.

Gruss
__________________

Easy Trading Assistant
Thema geschlossen

Lesezeichen

Stichworte
array, arrays, arrays befüllen, dynamisch, dynamische arrays, mql4, programmierung, programmierung metatrader, programmierung mql4


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 +2. Es ist jetzt 00:03 Uhr.



Der Wavesnode - Spam Firewall
-----------------------------------------------------------------------------------------------------------------------------
Powered by vBulletin® Version 3.8.5 (Deutsch)
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Powered by vBCMS® 2.7.0 ©2002 - 2018 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.
-----------------------------------------------------------------------------------------------------------------------------