Hola a todos.
Debo señalar de entrada que intenté hacer estas preguntas en el hilo correspondiente aquí, pero de alguna manera la pregunta no recibió la atención que merecía. Aunque, me parece, los temas que se tocan al menos una vez tocan/emergen en la mente de mucha gente. Algo así como las preguntas de las FAQ (aunque podría estar equivocado). Voy a duplicar las preguntas en sí aquí directamente:
1. Hay una diferenciaentre Mql4 y Mql5 (sitio y lenguaje de programación). Hay Metatrade 4 y Metatrader 5 con Mql4 y Mql5 respectivamente. También hay dos sitios web diferentes correspondientes. Al mismo tiempo, todos los Asesores Expertos que miré en MT4 conducen a ese sitio. ¿Cuál es más relevante? ¿Qué foro es más "animado"? ¿Cuál es el mejor lugar para publicar preguntas? ¿Existe compatibilidad con las versiones anteriores de MT y Mql? Personalmente estoy escribiendo mi MT4 Expert Advisor en Mql4 respectivamente. Esto se debe a que el corredor que utilizo para probar la demo con está utilizando MT4. ...
...
Lo lógico sería poner mis preguntas relacionadas con el MQL4 en el "cuarto" foro. Aunque la diferencia entre MQL5 y MQL4 no es muy significativa. Hemos pasado de MQL4. Por lo tanto, si quieres hacer una pregunta sobre el "4" en este foro, será mejor que especifiques en el título del hilo que está relacionado con MT4. Así será más claro.
...
Tiene sentido dirigir las preguntas de MQL4 al "cuarto" foro. Aunque las diferencias entre MQL5 y MQL4 no son significativas. Es una transición desde MQL4. Por lo tanto, si quieres hacer una pregunta sobre el "4" en este foro, es mejor que especifiques en el título del tema que está relacionado con MT4. Así será más claro.
Para la segunda pregunta, véase input, sinput, ParametrGetRange(...), ParametrSetRange(...).
No he preguntado cómo configurar los parámetros externos del Asesor Experto. Aprendí a hacerlo hace tiempo (entrada, salida). He preguntado cómo y si es posible cambiar dinámicamente el conjunto de parámetros que aparecen en la configuración. ParametrGetRange y ParametrSetRange no se encuentran en mql. ¿No son funciones incorporadas? ¿Dónde buscarlos?
P.D. El uso de sinput puede ser utilizado sólo como una pista de que el parámetro no puede ser optimizado por sí mismo sin estar vinculado con otros parámetros. Pero ni siquiera puedo cambiar dinámicamente la entrada en sinput en función de los parámetros que ya he elegido para sugerir qué parámetros obtener en la optimización (qué parámetros son significativos dados los parámetros elegidos) para no tener que perder el tiempo en recorrer los parámetros que actualmente no tienen sentido
No se puede cambiar nada mediante programación en la pestaña "Parámetros". Puede omitir el conjunto de parámetros desactivados devolviendo INIT_PARAMETERS_INCORRECT desde OnInit().
Puede cambiar el permiso de inicio, paso, parada y optimización mediante programación: https://www.mql5.com/ru/docs/optimization_frames
- www.mql5.com
No se puede cambiar nada mediante programación en la pestaña de parámetros. No se puede omitir un conjunto de parámetros desactivado: se puede activar un stub para no hacer cálculos innecesarios.
Puede cambiar el inicio, el paso, la parada y la resolución de optimización mediante programación: https://www.mql5.com/ru/docs/optimization_frames
El tema se llama "preguntas básicas de un principiante", y como principiante no entiendo nada. Bueno, aquí es donde voy a obtener una respuesta a mi pregunta elemental (o más bien espero). Traté de seguir una guía paso a paso para escribir mi Asesor Experto. Me quedé atascado en el aspecto de cómo cerrar forzosamente una posición abierta en MKL5 (sin esperar el SL o el TP), cuando aparece una determinada señal del indicador, como en la intersección de dos MAs, o cuando el estrechamiento de las líneas de Bollinger u otras señales? Debe haber una función como ClosePos(), pero ¿dónde está y cómo la consigo? Pido un código detallado, porque yo mismo no entiendo los matices - todavía soy un bebé en MKL5.
El tema se llama "preguntas básicas de un principiante", y como principiante no entiendo nada. Bueno, aquí es donde voy a obtener una respuesta a mi pregunta elemental (o más bien espero). Traté de seguir una guía paso a paso para escribir mi Asesor Experto. Me quedé atascado en el aspecto de cómo cerrar forzosamente una posición abierta en MKL5 (sin esperar el SL o el TP), cuando aparece una determinada señal del indicador, como en la intersección de dos MAs, o cuando el estrechamiento de las líneas de Bollinger u otras señales? Debe haber una función como ClosePos(), pero ¿dónde está y cómo la consigo? Solicito un fragmento de código detallado, ya que yo mismo no entiendo los matices - en MKL5 es todavía un bebé.
Yo mismo estoy lidiando con esto desde hace menos de un mes. La cuestión es si quieres hacerlo tú mismo o preguntar en el foro. Las preguntas simples por lo general no preguntan, porque no es muy bueno (se puede mirar en la Ayuda, buscar respuestas listas en Internet). Por eso hice esas preguntas tan extensas que surgieron durante este mes. En cuanto a su pregunta... Se llama a la función OrderClose. Hay muchos ejemplos de su uso. Está en la muestra de MACD incorporada. Este es el código utilizado para cerrar las órdenes por las señales MACD (aquí hay un ejemplo de código para la implementación del Trailing Stop)
for(cnt=0;cnt<total;cnt++)
{
if(!OrderSelect(cnt,SELECT_BY_POS,MODE_TRADES))
continue;
if(OrderType()<=OP_SELL && // check for opened position
OrderSymbol()==Symbol()) // check for symbol
{
//--- long position is opened
if(OrderType()==OP_BUY)
{
//--- should it be closed?
if(MacdCurrent>0 && MacdCurrent<SignalCurrent && MacdPrevious>SignalPrevious &&
MacdCurrent>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Bid,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if(Bid-OrderOpenPrice()>Point*TrailingStop)
{
if(OrderStopLoss()<Bid-Point*TrailingStop)
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-Point*TrailingStop,OrderTakeProfit(),0,Green))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
else // go to short position
{
//--- should it be closed?
if(MacdCurrent<0 && MacdCurrent>SignalCurrent &&
MacdPrevious<SignalPrevious && MathAbs(MacdCurrent)>(MACDCloseLevel*Point))
{
//--- close order and exit
if(!OrderClose(OrderTicket(),OrderLots(),Ask,3,Violet))
Print("OrderClose error ",GetLastError());
return;
}
//--- check for trailing stop
if(TrailingStop>0)
{
if((OrderOpenPrice()-Ask)>(Point*TrailingStop))
{
if((OrderStopLoss()>(Ask+Point*TrailingStop)) || (OrderStopLoss()==0))
{
//--- modify order and exit
if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+Point*TrailingStop,OrderTakeProfit(),0,Red))
Print("OrderModify error ",GetLastError());
return;
}
}
}
}
}
}
Yo también lo hago desde hace menos de un mes. La cuestión es si quieres hacerlo tú mismo o si quieres preguntar en el foro. No suelo hacer preguntas sencillas, porque no es muy apropiado (puedes indagar en la Ayuda o buscar respuestas en Internet). Por eso hice esas preguntas tan extensas que surgieron durante este mes. En cuanto a su pregunta... Se llama a la función OrderClose. Hay muchos ejemplos de su uso. Está en la muestra de MACD incorporada. Este es el código que se utiliza para cerrar las órdenes mediante señales MACD (aquí hay un código de ejemplo de cómo implementar el mecanismo de Trailing Stop)
Gracias por una respuesta tan rápida. Pensé que probablemente lo daría alguien que lleva mucho tiempo lidiando con este tipo de cosas.
Excepto que OrderClose está en MKL4, pero no está en MKL5. Sólo existe la funciónPositionClose en la clase CTrade de la biblioteca estándar. Y no me queda nada claro cómo sacarla de ahí. Creo que para esto hay que llamar de alguna manera desde un código a la biblioteca, y luego a la clase CTrade..... En general, es un bosque oscuro para mí. No iba a estudiar MKL5, simplemente decidí automatizar mi estrategia bastante exitosa (para mí), así que simplemente comencé a seguir las instrucciones paso a paso. Y ahora estoy atascado...
Gracias por una respuesta tan rápida. Pensé que probablemente vendría de alguien que es nuevo en esto.
Excepto que OrderClose está en MKL4, pero MKL5 no lo tiene. Sólo existe la funciónPositionClose en la clase CTrade de la biblioteca estándar. Y no me queda nada claro cómo sacarla de ahí. Creo que para esto hay que llamar de alguna manera desde un código a la biblioteca, y luego a la clase CTrade..... En general, es un bosque oscuro para mí. No iba a estudiar MKL5, simplemente decidí automatizar mi estrategia bastante exitosa (para mí), así que simplemente comencé a seguir las instrucciones paso a paso. Y ahora estoy atascado...
- www.mql5.com
- 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
Hola a todos.
Debo señalar de entrada que intenté hacer estas preguntas en el hilo correspondiente aquí, pero de alguna manera la pregunta no recibió la atención que merecía. Aunque, me parece, los temas que se tocan al menos una vez tocan/emergen en la mente de mucha gente. Algo así como las preguntas de las FAQ (aunque podría estar equivocado). Voy a duplicar las preguntas en sí aquí directamente:
1. Hay una diferenciaentre Mql4 y Mql5 (sitio y lenguaje de programación). Hay Metatrade 4 y Metatrader 5 con Mql4 y Mql5 respectivamente. También hay dos sitios web diferentes correspondientes. Al mismo tiempo, todos los Asesores Expertos que miré en MT4 conducen a ese sitio. ¿Cuál es más relevante? ¿Qué foro es más "animado"? ¿Cuál es el mejor lugar para publicar preguntas? ¿Existe compatibilidad con versiones anteriores de MT y Mql? Personalmente estoy escribiendo mi MT4 Expert Advisor en Mql4 respectivamente. Esto se debe a que el broker que estoy utilizando para probar la demo utiliza MT4. ¿Cómo puedo identificar el idioma en el que está escrito mi Asesor Experto? Me refiero sólo a la extensión (.mq4 y .mq5). Si cambio el nombre de un archivo, ¿compilará (de nuevo, sobre la compatibilidad)?
2. Parámetros dinámicos del Asesor Experto Externo. ¿Es posible cambiar dinámicamente los parámetros ajustables de un Asesor Experto? Déjame explicarte... Por ejemplo, hay un parámetro externo bool a. Si es verdadero, se establecerá un parámetro adicional extern int b. Si a=false, el parámetro b no es necesario. ¿Hay alguna forma de mostrarlo/no mostrarlo en función del valor actual de un seleccionado? Teniendo en cuenta que no he podido encontrar ningún manejador de cambio de parámetros externos y que no hay ningún #if ... #endif, sospecho que no se puede hacer... Si es así, ¿podría sugerir la mejor manera de proceder en esta situación, para no sobrecargar el proceso de configuración de los parámetros externos? Por ejemplo, puedo poner a=false, olvidar que el parámetro b no se utiliza, pero aún así incluirlo en la optimización (aunque no tendría sentido, sólo perdería tiempo extra). Y una cosa es cuando sólo hay un parámetro b. Pero si, por ejemplo, hago un parámetro externo enum y hay varias variantes desplegables de TC. Tienen una parte común (por lo que es lógico implementarlos dentro de un EA, en lugar de escribir varios), pero también hay otros diferentes con muchos parámetros distintos. Entonces es muy fácil confundir qué parámetros son relevantes para el TS seleccionado.
Optimización automática del Asesor Experto. En mi opinión, es muy útil y provechoso. He encontrado aquí un artículo sobre laoptimización automatizada del robot de comercio en el comercio real. Sin embargo, según tengo entendido, se utiliza una segunda instancia de MT que se ejecuta para la optimización desde fuera (desde una instancia de MT en funcionamiento) y los resultados de la optimización se leen desde un informe en forma de html. Esto no es muy conveniente y está torcido. Lógicamente debería escribir mi propia función/dll de optimización y ejecutarla directamente desde el Asesor Experto. Así que esta es la pregunta. Por lo que entendí, se programó un algoritmo de optimización genética en el probador de estrategias. Conozco estos algoritmos muy brevemente. Pero se conocen desde hace mucho tiempo, de ahí la pregunta: ¿por qué reinventar la rueda?). ¿Existe algún algoritmo que se utilice directamente en la MT? Tal vez ya exista en algún lugar de las bibliotecas del propio terminal... Tal vez haya un código fuente separado o una dll lista. En general, por favor, comparta su experiencia en este asunto.
Gracias de antemano por las respuestas a al menos parte de estas preguntas.