Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 737

 
Alexey Viktorov:
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];

 
novichok2018:

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.
 
Alexey Viktorov:

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?
 
novichok2018:

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

if(NomNews==300)break;
Non ci può essere un superamento dell'array nella seconda dimensione.


 
psyman:

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.

 
Alexey Viktorov:

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).

Ho mostrato la linea 284 sopra.
 
novichok2018:

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).

Ho mostrato la linea 284 sopra.

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...

 
Artyom Trishkin:

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?

 
novichok2018:


Valori da 0 a 300. Devo impostarlo globalmente a 4?

Dà ancora un messaggio a 12 minuti.

 
novichok2018:

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:

if(NomNews > 999)
{
   Print(NomNews);
   break;
}