[Qualsiasi domanda da principiante, per non ingombrare il forum. Professionisti, non passate. Non posso andare da nessuna parte senza di te. - pagina 60

 
TheXpert >> :

Ricordato! Una peculiarità dell'implementazione delle stringhe. Dopo che l'array è stato ridimensionato, deve essere attraversato e azzerato:

Potrei sbagliarmi, ma dovrebbe aiutare.

Grazie per la risposta. L'ho provato, ma purtroppo non ha aiutato. L'azzeramento funziona prima di iniziare a fare qualcosa con l'array. E l'azzeramento avviene tramite assegnazione esplicita del VALORE della stringa, mentre nel caso che ho segnalato, agli elementi dell'array viene assegnato il risultato della funzione (che dovrebbe restituire VALORE di tipo stringa) ma in realtà restituisce un RIFERIMENTO all'indirizzo della stringa in memoria, il che credo sia errato. E il risultato con valori identici è perché la funzione viene chiamata più volte di seguito e dopo ogni chiamata la successiva utilizza effettivamente la stessa memoria, mettendovi nuovi dati. Se facciamo qualche manipolazione tra le chiamate (chiamate di qualsiasi f-ione, dichiarazione di variabili, ecc.) il risultato sarà molto probabilmente ancora peggiore, cioè i valori nell'elemento dell'array di stringhe punteranno alla spazzatura in memoria.


Vorrei che gli sviluppatori di mql4 commentassero questa situazione e spiegassero il modo corretto di lavorare con gli array di stringhe, se possibile.

 
xruss писал(а) >>
c'è qualche tipo di errore?

L'ultimo ordine chiuso dalla storia viene selezionato e il suo tipo viene assegnato alla variabile ORDtype prima che venga generato il segnale di apertura. Cioè, se la storia non è vuota, allora ORDtype ovviamente non sarà uguale a -1. Pertanto, la condizione per la comparsa del segnale non è soddisfatta poiché

if ((ORDtype==-1)&&(...))

 
Everlost >> :

L'ultimo ordine chiuso dalla storia viene selezionato e il suo tipo viene assegnato alla variabile ORDtype prima che venga generato il segnale di apertura. Cioè, se la storia non è vuota, allora ORDtype ovviamente non sarà uguale a -1. Pertanto, la condizione di presenza del segnale non è soddisfatta poiché

if ((ORDtype==-1)&&(...))

E un altro problema - le posizioni non vengono aperte anche se la cronologia è vuota ((

 
Yug >> :

Grazie per la risposta. L'ho provato, ma purtroppo non ha aiutato. L'azzeramento funziona prima di iniziare a fare qualcosa con l'array. E l'azzeramento avviene tramite assegnazione esplicita del VALORE della stringa, mentre nel caso che ho segnalato, agli elementi dell'array viene assegnato il risultato della funzione (che dovrebbe restituire VALORE di tipo stringa) ma in realtà restituisce un RIFERIMENTO all'indirizzo della stringa in memoria, il che credo sia errato. E il risultato con valori identici è perché la funzione viene chiamata più volte di seguito e dopo ogni chiamata la successiva utilizza effettivamente la stessa memoria, mettendovi nuovi dati. Se fate qualche manipolazione tra le chiamate (chiamate di qualsiasi carattere, dichiarazione di variabili, ecc.) il risultato sarà molto probabilmente ancora peggiore, cioè, i valori nell'elemento dell'array di stringhe punteranno alla spazzatura in memoria.


Chiedo agli sviluppatori di mql4 di commentare questa situazione se possibile e di spiegare come lavorare correttamente con gli array di stringhe.

Prova in questo modo:

string tmp = func();
array[0] = tmp;

Un orto, naturalmente, ma dovrebbe funzionare...

 

Cosa significa MT4 nel tester -Ottimizzazione, dove devo spuntare? Cos'è questa funzione? Sintonizza l'EA su alcune impostazioni specifiche (standard) o mostra su quale periodo (TF) funziona meglio?

 
rafex >> :

Cosa significa MT4 nel tester -Ottimizzazione, dove devo spuntare? Cos'è questa funzione? Sintonizza l'EA su alcune impostazioni specifiche (standard) o mostra su quale timeframe (TF) funziona meglio?

Questa casella di controllo può essere toccata solo dopo aver premuto F1 e studiato attentamente la sezione "Autotrading".

 
komposter >> :

Prova in questo modo:

Un orto, naturalmente, ma dovrebbe funzionare...

Ho provato l'altro ieri. Il risultato è lo stesso. In realtà il riferimento viene copiato prima in temp str, e poi lo stesso riferimento viene copiato in un elemento dell'array :(

 
Yug >> :

Ho provato l'altro ieri. Il risultato è lo stesso. In realtà il riferimento viene prima copiato in temp str e poi lo stesso viene copiato nell'elemento dell'array :(

Dichiarare la stringa di ritorno come statica nella funzione, solo allora l'inizializzazione deve essere fatta dopo la dichiarazione.

 
Cari esperti, per favore non ignorate la mia domanda.

C'è un indicatore che conta la volatilità, per esempio quotidianamente. Ma non quello che dà un numero indefinito come 0,34. Ma dovrebbe calcolare il numero di candele al giorno e dividerlo per un determinato periodo (numero di giorni) in modo che l'indicatore conosca il valore medio. Esempio: apertura 100, chiusura 200; il secondo giorno - apertura 200, chiusura 250. Volatilità media per questi 2 giorni = ((200-100)+(250-200))/2 giorni=(100+50)/2=75
Dove scaricare se disponibile.
 
TheXpert >> :

Dichiarare la stringa di ritorno come statica nella funzione, ma poi l'inizializzazione deve essere fatta dopo la dichiarazione.

Ho provato anche questa variante. Il risultato è lo stesso, cioè viene restituito un riferimento alla memoria invece del valore.

Motivazione: