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

 
Alexey Viktorov:
Artem, ti sbagli. L'array dichiarato a livello globale è visibile in tutte le parti del programma e non è necessario passarlo da qualche parte. Basta riempirlo in un posto del programma, e ordinarlo in un altro, e leggerlo nel terzo, non importa.

La stessa funzione può ordinare e/o cercare con successo i dati in diverse matrici. Giusto? E se è così, è meglio passare l'array per riferimento - per il futuro. E quando si chiama la funzione, non farà male vedere con quale array funzionerà.

Sto solo facendo queste considerazioni. Dove mi sbaglio?

 
Artyom Trishkin:

La stessa funzione può ordinare e/o cercare con successo i dati in diverse matrici. Giusto? E se è così, è meglio passare l'array per riferimento - per il futuro. E quando chiamate la funzione, dovreste anche essere in grado di vedere l'array con cui lavorerà.

Ho ragione solo su questo. Dove è sbagliato?

Capito. Il tuo consiglio è per i programmatori di lego. Non si fa questa perversione da soli.

Questo lascia una cosa sbagliata, nel senso che l'array deve essere dichiarato globalmente.

Sono contento che ci capiamo.

 
Alexey Viktorov:

Capito. Il tuo consiglio è per i programmatori di lego. Tu stesso non fai queste perversioni.

Allora rimane una cosa, sbagliata sul fatto che l'array deve essere dichiarato globalmente.

Sono contento che ci capiamo.

Il mio punto in questo contesto è questo:

  1. Dobbiamo ottenere il minor numero possibile di loop per tick.
  2. Vogliamo avere un array costante con i dati degli ordini e delle posizioni a mercato e un array con i dati degli ordini e delle posizioni cancellate/chiuse
  3. Se abbiamo l'array localmente in una funzione, chiamarlo ripetutamente richiede di riempirlo di nuovo. Suggerisco che sia riempito solo una volta ad un nuovo tick - così l'array è globale, altrimenti lo perderemmo quando si esce dalla funzione.
  4. Per trovare qualcosa in esso (nell'array), abbiamo bisogno di un array pieno e di funzioni che restituiscano i dati trovati. All'interno delle funzioni, possiamo dichiarare array ausiliari per i calcoli necessari.

Per questo motivo, sarebbe meglio avere degli array globali - per gli ordini e le posizioni chiuse e aperte. Una volta su un nuovo tick, passiamo la quantità necessaria di ordini/posizioni una volta, riempiendo i due array con essi. E poi riceviamo da loro tutti i dati necessari nello stesso tick. Si noti che non solo l'ultimo ordine/posizione chiuso/aperto e tutti i suoi dati sono calcolati, ma anche tutti i tick genitori e figli di tutte le posizioni sono cercati in caso di chiusura parziale. Di conseguenza, in qualsiasi momento posso vedere da quale biglietto proviene questa o quella posizione, se è stata parzialmente chiusa più di una volta - tutto questo funziona già in una classe che gira in un timer. Ho molti altri dati di cui ho bisogno con un piccolo numero totale di cicli. La profondità di storia richiesta per gli array è impostata per il tester.

E così via...

 
Artyom Trishkin:

In questo contesto, il mio punto è questo:

  1. Dobbiamo ottenere il minor numero possibile di cicli per tick.
  2. Abbiamo bisogno di avere un array costante con i dati degli ordini e delle posizioni a mercato e un array con i dati degli ordini e delle posizioni cancellate/chiuse
  3. Se abbiamo l'array localmente in una funzione, chiamarlo ripetutamente richiede di riempirlo di nuovo. Suggerisco che sia riempito solo una volta ad un nuovo tick - così l'array è globale, altrimenti lo perderemmo quando si esce dalla funzione.
  4. Per trovare qualcosa in esso (nell'array), abbiamo bisogno di un array pieno e di funzioni che restituiscano i dati trovati. All'interno delle funzioni, possiamo dichiarare array ausiliari per i calcoli necessari.

Per questo motivo, sarebbe meglio avere degli array globali - per gli ordini e le posizioni chiuse e aperte. Una volta su un nuovo tick, passiamo la quantità necessaria di ordini/posizioni una volta, riempiendo due array con essi. E poi otteniamo tutti i dati necessari da loro nello stesso tick. Si noti che non solo l'ultimo ordine/posizione chiuso/aperto e tutti i suoi dati sono calcolati, ma anche tutti i tick genitori e figli di tutte le posizioni sono cercati in caso di chiusura parziale. Di conseguenza, in qualsiasi momento posso vedere quale biglietto ha avuto origine da una o un'altra posizione, se è stato chiuso parzialmente più di una volta - tutto questo funziona già in una classe che gira in un timer. Ho molti altri dati di cui ho bisogno con un piccolo numero totale di cicli. Per il tester, la profondità di storia desiderata è impostata per gli array.

E così via...

Quindi non ci capiamo bene.

Se l'array è globale, perché passarlo in una funzione per riferimento se è già visibile dentro questa funzione?

 
Alexey Viktorov:

Quindi non ci capiamo molto bene.

Se l'array è globale, perché passarlo in una funzione per riferimento, se è già visibile all'interno di questa funzione?

Sovraccarico di funzioni - esiste una tale nozione ;)

Se avete bisogno di fare le stesse azioni con diversi array in una funzione, allora...

Tuttavia - stiamo discutendo diversi casi speciali...

 
Artyom Trishkin:

Sovraccarico di funzioni - esiste un tale concetto ;)

Se avete bisogno di fare le stesse azioni con diversi array in una funzione, allora...

Tuttavia - stiamo discutendo diversi casi speciali...

Beh, grazie a Dio, ho capito i tuoi pensieri. Ma sono molto simili ai consigli ai programmatori di lego.
 
Alexey Viktorov:
Beh, grazie al cielo ho capito i tuoi pensieri. Ma sono molto simili ai consigli per i programmatori di lego.

Sarebbe molto strano avere in magazzino un numero enorme di funzioni funzionanti al 100% e scriverle ogni volta da capo. Questo non è un consiglio per costruire case con i dadi. È un consiglio per accumulare le proprie librerie di funzioni e classi. E cosa c'è di sbagliato in una funzione che gestisce più array a seconda di quale le viene passato come riferimento? E cosa c'è di sbagliato nei modelli di funzione?

Se avete del codice per ordinare un array, perché scrivere una funzione separata per ogni tipo di array? Potete semplicemente sovraccaricare e ordinare qualsiasi tipo. Come pensate che funzioni ArraySort()? Si passano diversi tipi di array lì, e su un output si riceve quello ordinato che è stato passato - o le meta quote sono anche lego-coder o cosa?

 
Artyom Trishkin:

Sarebbe molto strano avere in magazzino un numero enorme di funzioni funzionanti al 100% e scriverle ogni volta da capo. Questo non è un consiglio per costruire case con i dadi. È un consiglio per accumulare le proprie librerie di funzioni e classi. E cosa c'è di sbagliato in una funzione che gestisce più array a seconda di quale le viene passato come riferimento? E cosa c'è di sbagliato nei modelli di funzione?

Se c'è del codice per ordinare un array, perché dovremmo scrivere una funzione separata per ogni tipo di array? Puoi semplicemente fare un sovraccarico e ordinare qualsiasi tipo. Come pensate che funzioni ArraySort()? Ci passate diversi tipi di array, e l'output è un ordinato, che avete passato - o metaquote anche lego-coder, o cosa?

L'importante è non arrivare a questo.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Простой советник. Проверка размера бара. Покупка/продажа
Простой советник. Проверка размера бара. Покупка/продажа
  • www.mql5.com
Что должен делать советник: на каждом тике проверять размер бара как только размер бара станет равным или превысит заданный размер то: если свеча б...
 
Alexey Viktorov:

La cosa principale è non arrivare a questo.

https://www.mql5.com/ru/forum/165468/page3#comment_3978059

Non serve a niente lì. Ha un controllo per verificare e poi un controllo per vedere se è giusto. È ancora storto. Non è questo il caso - è qui che servono i professori.
 

c'è una variabile

int Level = 0;

Mentre il programma è in esecuzione, cambia costantemente. Aiutami a scrivere una condizione: se Level NON è cambiato, non fare nulla, se Level è cambiato (non importa se è cambiato più o meno), fare qualche azione { operatore }