Discusión sobre el artículo "Cómo ser un mejor programador (parte 02): 5 cosas que evitar para convertirse en un programador exitoso de MQL5"

 

Artículo publicado Cómo ser un mejor programador (parte 02): 5 cosas que evitar para convertirse en un programador exitoso de MQL5:

Este es un artículo de lectura obligada para cualquiera que desee mejorar su carrera como programador. Esta serie de artículos tiene como objetivo convertirlo a usted en el mejor programador posible, sin importar la experiencia que tenga. Las ideas analizadas funcionan tanto para principiantes como para profesionales de la programación en MQL5.

En esta serie de artículos, utilizo mucho la palabra novato para referirme a alguien con menos experiencia en programación en MQL5 (no se ofenda por ese detalle), esto hace que resulte más fácil identificarse con ello. Sin embargo, esto no significa que este artículo sea solo para novatos. ¡En absoluto! Independientemente de la experiencia que cada uno tenga en programación, este es un texto para todos, porque lo que convierte a uno en un novato o no son sus hábitos y comportamientos de codificación, no los años dedicados a esta tarea.

codificador novato_vs_profesional 


Para aquellos que no lo hayan leído, el primer artículo se encuentra aquí, por lo tanto, permítanme continuar con la tarea de convertir a los novatos en profesionales.

Autor: Omega J Msigwa

 
Gracias por su artículo ...
 

Hola a todos,

Soy un novato. Tengo un montón de experiencia en programación, pero sólo empezando a código en MQL5 - es mi primer lenguaje similar a C ++. He estado leyendo a través de los documentos de referencia, pero no puede detectar mi error - el valor que espero que se devuelve de expoMA está recibiendo impreso / comentado en mi gráfico como 0.0 - ¿Estoy haciendo algún tipo de error de sintaxis? No recibo problemas/errores de compilación. Cualquier aportación sería genial

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]; // el índice 1 representa aquí la EMA del valor 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:

Hola, chicos,

Soy un novato. Tengo un montón de experiencia en programación, pero sólo empezando a código en MQL5 - es mi primer lenguaje similar a C ++. He estado leyendo a través de los documentos de referencia, pero no puede detectar mi error - el valor que espero que se devuelve de expoMA está recibiendo impreso / comentado en mi gráfico como 0.0 - ¿Estoy haciendo algún tipo de error de sintaxis? No recibo problemas/errores de compilación. Cualquier aportación sería genial

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

    //...
   }

Estás dividiendo 2/4 en enteros (0), y luego eso es parseado en un double. En su lugar, usted debe tener uno de entre dividendo o divisor ser un doble (por lo que la división se realiza en el "más detallado" tipo de datos)

Otras opciones podrían ser (siendo días un int):

double alpha = double(2) / (days + 1);
double alpha = 2 / (days + 1.0);
double alpha = 2 / double(days + 1);
Probablemente sea un error de python jejeje
 

Manuel Alejandro Cercos Pérez:

Estás dividiendo 2/4 en enteros (0), y luego eso se parsea en un double. En lugar de eso, deberías hacer que uno de entre dividendo o divisor sea un double (para que la división se haga en el tipo de dato "más detallado")

Otras opciones podrían ser (siendo días un int):

Probablemente sea un error propio de python jejeje.


Hola Manuel,

¡muchas gracias! El truco anterior ha funcionado a las mil maravillas. Me has ahorrado invertir muchas más horas en encontrar la causa raíz.

 
Oh querido, ¡ahora en serio!
 
Como puedo hacer una función que solo permita 1 operación o posición abierta por vela no solo al principio de la vela sino hasta que se forme una nueva vela. La función newbar solo permite al principio de la nueva vela.
 
Hay muchas bolsas de estafa
 
Si es MQL5, deberás init el iMA en OnInit.

Si no, lo harás en cada tick recibido.

Tu última pregunta: toma el tiempo de apertura y súmale
Periodo segundos()/2 a la misma, entonces usted está a mitad de camino en el período.





 
Dominik Egert:
Si es MQL5, deberás init el iMA en OnInit.

Si no, lo harás en cada tick recibido.

Tu última pregunta: toma el tiempo de apertura y súmale
Período segundos()/2 a la misma, entonces usted está a mitad de camino en el período.





Cada pregunta sobre ayuda de codificación debe ser publicada en el foro como un tema independiente
 

Enhorabuena a los traductores.

Después del primer artículo tenía dudas, pero ahora estoy seguro de que el autor quiere explicar a los programadores imbéciles que son imbéciles. Autor, no te ofendas, pero el artículo está escrito para ti. Además, la arrogancia con la que te diriges a tus lectores anula tu trabajo.