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

 

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.


ruslanzip:
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?
 
Roza75:
Ho dei soldi nel mio conto reale ma qui dice che si possono ritirare solo gli stipendi?
Conto reale dove ce l'hai?
 
Artyom Trishkin:
Conto reale dove ce l'hai?
Applicazione Metatreder 4
 
Igor Makanu:

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.


Igor Makanu:

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.

 
The_Sheikh:

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!

 
Artyom Trishkin:

Ho l'applicazione Metatreder 4 sul mio telefono
 
Alexey Viktorov:

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.

 
Buon pomeriggio a tutti gli utenti del forum! Di fronte a un problema, il secondo giorno mal di testa, non riesco a capire come attuare l'idea! Come disegnare un rettangolo, un cerchio, un ovale (non importa quale figura) ad una certa candela, per non ridisegnare in nuove coordinate. E se alcune condizioni fanno scattare una figura? Ogni figura sul proprio candelabro. Ho iniziato da poco a studiare mql4, quindi non ho familiarità con i grafici. Ho deciso ieri di provare a stampare un quadrato sulla decima barra (come esempio). Ne ho ottenuto uno e non è più disegnato. Ieri, ho punzecchiato e punzecchiato il codice, e alla fine ha funzionato, ma il quadrato viene costantemente cancellato nel suo vecchio posto e disegnato in uno nuovo, poi infastidito che il quadrato di uscita solo una volta. Un suggerimento che sa come implementarlo! O consigliare dove c'è un ramo sul forum. Aka già letto un sacco di informazioni, solo più confuso! Grazie in anticipo per le risposte!