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: 4972
Beiträge: 43246
Benutzer: 7.216
Aktive Benutzer: 84
Links: 84
Wir begrüßen unseren neuesten Benutzer: bb1107
Mit 2.475 Benutzern waren die meisten Benutzer gleichzeitig online (16.01.20 um 22:38).
Neue Benutzer:
vor 2 Tagen
- bb1107
vor einer Woche
- rg-trader
vor 2 Wochen
- toshistyle
vor 2 Wochen
- Robin
vor 3 Wochen
- mMmaanu

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

Empfehlungen

Thema geschlossen
 
Themen-Optionen Thema durchsuchen Ansicht
  #1 (permalink)  
Alt 14.04.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard ArrayCopyRates() liefert out of range ???

hab auch mal ein Problem. Ich möchte Ranges von bestimmten Zeitabschnitten bilden und lese dazu einmal täglich M30 Daten in ein Array.
Der EA läuft im M5

PHP-Code:
ArrayCopyRates(rates_m30,Symbol(),PERIOD_M30); 
danach lasse ich in einer Schleife Hochs/Tiefs der Periode bestimmen.

PHP-Code:
for (cnt=1;cnt<48;cnt++)
{
//Code für Hoch/Tief Bestimmung
if (rates_m30[cnt][3]>high)
high=rates_m30[cnt][3];
if (
rates_m30[cnt][2]<low)
low=rates_m30[cnt][2];

Wenn der EA in einem M30 Timeframe läuft funktioniert das wunderbar. Lasse ich den EA in einem M5 Timeframe laufen funktioniert das nur manchmal.
Der EA meldet dann Array out of range und das schon beim ersten Durchlauf der for-Schleife.

Woran kann das liegen, fehlende M30 Historie ??
  #2 (permalink)  
Alt 17.04.16
Premium Mitglied
 
Registriert seit: Apr 2015
Beiträge: 422
Raul0 befindet sich auf einem aufstrebenden Ast
Standard

PHP-Code:
Woran kann das liegenfehlende M30 Historie ?? 
Du nutzt zur Berechnung in der Schleife doch nur die letzten 24 h, diese sollten da sein. Du rufst ein zweidimensionales Array auf zur Weiterverarbeitung in der Schleife, wurde das auch so angelegt?

Lasse Dir doch von dem Array mal die Gesamtgröße ausgeben.
__________________

Easy Trading Assistant
  #3 (permalink)  
Alt 17.04.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

das ist ja das Verrückte, das Array ist als solches ausreichend dimensioniert mit.
ArrayDimension erhalte ich den Wert 2 und ArraySize liefert 25008.
Das Array ist als solches zweidimensional ausgelegt mit der Definition:

double rates_m30[60][6];

Wenn die Fehlermeldung kommt wird der EA bereits beim ersten Durchlauf der for Schleife abgebrochen. Ansonsten läuft der EA problemlos.
  #4 (permalink)  
Alt 18.04.16
Mitglied
 
Registriert seit: Apr 2016
Beiträge: 45
Top-SecreT befindet sich auf einem aufstrebenden Ast
Standard

Dann lass dir doch
rates_m30[1][3]
und
rates_m30[1][2]
mal explizit ausgeben
  #5 (permalink)  
Alt 18.04.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ralfbenker Beitrag anzeigen
das ist ja das Verrückte, das Array ist als solches ausreichend dimensioniert mit.
ArrayDimension erhalte ich den Wert 2 und ArraySize liefert 25008.
Das Array ist als solches zweidimensional ausgelegt mit der Definition:

double rates_m30[60][6];
Wieso liefert ArraySize() bei [60][6] 25008 und nicht 360?

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #6 (permalink)  
Alt 18.04.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

@traderdoc
das versteh ich auch nicht. Selbst wenn man die Null mitrechnet hätte das Array ja 61*7= 427 Felder. Oder wird durch ArrayCopyRates() automatisch ein Resize durchgeführt entsprechend der verfügbaren Bars in der Historie ?

Im Moment geht der Spaß. Sobald ne Historie auf'm Rechner ist funktioniert das Array ohne Fehler
  #7 (permalink)  
Alt 18.04.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Zitat:
Zitat von ralfbenker Beitrag anzeigen
@traderdoc
das versteh ich auch nicht. Selbst wenn man die Null mitrechnet hätte das Array ja 61*7= 427 Felder. Oder wird durch ArrayCopyRates() automatisch ein Resize durchgeführt entsprechend der verfügbaren Bars in der Historie ?

Im Moment geht der Spaß. Sobald ne Historie auf'm Rechner ist funktioniert das Array ohne Fehler
Nein, die Dimensionsbezeichnung [60][6] bedeutet:

1. Dimension: Elemente 0 .... 59 = 60
2. Dimension: Elemente 0 .... 5 = 6

Es bleibt bei 60 x 6 = 360

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #8 (permalink)  
Alt 19.04.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

@traderdoc
hab mir jetzt mal mit ArraySize() den Initialwert des Arrays anzeigen lassen, der ist 360.
Nach Ausführung der Funktion ArrayCopyRates() ändert sich der Wert von ArraySize(). Das bedeutet doch, dass durch das Füllen desArrays dessen Größe angepasst wird, wahrscheinlich an die Anzahl der Bars, die in der History verfügbar sind. Sonst kämen da nicht so hohe Werte wie 21804 Elemente raus.

Im Umkehrschluss schließe ich daraus, dass das Array auch verkleinert wird, wenn keine M30 Daten vorliegen.
Wie bringe ich dann also den EA der im M5 läuft dazu, M30 Daten in das Array zu laden?
Ich vermute mal, wenn in der History keine Daten vorliegen, lädt er auch keine ins Array und das liefert dann out of Range.
  #9 (permalink)  
Alt 19.04.16
Elite Mitglied
 
Registriert seit: Apr 2011
Beiträge: 2.732
traderdoc befindet sich auf einem aufstrebenden Ast
Standard

Das Sicherste wäre dann, immer vor der Benutzung der Arrays die Größe der Dimensionen zu ermitteln und nur innerhalb dieser, die Felder anzusprechen.

traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis.
  #10 (permalink)  
Alt 19.04.16
Mitglied
 
Registriert seit: Oct 2015
Ort: Karlshagen
Beiträge: 199
ralfbenker befindet sich auf einem aufstrebenden Ast
Standard

@traderdoc
Danke für den Tipp, damit ist zumindest das Problem mit dem Fehler gelöst.
Allerdings tradet der EA dann nicht weil er ja die Vortagesrange nicht bestimmen kann. Hab keine Ahnung, wie ich enen EA im M5 dazu bringen kann, M30 Daten vom Broker zu laden.
Oder ich muss eben, da der EA im M5 läuft wirklich die M5 Daten zur Rangebestimmung verwenden. Das sind aber etliche Bars mehr und das wollte ich mir ersparen.

Im Moment läuft er auf allen Werten die ich teste problemlos. Vielleicht hatte ich auch nur wieder einen von meinen Schusslichkeitsfehlern in der for- Schleife
:-)
Thema geschlossen

Lesezeichen

Stichworte
array, mql4, programmierung, programmierung metatrader, ranges, ranges array

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 05:00 Uhr.





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