Programmatore migliore (Parte 02): Smetti di fare queste 5 cose per diventare un programmatore MQL5 di successo

Omega J Msigwa | 10 marzo, 2022

Introduzione


Uso molto la parola novellino in questa serie di articoli per descrivere qualcuno con meno esperienza nella programmazione MQL5 (non ti offendere). Rende facile relazionarsi. Questo non significa che questo articolo sia solo per novellini. Assolutamente no! È per tutti, indipendentemente dall'esperienza di programmazione che hai, perché ciò che ti rende un novellino o meno sono le tue abitudini e comportamenti di programmazione... non anni di programmazione.

Programmatore novellino_vs_professionale 


Il primo articolo, per coloro che non l'hanno letto, è qui quindi permettetemi di continuare questa missione per trasformare i novellini in professionisti.

01: Smetti di pensare di essere migliore degli altri


E così stai programmando da un po' e sei riuscito a creare diversi fantastici EA e indicatori per te e i tuoi clienti sul freelance, codebase o qualcosa del genere, quindi ora sei a posto. È positivo se noti i tuoi progressi e se li usi per accrescere la tua sicurezza, in funzione di affrontare grandi sfide per migliorare sempre di più. Meglio però non essere arrogante in proposito. Tieni presente che:

"Una persona arrogante si considera perfetta. Questo è il principale danno dell'ignoranza. Interferisce con il compito principale di una persona nella vita: diventare una persona migliore."

— Leo Tolstoy

È così facile sentirsi super intelligenti e criticare il codice di qualcun altro senza capirlo del tutto, o affrettarsi a rispondere alle domande nel forum in modo offensivo per mostrare di essere un programmatore tosto, mentre la persona che ha appena posto la domanda sul forum è negata nel programmare. Tante volte ho visto persone fare una domanda sul forum, pubblicare il loro codice e descrivere i tentativi fatti prima del fallimento. Poi all'improvviso salta fuori un novellino, spiegando in che modo questa persona abbia torto marcio, senza offrire l'ombra d'una soluzione (codice in questo caso) o offrendo una soluzione meno precisa di quella di partenza. OMG!


risposta dei novellini


Invece di saltare direttamente alla descrizione di come le premesse del discorso siano del tutto sbagliate, per poi fornire un codice che non è nemmeno nel formato corretto, perché non iniziare con spiegazioni sul perché c'è un problema per poi spiegare cosa vada fatto in modo chiaro e dettagliato?

Non è piacevole essere nel forum e iniziare una discussione. Sono sicuro che chiunque proponga un argomento sul forum sappia già di essere in errore e come sia per questo che non sta ottenendo i risultati sperati. È molto probabile che chi apre una discussione sia un novellino e che abbia già affrontato un problema per ore se non giorni (so come ci si sente).

Anche esordire denigrando un codice non ben spiegato o poco chiaro non risolverà il loro problema nel lungo termine. È come somministrare un antidolorifico a qualcuno che ha bisogno di un intervento chirurgico. In questo modo insegnerai ai novellini la peggiore abitudine che ho descritto nel primo articolo di questa serie, il Il vizio del Copia e incolla — abituandoli a ragionare come segue "< i2> ecco, funziona così, ho un problema, metto il mio codice nel forum e mi verrà dato il codice per sostituire quello difettoso … ma è fantastico!"

Assicurati sempre di spiegare la soluzione in modo chiaro, dettagliato e adatto ai principianti perché la maggior parte di loro lo sono. Ricordati anche che ci sono molti altri novellini che si imbatteranno nello stesso problema in futuro e che, quindi, avranno probabilmente bisogno di trovare la soluzione in quella discussione. 

Al di là di questo esempio, pensare di essere migliori di altri è fonte di risposte sbagliate nel forum e di recensioni false nel codebase. Pensando di essere migliori dell'autore di quel particolare sistema solo perché vedi che il codice non è molto complicato nel modo in cui pensi che dovrebbe essere o nel modo che ti piace e con cui hai familiarità, tendiamo a rifiutarci di comprendere appieno come e perché il codice è stato scritto in primo luogo, promuovendo così solamente ignoranza.

02: Evita di avere una mentalità inflessibile 


Smetti di pensare che non c'è modo di diventare bravo in un particolare campo.

"La follia è fare sempre la stessa cosa e aspettarsi risultati diversi."
—Albert Einstein


Non sentirti costretto a creare sempre lo stesso tipo di Expert Advisor, indicatori, script o qualsiasi altra cosa. Questo distrugge la tua creatività e rimani fermo allo stesso punto. Pensare di non essere nato per essere bravo in una particolare area di programmazione solo perché è troppo complessa o difficile è autolimitante. Sappi solo che il tuo cervello è flessibile. È progettato per adattarsi e cambiare con nuovi stimoli. Più ti metti alla prove, migliore diventerai in quel particolare campo. Puoi diventare bravo in:

e in tutto ciò che ti viene in mente. Basta impegnarti a sufficienza.

È vero, finora nessuno ha mai visto il Santo Graal degli EA (Non l'ho visto io stesso) o degli indicatori, ma ciò non dovrebbe impedirti di migliorare i tuoi sistemi al massimo, modificando i tuoi approcci.

Nei miei primi giorni di programmazione MQL5, ero così spaventato quando scaricavo qualcosa come una semplice media mobile da CodeBase e scoprivo che il codice era di 1000 righe o più perché era la prima cosa che guardavo nel codice. Pensavo che fosse troppo complesso. Penso sia lo stesso problema affrontando oggi i novellini.

Ora che ho un po' di esperienza, posso dire che se tutto sembra difficile all'inizio, va bene così. Tutto nella vita all'inizio sembra difficile, ma diventa più facile in seguito, solo il tempo e lo sforzo lo diranno.

03: Smetti di scrivere il codice che "un giorno" verrà utilizzato


Così hai creato i tuoi EA o indicatori per il tuo progetto. E ora hai troppe righe di codice, vero?. Senza concentrazione e un'attenta rilettura del codice, è pittosto probabile che là in mezzo che ci sia codice indesiderato e inutilizzato.


"Chi ha conoscenza non prevede. Coloro che predicono non hanno conoscenza."
— Lao Tzu

Sempre meno codice significa 

  • Meno bug
  • Meno tempo per leggere 
  • Facile da compilare 
  • Veloce da rivedere 
  • Consegna rapida
  • Mantenibile 
  • Facile eseguire il debug
Non perdere troppo tempo a scrivere codice che non è necessario in questo momento.

Spero che almeno una volta, nella programmazione MQL5, tu abbia visto qualcosa del genere, dal codice di qualcun altro

int MathRandInt(int mini, int maxi)
  {
   double f   = (MathRand() / 32768.0);
   return mini + (int)(f * (maxi - mini));
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void chart_random()
 {
//---
  string background[]={"clrBlack"};
  string bulls[]={"clrGreen","clrDeepPink","clrYellow","clrCrimson","clrMediumBlue","clrKhaki","clrYellow"};
  string bears[]={"clrDarkViolet","clrDarkOrange","clrIndigo","clrWhite","clrSilver","clrMediumPurple","clrBlue"};
//---
   ChartSetInteger(ChartID(), CHART_MODE, CHART_CANDLES);
   ChartSetInteger(ChartID(), CHART_SHOW_GRID, false);
   ChartSetInteger(ChartID(), CHART_AUTOSCROLL, true);
   ChartSetInteger(ChartID(), CHART_SHOW_PERIOD_SEP, true);
   ChartSetInteger(ChartID(), CHART_SHIFT, true);
   ChartSetInteger(ChartID(), CHART_SHOW_ASK_LINE, true);
   ChartSetInteger(ChartID(), CHART_SHOW_BID_LINE, true);
   ChartSetInteger(ChartID(), CHART_COLOR_ASK, clrBlue);
   ChartSetInteger(ChartID(), CHART_COLOR_BID, clrCrimson);
   ChartSetInteger(ChartID(), CHART_SCALE, 2);
   ChartSetInteger(ChartID(), CHART_FOREGROUND, true);
   ChartSetInteger(ChartID(), CHART_COLOR_FOREGROUND,clrWhite);
//---
/*
 for (int i=0; i<ArraySize(background); i++){
     int maxi=ArraySize(background);
     int random_=MathRandInt(0,maxi);
    ChartSetInteger(0,CHART_COLOR_BACKGROUND,StringToColor(background[random_]));
    }
  for (int i=0; i<ArraySize(bulls); i++){
    ChartSetInteger(0,CHART_COLOR_CANDLE_BULL,StringToColor(bulls[MathRandInt(0,ArraySize(bulls))]));
    ChartSetInteger(0,CHART_COLOR_CHART_UP,StringToColor(bulls[MathRandInt(0,ArraySize(bulls))]));
   }
  for (int i=0; i<ArraySize(bears); i++){
    ChartSetInteger(0,CHART_COLOR_CANDLE_BEAR,StringToColor(bears[MathRandInt(0,ArraySize(bears))]));
    ChartSetInteger(0,CHART_COLOR_CHART_DOWN,StringToColor(bears[MathRandInt(0,ArraySize(bears))]));
   } */
//---
   int y_distance=70;
   int font_size=30; 
   int width=(int)ChartGetInteger(ChartID(),CHART_WIDTH_IN_PIXELS);
   int padding=70;
   int x=width/3;
//---
    string label_name= MQLInfoString(MQL_PROGRAM_NAME);
    ObjectCreate(0, "name", OBJ_LABEL, 0, 0, 0);
    ObjectSetString(0,"name",OBJPROP_TEXT,label_name); 
    ObjectSetString(0,"name",OBJPROP_FONT,"Lucida Console"); 
    ObjectSetInteger(0,"name",OBJPROP_CORNER,CORNER_RIGHT_LOWER);
    ObjectSetInteger(0,"name",OBJPROP_XDISTANCE,x+padding); 
    ObjectSetInteger(0,"name",OBJPROP_YDISTANCE,y_distance); 
    ObjectSetInteger(0,"name",OBJPROP_FONTSIZE,font_size); 
    ObjectSetInteger(0,"name", OBJPROP_SELECTABLE, false);
 }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+

L'immagine di esempio è troppo piccola— ho visto oltre 200 righe di codice commentate (nascoste) e non necessarie all'interno del programma.

MetaEditor rileva le variabili non necessarie a livello di funzione avvertendoti di variabili non utilizzate in modo che tu possa scegliere se mantenerle, con il relativo avviso, o eliminarle.

Il resto del codice però dobbiamo verificarlo da soli, per assicurarci di non avere questi codici indesiderati.

Se non lo usi - non ne hai bisogno - allora eliminalo.

I codici non utilizzati creano confusione, per non parlare del fatto che aumentano il tempo di scorrimento del codice necessario, quando si trovano in mezzo al codice del tuo programma.

04: Non devi avere sempre ragione.

"Un uomo che ha commesso un errore e non lo corregge, sta facendo un altro errore." 
— Confucius

Il motivo principale per cui i novellini corrono immediatamente al Forum per sminuire il loro codice e fornire descrizioni non chiare su cosa e perché stavano codificando in un modo e cosa volevano, è perché hanno troppa paura di esporsi a ulteriori problemi. Questo non è saggio, miei cari novellini!

La carriera di codificatore è piena di problemi e sfide infinite, e non c'è modo migliore per diventare bravi se non risolvere tutti i problemi che si presentano. Non intendo dire che non dovresti postare nel forum i tuoi problemi (non fraintendermi). Ma assicurati di aver provato almeno un po' a risolverli da solo. Ecco perché è una buona pratica, prima di avviare una discussione, descrivere le cose che hai provato. In questo modo, la tua mente si concentra sul problema e, mettendoti alla prova con metodi diversi, non solo potresti risolvere il puzzle, ma potresti anche scoprire cose che non sapevi e impararne altre ancora.

Una volta che l'errore è stato corretto, assicurati di capirlo e impara come evitarlo la prossima volta.


05: Abbandona l'idea del successo dall'oggi al domani

"Se guardi da vicino, la maggior parte dei successi dall'oggi al domani hanno richiesto molto tempo."
— Steve Jobs

Ok, capisco che stai programmando da un po' ormai, ma ti senti come se non stessi facendo progressi, ti senti come se non stessi andando da nessuna parte. Vero?

Questa sensazione capita molte volte ai novellini, perché la maggior parte di loro si aspettava che i risultati sarebbero stati immediati, ma il mondo non funziona in questo modo.

Siediti, rilassati e goditi il processo. Stai effettivamente facendo progressi; i tuoi dubbi sono solo una parte del viaggio ma non dovrebbero fermarti. Ti consiglierei di lavorare sui tuoi progetti preferiti in modo che tu possa divertirti molto mentre stai ancora imparando ma non rimanere bloccato lì. Assicurati di rimanere aperto a nuove idee e possibilità, come ho spiegato nel secondo punto.

Lavora, e il progresso arriverà automaticamente come prodotto finale.

Ricorda

Il successo non viene da ciò che fai occasionalmente. Viene da ciò che fai costantemente.

 

Conclusione

Ad essere onesti, non sono così magnifico. Non sono perfetto nella programmazione MQL5 e neanche nella mia carriera di sviluppatore web. Sono ancora uno studente del Coding e non c'è limite all'apprendimento, perché non smette mai di insegnare. Mi sforzo sempre di migliorare ogni giorno. Il motivo per cui ho il coraggio di condividerlo con te (insegnare mentre si è uno studente) è per aiutare le persone con la mia stessa passione a Diventare un programmatore migliore.

Percorriamo insieme questo viaggio!