Por favor, introduzca todos sus códigos correctamente: es imposible mirar esta penumbra gris. Hay un plan de acción claro: hacer clic en el botón del editor, insertar el código en el campo resultante. Insertas obstinadamente un lienzo de texto y luego intentas aplicar el estilo "código" a este lienzo
Un fragmento todavía puede ser tratado, pero un poco más ya es un dolor...
No depende de mí, sino de los webmasters. Cómo, en 2019, con la abundancia de fondos, lo han conseguido - un misterio :-)
Pero para hacerlo más divertido en el futuro, primero escribiré posts más o menos grandes en la wiki, para luego copiarlos y pegarlos aquí y reducir el volumen del código publicado.
Un fragmento todavía se puede manejar, pero un poco más ya es un dolor...
No depende de mí, sino de los webmasters. Cómo, en 2019, con la abundancia de fondos, lo han conseguido - es un misterio :-)
Pero para divertirnos más en el futuro, los posts más o menos grandes se escribirán primero en la wiki, y luego se trasladarán aquí mediante el copy-paste y se reducirá el volumen del código publicado.
Al parecer, ahora hay que copiar el bloque de código y pegarlo en el Bloc de notas
A continuación, copie desde el Bloc de notas y pegue de nuevo, pero antes cree un nuevo bloque para el "nuevo" código
He creado una plantilla básica para el EA y he hecho el archivo de estrategia por separado.
¿Cree que es fácil para el usuario?
Aún así, es necesario tener un mínimo de conocimientos de programación.
Y no hay instrucciones de "ayuda", videos, nada te salva.
El usuario necesitará entonces que usted pedalee las estrategias de forma gratuita.
Y no leerán la ayuda.
Al parecer, ahora debe copiar el bloque de código y pegarlo en el Bloc de notas
Luego copie desde el bloc de notas y pegue de nuevo, pero antes cree un nuevo bloque para el "nuevo" código
Me costó un poco de trabajo, pero lo "coloreé". :-)
Una piedra (o más bien un guijarro) para los webmasters mencionados anteriormente: al pegar en el editor inline, o más bien obviamente al principio "colorear", el editor muerde involuntariamente una parte del código que no le gusta. En particular, editó arbitrariamente "if ((ret=ea.OnInit())!=INIT_SECEED) {..}" . Aparentemente, el algoritmo de resaltado cree que OnInit es el único y no puede ser sobrecargado en la clase.
por supuesto, antes de proceder en absoluto, es necesario establecer "línea de partido" y "objetivo-comunismo" :
1) el usuario sólo necesita 100 líneas para aplicar la estrategia. (aparte de los comentarios, entradas y otras #propiedades).
2) Se debe minimizar el número de nuevas "entidades" (funciones/clases/métodos/constantes) para ello.
3) La biblioteca debe contener un número contable de archivos.
4) potencialmente adecuado para GUI
5) ampliable mediante plugins
3) ¿Qué diferencia hay en el número de archivos que contiene una biblioteca? 1, 10, 100, 1000? Todo debe hacerse para la comodidad del promotor. Si se siente cómodo colocando todo en pequeños archivos, no dude en hacerlo. Si está acostumbrado a codificar todo en un solo archivo, no dude en hacerlo. En general, no es difícil reunir un megafichero a partir de un montón de medios automáticos dispares. Así que yo no insistiría en este punto.
4) GUI utilizable - no está muy claro cómo es. La biblioteca es una capa aislada de la lógica de negocio de forma madura. Esta capa no debe depender en absoluto de la interfaz gráfica de usuario externa. Su interfaz gráfica debería depender de esta capa.
if (d_fast_ma==0) d_fast_ma=iMA(ea.Symbol,ea.Period,FAST_MA_PERIOD,0,FAST_MA_METHOD,FAST_MA_PRICE,shift); if (d_slow_ma==0) d_slow_ma=iMA(ea.Symbol,ea.Period,SLOW_MA_PERIOD,0,SLOW_MA_METHOD,SLOW_MA_PRICE,shift);
Su enfoque es puramente procedimental desde el principio: lo que veo es lo que cuento. ¿Y si la media no debe calcularse sobre los precios, sino, por ejemplo, sobre el volumen u otro indicador? ¿Tenemos que volver a escribir el usuario? El cálculo de la media es un algoritmo. Lo que se quiere es aplicar el algoritmo a los datos. Estás mezclando el algoritmo con los datos, en lugar de separarlos directamente (como este pseudocódigo):
int period_ma = 12; int shift = 3; double fast_ma = SMA(Close, period, shift);
Oh, me olvidé del índice de la serie. - Realmente no debería haber ninguno. Hay que computar todo en un buffer de anillo combinando algoritmos en pipelines.
Como contra tesis y polémica a https://www.mql5.com/ru/articles/5654 y a los asesores del Sr. Karputov
El mío ha sido inmerecidamente olvidado. Y en vano, hay mucho allí.
Su enfoque es puramente procedimental desde el principio: lo que veo es lo que cuento. ¿Y si la media no debe calcularse sobre los precios, sino, por ejemplo, sobre el volumen u otro indicador? ¿Tenemos que volver a escribir el usuario? El cálculo de la media es un algoritmo. Lo que se quiere es aplicar el algoritmo a los datos. Estás mezclando el algoritmo con los datos, en lugar de hacer una distinción (como este pseudocódigo):
Oh, me olvidé del índice de la serie. - Realmente no debería haber ninguno. Hay que computar todo en un buffer de anillo combinando algoritmos en pipelines.
Gran parte de todo lo que se hace es por eso. Para que usted pueda calcular todo y el Asesor Experto pueda averiguar las secuencias e interrelaciones por sí mismo. Una vez hice una calculadora de hoja de cálculo a la micro-excel en MT4, y la organización de los cálculos se basa en este modelo.
El estilo de caso de uso es fundamentalmente procedimental, ya que es el más común. Los usuarios potenciales(programadores novatos) escriben de esta manera.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Intentaré (o intentaremos, si alguien está interesado) hacer un marco para los Asesores Expertos. En la medida de lo posible sólo para cosas sencillas y que no requieran ningún conocimiento sustancial del programador aplicado.
A diferencia de la práctica localmente aceptada, el diseño se realizará de arriba a abajo. En otras palabras, primero escribimos el archivo principal (y el único) del EA para el usuario final, eliminamos todo lo obviamente innecesario y escribimos una biblioteca para que esto funcione. Luego añadimos un nuevo caso de uso y actualizamos la biblioteca.
Como contra tesis y polémica con https://www.mql5.com/ru/articles/5654 y los asesores del Sr. Karputov
Por supuesto, antes de proceder, es necesario establecer la "línea del partido" y el "objetivo-comunismo" :
- 100 líneas son suficientes para que el usuario aplique la estrategia. (aparte de los comentarios, entradas y otras #propiedades).
- El número de nuevas "entidades" (funciones/clases/métodos/constantes) debe reducirse al mínimo.
- La biblioteca debe contener un número contable de archivos.
- Potencialmente adecuado para la interfaz gráfica de usuario (GUI)
- ampliable mediante plugins
¿Metas alcanzables? Difícil, pero en principio SÍ. Hay algunas formas de hacerlo y algunas ideas. Pero aún no hay una solución lista :-)
El paso actual es organizar la adquisición de datos por parte del experto. De tal manera que sea fácil para el usuario describirlos, pero al mismo tiempo se conservan las "pistas" para los metadatos y las extensiones posteriores. (En el futuro, la parte de la interfaz gráfica de usuario, al menos la de depuración, ya debería estar implementada en el código posterior)
Como iniciador, he creado un caso de uso simple - operamos en el cruce de dos MA
En consecuencia, la parte de entrada tiene el siguiente aspecto
Lo siguiente que tiene que hacer el usuario es describir los datos que recibe de entrada. Enuméralos al menos:
y explicar cómo calcula/recibe estos datos (largo, pero para ambos terminales).
y, por último, describir la señal comercial:
ESO ES BÁSICAMENTE TODO. Esto es suficiente para implementar un EA y obviamente no requiere que el usuario lea toneladas de documentación. El usuario sólo necesita un conocimiento básico de MQL. Todo lo demás debe hacerlo la biblioteca (o aquí, la palabra elegante - motor). Debe construirse para el usuario, no para que éste aprenda otra API de varios volúmenes.
Por cierto, aquí está OnInit :
..