- Wenn Du Code postest bitte als Code posten, also mit Alt+S oder dem Icon </> aus der Editierzeile.
- Lies mal über Arrays: https://www.mql5.com/en/articles/567: erst einen Array deklarieren und dann seine Größe (und Richtung) bestimmen.
- und Strukturen: https://www.mql5.com/en/docs/basis/types/classes
- www.mql5.com
Ich deklariere zuerst das Array
struct trend_array { int id; ulong time; ushort trend; }; trend_array my_trend_array[];dann bestimme ich die größe
int array_size = ArraySize(my_trend_array);und dann bestimme ich die Richtung
ArraySetAsSeries(my_trend_array,true);oder habe ich bis hier hin schon was falsch gemacht/verstanden?
Dann würde ich nun gerne einen neuen Eintrag in das Array speichern
ArrayResize(my_trend_array,array_size+1); my_trend_array[array_size+1].id=1; my_trend_array[array_size+1].time="test1"; my_trend_array[array_size+1].trend="trend1";und spätestens hier denke ich habe ich was falsch gemacht/verstanden?
Die Reihenfolge habe ich aber doch eingehalten!?
Ich deklariere zuerst das Array
dann bestimme ich die größe
und dann bestimme ich die Richtung
oder habe ich bis hier hin schon was falsch gemacht/verstanden?
Dann würde ich nun gerne einen neuen Eintrag in das Array speichern
und spätestens hier denke ich habe ich was falsch gemacht/verstanden?
struct trend_array // hier deklarierst Du eine Struktur { int id; ulong time; ushort trend; }; int arraysize = 10; // Dein Array soll später diese Größe haben trend_array my_trend_array[]; // hier deklarierst Du ein dynamisches Array mit der Struktur als Typ ArrayResize(my_trend_array , array_size); // Erst hier bekommt der Array die vorgesehene Größe, und zwar jeder Variable der Struktur. // Es ist jedoch nicht nötig bei jeder Variable die Größe einzeln umzustellen. ArraySize(my_trend_array); // Jetzt erst kannst Du die Größe abfragen, ohne dass 'array out of range' fliegt.
Wenn Du mit Copy...-Funktionen kopierst, wird die Größe, die Du eingegeben hast, automatisch eingerichtet.
MqlRates rates_array[]; // Du deklarierst das Array mit dem Typ der Struktur MqlRates int array_size = 10; int x; CopyRates(_Symbol,_Period,0,array_size,rates_array); // CopyRates stellt bei dem gewünschten Array die Größe ein (hier zehn) und füllt es mit den Werten x = ArraySize(rates_array); Print(x); ArrayResize(rates_array,array_size+1); x = ArraySize(rates_array); // Die Arraygröße ist jetzt um eins größer als bei der letzten Abfrage Print(x);Aber schau Dir unbedingt mal die Artikel an, die Carl in seinem letzten Post gepostet hat... die sind wirklich sensationell gut.
Hallo @pennyhunter
Danke für Deine Hilfestellung.
Bist du sicher, dass der erste Codeblock richtig ist und es "int arraysize=10" und nicht vielleicht "int array_size=10" heißen soll?
Unabhängig davon erhalt ich immer, egal wie ich es mache den Fehler "'ArrayResize' - unexpected token, probably type is missing? "
"
Hallo @WeHu58
vielen Dank für Deine Antwort, leider stehe ich noch ziemlich am Anfang und frage mich nun erst recht wie/wo was.
Eigenlich ging es mir darum ein structuriertes Array zu definieren und es dann manuell zu befüllen.
Du scheinst hierzu Funktionen gepostet zu haben, leider erklärt sich mir als Newbie das nun nicht wirklich und macht mich eher etwas konfus.
Vielleicht kannst du mir die Funktionsweise erläutern?
Dennoch würde ich auch das simple Konstrukt zu Beginn gerne verstehen und warum es aktuell nicht funktioniert.
Gruß
Hallo @pennyhunter
Danke für Deine Hilfestellung.
Bist du sicher, dass der erste Codeblock richtig ist und es "int arraysize=10" und nicht vielleicht "int array_size=10" heißen soll?
Unabhängig davon erhalt ich immer, egal wie ich es mache den Fehler "'ArrayResize' - unexpected token, probably type is missing? "
"
struct trend_array { int id; ulong time; ushort trend; }; int array_size_1 = 10; int array_size_2 = 20; trend_array my_trend_array[]; int OnInit() // Oben werden die Variablen deklariert, aber Funktionen kannst Du da nicht ausführen. // Wir schreiben die Funktionen hier in die OnInit(), damit diese nur einmal ausgeführt werden // Dann, wenn Du diesen kleine Programm auf den Chart wirfst oder im Tester startest. // die Größen des Arrays werden im Reiter 'Journal' oder 'Experten' ausgegeben. { //--- ArrayResize(my_trend_array , array_size_1); Print("my_trend_array Größe #1: ",ArraySize(my_trend_array)); ArrayResize(my_trend_array , array_size_2); Print("my_trend_array Größe #2: ",ArraySize(my_trend_array)); //--- return(INIT_SUCCEEDED); }
Junge junge, das ist ja schon wieder über eine Woche her.
Oh ja natürlich, da ist mir ein Fehler unterlaufen. Egal ob es nun arraysize oder array_size heißt, wenn es die selbe Variable sein soll, dann ist die Hauptsache dass es den gleichen Namen hat. Leider verliere ich gerne mal den Überblick weil ich von der Aufmerksamkeinsspanne nicht dazu gemacht bin, mir einen Haufen Variablen Buchstaben für Buchstaben zu merken. Ich verbuche das als Beweis, dass ich ein Mensch bin. Habe mir außerdem sagen lassen, dass 70% der Arbeit eines Programmierers im Debugging besteht. Es gibt Mittel und Wege, diesen Wert zu drücken (Code ReUse mittels Funktionen), aber Sachen aus dem Stehgreif zusammenschustern gehört leider nicht dazu.
Geht es denn jetzt?
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Hallo.
for(int i=0;i<10;i++)Ich möchte gerne ein das array rates...
MqlRates rates[];
CopyRates(_Symbol,_Period,1,10,rates);
erweitern um ein neues "Feld"
{
PrintFormat("[%d]\t%s\t%G\t%G\t%G\t%G\t%G\t%G\t%I64d\t",i,
TimeToString(rates[i].time,TIME_DATE|TIME_MINUTES|TIME_SECONDS),
rates[i].open,rates[i].high,rates[i].low,rates[i].close,
rates[i].tick_volume,rates[i].spread,rates[i].real_volume);
rates[i].trend='trend...'+i;
}
dies geht jedoch wohl so nicht.
Wie kann ich also ein vorhandenes array in der Form erweitern?
Um die Funktion der Arrays und struckturen zu verstehen möchte ich ein neues strukturiertes array erstellen und es mit einem neuen Wert befüllen, aber selbst daran scheitere ich mit dem Fehler "array out of range"...
struct trend_array
{
int id;
ulong time;
ushort trend;
};
trend_array my_trend_array[];
int array_size = ArraySize(my_trend_array);
ArraySetAsSeries(my_trend_array,true);
ArrayResize(my_trend_array,array_size+1);
my_trend_array[array_size+1].id=1;
my_trend_array[array_size+1].time="test1";
my_trend_array[array_size+1].trend="trend1";