|
Programmierung MQL4 Hier gehts rund ums Programmieren in MQL4. |
|
Themen-Optionen | Thema durchsuchen | Ansicht |
|
|||
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:
PHP-Code:
Der EA meldet dann Array out of range und das schon beim ersten Durchlauf der for-Schleife. Woran kann das liegen, fehlende M30 Historie ?? |
|
|||
PHP-Code:
Lasse Dir doch von dem Array mal die Gesamtgröße ausgeben. |
|
|||
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. |
|
|||
Dann lass dir doch
rates_m30[1][3] und rates_m30[1][2] mal explizit ausgeben |
|
|||
Zitat:
traderdoc
__________________
Ich erfülle Euch gern Eure EA-, Indikator- und Script-Programmierungswünsche auf Honorarbasis. |
|
|||
@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 |
|
|||
Zitat:
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. |
|
|||
@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. |
|
|||
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. |
|
|||
@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 :-) |
Lesezeichen |
Stichworte |
array, mql4, programmierung, programmierung metatrader, ranges, ranges array |
|
|