Estoy completamente perdido

 

Quiero crear un "EA" como tú lo llamas. Aunque es curioso que sigas usando eso como acrónimo, por lo que a mí respecta, significa "algoritmo evolutivo" que es exactamente lo que mi método es en realidad. Si funciona. Lo que hace, si la dispersión es lo suficientemente baja. Está en la valla.

De todos modos, tengo experiencia en programación. Y por lo que he visto de él, MQL4 se parece bastante a C++. Pero me faltan algunos detalles cruciales. Ya conozco las variables y las constantes y muchas cosas diferentes, pero necesito algún tipo de plantilla básica para trabajar, y me faltan algunas cosas conceptuales. Puede alguien publicar una especie de programa de robot de comercio de ejemplo que sea simple pero que tenga todos los elementos que necesito y que explique lo que hace cada parte del mismo y entonces podré decir "ajá, así es como hago lo que necesito hacer".

Básicamente, me gustaría que mi programa fuera capaz de descargar en la memoria RAM de mi ordenador lo siguiente (descargando los datos a mi ordenador a través de la plataforma de trading de divisas)

datos altos, bajos, abiertos, cerrados para los precios de compra Y venta (ya que el valor del spread puede variar) para algún incremento de tiempo que yo especifique dentro del programa (si esto se puede hacer) incluyendo el más reciente ya sea tan pronto como se complete (así que cada minuto, o cada 5 minutos, o cada 10 minutos, etc., cualquiera que sea el intervalo de tiempo) o posiblemente en cada tick - cada vez que el precio cambia - cualquiera de estos se puede hacer, también me gustaría ser capaz de tener una variable que representa la cantidad de tiempo desde el último completado (por lo que si es cada 10 minutos, habría una variable que se actualiza con cada tick que cuenta hasta 10 minutos desde 0, y cuando llega a 10 minutos, hay otra actualización de los datos), También me gustaría descargar el valor total de la cuenta en la liquidación, descargar el número total de posiciones y el tamaño de las posiciones y el tipo de las posiciones (por ejemplo USD/JPY es 10000 o 100000 DOLARES en yenes, pero EUR/USD es 10000 o 100000 EUROS en dólares, pero el valor de mi cuenta será en dólares, por lo que necesita ser capaz de determinar el tamaño del lote variable de una posición). A partir de los precios actuales de compra y venta, el programa podría, por supuesto, simplemente restar el uno del otro para obtener el valor actual del spread.

ENTONCES me gustaría que el programa fuera capaz de realizar las siguientes acciones (cargando los datos desde mi ordenador a través de la plataforma de negociación de divisas)

comprar o vender mediante órdenes de mercado u órdenes limitadas. También, por favor, díganme si pongo una orden limitada pero el precio cuando pasa, si puedo esperar que me dé el precio límite que puse, o puede ser mejor? Por ejemplo, supongamos que el precio del EUR/USD para comprar es de 1,3500 y tengo una orden limitada para comprar a 1,3501, ¿pagaré 1,3501 o 1,3500? ¿Debo esperar que el broker me engañe ahí? ¿O es funcionalmente idéntico a poner una orden de mercado con la excepción de que si el precio es 1,3502 o más en el momento en que la orden entra en el sistema, no se producirá?

FINALMENTE, me gustaría que el programa de ejemplo incluyera una llamada a otra función. Sólo una cosa simple, que realiza un cálculo simple de algún tipo con los datos que se pasa en ella y devuelve algún valor - si tanto pasar por el valor y pasar por referencia son posibles como lo es en MQL4 entonces por favor incluya un ejemplo de cada uno (comentado para mostrar lo que está haciendo) en el programa de ejemplo.

También, por favor dígame, si por lo general implica más de un archivo real (con la extensión mql4?) como puede ser en C ++ o si es generalmente un solo archivo mql4, y es compilado por la plataforma de comercio, o necesito algún compilador para ello y luego la plataforma de comercio utiliza el código de la máquina o lo que se genera por el compilador?

Si alguien lo hiciera, simplemente para hacer un programa ficticio que contuviera todos estos elementos, no sólo me sería muy útil a mí, sino que sería útil a otros me imagino. Gracias de antemano a quien lo haga.

 
Oh oh, mejor aún, para la variable que comienza en 0 y cuenta hasta 10 minutos (o el tiempo que se utilice) - debe ser normalizada - dividida por la unidad de tiempo - de modo que sea un doble que varía entre 0 y 1. Lo digo sólo en caso de que haya algún problema con un factor de escala. De esta manera, tal vez se podría aplicar a un gráfico de 5 minutos, o de 10 minutos, o de 1 minuto, pero cualquiera que sea la unidad de tiempo, esta variable siempre está entre 0 y 1.
 
No hay ningún programa que te dé todo lo que necesitas saber sobre mql4 en una instancia. Te recomiendo que veas el código base por ejemplo ea que ya tienes algo de programación. Si no te gusta aprender mirando códigos sino una explicación del lenguaje, entonces revisa el mql4_book. También, hay las documentaciones para la referencia fácil.
 
Estaba preguntando si alguien podría escribir uno. Si conoces el formato básico del lenguaje debería tomar como 5 minutos, debería tomar más o menos lo que tomó leer mi post. Solo tienes que escribir el programa, escribir un ejemplo de cada una de estas cosas y ponerlo. He mirado el libro de mql4, pasa directamente de explicar lo que es una variable a hacer presuposiciones sobre mis conocimientos sobre las funciones y me da sueño intentar encontrar el punto de transición en el que pasa de ser mucho más simple de lo que necesito a más de lo que estoy preparado para comprender. No estoy pidiendo que alguien escriba un "asesor económico" para mí, sólo una cosa estúpida que tenga en ella todas las instrucciones que pueda querer usar. Alguna cosa que descargue en variables en mi ordenador cualquier información que pueda querer usar, y cada instrucción que pueda querer introducir - que ahora que lo pienso, me gustaría que no sólo fueran órdenes de compra y venta limitadas y de mercado, sino también algo que cancele cualquier orden existente, después de todo, no querría dejar ninguna orden limitada rezagada por ahí en caso de que no se ejecute, no querría que el programa se olvidara de ellas.
 
zortharg: Estaba preguntando si alguien podría escribir uno. Si conoces el formato básico del lenguaje debería tomar como 5 minutos, debería tomar como el tiempo que tomó leer mi post. Solo hay que escribir el programa, escribir un ejemplo de cada una de estas cosas y ponerlo. He mirado el libro de mql4, pasa directamente de explicar lo que es una variable a hacer presuposiciones sobre mis conocimientos sobre las funciones y me da sueño intentar encontrar el punto de transición en el que pasa de ser mucho más simple de lo que necesito a más de lo que estoy preparado para comprender. No estoy pidiendo que alguien escriba un "asesor económico" para mí, sólo una cosa estúpida que tenga en ella todas las instrucciones que pueda querer usar. Alguna cosa que descargue en variables en mi ordenador cualquier información que pueda querer usar, y cada instrucción que pueda querer introducir - que ahora que lo pienso, me gustaría que no sólo fueran órdenes de compra y venta limitadas y de mercado, sino también algo que cancele cualquier orden existente, después de todo, no querría dejar ninguna orden limitada rezagada por ahí en caso de que no se ejecute, no querría que el programa se olvidara de ellas.

Creo que has venido al lugar equivocado.

En este foro no escribimos códigos para otras personas.

Esperamos que escribas tu propio código.

Si te quedas atascado, te indicamos la dirección correcta.

Si quieres que alguien escriba códigos para ti entonces ve aquí.

Ellos hacen mql4 y mql5.

 
zortharg:

[...]

Bueno, esto hace un cambio de discutir la gran actualización de MT4 que está previsto en unos pocos días.


Quiero crear un "EA" como tú lo llamas. Aunque es curioso que sigas usando eso como acrónimo

Depende de tu formación. Para bien o para mal, MT4 y MQL4 tienen actualmente un casi monopolio en el mercado mundial de divisas al por menor, y el término "EA" tiene significado para, como mínimo, cientos de miles de personas.


Y por lo que he visto de él, MQL4 se parece bastante a C++

Hay efectivamente dos versiones del lenguaje MQL4. La que existe desde hace 9 años no tiene clases ni objetos y, por tanto, se parece más a C que a C++. Por otro lado, no tiene punteros ni asignación explícita de memoria.

La nueva versión de MT4 y MQL4 -que saldrá a la venta el próximo lunes- añade clases, pero de nuevo sin una asignación y gestión de memoria realmente explícitas. Es discutible si eso es más como C++, o más como Javascript pero sin la tipificación de pato y las funciones lambda, etc.


Básicamente, me gustaría que mi programa fuera capaz de descargar en la RAM de mi ordenador lo siguiente [...]

Simplificando un poco las cosas, la plataforma hace esto por ti automáticamente, y no tienes ningún medio fácil de anular su comportamiento estándar. La descarga de cualquier dato de precio externo y luego manipularlo dentro de MQL4 - particularmente tradicional MQL4 en lugar de la nueva versión extendida - no es bonito.

Usted puede obtener los precios actuales, y usted puede manipular fácilmente los precios históricos para todos los marcos de tiempo que la plataforma atiende: M1, M5, M15 etc. pero no M3, H2 etc.


datos de máximos, mínimos, apertura y cierre para los precios de compra y venta (ya que el valor del spread puede variar)

El spread sí puede variar, pero una de las encantadoras idiosincrasias de la plataforma MT4 es que sólo proporciona precios históricos de compra. (Los precios actuales y el spread actual están obviamente disponibles).


También me gustaría descargar el valor total de la cuenta en la liquidación [...] el número total de posiciones y el tamaño [...] pero el valor de mi cuenta estará en dólares

En efecto, la plataforma transmite constantemente estos datos. No hay una "descarga" explícita de los mismos. Por ejemplo, el código MQL4 tiene constantemente acceso a la equidad actual de la cuenta a través de la función AccountEquity(). Las posiciones abiertas se informan automáticamente en la moneda del depósito.


Por ejemplo, supongamos que el precio del EUR/USD para comprar es 1,3500 y tengo una orden limitada para comprar a 1,3501, ¿pagaré 1,3501 o 1,3500?

Depende del corredor, pero, en general, la plataforma/el corredor simplemente no aceptará una orden limitada en o más allá del BBO actual. No puedo pensar inmediatamente en una excepción a esto.


si generalmente implica más de un archivo real (con la extensión mql4?) como puede ser en C++ o si generalmente es un solo archivo mql4

En términos generales, un proyecto sólo puede consistir en un archivo .mq4, pero puede haber múltiples archivos #incluidos .mqh. Por lo tanto, puedes tener bibliotecas de código comunes y reutilizarlas entre proyectos. Lo que no puedes hacer es tener múltiples archivos .mq4 que existan en pari passu, es decir, que se compilen juntos como parte del mismo proyecto. A pesar de los orígenes de MQL4 en C, la estructura de un proyecto grande típico es diferente: un archivo .mq4, más una o más bibliotecas de varios tipos (precompiladas o #incluidas).


Luego, la plataforma comercial utiliza el código máquina o lo que genere el compilador

El compilador genera una especie de byte-code/p-code/como quieras llamarlo en lugar de código máquina. Puedes compilar los archivos .mq4 explícitamente, o puedes ponerlos en la carpeta requerida del software y se compilarán automáticamente y estarán disponibles para su uso en el próximo inicio.


Si alguien hiciera esto, simplemente para hacer un programa ficticio que contuviera todos estos elementos, no sólo sería muy útil para mí, sino que imagino que también lo sería para otros

No es un buen momento. Todo el mundo en este foro está demasiado ocupado discutiendo sobre la primera actualización verdaderamente significativa de MQL4 en 9 años.

 
zortharg: Estaba preguntando si alguien escribiría uno.
Sólo tienes tres opciones: Buscarlo,aprender a codificarlo, o pagar a alguien. No vamos a codificarlo PARA ti. Estamos dispuestos a AYUDARTE cuando publiques tu intento (usando SRC) y la naturaleza de tu problema.
 

No estaba pidiendo a nadie que produjera algo de valor comercial para mí. No estoy pidiendo que alguien "codifique mi método PARA mí", WHRoeder. Sólo necesito un punto de partida. Puedo ser capaz de averiguar algo desde el enlace que pusiste en la "búsqueda", aunque realmente me gustaría un "esto es lo que se necesita". No sé cómo debería ser el programa en realidad. No sé lo que es estrictamente necesario para estar en él. Si trato de hacerlo yo mismo de la nada sin ningún punto de referencia, sólo voy a obtener errores de compilación porque ni siquiera voy a saber lo que le falta. Y si hago algo que debería funcionar, lo inicializaré mal y ni siquiera sabré que lo hice bien. Ok, que tal esto. Un ejemplo sencillo. Algo que perdería su dinero si lo hiciera en la vida real: un asesor experto que mantiene una posición que es daringness*(el valor de su cuenta)*(la diferencia entre el precio ahora y el precio hace 1 unidad de tiempo)/X, y X comienza en 1 pero cada unidad de tiempo, X se actualiza para ser X=.9*X+.1*(precio ahora-precio hace 1 unidad de tiempo)^2, y daringness es un parámetro especificado por el usuario. Y para determinar cuántas comprar o vender, tiene que determinar cuántas posiciones ya posee también. Así que sólo un programa tonto, pero más o menos tiene todos los elementos en los que tendría que trabajar como punto de partida.

gchrmt4 gracias. Usted respondió a muchas de mis preguntas. Pero cuando dices "puedes manipular fácilmente los precios históricos para todos los marcos temporales que la plataforma atiende", ¿cómo hago eso? ¿Existe una función similar a AccountEquity() que devuelva un precio en un momento determinado, y le das las unidades de tiempo atrás y si quieres apertura baja alta cierre y qué tipo de unidades de tiempo utiliza? ¿El tipo de unidades de tiempo viene determinado por el tipo de gráfico al que lo aplicas? Es decir, si lo aplicas a un gráfico de 1 minuto, 1 unidad de tiempo hace referencia a 1 minuto, pero si lo aplicas a un gráfico de 5 minutos, 1 unidad de tiempo hace referencia a 5 minutos, o el paso de tiempo está codificado en el propio programa en lugar de ser aplicado a un gráfico? Y el spread actual, ¿cómo se accede a él? Usted dice que estas cosas son "streaming" y de fácil acceso, pero ¿cómo se accede a ellos?

Gracias por la ayuda que me puedan dar.

 
zortharg:
¿Existe una función similar a AccountEquity() que devuelva un precio en un momento determinado, y le das las unidades de tiempo atrás y si quieres open low high close y qué tipo de unidades de tiempo utiliza? ¿El tipo de unidades de tiempo viene determinado por el tipo de gráfico al que lo aplicas? Es decir, si lo aplicas a un gráfico de 1 minuto, 1 unidad de tiempo hace referencia a 1 minuto, pero si lo aplicas a un gráfico de 5 minutos, 1 unidad de tiempo hace referencia a 5 minutos, o el paso de tiempo está codificado en el propio programa en lugar de ser aplicado a un gráfico? Y el spread actual, ¿cómo se accede a él? Usted dice que estas cosas son "streaming" y de fácil acceso, pero ¿cómo se accede a ellos?

Gracias por la ayuda que puedan prestar.

Hay toda una familia de funciones de series de tiempo. Por ejemplo, iHigh("USDJPY", PERIOD_H1, 2) le dará el máximo de la barra H1 del USDJPY 2 barras atrás (donde la barra actual en curso es #0). Existen funciones para convertir los tiempos en índices de barras.

El spread actual está disponible de varias maneras. La más simple es Ask - Bid (que le da el spread para el símbolo en cuyo gráfico se está ejecutando su código). El spread para un símbolo diferente al gráfico actual está disponible a través de diferentes rutas, y expresado en diferentes términos, como MarketInfo("símbolo", MODE_ASK) - MarketInfo("símbolo", MODE_BID), o MarketInfo("símbolo", MODE_SPREAD)

 

@zortharg

Hay una cosa llamada documentación aquí (parcialmente obsoleta): docs.mql4.com/

y aquí (próximamente, parcialmente obsoleta): mql5.com/es/docs


Allí encontrarás todo lo que quieras saber; también hay ejemplos en el propio terminal. Ejemplos de scripts, asesores expertos e indicadores. Y también puedes importar DLLs, para realizar cosas que van más allá de MQL.

Si lo consigues desde ahí, estás listo, y si no, pues...


 

Entiendo tu petición, un ejemplo de trabajo para empezar es muy útil

https://www.mql5.com/en/code

También buscando en Google puedes encontrar fuentes gratuitas de asesores expertos para aprender

busca código que haga tareas sencillas, agrúpalas en funciones y trata de mantener tu código simple y legible

start() {

   SearchOrders();
   DetectEnvironment();      
   UpdateIndicators();
   RiskAssessment();
   CalcVolume();
   if( EnterSignal() ) OpenOrder();
   if ( ExitSignal() ) CloseOrder();
   TrailingStop();
   DisplayInfos();

}