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

 
Buon pomeriggio a tutti.Due MA sono incrociate molte volte sul grafico.è possibile contare il numero di barre dopo OGNI incrocio di MA.dopo l'ultimo funziona, ma dopo OGNI MA no.qualcuno sa come fare?
 
MK07:
Se vogliamo controllare il numero di barre dopo OGNI incrocio di MA, possiamo calcolare il numero di barre dopo l'ultimo, ma non dopo OGNI.

Dipende da quello che ti serve. Per un EA un algoritmo, per un indicatore - un altro.

In generale, approssimativamente come segue: creiamo una variabile in cui memorizzeremo il numero di incroci. Potete creare due variabili - per su e per giù, per esempio Intersection_UP eIntersection_DN.

Prima del ciclo, li inizializziamo con degli zeri.

Creare un ciclo dalla prima barra a Bars: for (int i=1; i<Bars; i++) { // corpo del ciclo dove contiamo le intersezioni ... }.

Ad ogni intersezione sulla barra i ma1 dal basso verso l'alto ma2 aumenta Intersezione_UP, ad ogni intersezione sulla barra i ma1 dall'alto verso il basso ma2 aumenta Intersezione_DN.

Alla fine del ciclo abbiamo in due variabili il numero di incroci su e giù. Aggiungili per ottenere il numero totale di intersezioni

 
MK07:
Buon pomeriggio a tutti.Due MA sono incrociate molte volte sul grafico.è possibile contare il numero di barre dopo OGNI incrocio di MA.dopo l'ultimo funziona, ma dopo OGNI MA no.qualcuno sa come fare?

È semplice. Si fissa l'incrocio e si crea un contatore. Quando c'è un crossover, il contatore aggiunge 1 barra per ogni crossover. Quando c'è un incrocio, un altro contatore inizia a contare.
 
alsu:

Non ci capiamo, a quanto pare

In generale, la posizione del problema è definita - la variabile statica.

Ma perché una funzione con questa variabile compilata nello stesso file con l'indicatore funziona senza problemi (la reinizializzazione ha successo e tutto funziona bene), ma quando mi rivolgo alla stessa funzione inserita nella libreria, ho problemi?

Forse ci sono delle restrizioni sull'uso di certi tipi nelle funzioni della libreria?

 
Pronto?
 
polycomp:

In generale, la posizione del problema è definita - la variabile statica.

Ma perché la funzione con questa variabile, compilata nello stesso file con l'indicatore funziona senza problemi (la reinizializzazione ha successo e tutto funziona bene), ma quando mi rivolgo alla stessa funzione, inserita nella libreria, ci sono problemi?

Forse ci sono delle restrizioni sull'uso di certi tipi nelle funzioni della libreria?



Non sono uno sviluppatore e posso solo fare delle ipotesi. Quindi, presumo che quando si reinizializza dopo aver cambiato i parametri ex4 non viene scaricato dalla memoria, e quindi ad un nuovo avvio si ottiene la stessa copia della libreria di prima, con tutte le statiche e i loro vecchi valori.

In idea tutte le statiche del programma dovrebbero essere inizializzate prima di chiamare init(). Ma la libreria ex4 viene caricata solo immediatamente al momento della prima chiamata della funzione di libreria, quindi nessuna statica di libreria arriva all'heap comune.

Guardando il tutto in questo modo, la spiegazione è abbastanza logica.

 

Ecco la funzioneStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

Perché è necessario?

Secondo il libro di testo, restituisce il valore di un carattere come numero. Lì,"c" corrisponde al valore 99. Come posso capirlo? Che utilità ha questa funzione?

Quindi restituisce un numero... ...e cosa fa?

Voglio imparare a lavorare con le stringhe, così mi sono imbattuto in questa funzione. Ecco perché lo chiedo.

 
alsu:

Non sono uno sviluppatore e posso solo speculare. Quindi, presumo che durante la reinizializzazione dopo le modifiche dei parametri, ex4 non venga scaricato dalla memoria, quindi al nuovo avvio si ottiene la stessa copia della libreria di prima, con tutte le statiche e i loro vecchi valori.

In idea tutte le statiche del programma dovrebbero essere inizializzate prima di chiamare init(). Ma la libreria ex4 viene caricata solo immediatamente al momento della prima chiamata della funzione di libreria, quindi nessuna statica di libreria arriva all'heap comune.

Guardando il tutto in questo modo, la spiegazione è abbastanza logica.


Grazie per il chiarimento! Sembra che sia meglio non usare la statica nelle librerie.
 

Ho in testa un array di 3000 valori dello stesso tipo.

Ma non capisco bene come inizializzare un array unidimensionale con questi valori.

Non capisco - devo specificare tutti i 3000 valori separati da virgola nell'operatore di assegnazione quando inizializzo un array

int Mas_i[3000]= { (Bid>1.2153)&&(Bid<1.2160) , (Bid>1.2156)&&(Bid<1.2163) ...devo davvero elencare tutte le 3000 espressioni?}

Per favore datemi un suggerimento, o ditemi dove leggere. Non riesco a trovare una risposta a questa domanda nel tutorial di S.Kovalev..... o non lo capisco.

Grazie.

 
hoz:

Ecco la funzioneStringGetChar https://docs.mql4.com/ru/objects/ObjectFind

Perché è necessario?

Secondo il libro di testo, restituisce il valore di un carattere come numero. Lì,"c" corrisponde al valore 99. Come posso capirlo? Che utilità ha questa funzione?

Quindi restituisce un numero... ...e cosa fa?

Voglio imparare a lavorare con le stringhe, così mi sono imbattuto in questa funzione. Ecco perché lo chiedo.


Per scrivere nel grafico (da non confondere con il commento) deve codificare un codice numerico. Se scrivi 99, la lettera "s" apparirà sul grafico. Non l'ho ancora fatto, ma puoi trovare come fare tutto nel Dock, e con quale carattere, dimensione, orientamento degli assi X e Y in pixel, ecc. Se è già tutto quello che vi manca, fate pure, ma ci vorrà molto tempo! Buona fortuna!
Motivazione: