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

 
trader781:
Non capisco come, ho corretto i nomi, la linea è ancora rossa indipendentemente dal tipo di ordine, solo chiamata in modo diverso. (Poi devo trovare un modo per tagliarlo a 10 barre), ho bisogno esattamente del modo
Provalo ora
File:
 
Sergey Gritsay:
provalo ora.

È una buona cosa che ci sia un sourcebook in giro)

Quando si preme il pulsante di compilazione il bot muore insieme al terminale, e dopo aver aperto EX non si apre e questo file è vuoto.

Sembra così.

Inoltre, se si mette il blu, il verde, l'oro, il bianco, questi colori cambiano, ma il grigio scuro e l'azzurro non si mettono, risultano bianchi.

File:
 
trader781:

È una buona cosa che ci sia un sourcebook in giro)

Quando si preme il pulsante di compilazione il bot muore insieme al terminale, e dopo aver aperto EX non si apre e questo file è vuoto.

Sembra così.

Inoltre, se metto il blu, il verde, l'oro, il bianco, questi colori cambiano, ma il grigio scuro e l'azzurro non si mettono, risultano bianchi.

Sto compilando bene.
 
Sergey Gritsay:
string  StringSubstr(
   string  string_value,     // строка
   int     start_pos,        // с какой позиции начать
   int     length=0          // длина извлекаемой строки
   );
...

Grazie!

Ho anche bisogno di aiuto - ho bisogno di sapere quanti caratteri ci sono in una stringa - come faccio?

 
Buon pomeriggio.
Uso StringSplit per dividere una stringa letta da un file. Ma l'output dell'array perde le stringhe, tutte tranne la prima stringa. In uscita tutte le stringhe tranne la prima sono vuote, anche se la dimensione dell'array è corretta.

Inoltre, ho incontrato un comportamento incomprensibile con gli array di stringhe. Devo fare array bidimensionali per salvare le stringhe in un array.

Qualcuno ha incontrato questo comportamento?

while( idx < size ) {
    if( StringFind( fileBuffer[idx][0], "[Main]" ) >= 0 ) {
        idx++;
        Print( "Buffer(main) = " + fileBuffer[idx][0] ); // debug
        if( StringFind( fileBuffer[idx][0], "Kit_Names=" ) >= 0 ) {
            Print( "check1 - " + fileBuffer[idx][0] ); // debug
            string tmp = StringSubstr( fileBuffer[idx][0], 10 );
            Print( tmp );                              // debug
            StringReplace( tmp, "\"", "" );
            Print( tmp );                              // debug
            Print( StringSplit( tmp, sep, list ) );
            Print( "check22 - " + tmp );               // debug
            for(int i = 0; i < ArrayRange(list,0); i++) Print(list[i][0]);  // debug
        }
    }
    idx++;
}
 
-Aleks-:

Grazie!

Ho anche bisogno di aiuto - ho bisogno di scoprire quanti caratteri ci sono in una stringa - come faccio?

Restituisce il numero di caratteri nella stringa.

int  StringLen(
   string  string_value      // строка
   );

 
terentjew23:

Restituisce il numero di caratteri in una stringa.

int  StringLen(
   string  string_value      // строка
   );

Grazie!

 
Un consiglio, per favore.

Dichiaro un array a livello globale EA. Poi nella funzione speciale init() chiamo la funzione utente che riempie l'array con le costanti di stringa.

Poi nella funzione speciale start(), uso l'array solo per leggere i dati.

Qualche tempo dopo, altri dati riempiranno l'array. Cioè, quando eseguo l'EA, mi aspetto che l'array rimanga invariato mentre l'EA lavora, ma i dati in qualche modo entrano nell'array, e solo dopo un certo tempo (più di 10 minuti). Quando riavvio l'Expert Advisor, l'array viene riempito come dovrebbe essere, ma qualche tempo dopo, per ragioni che non capisco, l'array contiene di nuovo i valori sbagliati.

L'unica via d'uscita è ricaricare costantemente l'array in start(), ma non mi piace molto, perché l'array dovrebbe essere riempito solo durante l'inizializzazione.

Quale potrebbe essere il problema? Come proteggere l'array dalle modifiche?
 
Maksym Mudrakov:
Puoi darmi un suggerimento, per favore?
...
Cosa potrebbe essere? Come evitare che un array venga modificato?
Controllate bene il codice.
 
Maksym Mudrakov:
Un consiglio, per favore.

Dichiaro un array a livello globale EA. Poi nella funzione speciale init() chiamo la funzione utente che riempie l'array con le costanti di stringa.

Poi nella funzione speciale start(), uso l'array solo per leggere i dati.

Qualche tempo dopo, altri dati riempiranno l'array. Cioè, quando eseguo l'EA, mi aspetto che l'array rimanga invariato mentre l'EA lavora, ma i dati in qualche modo entrano nell'array, e solo dopo un certo tempo (più di 10 minuti). Quando riavvio l'Expert Advisor, l'array viene riempito come dovrebbe essere, ma qualche tempo dopo, per ragioni che non capisco, l'array contiene di nuovo i valori sbagliati.

L'unica via d'uscita è ricaricare costantemente l'array in start(), ma non mi piace molto, perché l'array dovrebbe essere riempito solo durante l'inizializzazione.

Quale potrebbe essere il problema? Come proteggere l'array dalle modifiche?
Posso vedere il codice?