Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 821
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
Per favore, presta attenzione alla mia domanda. Sto scrivendo un indicatore che fa alcuni calcoli e li salva in un array (non una serie temporale) della stessa dimensione del numero di candele nel grafico. Originariamente, ho pensato che se ho 2000 candele nel grafico nei parametri del terminale, allora alla comparsa di una nuova candela, la prima sarà la seconda, la seconda - la terza, ecc. Quindi, quando ottengo prev_calculated uguale a zero, ricalcolo l'intero array, o solo l'ultima barra. Ma ho scoperto che con ogni nuova candela il valore di rates_total aumenta e diventa superiore al limite di 2000.
Quindi, non ha senso ricalcolare l'array.
Ma perché succede che il terminale imposta esattamente 2000 candele?
Quando il terminale si chiude, il numero di barre diventa di nuovo 2000 e ricomincia ad aumentare quando appaiono nuove candele.
Pomeriggio . Potresti darmi un suggerimento? Come sarebbe il codice della condizione: Se il saldo del conto è aumentato o diminuito, allora eseguite la funzione
//Dichiarare una variabile al di fuori delle funzioni:
double Balance=AccountBalance();
//Aggiungi alla funzione tick/calcolo:
se (Balance!=AccountBalance())
{
Balance=AccountBalance();
MyFunction(); // <-- La tua funzione
}
Ho dei soldi nel mio conto reale ma qui dice che si possono ritirare solo gli stipendi?
Conto reale dove ce l'hai?
perché è così che funziona il terminale
Quindi questo è un comportamento normale e non un errore? Perché alcuni indicatori personalizzati di base sono scritti senza prendere in considerazione questo fattore e fanno un ricalcolo completo ad ogni prev_calculated==0.
Questa soluzione è solo per il tester, cosa succede se sovraccarico il terminale? Cosa succede se eseguo un secondo EA su questo account?
devi lavorare con la storia degli ordini, non ci sono ordini aperti con il nostro mago - controlla il profitto dell'ultimo ordine nella storia
Ricaricare? O ricaricare? Se è la seconda, il comportamento dell'EA non cambierà. Se si lancia un secondo EA, l'algoritmo verrà eseguito in modo simile, senza errori.
Ciò di cui l'autore ha bisogno per lavorare, dipende dal compito che si è posto. Per come ha posto la domanda, ho risposto. Non sono stato più specifico nella mia domanda.
Per favore, presta attenzione alla mia domanda. Sto scrivendo un indicatore che fa alcuni calcoli e li salva in un array (non una serie temporale) della stessa dimensione del numero di candele nel grafico. Originariamente, ho pensato che se ho 2000 candele nel grafico nei parametri del terminale, allora alla comparsa di una nuova, la prima prenderà il valore della seconda, la seconda - la terza, ecc. Quindi, quando ottengo prev_calculated uguale a zero, ricalcolo l'intero array, altrimenti solo l'ultima barra. Ma ho scoperto che con ogni nuova candela il valore di rates_total aumenta e diventa superiore al limite di 2000.
Quindi, non ha senso ricalcolare l'array.
Ma perché succede così quando il terminale imposta esattamente 2000 candele?
Quando il terminale si chiude, il numero di barre diventa di nuovo 2000 e ricomincia ad aumentare quando appaiono nuove candele.
//Dichiarare una variabile al di fuori delle funzioni:
double Balance=AccountBalance();
//Aggiungi alla funzione tick/calcolo:
se (Balance!=AccountBalance())
{
Balance=AccountBalance();
MyFunction(); // <-- La tua funzione
}
Grazie mille, ha funzionato!
Applicazione Metatreder 4
Forum sul trading, sistemi di trading automatico e test di strategia
Qualsiasi domanda per i principianti su MQL4, aiuto e discussione su algoritmi e codici
Artyom Trishkin, 2019.04.28 16:55
Conto reale dove ce l'hai?E perché cercare di capire come funziona internamente? Beh, se volete scrivere la vostra funzione, è probabilmente più conveniente ordinare e prendere il valore di uno degli indici più esterni. Ma difficilmente funzionerà più velocemente della funzione integrata. Inoltre, la funzione integrata permette di cercare un valore entro i limiti dell'indice designato. Quindi, il semplice ordinamento non funzionerà. Quindi, dovremo copiare parte dell'array in un array intermedio e ordinarlo già e prendere il valore richiesto da esso, ma la copia dell'array non è una funzione molto "economica".
Dovete capire perché il vostro cervello possa svilupparsi. Ieri mi sono seduto a lungo e ho fatto degli schizzi, sembra che sia possibile fare a meno dell'ordinamento sul principio dell'enumerazione, ma abbiamo ancora bisogno di variabili che memorizzino i valori, e ancora di più possiamo restituire il valore in una volta sola, non l'indice, il che semplifica il lavoro. Potete fare meglio le vostre funzioni nella gamma e diverse modifiche per salvare i calcoli. Le funzioni integrate mancano di molti dettagli. Ma le funzioni built-in sono molto veloci, non capisco a cosa sia legato, forse sono scritte in C++, come io scrivo le mie funzioni molto attentamente, tenendo conto di tutti i dettagli: velocità, qualità, risparmio di codice, implementare modifiche che riducono il numero di controlli e passaggi all'interno delle funzioni, ma per qualche ragione le funzioni built-in continuano a bypassare la velocità, non la qualità, ma mi sto rivolgendo alla comunità del forum con questa domanda da tempo.