Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 531
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
Confrontate la barra successiva e se la sequenza è interrotta, resettate la bandiera e registrate quanti erano corretti, e proseguite nel ciclo.
Basta scoprire che la barra è rialzista e la prossima è ribassista, la prossima, se è uguale alla precedente, si scrive il valore e si resetta la bandiera. E così via fino alla fine.
Ma il primo potrebbe non essere rialzista.
ma il primo potrebbe non essere un toro, ma non c'è modo.
Ecco una variante, anche se non del tutto corretta, sempre contando da una candela ribassista
Ecco una variante, anche se non del tutto corretta, sempre contando da una candela ribassista
Grazie. Se si eleva al quadrato questo numero e si aggiunge uno, il risultato è corretto.
Viene controllato if(i%2==0)?ma il primo potrebbe non essere un toro, assolutamente no.
Ecco un esempio di ritrovare le stesse candele e cambiare la direzione della catena:
Ora dove la catena continua, si può contare il numero di candele nella catena e salvare in una lista, e dove la catena cambia in una nuova, iniziare un nuovo conteggio.
Il numero di candele in ogni catena può essere memorizzato in una lista ordinata. Poi, ordinando la lista, si possono trovare le sequenze massime e minime.
Grazie. Se il numero ottenuto è al quadrato e si aggiunge uno, il risultato è corretto.
È questo che stiamo controllando if(i%2==0)?Se i è un multiplo di due.
È il resto di i diviso per 2
Qui la dimensione delle variabili locali è troppo grande (più di 512kb) durante la compilazione.
Dove cercare e cosa fare? C'è un array di stringhe CArrayString nella funzione, sospetto che possa essere un errore.
Lo riempio usando il metodo Add(), poi faccio Clear() e Shutdown() di nuovo. E poi lo riempio di nuovo con nuovi dati usando il metodo Add(). In questo caso, l'array sarà di nuovo riempito con zero elementi?
Dobbiamo rimuovere tali membri dalle classi che già occupano memoria in fase di compilazione. Questi dati saranno allocati nella memoria dello stack, che è sempre molto piccola. La soluzione a questo problema è di allocare dinamicamente la memoria per i membri della classe che occupano molta memoria.
Per esempio, se c'è un membro della classe
dovrebbe essere sostituito con:
Dobbiamo rimuovere dalle classi i membri che occupano già memoria in fase di compilazione. Questi dati saranno collocati nella memoria dello stack, che è sempre molto piccola. La soluzione a questo problema è di allocare dinamicamente la memoria per i membri della classe che occupano molta memoria.
Per esempio, se c'è un membro della classe
allora dovrebbe essere sostituito con:
Grazie. In qualche modo mi sono liberato di questo problema rimuovendo la classe dai parametri in ogni funzione. In generale, è stato possibile inizializzare questo oggetto una volta per tutti i metodi.
Ho un'altra domanda sulla classe CArray, più specificamente CArrayObj. Esiste un metodo Delete(), ma non sposta un elemento nell'array? Cioè, cancello Delete(18), rimuove un elemento in questa posizione e più tardi se voglio interrogare l'elemento per questo indice, ottengo un puntatore non valido. Esiste un metodo che elimini e sposti gli elementi in modo che in questo caso il 18° elemento sia il 19° dopo l'eliminazione?
Grazie. In qualche modo mi sono liberato di questo problema rimuovendo la classe dai parametri in ciascuna delle funzioni. In generale, è stato possibile inizializzare questo oggetto una volta per tutti i metodi.
Ho un'altra domanda sulla classe CArray, più specificamente CArrayObj. C'è un metodo Delete(), ma non sposta un elemento nell'array? Cioè, cancello Delete(18), rimuove un elemento in questa posizione e più tardi se voglio interrogare l'elemento per questo indice, ottengo un puntatore non valido. Esiste un metodo che elimini e sposti gli elementi in modo che il 18° elemento sia il 19° dopo l'eliminazione?
Non ho lavorato con la libreria standard, ma secondo l'aiuto, il metodo Delete() dovrebbe rimuovere fisicamente l'elemento, cambiando la dimensione dell'array. Eccezione: se il meccanismo di gestione della memoria è disattivato. Per impostazione predefinita, questo meccanismo è abilitato. Il metodo FreeMode è usato per controllare lo stato del flag di gestione della memoria.
Da parte mia, consiglierei di usare i miei propri array in MQL (anche se in C++ uso vettori e liste) e la gestione della memoria da solo, perché non vedo nessuna particolare comodità o vantaggio nella classe CArray. Cancello gli elementi dei miei array piuttosto rapidamente usando questo metodo:
Il suo unico svantaggio è che non mantiene la sequenza degli elementi dell'array. Cioè, può essere applicato a tutti gli array, eccetto quelli ordinati (ordinati).
Salve, potreste dirmi dove posso trovare uno script che mi permetta di piazzare ordini pendenti di acquisto e vendita in MT4 in una sola volta per un certo numero di pip dal prezzo corrente, cioè senza contare manualmente e magari senza nemmeno entrare nella finestra degli ordini? Non voglio andare alla finestra dell'ordine, grazie.
PS: forse sto chiedendo qualcosa di sbagliato, non ho mai usato script prima.
Per favore spiegami il punto -"Gli ordini a mercato non possono essere chiusi se i loro valori di StopLoss o TakeProfit violano il parametro FreezeLevel".
Questo significa letteralmente che un ordine a mercato non può essere chiuso se il suo TakeProfit o StopLoss non incontra il FreezeLevel? Non capisco proprio come un ordine a mercato aperto possa avere degli stop che violano le regole StopLevel o FreezeLevel? Dopotutto, se vengono impostate le fermate sbagliate, il server darà semplicemente un errore e nessuna fermata verrà impostata.
Inoltre, per favore consigliate cos'altro dobbiamo sapere quando chiudiamo un ordine a mercato, quando un broker usa FreezeLevel?