English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
Cómo ser un mejor programador (parte 04): Aprendiendo a desarrollar más rápido

Cómo ser un mejor programador (parte 04): Aprendiendo a desarrollar más rápido

MetaTrader 5Ejemplos | 22 septiembre 2021, 14:10
1 001 0
Omega J Msigwa
Omega J Msigwa

Introducción

Un desarrollo más rápido es el sueño de cualquier desarrollador. Nadie quiere desarrollar un programa o un fragmento de código durante toda la semana, o pasar horas, si no días, tratando de resolver las cosas cuando nos atascamos en el proceso de codificación.

un desarrollo más rápido

Todo programador quiere ser más rápido

  • Tal vez haya usted visto en YouTube algún vídeo de codificación en MQL5 que no pudiera seguir porque su velocidad es muy inferior a la del instructor, y desee llegar a ese nivel por sí mismo.
  • Tal vez haya visto a algunos desarrolladores con una velocidad de codificación fabulosa en el teclado, que pueden escribir en pocos minutos un algoritmo complejo que a usted le llevaría codificar horas, si no días.
  • O tal vez le gustaría poder codificar de forma más rápida y eficaz para entregar antes sus encargos en Freelance, y tomar así la delantera a sus competidores.
  • O tal vez desee impresionar a su esposa/pareja con sus habilidades de superman del teclado, codificando un algoritmo complejo en un muy poco tiempo y con pocos errores o ninguno en absoluto.
  • A veces, quizá usted desee entregar actualizaciones rápidas de los productos en el mercado y corregir los bugs y errores sobre los que sus clientes le han estado enviando spam a su correo electrónico o bandeja de entrada de mensajes MQL5.

Preste atención: tome papel y lápiz y prepárese, porque estoy a punto de lanzar algunas bombas de conocimiento que le ayudarán a aumentar su velocidad de codificación y producir un trabajo de alta calidad para usted y su cliente. 

No necesita nada de esto para alcanzar su máximo potencial en cuanto a velocidad de codificación

    • Amplia experiencia en codificación.
    • El mejor teclado mecánico.
    • Ser bueno escribiendo con el teclado con memoria muscular.
    • Muchos gigabytes de RAM, muchos núcleos, una GPU potente en su computadora personal (PC).

Desarrollador rápido vs codificador rápido

Antes de comenzar a detallar esas claves, creo que sería mejor explicar la diferencia entre un desarrollador y un codificador.

Desarrollador Codificador
Los desarrolladores son escritores de código con más experiencia. Son responsables de prácticamente todo en el proyecto, como:

El diseño, la planificación del trabajo, la codificación y todo lo relacionado con el proyecto.                                                                                                                                                                                                                                                                                                                            
Cualquiera que pueda escribir algún código es menudo denominado "codificador" por la gente ajena a la industria de la tecnología. Pero, por lo general, los codificadores se consideran el nivel de programadores (desarrolladores) menos capacitado o experimentado. Estas personas no tienen el mismo conocimiento algorítmico que un programador o desarrollador, ya que a menudo son principiantes en el campo, expertos en un solo lenguaje de codificación. En general, a los programadores se les asigna el trabajo de escribir piezas de código directas que los desarrolladores pueden delegar fácilmente.

Siendo un codificador, no necesitas saber todo dentro del proyecto. Por ejemplo, un cliente autónomo podría querer añadir una función de Trailing Stop dentro de su EA. Un codificador puede ir directamente y codificarlo, llamarlo dentro de la función Ontick, luego probarlo una o dos veces en MetaTrader 5 para asegurarse de que funciona, y si lo hace, devolverlo al cliente

En este artículo, discutiremos un término más amplio de desarrollador: cómo puede usted acelerar el desarrollo de sus sistemas. Para ello, estudiaremos de todo: diseño, ética laboral, herramientas a utilizar, codificación, depuración, etc. 


CÓMO CONVERTIRSE EN UN DESARROLLADOR MÁS RÁPIDO

01 — Evite errores y mala arquitectura

Muchos desarrolladores piensan que pasan mucho tiempo escribiendo código, pero, en realidad, pasamos la mayor parte del tiempo leyendo código, depurando y averiguando qué hacer.

Es posible que nos lleve tres horas depurar un fragmento de código que codificamos durante 30 minutos, por lo que, cuantos más errores tenga, más tiempo nos llevará terminar de codificar el proyecto. Ahora ya sabemos que los errores ralentizan nuestro proceso de desarrollo. Entonces, lo mejor que podemos hacer es evitar dichos errores lo antes posible.

Mala arquitectura + Bugs = al fin del mundo (es broma)

Tener errores en el proyecto es malo, pero no poder depurarlos o detectarlos fácilmente debido solo a una mala arquitectura, resulta mucho peor. Echemos un vistazo a este fragmento de código tomado de un EA que alguien me dio para corregir los errores.

ouble NPB=ND(m_account.Balance()*PortionPC,2);
if(CbT==0||PortChange<0||(PortChange>0&&NPB>PortionBalance))PortionBalance=NPB;
if(Pb+Ph<0)DrawDownPC=-(Pb+Ph)/PortionBalance;
if(!FirstRun&&DrawDownPC>=MaxDDPercent/100)
{       ET(A,displayColorLoss,"Equity Stop Loss Reached");
        if(PlaySounds)PlaySound(AlertSound);
        return(0);
}
if(-(Pb+Ph)>MaxDD)MaxDD=-(Pb+Ph);
MaxDDPer=MathMax(MaxDDPer,DrawDownPC*100);
if(SaveStats)Stats(false,TimeCurrent()<NextStats,PortionBalance,Pb+Ph);

//+-----------------------------------------------------------------+
//|                                                                 |
//+-----------------------------------------------------------------+
double StepAB=InitialAB*(1+StopTradePercent),StepSTB=m_accout.Balance()*(1-StopTradePercent), NextISTB=StepAB*(1-StopTradePercent);
if(StepSTB>NextISTB){   InitialAB=StepAB;
        StopTradeBalance=StepSTB;       }
        
double InitPortion=StopTradeBalance*PortionPC;
if(PortionBalance<InitPortion)
{       if(CbT==0)
 {      AllowTrading=false;
        if(PlaySounds)PlaySound(AlertSound);
        Print("Portion Balance dropped below stop trade percent");
        MessageBox("Reset EA, account balance dropped below stop trade percent on "+Symbol()+Period()," Warning",48);
        return(0); }
        else if(!ShutDown&&!RecoupClosedLoss)
        {       ShutDown=true; if(PlaySounds)PlaySound(AlertSound);
                Print("Portion Balance dropped below stop trade percent");
                return(0);              }
}

Fíjese en lo mala que es la arquitectura. Obviamente, tiene que haber errores en el código. Como puede ver, el código resulta difícil de entender con facilidad a simple vista, incluso si ha sido usted el que escribió el código en primer lugar.

Tendrá muy mala suerte (como yo),  si alguien le contrata como freelance para corregir errores, pues tendrá que ver más de 10000 líneas de código, todas ellas como el código anterior (han pasado más de 3 semanas ahora y todavía no he terminado).

Eso es a lo que me refiero aquí. Sea siempre coherente con sus patrones de codificación, la forma en que nombra las funciones, crea variables, etcétera: elija los elementos que le resulten más cómodos y asegúrese de que sean fáciles de usar para usted y los demás.


02 — Aprenda a depurar rápidamente

Hemos visto en el primer punto que los errores ralentizan nuestro trabajo y se alimentan de nuestro tiempo. La depuración es un tema demasiado extenso como para cubrirlo en este artículo. Recomiendo a todos que lean el artículo Depuración de programas en MQL5 para obtener más información sobre la depuración.

Para ser rápidos, deberemos aprender a depurar igualmente rápido. Aquí hay algunos consejos breves.

01: Use en el MetaEditor el CodeStyler .

Esto son pequeños pasos hacia la depuración: esta increíble herramienta no puede depurar por sí misma, pero puede ayudar a cambiar el aspecto de nuestro código y hacer que el código sea claro y fácil de leer.

02: Imprima y comente más.

Para saber qué es lo que no funciona, necesitaremos imprimir y comentar más código en áreas sospechosas.

Busque siempre errores en las áreas donde no se puedan encontrar.

03: No intente cambiar nada antes de comprender claramente cómo funciona.

Estoy seguro de que esto le habrá sucedido antes, al eliminar un fragmento de código para lograr que su sistema funcione: después acabamos por darnos cuenta de que el código que hemos eliminado no tiene nada que ver con los errores de nuestro sistema, y ahora debemos gastar tiempo haciéndolo de nuevo, sin garantías de proteger nuestro sistema contra otros errores a lo largo del proceso. 

Antes de eliminar algo, lea en la documentación si se trata de una función incorporada o un método. Si no está seguro, pregunte en el foro. En mi caso, cuando no estoy seguro de que lo que hago es lo correcto, copio el código completo en un archivo de texto; de esa manera, puedo ser flexible a la hora de cambiar el código y probar cosas nuevas, y también hacer referencia al código principal cuando descubro cuál es el error.


03 — Las bibliotecas se crean para un uso específico

Cuando trabajamos con una biblioteca, es esencial usar las clases proporcionadas para su propósito previsto: tratar de abrirnos paso a la fuerza porque somos demasiado vagos para implementar algo limpio es un camino seguro al desastre.

Si está utilizando la Biblioteca Estándar, siempre será una buena práctica crear instancias y hacer referencia a los miembros de la biblioteca de la mejor manera, es decir, de forma fácil y consistente, como probablemente le recomendarían los desarrolladores de bibliotecas profesionales.

Por ejemplo, en lugar de hacer referencia a las Clases comerciales de la biblioteca de forma perezosa y con nombres poco claros, que ni siquiera son consistentes como este,

#include <Trade\AccountInfo.mqh> //Class for working with trade account properties
#include <Trade\SymbolInfo.mqh>  //Class for working with trade instrument properties
#include <Trade\OrderInfo.mqh>   //Class for working with pending order properties
#include <Trade\OrderHistoryInfo.mqh>  //Class for working with history order properties
#include <Trade\PositionInfo.mqh>   //Class for working with open position properties
#include <Trade\DealInfo.mqh>       //Class for working with history deal properties
#include <Trade\Trade.mqh>          //Class for trade operations execution
#include <Trade\TerminalInfo.mqh>   //Class for getting the properties of the terminal environment
//--- 
CAccountInfo       ac;
CSymbolInfo        symb;
COrderInfo         orders;
CHistoryOrderInfo  hist_orders;
CPositionInfo      pos;
CDealInfo          _clos;
CTrade             my_trade;
CTerminalInfo      info;

podemos hacer referencia a todas las librerías de una manera consistente y fácil de comprender. La mejor forma de hacerlo es en el formato de miembro de clase para la referencia: m_*** es para los miembros de una cierta clase

justo así,

#include <Trade\AccountInfo.mqh> //Class for working with trade account properties
#include <Trade\SymbolInfo.mqh>  //Class for working with trade instrument properties
#include <Trade\OrderInfo.mqh>   //Class for working with pending order properties
#include <Trade\OrderHistoryInfo.mqh>  //Class for working with history order properties
#include <Trade\PositionInfo.mqh>   //Class for working with open position properties
#include <Trade\DealInfo.mqh>       //Class for working with history deal properties
#include <Trade\Trade.mqh>          //Class for trade operations execution
#include <Trade\TerminalInfo.mqh>   //Class for getting the properties of the terminal environment
//--- 
CAccountInfo       m_account;  //members of account info
CSymbolInfo        m_symbol;   //members of symbolInfo
COrderInfo         m_order;    //mambers of OrderInfo
CHistoryOrderInfo  m_orderhistory; //members of Orderhistory info
CPositionInfo      m_position; //members of position info
CDealInfo          m_deal;     //members of deal info
CTrade             m_trade;    //members of trade info
CTerminalInfo      m_terminal; //members of terminal info

Además, no olvide poner comentarios al final de la referencia de la biblioteca para recordar sobre qué trata esta la próxima vez que intente acceder a ella al codificar. 

Además, para acelerar nuestra capacidad de codificación, resulta coveniente usar bibliotecas estándar ya listas para manejar nuestras tareas, en lugar de intentar implementar todo desde cero. Estas bibliotecas han sido creadas por programadores profesionales para hacer que nuestro código MQL5 sea SUCINTO (no lo repitas) y para acelerar el proceso de desarrollo. Animo a todos a usarlas, sin mencionar otras buenas bibliotecas en Code Base y algunas en el Mercado. 

¿Quién crees que codifica más rápido entre estos dos?

Un codificador que comienza desde cero (probablemente un NOVATO) Un codificador que utiliza la Biblioteca Estándar
double SymbolAsk(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return SymbolInfoDouble(symbol, SYMBOL_ASK);
}

double SymbolBid(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return SymbolInfoDouble(symbol, SYMBOL_BID);
}

int SymbolDigits(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
}

double SymbolLotSize(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return SymbolInfoDouble(symbol, SYMBOL_TRADE_CONTRACT_SIZE);
}

double SymbolLotStep(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
}

double SymbolMaxLot(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
}

double SymbolMinLot(string symbol)
{
        if (symbol == "") symbol = Symbol();

        return SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);

}


#include <Trade\SymbolInfo.mqh>
CSymbolInfo   m_symbol; 

input string Input_symbol = "EURUSD";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
     string symbol = Input_symbol=="" ? Symbol() : Input_symbol;
      m_symbol.Name(symbol); //Sets symbol name for our CSymbolInfo class object
//---
   return(INIT_SUCCEEDED);
  } 
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
      m_symbol.RefreshRates(); //Refresh to Get the Last quote 
      double    SymbolAsk = m_symbol.Ask();
      double    SymbolBid = m_symbol.Bid();
      double    SymbolDigits = m_symbol.Digits();
      double    SymbolLotSize = m_symbol.ContractSize();
      double    SymbolLotStep = m_symbol.LotsStep();
      double    SymbolMaxLot = m_symbol.LotsMax();
      double    SymbolMinLot = m_symbol.LotsMin();
  }



















Los usuarios de bibliotecas estándar son 3 veces más productivos que los que no las usan, sin mencionar que tienen menos código en sus programas, lo cual conlleva menos errores.


04 — Evite el código intrincado

Espero que en su carrera de codificación haya visto algo semejante al siguiente código en el asesor experto de alguien

        if(LbT>0)
        {       BEb=ND(BEb/LbT,Digits());
                if(BCa<0)BEb-=ND(BCa/PipVal2/(LbB-LbS),Digits());
                if(Pb>PbMax||PbMax==0)PbMax=Pb;
                if(Pb<PbMin||PbMin==0)PbMin=Pb;
                if(!TradesOpen)
                {       FileHandle=FileOpen(FileName,FILE_BIN|FILE_WRITE);
                        if(FileHandle>-1)
                        {       FileWriteInteger(FileHandle,TbF);
                                FileClose(FileHandle);
                                TradesOpen=true;
                                if(Debug)Print(FileName+" File Written: "+TbF);
                        }
                }
        }

Podría resultar sencillo al escribir este bloque de código, pero no será fácil de leer cuando quiera depurarlo: es muy probable que olvide algunas de las variables, si no todas, por lo que tendrá que empezar a referirse a ellas nuevamente. ¡Piense en lo desperdicio de tiempo que supone esa actividad!

Escribir algoritmos complejos hará que la gente lo deteste, y también le confundirá.

Hacer que la lógica completa aparezca forzosamente en un solo lugar resulta desagradable: intentar incluir demasiadas operaciones en una sola función ralentizará nuestro proceso de desarrollo, ya que tendremos que organizar cuidadosamente nuestro código y asegurarnos de que todo funcione también.

Si necesita realizar ciertos tipos de operaciones, deberá considerar la posibilidad de crear funciones independientes que solo hagan esto; así le resultá fácil terminar una cosa y luego pasar a la siguiente.


05 — Evite distracciones.

"Tenga cuidado, cuando las distracciones se presenten en su camino, sabrá que es una distracción cuando deje de hacer lo que se suponía que debía hacer y se encuentre reflexionando sobre cosas que no tienen valor."
— Beverly R. Imes

Mantenga su teléfono en silencio (si es que no lo apaga) y no lo saque para comprobar sus likes y compartir sus fotos en las redes sociales. Su eficacia caerá en picado si actúa así. Si se encuentra en una casa ruidosa y llena de actividad, busque un lugar para sentarse y terminar su proyecto.

Si es lo suficientemente importante para usted, eliminará todas las posibles distracciones: cierre la puerta, apague el teléfono y desconecte las redes sociales; concéntrese  y haga su trabajo.

Creo que este es el mayor desafío que debemos superar como desarrolladores en el mundo moderno, donde solo un clic nos separa de hermosas modelos en Instagram y vídeos de gatos lindos en Snapchat.

Cuando las cosas se ponen difíciles en nuestro proyecto, cuando no podemos encontrar el código correcto a implementar, resulta tentador tomarse un descanso y ver qué ocurre en las redes sociales, o simplemente salir y relajarse.

No es que esté en contra de los descansos o de relajarme con amigos, no, no me malinterprete: no codifico las 24 horas del día y los 7 días de la semana, aunque tengo demasiados proyectos de desarrollo web y MQL5 esperándome. Pero creo que todos deberíamos ceñirnos a un horario que nos funcione. Si no es el momento de revisar las redes sociales, no lo haga. Si es el momento de codificar, cíñase solo a eso hasta el final de la sesión (no importa cuán confusas o difíciles se pongan las cosas). Sería incluso preferible ampliar las sesiones de codificación si no tiene nada importante que hacer después de eso.

Los programadores distraídos pueden codificar en 5 horas o más algo que los programadores concentrados pueden codificar en 45 minutos.


06 — Leyendo la documentación y aprendiendo

Después de encontrar la solución a su problema en el foro, no se apresure a copiarlo y pegarlo pensando que terminará su proyecto más rápido de esa forma (ya hablé de esto en mi primer artículo). Asegúrese de comprender cómo codificar la solución por sí mismo. Resulta difícil trabajar con código copiado cuando algo sale mal, especialmente cuando tiene errores, ya que usted no lo comprende personalmente.

Animo a todos los codificadores a leer la documentación con frecuencia, especialmente las cosas que aún no conocen o con las que aún no se sienten cómodos.

¿Cómo puede aumentar esto nuestra velocidad de desarrollo?

Cuanto más sepamos sobre el lenguaje MQL5, más cómodo se volverá el trabajo con este, y más rápido operaremos como programadores en él. Siempre supone una lucha encontrar el código correcto para implementar nuestra idea de forma efectiva (covertirlo en un programa): aquí es donde perdemos la mayor parte de nuestro tiempo. Espero que se dé cuenta de lo difícil que resulta codificar incluso las cosas más simples si no tenemos los conocimientos suficientes sobre una actividad en particular, como por ejemplo la codificación de indicadores, scripts, asesores expertos, etc.  Aquí es donde la experiencia entra en acción.

Entonces, ¿cómo conseguimos experiencia? Mi respuesta siempre es simple: aprenda y pruebe cosas diferentes

Quienes saben mucho sobre el lenguaje MQL5 disponen de infinitas opciones para convertir su idea en un código efectivo y significativo. Ellos saben dónde usar


07 — Repetición espaciada

"Los seres humanos recuerdan o aprenden elementos con mayor facilidad cuando los estudian unas cuantas veces durante un periodo prolongado de tiempo (presentación espaciada), en lugar de estudiarlos repetidamente en periodo breve de tiempo".
— Hermann Ebbinghaus

Así es como hemos aprendido todo lo que sabemos: haciéndolo una y otra vez lentamente hasta que se convierte en una segunda naturaleza. La memoria en nuestro cerebro es limitada, y solo retendrá lo que usamos regularmente. Por eso, si queremos mantener algo en nuestra mente, deberemos hacer ese algo con regularidad. Deberíamos aprender a usar esto en nuestro beneficio.

¿Cómo?

Dado que una de las razones que nos hace ser lentos es nuestra ignorancia sobre ese tema en particular, siempre debemos buscar áreas que necesitamos mejorar ( algunas de ellas se discuten en este artículo) una vez que encontremos esas áreas, debemos esforzarnos continuamente por mejorar en esas áreas hasta que seamos excepcionalmente buenos. Esto funciona bien cuando intentamos aprender y dominar una habilidad en particular, como el aprendizaje de máquinaslos algoritmos autoadaptativos, etc.


08 — Atajos de teclado y configuración del MetaEditor

Atajos de teclado

Los atajos de teclado son divertidos, y pueden ahorrarnos mucho tiempo al escribir código con el teclado. Soy un profesional en la materia, así que me gusta enseñar a otros programadores mis atajos de teclado más productivos en el MetaEditor.

A la hora de escribir código, aprender los atajos de teclado le cambia a uno la vida, y creo que todos los desarrolladores deberían adoptar el teclado en lugar del ratón, ya que pasamos la mayor parte del tiempo trabajando con nuestro teclado, por lo que debemos mostrar bastante dominio de esta herramienta.

Estos son algunos de mis atajos favoritos en un PC con Windows (para Mac y Linux). No estoy seguro del todo, pero los usuarios de Mac pueden reemplazar CTRL con COMMAND;

ATAJO USO
 F4 Alternar entre MT5 y el Metaeditor
 F7  Compilar el código 
 CTRL+F7  Compilar todos los documentos abiertos 
 CTRL+C Copiar el código seleccionado 
 CTRL+V Pegar el código seleccionado 
 CTRL+X Cortar el código seleccionado 
 CTRL+Z Deshacer los cambios en el código  
 CTRL+Y Rehacer los cambios en el código
 CTRL+A Seleccionar todo el código 
 CTRL+END mover el cursor a la última línea de código en su documento 
 CTRL+HOME mover el cursor a la primera línea de código en su documento 
 SHIFT + Direcciones(IZQUIERDA,DERECHA,ARRIBA,ABAJO) Seleccionar el código hacia esa dirección   
 TAB Aumentar la sangría del código seleccionado 
 SHIFT+TAB Reducir la sangría del código seleccionado  
 CTRL+ Backspace Borrar una palabra completa en una línea 
 HOME mover el cursor al inicio de una línea 
 END mover el cursor al final de una línea 
 CTRL+ ? 
//--- Put a code separator to the next line
 CTRL+>
//+------------------------------------------------------------------+
//|           Add this to the current line and the next two          |
//+------------------------------------------------------------------+
 CTRL+"
// adds two forward slashes to the beginning of a line  
 CTRL+, Aplica el estilizador a su documento actual 
 CTRL+F4  Cerrar el documento actual 
 CRL +F5 Iniciar/Finalizar la depuración con los datos históricos 
 CTRL+T Abrir / Ocultar la caja de herramientas 
 CTRL+D Abrir / Ocultar el navegador
 ALT+G  Ir a una variable/declaración de función 
 WINDOWS+T Para navegar en aplicaciones en la barra de tareas en caso de que quiera abrir
 el navegador de internet(CHROME) y buscar información sobre un problema 
 CTRL+F  Abrir la barra de búsqueda
 CTRL+S  Guardar el documento actual 
 CTRL + Direcciones  Saltar a los espacios de código (palabra por palabra) en esa dirección
 CTR + +   Navegar hacia delante
 CTRL+ -  Navegar hacia atrás 
 CTRL+SHIFT+U  poner el código seleccionado en mayúsculas 
 CTRL+U  poner el código seleccionado en minúsculas

Configuración del MetaEditor

También es importante tener la mejor configuración del MetaEditor, que favorezca una escritura más rápida del código. Vamos a ver algunas de las configuraciones que recomiendo utilizar a todos.

Estas casillas deben estar marcadas

  • Insertar () y cerrar}]" 'Esto ayudará a evitar esos errores (fin inesperado del programa, paréntesis desequilibrados) que pueden resultar difíciles, y que también pueden acaparar demasiadas líneas de código.
  • Resalte los corchetes coincidentes (esto le recordará en qué función o en qué bloque se encuentra)
  • Resalte la línea actual (puede resultar confuso llegar a donde estaba codificando la última vez; configurar esta opción lo ayudará a llegar rápidamente de un vistazo: lo que tiene que hacer es seguir desplazando el código y la línea actual se resaltará)
  • Historia del portapapeles (para ver su historial de copia-pega; podrá copiar diferentes líneas de código y acceder a ellas fácilmente)

Otras configuraciones incluirían la elección del tamaño de fuente correcto para sus ojos y la distancia entre estos y el PC, sin necesidad de establecer un tamaño de fuente pequeño que apenas pueda ver.

Para jugar con la configuración y encontrar más ajustes, y además conseguir todo ello más rápido, entre en Herramientas>Opciones.


08 — Aprenda a googlear

Aprender a realizar la búsqueda correcta en Google es una actividad que ahorra tiempo y puede acelerar la codificación. Es muy probable que se encuentre con muchos problemas mientras codifica, así que necesitará una solución inmediata. No obstante, no basta con saber dónde encontrar las soluciones, también necesitará saber cómo buscar la solución de forma efectiva.

Hacer una búsqueda en Google es suficiente para obtener respuestas rápidas y correctas a sus preguntas, ¿verdad?  FALSO  

Veamos un ejemplo de un usuario medio de Google que se atasca en la lectura de una matriz de un archivo binario y usa Google para buscar la solución.

Lo primero que haría la mayor parte de la gente es entrar en Google y poner algo así: como leer una matriz en un archivo binario, esto es lo que obtendrían

cómo realiza una búsqueda de Google sobre MQL5

Nota: el número total de resultados es de 98 millones (en inglés). 

Fíjese en que la web está llena de basura y sitios que, si no tiene cuidado, le harán perder el tiempo, además de poner sus datos privados en manos de piratas informáticos. El término "búsqueda" es demasiado vago para obtener el resultado inmediato específico que necesitamos. Para lograr obtener los resultados deseados, deberemos ser claros y específicos.

Para quienes deseen profundizar en este tema, los consejos de búsqueda pueden resultar demasiado numerosos. Les recomiendo ver este breve vídeo. Aquí, voy a mencionar solo dos consejos. 

01: Encuentre un sitio web específico para realizar la búsqueda

No hay mejor lugar para obtener soluciones relativas a MQL5 que MQL5.com. Siempre que haga una búsqueda en Google, considere MQL5.com como el sitio web en el que desea que Google busque sus respuestas.

Añada  el sitio web: MQL5.comal final de sus términos de búsqueda, y estos resultados de la búsqueda

resultados de una búsqueda sobre mql5

Esta vez solo se han retornado 568 resultados, todos ellos procedentes de MQL5.com (El  sitio web: URL ordena a Google que busque solo en el sitio web especificado).

02: Sea más específico

MQL5.com sigue siendo de por sí un sitio amplio para realizar una búsqueda, incluso si tenemos muy claro lo que queremos: hay una forma que siempre uso para mí (aunque no está recomendada por Google), y que funciona. La he estado usando desde hace mucho, pero la clave aquí es que deberá saber en qué parte de MQL5 desea que se prioricen sus resultados, por ejemplo, artículos, foros, Code Base, etcétera. Es posible que prefiera los resultados de:

  •  La sección de artículos, si desea conocer en profundidad un tema.
  •  Del Foro, si desea una solución rápida 
  •  De Codebase, si desea ver lo que otros han codificado hasta el momento.

Busque en el siguiente formato: MQl5 + sección deseada + término de búsqueda, ejemplo en este caso 

Foro MQL5 cómo leer una matriz en un archivo binario: aquí está el resultado

búsqueda clara pero vaga de MQL5

Este método es específico, pero aún así, no hemos enviado a Google a un sitio específico (solo el sitio web en el que usted se encuentra actualmente). Lo mejor sería añadir el sitio: MQL5.com. El término de búsqueda final ahora es foro cómo leer una matriz en un archivo binario sitio web: MQL5.com En esta ocasión, Google retornará 399 resultados.


Conclusión

Ya es suficiente por este artículo: todavía estoy trabajando en otros consejos para aumentar nuestra velocidad de programación y nuestra productividad. Encontrará más consejos en los próximos artículos; habrá muchos de ellos. Recomiendo a todos los programadores que practiquen a diario estos hábitos y métodos

Gracias por su atención. Me gustaría escuchar algunos de sus consejos en la sección de comentarios de este artículo.

Saludos.

Traducción del inglés realizada por MetaQuotes Ltd.
Artículo original: https://www.mql5.com/en/articles/9752

Combinatoria y teoría de la probabilidad en el trading (Parte II): Fractal universal Combinatoria y teoría de la probabilidad en el trading (Parte II): Fractal universal
En el presente artículo, continuaremos estudiando los fractales, prestando especial atención a la generalización de todo el material. En concreto, intentaremos hacer el material más compacto y comprensible, para poder usarlo de forma práctica en el trading.
Gráficos en la biblioteca DoEasy (Parte 81): Integrando gráficos en los objetos de la biblioteca Gráficos en la biblioteca DoEasy (Parte 81): Integrando gráficos en los objetos de la biblioteca
Vamos a comenzar a integrar los objetos gráficos ya creados en el resto de objetos de la biblioteca creados previamente, lo que finalmente dotará a cada objeto de biblioteca de su propio objeto gráfico, permitiendo al usuario interactuar con el programa.
Gráficos en la biblioteca DoEasy (Parte 82): Refactorización de los objetos de la biblioteca y colección de objetos gráficos Gráficos en la biblioteca DoEasy (Parte 82): Refactorización de los objetos de la biblioteca y colección de objetos gráficos
En el presente artículo, mejoraremos todos los objetos de la biblioteca: para ello, asignaremos a cada objeto su tipo único y continuaremos desarrollando la clase de colección de objetos gráficos de la biblioteca.
Cómo ser un mejor programador (parte 03): 5 cosas que evitar para convertirse en un programador exitoso de MQL5 Cómo ser un mejor programador (parte 03): 5 cosas que evitar para convertirse en un programador exitoso de MQL5
Este es un artículo de lectura obligada para todo aquel que quiera mejorar su carrera como programador. Esta serie de artículos tiene como objetivo hacer de usted el mejor programador posible, sin importar la experiencia que tenga. Las ideas debatidas funcionan tanto para principiantes como para profesionales de la programación en MQL5.