Fragen von Neueinsteigern zu MQL4 und MQL5, Hilfe und Diskussion über Algorithmen und Codes - Seite 737
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Wie groß ist die Dimensionalität des Arrays NewsArr in der zweiten Dimension?
Das verstehe ich leider nicht. Was ist die zweite Dimension?
Ah, ich glaube, ich verstehe: NewsArr nimmt die Werte 0, 1, 2 und 3 an. Das hier?
Dies muss sein: string NewsArr[4][1000];
Das verstehe ich leider nicht. Was ist die zweite Dimension?
Ah, ich glaube, ich verstehe: NewsArr nimmt die Werte 0, 1, 2 und 3 an. Das hier?
Dies muss sein: string NewsArr[4][1000];
Erste Dimension und zweite Dimension.
Aber das ist wahrscheinlich die falsche Antwort.Die erste Dimension und die zweite Dimension.
Aber Sie müssen etwas falsch beantwortet haben.Wo finde ich die Dimensionalität der zweiten Dimension?
Oder ist die Dimensionalität der ersten Dimension 4 und die der zweiten Dimension 1000?Und wo suchen Sie nach der Dimensionalität der zweiten Dimension?
Oder ist die erste Dimension 4 und die zweite 1000?Ja, aber irgendetwas ist an diesem Beitrag faul
Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests
Alle Fragen, die Neulinge zu MQL4 haben, Hilfe und Diskussion über Algorithmen und Codes
novichok2018, 2019.01.16 15:52
Wahrscheinlich eine dumme Frage, da niemand antwortet, aber wie sonst mit EA stoppen und nach der Kompilierung fortsetzen zu behandeln?
Die Plattform gibt eine Meldung aus:array out of range (284,17).
Zeile 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);Position 17 öffnet eine eckige Klammer mit NomNews, die global durch 0 eingeleitet wird.
Ich habe 0 in 1 geändert, aber ohne Erfolg.
Ichhabe die Zeile if(NomNews==300)break; 300 in 360000 geändert, aber ohne Erfolg.
Ich kompiliere es und es funktioniert ein paar Minuten lang gut. Und was ist zu tun?
Wenn die Anzahl der Werte in der zweiten Dimension 1000 beträgt und
In der zweiten Dimension darf es keinen Array-Überlauf geben.Ich habe keine Ankerpunkte, nur vertikale Bewegung, und ich setze die horizontale einmal über die Breite des Bildschirms. Es ist kein Problem, von der anderen Seite aus zu zählen, aber es ist überraschend, dass dieselbe Handlung in verschiedenen Funktionen unterschiedlich ausgeführt wird.
Und eine weitere Frage - wenn ich Bid als Beschriftungstext ausgeben möchte, welche Funktion sollte ich verwenden, um es optimal zu tun -OnChartEvent oderOnCalculate?
OBJ_LABEL hat einen Ankerpunkt, auch wenn Sie ihn nicht festgelegt haben. Standardmäßig ist dies die linke obere Ecke. Das Gebot wird in OnCalculate geändert und Sie können den Text in der Beschriftung dort ändern.
Ja, aber etwas stimmt nicht mit dieser Meldung
Wenn die Anzahl der Werte in der zweiten Dimension 1000 beträgt und
In der zweiten Dimension kann es kein Array außerhalb des Bereichs geben.Nein, es scheint keine Verwirrung zu geben. Hier ist die kopierte Meldung: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
Nein, ich glaube nicht, dass ich etwas falsch gemacht habe. Hier ist die kopierte Meldung: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
Position 17 öffnet eine eckige Klammer mit NomNews, die global durch 0 eingeleitet wird.
Sie haben also eine null-dimensionale Array-Zellengröße in der zweiten Dimension...
Ihre Array-Zellengröße in der zweiten Dimension ist also Null...
Dies ist der Sitz vonNomNews:
datetime TimeNewsFunck(int nomf)
{
string s=NewsArr[0][nomf];
string time=StringConcatenate(StringSubstr(s,0,4),".",StringSubstr(s,5,2),".",StringSubstr(s,8,2)," ",StringSubstr(s,11,2),":",StringSubstr(s,14,4));
return((datetime)(StringToTime(time) + GMTplus*3600))
}
//345678901234567890////////////////////////////////////////////////////////////////////////////////
void UpdateNews()
{
string TEXT=ReadCBOE();
int sh = StringFind(TEXT, "pageStartAt>")+12;
int sh2= StringFind(TEXT,"</tbody>");
TEXT=StringSubstr(TEXT,sh,sh2-sh);
sh=0;
while(!IsStopped())
{
sh = StringFind(TEXT, "event_timestamp",sh)+17;
sh2= StringFind(TEXT, "onclick",sh)-2;
if(sh<17 || sh2<0)break;
NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
sh = StringFind(TEXT,flagCur,sh)+10;
sh2= sh+3;
if(sh<10 || sh2<3)break;
NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continue;
sh = StringFind(TEXT, "Titel",sh)+7;
sh2= StringFind(TEXT, "Volatilität",sh)-1;
if(sh<7 || sh2<0)break;
NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)continue;
if(StringFind(NewsArr[2][NomNews], "Moderate")>=0 && !MidleNews)continue;
if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)continue;
sh=StringFind(TEXT, "Ereignis links",sh)+12;
int sh1=StringFind(TEXT, "Spricht",sh);
sh2=StringFind(TEXT,"<",sh);
if(sh<12 || sh2<0)break;
if(sh1<0 || sh1>sh2)NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
else NewsArr[3][NomNews]=StringSubstr(TEXT,sh,sh1-sh);
NomNews++;
if(NomNews==300)break;
}
}
Werte von 0 bis 300. Global auf 4?
Werte von 0 bis 300. Sollte ich ihn global auf 4 setzen?
Bei 12 Minuten wird immer noch eine Meldung angezeigt.
In der 12. Minute gibt es noch eine Nachricht.
Aus all dem erkenne ich, dass NomNews in der While-Schleife bereits einen Zustand größer als 999 hat. Dann müssen Sie herausfinden, was die Ursache ist, und diese Variable irgendwo zurücksetzen.
Um dies zu überprüfen, schreiben Sie es an den Anfang der Schleife: