Muchísimas gracias por la iniciativa MRCSoft. Me parece un buen punto de partida para muchas personas que son
traders pero no se han adentrado en el mundo del trading automático, y hasta les da casi miedo abrir el código y las entrañas del EA.
Mi humilde opinión es que, como bien dice Hermo, yo prefiero programar directamente las condiciones de mi
estrategia y, dependiende de qué cosas vaya a usar o meterle a la misma (
BreakEven, TrailingStop, Money Management, etc etc etc) entonces le voy añadiendo lo necesario, pero solo y exclusivamente lo necesario. Pienso que tener una plantilla con todo es posible que le pueda facilitar el trabajo a quien no ha abierto nunca el código de un EA y que, por tanto, pueda meter en la parte correspondiente el bloque de su estrategia y tirar para adelante, pero como bien sabes en el propio código, en la propia estrategia, y en los propios
indicadores que ésta pueda usar hay 1000 matices y cada una requerirá unos procesos y una codificación diferente.
Por ejemplo, es posible que por necesidades de la propia estrategia y de cómo y cuándo compruebe sus
señales, o cúando vaya modificando su SL o su Trailing, etc, sea necesario usar otras funciones adicionales al OnTick(), como por ejemplo en ciertas
estrategias puede ser necesario usar el OnTimer(), el OnCalculate, o el OnChartEvent(). Por lo que no veo tan sencillo ni tan óptimo en cuanto a resultado final codificado, meterle unas señales de entrada o salida exclusivamente ahí a una plantilla con todos los bloques. Yo más bien veo estas plantillas muy útiles para, por ejemplo, si yo no se como hacer un Trailing, pues cojo y en mi EA donde ya tengo programada la estrategia, sus señales, tengo externalizadas las variables de mis indicadores, etc etc y todo optimizado en base a sus necesidades, entonces le meto sólo el bloque del Trailing que lleva la plantilla. Veo más óptimo el proceso de esta forma como dice Hermo.
También estas plantillas nos pueden valer para darnos ideas si hay algunas cosas que no sabemos cómo hacerlas y llevan el módulo correspondiente que nos podemos copiar en nuestros EAs.
Igualmente hay programas que te generan código sin tener que saber programar, tú solo le pones las condiciones de tu estrategia en un entorno gráfico y ellos ya te generan todo el código, pero para mí tienen el mismo problema, y es que usan el mismo concepto este , con una plantilla digamos "global" donde van todas, absolutamente todas las funciones posibles que puedes pedirle al EA, por si acaso luego las vas a usar, pero a lo mejor de 100 funciones tú y tu estrategia al final solo usas 6 u 8, con lo cual tienes miles de
líneas de código inútilmente. Te pongo el ejemplo de un EA generado por este sistema, que tardaba 35 minutos en realizar un backtest por el método del 99% con datos de tick (un
simple backtest y no una optimización), y encima nos generaba un archivo de log hipermegasuper detallado que nos ocupaba 4,5 GB (si Gigabytes, habeis leíddo bien, jeje). Pues bien, empecé a eliminar todas las funciones que no se usaban (cientos), y a recolocar aquellas que, por ejemplo no era necesario que me comprobase en cada tick, sino que era suficiente que lo hiciese a apertura de
vela, además de añadirle otra opción para que no me generase log detallado y, el mismo backtest, con los mismos históricos ahora me tarda menos de 5 minutos. Sin embargo, tardé varias horas en ver cómo estaba todo el código e ir viendo qué podía eliminar y qué no, y cómo podía recolocarlo todo.
Conclusión: tardo mucho más en eliminar partes que no voy a usar, y en depurar el código que en hacerlo desde 0, o si no desde 0, al menos cogiendo código hecho, pero solo de lo que mi EA va a necesitar y usar. (No es el caso de tu plantilla, porque aún no lleva todas las funciones, pero imagina que se empieza a trabajar, la gente empieza a aportar ideas, y se le van añadiendo 1000 opciones más para cubrir las necesidades de todo el mundo). En ese caso ya estaríamos en las mismas, y mi humilde opinión es que es muy de agradecer y que nos sería muy válida, pero para cuando queramos meter un módulo de lo que sea y no sepamos cómo hacerlo o nos de pereza programarlo desde 0, entonces cogerlo de la plantilla y pegarlo directamente en nuestro EA, pero hacerlo al revés no lo veo óptimo, por los motivos comentados.
Por otra parte, viendo el código de la plantilla, yo algunas de las variables que metes con input, las metería como extern, (sobre todo SL, TP, etc etc), ya que como input sí que puedes modificarlas en las propiedades del EA a la hora de hacer el backtest, pero no puedes incluírlas en los procesos de optimización.
Lo dicho, muchísimas gracias por la iniciativa. También llevas mi reputación.
Saludos y abrazos a todos.