Discussione sull’articolo "Programmatori Migliori (Parte 01): devi smettere di fare queste 5 cose per diventare un programmatore MQL5 di successo" - pagina 2

 

Ottimo articolo. Il concetto di cosa fare e cosa non fare è ben spiegato.

Gli errori negli esempi specifici in questo caso non riducono il valore dell'articolo, poiché il suo compito è quello di aiutare le persone a ottimizzare il proprio stile di lavoro. Questo compito è risolto brillantemente, tutto è scritto nel modo più semplice e chiaro possibile.

Grazie, Omega!

 
fxsaber #:

  • Il primo valore della variabile nel ciclo è sbagliato.
  • Invece di un if, ce ne sono due.
  • Il confronto tra stringhe (caratteri) deve avvenire alla fine.
  • Le espressioni bool non sono tra parentesi.
  • Nelle funzioni di input manca la variabile magica.
  • L'oggetto posizione non è stato creato.
Non ho visto l'errore la prima volta fino alla pubblicazione perché non l'ho codificato nel meta-editor ma solo durante la scrittura, ma non è un grosso problema perché, tra l'altro, tutti gli esempi di codifica utilizzati avrebbero dovuto specificare solo
 

Interessante...

fxsaber #:

  • Il primo valore della variabile nel ciclo non è corretto.
  • Invece di un if, ci sono due if.
  • Il confronto tra stringhe (simbolo) dovrebbe essere alla fine.
  • Le espressioni bool non sono contrassegnate da parentesi.
  • Nelle funzioni di input manca la variabile magica.
  • L'oggetto posizione non viene creato.

Diventare un buon programmatore (parte 1): eliminare cinque abitudini per diventare un programmatore MQL5 migliore

 
Aliaksandr Hryshyn #:

Interessante....


:)
 
Aliaksandr Hryshyn #:

Interessante...

Diventare un buon programmatore (parte 1): eliminare cinque abitudini per diventare un programmatore MQL5 migliore

Questo è un lavoro da freelance, il più delle volte i clienti non capiscono affatto il codice e le recensioni negative non riguardano la qualità del codice. L'ho scritto io, il programma non ha dato profitto, quindi ecco la recensione.

 

Una lettura obbligata per tutti (e per l'autore dell'articolo ancora di più) : 97 cose che ogni programmatore dovrebbe sapere

GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitioners.
  • github.com
Pearls of wisdom for programmers collected from leading practitioners. - GitHub - 97-things/97-things-every-programmer-should-know: Pearls of wisdom for programmers collected from leading practitio...
 
Fonte:
int CountPosByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal(); i>=0; i--)
      if(m_position.SelectByIndex(i))
         if(m_position.Magic()==MagicNumber && m_position.Symbol()==Symbol() && m_position.PositionType()==type)
            { 
                counter++; 
            }
   return counter;
  }

Variante più veloce e, a mio parere, più chiara:

int PositionsByType(ENUM_POSITION_TYPE type)
  {
   int counter = 0;
   for(int i=PositionsTotal()-1; i>=0; i--)
   {
      if(!m_position.SelectByIndex(i))
         return (INVALID_HANDLE);

      if(m_position.PositionType()!=type ||
         m_position.Magic()!=MagicNumber ||
         m_position.Symbol()!=Symbol())
         continue;

      counter++; 
   }
   return counter;
  }

1. l'errore nell'inizializzazione del ciclo è che 1 deve essere sottratto dalla quantità quando facciamo il backtracking.

2. Se non è stato possibile ottenere la posizione tramite l'indice dalla funzione di libreria, è necessario uscire dal ciclo con un errore e poi se è necessario elaborare o ripetere la funzione di nuovo, altrimenti c'è il rischio di ottenere una quantità inaffidabile, e si lavora ancora con le finanze, e a volte ci sono grandi quantità nella posizione, e una cosa così piccola può portare a una perdita.

3. Per prima cosa è necessario controllare le variabili bool, poi le enumerazioni ENUM e solo dopo controllare int, double, string, se il controllo fallisce, passare immediatamente all'elemento successivo del ciclo.

Se si effettuano operazioni di confronto tramite &&, il programma controllerà necessariamente ogni condizione.

4. Anche il nome della funzione è importante, sembra meglio PositionsByType, sembra una sciocchezza, ma quando si va a utilizzare questa funzione non è necessario andare nella libreria e nel suo indice, ma basta iniziare a digitare il nome standard Positions, e si avranno diverse opzioni per chiamare PositionsTotal, PositionsByType.....

5. È necessario rispettare la larghezza del codice in modo da non utilizzare lo scorrimento orizzontale, che riduce notevolmente la leggibilità e la velocità di sviluppo.


 
Si sbaglia su questo punto:
"Se si eseguono operazioni di confronto con &&, il programma controllerà necessariamente ogni condizione".
Il confronto viene eseguito in ordine fino al primo falso.
A proposito, in queste situazioni si può anche tenere conto della probabilità che la condizione non sia soddisfatta.

 
Aliaksandr Hryshyn #:
Si sbaglia su questo punto:
"Se si effettuano operazioni di confronto tramite &&, il programma controllerà necessariamente ogni condizione".
Il confronto viene effettuato in ordine fino al primo falso.
A proposito, in queste situazioni si può anche tenere conto della probabilità che la condizione non sia soddisfatta.

Sì, mi avete corretto, il controllo viene eseguito fino al primo falso, l'importante è che i tipi di dati piccoli siano i primi.

Nel caso in cui le condizioni siano costituite da funzioni, la più piccola dovrebbe essere la prima e fino alla più grande dal punto di vista delle risorse consumate, ma senza rompere la logica del programma...

Uso questa tecnica in tutti i miei progetti, il guadagno di velocità è notevole per un tester in modalità di ottimizzazione.

[Eliminato]  
Vitaly Muzichenko #:

Questo è un lavoro da freelance, i clienti molto spesso non capiscono affatto il codice e le recensioni negative non riguardano la qualità del codice. L'avete scritto voi, il programma non vi ha dato profitto, questa è la recensione.

Lo dite in anticipo al cliente o i soldi sono più importanti?