Discussione sull’articolo "Programmatore migliore (Parte 02): Smetti di fare queste 5 cose per diventare un programmatore MQL5 di successo"

 

Il nuovo articolo Programmatore migliore (Parte 02): Smetti di fare queste 5 cose per diventare un programmatore MQL5 di successo è stato pubblicato:

Questo è l'articolo da leggere per chiunque voglia migliorare la propria carriera di programmatore. Questa serie di articoli ha lo scopo di renderti il miglior programmatore che puoi essere, non importa quanto tu sia esperto. Le idee discusse funzionano sia per i neofiti della programmazione MQL5 che per i professionisti.

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.

Autore: Omega J Msigwa

 
Grazie per il tuo articolo ...
 

Ciao ragazzi,

Sono un noob. Ho molta esperienza di programmazione, ma sto iniziando a scrivere in MQL5, il mio primo linguaggio simile al C++. Ho letto i documenti di riferimento ma non riesco a individuare il mio errore: il valore che mi aspetto venga restituito da expoMA viene stampato/commentato sul mio grafico come 0.0 - sto commettendo un qualche errore di sintassi? Non ho ricevuto alcun problema/errore in fase di compilazione. Qualsiasi suggerimento sarebbe fantastico

void OnTick(
  {   
   int days = 3; 
   
   double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
  
   double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits);
   
   double movingAverageValues[];
   
   double bidAskAverage = (Ask + Bid)/2;
   
   int exponentialMovingAverage = iMA(_Symbol,_Period,MA_Period,0,MODE_EMA,PRICE_CLOSE);
      
   ArraySetAsSeries(movingAverageValues,true);
   
   CopyBuffer(exponentialMovingAverage,0,0,3,movingAverageValues);

   double alpha = expoMA(days);
   
   double dEMA = bidAskAverage - movingAverageValues[1]; // l'indice 1 qui rappresenta l'EMA del valore t - 1
      
   Comment("The ask price is: " +     DoubleToString(Ask,5) + "\n"
           "The bid price is: " + DoubleToString(Bid,5) + "\n" 
           "The average price is: " + DoubleToString(bidAskAverage,5) + "\n"
           "The custom expoMA value is: " + DoubleToString(alpha,5) + "\n"
           "The dEMA value is: " + DoubleToString(dEMA,5)) ;   
   }

double expoMA(int days=2)
   {   
    double alpha = 2 / (days + 1);   
    NormalizeDouble(alpha,5);
    return(alpha);
   }
 
spinner461:

Ciao ragazzi,

Sono un noob. Ho molta esperienza di programmazione, ma sto iniziando a scrivere in MQL5, il mio primo linguaggio simile al C++. Ho letto i documenti di riferimento ma non riesco a individuare il mio errore: il valore che mi aspetto venga restituito da expoMA viene stampato/commentato sul mio grafico come 0.0 - sto commettendo un qualche errore di sintassi? Non ho ricevuto alcun problema/errore in fase di compilazione. Qualsiasi suggerimento sarebbe fantastico

double expoMA(int days=2)
   {   
    double alpha = 2.0 / (days + 1);

    //...
   }

Si sta dividendo 2/4 in numeri interi (0), che poi vengono analizzati in un double. Si dovrebbe invece fare in modo che uno tra il dividendo e il divisore sia un double (in modo che la divisione venga eseguita nel tipo di dati "più dettagliato").

Altre opzioni potrebbero essere (essendo i giorni un int):

double alpha = double(2) / (days + 1);
double alpha = 2 / (days + 1.0);
double alpha = 2 / double(days + 1);
Probabilmente si tratta di un errore di tipo python eheh
 

Manuel Alejandro Cercos Perez:

Stai dividendo 2/4 in numeri interi (0), e poi questo viene analizzato in un double. Invece, si dovrebbe fare in modo che uno tra il dividendo o il divisore sia un double (in modo che la divisione venga eseguita nel tipo di dati più dettagliato).

Altre opzioni potrebbero essere (essendo i giorni un int):

Probabilmente si tratta di un errore di tipo python eheh


Ciao Manuel,

Grazie mille! Il suggerimento di cui sopra ha funzionato a meraviglia. Mi hai risparmiato molte ore di lavoro per trovare la causa principale.

 
Oh, cielo, davvero!
 
Come posso creare una funzione che permetta solo 1 trade o posizione aperta per candela non solo all'inizio della candela ma fino alla formazione di una nuova candela. La funzione newbar permette di aprire una posizione solo all'inizio di una nuova candela.
 
Ci sono molte borse truffa
 
Se si tratta di MQL5, è necessario avviare l'iMA in OnInit.

Altrimenti lo farete ad ogni tick ricevuto.

L'ultima domanda: prendete l'ora di apertura e aggiungeteci
Period seconds()/2 ad esso, quindi siete a metà del periodo.





 
Dominik Egert:
Se si tratta di MQL5, è necessario avviare l'iMA in OnInit.

Altrimenti lo farete ad ogni tick ricevuto.

L'ultima domanda: prendete l'ora di apertura e aggiungeteci
Period seconds()/2 ad esso, quindi sei a metà del periodo.





Ogni domanda di aiuto alla codifica dovrebbe essere postata sul forum come argomento indipendente.
 

Complimenti ai traduttori.

Dopo il primo articolo avevo dei dubbi, ma ora sono sicuro che l'autore vuole spiegare ai programmatori idioti che sono degli idioti. Autore, non si offenda, ma l'articolo è scritto per lei. Inoltre, l'arroganza con cui si rivolge ai lettori vanifica il suo lavoro.