Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 737
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Qual è la dimensionalità dell'array NewsArr nella seconda dimensione?
Purtroppo non capisco. Qual è la seconda dimensione?
Ah, credo di aver capito: NewsArr assume i valori 0,1,2 e 3. Questo?
Questo deve essere: stringa NewsArr[4][1000];
Purtroppo non capisco. Qual è la seconda dimensione?
Ah, credo di aver capito: NewsArr assume i valori 0,1,2 e 3. Questo?
Questo deve essere: stringa NewsArr[4][1000];
Prima dimensione e seconda dimensione.
Ma probabilmente è la risposta sbagliata.La prima dimensione e la seconda dimensione.
Ma devi aver risposto male a qualcosa.Dove devo cercare la dimensionalità della seconda dimensione?
O la dimensionalità della prima dimensione è 4 e la seconda dimensione 1000?E dove si cerca la dimensionalità della seconda dimensione?
O la prima dimensione è 4 e la seconda 1000?Sì, ma c'è qualcosa che non va in questo post
Forum sul trading, sistemi di trading automatico e test di strategia
Tutte le domande dei neofiti su MQL4, aiuto e discussione su algoritmi e codici
novichok2018, 2019.01.16 15:52
Probabilmente è una domanda stupida visto che nessuno risponde, ma come si fa a gestire l'arresto e la ripresa di EA dopo la compilazione?
La piattaforma dà un messaggio:array out of range (284,17).
Linea 284: NewsArr[0][NomNews]=StringSubstr(TEXT,sh,sh2-sh); laposizione 17 apre una parentesi quadra con NomNews, che è iniziata globalmente da 0.
Ho cambiato 0 con 1, senza risultato.
Hocambiato la linea if(NomNews==300)break; 300 a 360000, senza risultato.
Lo compilo - funziona bene per qualche minuto. E cosa fare?
Quando il numero di valori nella seconda dimensione è 1000 e
Non ci può essere un superamento dell'array nella seconda dimensione.Non ho punti di ancoraggio, solo movimento verticale, e ho impostato l'orizzontale una volta per tutta la larghezza dello schermo. Non è un problema contare dall'altra parte, ma è sorprendente che la stessa azione sia eseguita in modo diverso nelle diverse funzioni.
E un'altra domanda - se voglio emettere Bid come testo dell'etichetta, quale funzione dovrei usare per farlo in modo ottimale -OnChartEvent oOnCalculate?
OBJ_LABEL ha un punto di ancoraggio anche se non l'hai impostato. Per default è l'angolo superiore sinistro. Il Bid viene cambiato in OnCalculate e lì potete cambiare il testo nell'etichetta.
Sì. Ma c'è qualcosa di confuso in questo messaggio
Quando il numero di valori nella seconda dimensione è 1000 e
Non ci può essere un array fuori portata nella seconda dimensione.No, non sembra esserci confusione. Ecco il messaggio copiato: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
No, non credo di aver sbagliato qualcosa. Ecco il messaggio copiato: 2019.01.16 20:14:11.110 OnNews_M5_EURUSD EURUSD,M5: array out of range in 'OnNews_M5_EURUSD.mq4' (284,17).
La posizione 17 apre una parentesi quadra con NomNews, che è avviata globalmente da 0.
Quindi, avete una dimensione di cella di un array zero-dimensionale nella seconda dimensione...
Quindi la dimensione della cella del tuo array nella seconda dimensione è zero...
È qui che si trovaNomNews:
datetime TimeNewsFunck(int nomf)
{
stringa 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 AggiornaNews()
{
stringa TEXT=ReadCBOE();
int sh = StringFind(TEXT, "pageStartAt>")+12;
int sh2= StringFind(TEXT,"</tbody>");
TEXT=StringSubstr(TEXT,sh,sh2-sh);
sh=0;
mentre(!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;
se(sh<10 || sh2<3)break;
NewsArr[1][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(OnlySymbolNews && StringFind(ValStr,NewsArr[1][NomNews])<0)continua;
sh = StringFind(TEXT, "title",sh)+7;
sh2= StringFind(TEXT, "Volatilità",sh)-1;
se(sh<7 || sh2<0)break;
NewsArr[2][NomNews]=StringSubstr(TEXT,sh,sh2-sh);
if(StringFind(NewsArr[2][NomNews], "High")>=0 && !HighNews)continua;
if(StringFind(NewsArr[2][NomNews], "Moderate")>=0 && !MidleNews)continua;
if(StringFind(NewsArr[2][NomNews], "Low")>=0 && !LowNews)continua;
sh=StringFind(TEXT, "left event",sh)+12;
int sh1=StringFind(TEXT, "Speaks",sh);
sh2=StringFind(TEXT,"<",sh);
se(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++;
se(NomNews==300)break;
}
}
Valori da 0 a 300. Impostare globalmente su 4?
Valori da 0 a 300. Devo impostarlo globalmente a 4?
Dà ancora un messaggio a 12 minuti.
Dà ancora un messaggio al 12° minuto di funzionamento.
Posso dire da tutto questo che NomNews entra nel ciclo While già in uno stato maggiore di 999. Allora dovete scoprire cosa lo sta causando e reimpostare questa variabile da qualche parte.
Per verificarlo, scrivetelo all'inizio del ciclo: