Discusión sobre el artículo "Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte VIII): Eventos de modificación de órdenes y posiciones"
Buenas noches, Artem. Siempre se vive y se aprende. Y yo estoy aprendiendo, utilizando tu trabajo como material metodológico. Gracias por tu considerable trabajo y experiencia.
Por supuesto, no sin malentendidos, y para ser aún más preciso - cuanto más aprendo, más no entiendo.
En el archivo adjunto he intentado modificar su Asesor Experto TestDoEasyPart08, añadiendo un indicador personalizado, también su iCrossAD.
Utilicé la función iCustom(asymbol.Name(), _Period, "iCrossAD");
CrossAD = iCustom(asymbol.Name(), _Period, "iCrossAD"); if (CrossAD == INVALID_HANDLE) { Print("¡Falló la creación del descriptor del indicador iCrossAD!".); return(INIT_FAILED); }
Luego intenté copiar los datos del indicador a los buffers del EA y comprobar lo bien que lo conseguí.
void OnTick() { //+------------------------------------------------------------------+////////////////////////////// int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy; ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true); if (CopyBuffer(CrossAD, 3, 0, buf_size, Buf_Arrow_Sell) != buf_size || ArraySize(Buf_Arrow_Sell) != buf_size) { Print("Error al copiar datos de iCrossAD correctamente"); return; } else Last_Arrow_Sell = Buf_Arrow_Sell[0]; if (CopyBuffer(CrossAD, 2, 0, buf_size, Buf_Arrow_Buy) != buf_size || ArraySize(Buf_Arrow_Buy) != buf_size) { Print("Error al copiar datos de iCrossAD correctamente"); return; } else Last_Arrow_Buy = Buf_Arrow_Buy[0]; //+------------------------------------------------------------------+ Comment("Salida de datos fractales"., "\n Last_Arrow_Buy = ",Last_Arrow_Buy, "\n ---------------------- ", "\n Last_Arrow_Sell = ",Last_Arrow_Sell ); //+------------------------------------------------------------------+ //+------------------------------------------------------------------+//////////////////////////////
Todo este truco no quiere funcionar, por favor diganme donde estoy haciendo mal y como hacerlo realmente ????.
Buenas noches, Artem. Siempre se vive y se aprende. Y yo estoy aprendiendo, utilizando tu trabajo como material metodológico. Gracias por tu considerable trabajo y experiencia.
Por supuesto, no está exento de malentendidos, y para ser aún más preciso: cuanto más aprendo, más no entiendo.
En el archivo adjunto es un intento de modificar su Asesor Experto TestDoEasyPart08, añadiendo un indicador personalizado, también su iCrossAD.
He utilizado la función iCustom(asymbol.Name(), _Period, "iCrossAD");
Luego intenté copiar los datos del indicador a los buffers del EA y comprobar lo bien que lo conseguí
Todo este truco no quiere funcionar, por favor diganme donde lo estoy haciendo mal y como hacerlo de verdad ???.
"No quiere trabajar" - ¿qué es exactamente lo que no funciona?
Esto es lo que yo haría a nivel global:
int buf_size = 30; double Buf_Arrow_Sell[], Last_Arrow_Sell; double Buf_Arrow_Buy[], Last_Arrow_Buy;
Esto en OnInit():
ArraySetAsSeries(Buf_Arrow_Sell, true); ArraySetAsSeries(Buf_Arrow_Buy, true);
Y comprobar si el indicador alguna vez tiene valores en los buffers en la barra cero - sólo los comprueba en la barra cero. No recuerdo qué da ahí y en qué barra.
- "¿Qué es exactamente lo que no funciona...?" - En este momento estoy intentando ver los valores de las últimas flechas Arriba y Abajo del indicador en los Comentarios. Si consigo esto, podré compararlas por tiempo, y por tanto sabré cual fue la última, y por tanto "actual". Esto se puede considerar como una señal al cambiar el valor o como un filtro para otras señales (puede/no puede). Pero aquí está el problema, no puedo introducir estos valores en los Comentarios y aún más - no puedo ver los Comentarios en sí, el texto debería ser visible?
- " Esto es lo que yo haría a nivel global: ..." - ¡¡¡¡Lo moví, traté de darme cuenta por qué es así, creo que lo tengo, gracias por la ciencia!!!!
- "Esto es lo que haría en OnInit(): ..." - Movido, muchas gracias, lo recordaré.
- "Y comprobar si el indicador tiene alguna vez valores en los buffers en la barra cero: ..." - Intentaré organizar un comentario dentro del indicador y ejecutar el indicador para ver el valor en sí con mis ojos, pero ¿cómo se mostrarán luego en un gráfico? ¿Activar el indicador en otro gráfico?
- "se comprueban sólo en la barra cero ..." - Sí, me doy cuenta, accediendo a la matriz con estas flechas, probablemente obtendré casi siempre un valor vacío y sólo en raras ocasiones, cuando se dibuja una flecha, el valor no estará vacío. Así que tengo que organizar ya sea un interruptor de la última señal en el lado del indicador, o ejecutar un bucle, escribir los últimos valores hasta el primero no vacío aquí en el Asesor de Expertos? Es decir, exactamente el mismo interruptor como en el lado del indicador?????
¡¡¡¡Por favor, ayuda con el comentario, no puedo entender por qué no se muestra!!!!
- "¿Qué es exactamente lo que no funciona...?" - En este momento estoy intentando ver los valores de las últimas flechas Arriba y Abajo del indicador en los Comentarios. Si consigo esto, podré compararlas por tiempo, y por tanto sabré cual fue la última, y por tanto "actual". Esto se puede considerar como una señal al cambiar el valor o como un filtro para otras señales (puede/no puede). Pero aquí está el problema, no puedo poner estos valores en los Comentarios y aún más - no puedo ver los Comentarios en sí, el texto debería ser visible?
- ¡¡¡¡" Esto es lo que yo haría a nivel global:" - Lo moví, intenté darme cuenta de por qué es así, creo que lo tengo, gracias por la ciencia!!!!
- "Este en OnInit():" - Movido, muchas gracias, lo recordaré.
- "Y comprobar si el indicador tiene alguna vez valores en los buffers en la barra cero - ..." - Intentaré organizar un comentario dentro del indicador y ejecutar el indicador para ver el valor en sí con mis ojos, pero ¿cómo se mostrarán luego en un gráfico? ¿Activar el indicador en otro gráfico?
- "se comprueban sólo en la barra cero ..." - Sí, me doy cuenta, accediendo a la matriz con estas flechas, probablemente obtendré casi siempre un valor vacío y sólo en raras ocasiones, cuando se dibuja una flecha, el valor no estará vacío. Así que tengo que organizar ya sea un interruptor de la última señal en el lado del indicador, o ejecutar un bucle, escribir los últimos valores hasta el primero no vacío? Me refiero a exactamente el mismo interruptor como en el lado del indicador????
¡¡¡¡Por favor, ayuda con el comentario, no puedo entender por qué no se muestra!!!!
¿Qué se escribe en el registro "Expertos"? ¿Se crean las manijas del indicador?
¿Qué se escribe en el diario "Expertos"? ¿Se crean manillas indicadoras?
Buenas tardes. Sí, se crea el asa, es igual a 10.
He avanzado un poco (¡muy poco!). Hay registros Comment
Hay registros de Print()
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Asa iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00:00 Datos copiados del 2º búfer del indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Datos copiados de la 3ª memoria intermedia del indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Datos copiados de la 2ª memoria intermedia del indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Datos copiados de la tercera memoria intermedia del indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.797693134862316e+308
Dos búferes del indicador, desde los que se copian los datos, contienen los valores a los que se fijan las flechas del indicador. Se escriben allí en el momento de fijar las flechas. En consecuencia, concluyo que deberían llenarse con precios dobles en el momento de la formación de la flecha. Pero por alguna razón obtengo una cifra cósmica, si no me equivoco, es el máximo de valores dobles posibles en MT5.
Pero he probado y conseguido esto en el tester, no había cotizaciones ayer y hoy, hoy es domingo.
Si hay ganas, por favor ayudenme a entender. Adjunto Expert Advisor e indicador en el post. El Asesor Experto ha sido cambiado, escribí sobre ello más arriba, el indicador también es suyo, no hay cambios en él.
Buenas tardes. Sí, el mango está creado, es igual a 10.
He avanzado un poco (¡muy poco!). Los registros de comentarios han aparecido
Hay registros Print()
2019.05.19 17:31:13.127 2018.01.02 00:00:00 Mango iCrossAD = 10
2019.05.19 17:31:13.580 2018.01.02 09:00:00:00 Datos copiados del 2º búfer del indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.797693134862316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:00 Datos copiados de la 3ª memoria intermedia del indicador iCrossAD
2019.05.19 17:31:13.580 2018.01.02 09:00:00 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308
2019.05.19 17:31:13.580 2018.01.02 09:00:20 Datos copiados del 2º búfer del indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Buy = 1.79769313486262316e+308
2019.05.19 17:31:13.581 2018.01.02 09:00:20 Datos copiados de la tercera memoria intermedia del indicador iCrossAD
2019.05.19 17:31:13.581 2018.01.02 09:00:20 CrossAD = 10, period_find = 400, Last_Arrow_Sell = 1.79769313486262316e+308
Dos búferes del indicador, desde los que se copian los datos, contienen los valores a los que se fijan las flechas del indicador. Se escriben allí en el momento de fijar las flechas. En consecuencia, concluyo que no deben llenarse con precios dobles. Pero por alguna razón tengo una cifra cósmica, si no me equivoco, es el máximo de valores dobles posibles en MT5.
Sin embargo, he probado y logrado esto en el tester, no hubo cotizaciones ayer y hoy, hoy es domingo.
Si hay algún deseo, por favor ayúdenme a entender. Adjunto Asesor Experto e indicador en el post. El Asesor Experto ha sido cambiado, escribí sobre ello más arriba, el indicador también es suyo, no hay cambios en él.
Bueno, aquí discutimos cuestiones sobre la biblioteca, no ignorancia trivial sobre los valores vacíos de los buffers indicadores. VALOR_VACIO == DBL_MAX
Entendido, oído, gracias. Creo que sabía algo sobre valores vacíos, estudiaré la pregunta.
Si no es apropiado aquí, ¿puedes recomendarme algún hilo donde pueda obtener respuestas a preguntas tan lamer de ti o de tus colegas?
Si no existe tal lugar, probablemente valdría la pena crear uno.
Siento molestarle, pero aquí no hay conversaciones animadas, no hay nadie que interfiera, y quién sino el autor dará los mejores consejos.
Además, estoy intentando utilizar su biblioteca. Primitiva, por supuesto, pero lo mejor que puedo, lo siento.
Roger, te he oído, gracias. Pensé que sabía algo acerca de los valores vacíos, voy a mirar en él.
Si no es apropiado aquí, ¿puedes recomendarme algún otro hilo donde pueda obtener respuestas a preguntas tan lamer de ti o de tus colegas?
Si no existe tal lugar, probablemente valdría la pena crear uno.
Siento molestarle, pero aquí no hay discusiones animadas, no hay nadie a quien molestar, y quién sino el autor dará los mejores consejos.
Además, estoy intentando utilizar su biblioteca. Primitivo, por supuesto, pero como puedo, lo siento.
Para preguntas no relacionadas con la biblioteca, por favor escriba aquí:
- 2016.11.09
- www.mql5.com
Para preguntas no relacionadas con la biblioteca, por favor publique aquí:
Muchas gracias, fui, miré, leí. Justo lo que necesito, lo utilizaré.
- 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
Artículo publicado Biblioteca para el desarrollo rápido y sencillo de programas para MetaTrader (Parte VIII): Eventos de modificación de órdenes y posiciones:
En artículos anteriores, comenzamos a crear una gran biblioteca multiplataforma, cuyo cometido es simplificar la escritura de programas para las plataformas MetaTrader 5 y MetaTrader 4. En el séptimo artículo, añadimos el seguimiento de los eventos de activación de órdenes StopLimit y preparamos la funcionalidad para monitorear el resto de eventos que tienen lugar con las órdenes y posiciones. En el presente artículo, vamos a crear una clase que monitoreará los eventos de modificación de las órdenes y posiciones de mercado.
Vamos a compilar el asesor.
Establecemos en sus parámetros los valores StopLoss in points y TaleProfit in points iguales a cero, para abrir las posiciones y esteblecer las órdenes pendientes desde el inicio sin niveles stop; asimismo, establecemos en los parámetros StopLoss for modification (points) y TakeProfit for modification (points) los valores 20 y 60 respectivamente (valores por defecto), estos niveles de StopLoss y TakeProfit serán establecidos al pulsar los botones.
Iniciamos el asesor en el simulador y colocamos las órdenes pendientes. A continuación, pulsamos por turno los botones para establecer el StopLoss y el TakeProfit: los niveles serán colocados, y las entradas correspondientes sobre ello se mostrarán en el diario. Después, activamos el trailing y observamos las órdenes. Estas se desplazan tras el precio, y en el diario se muestran las entradas correspondientes a estos eventos. Los niveles de StopLoss para las posiciones aparecidas como resultado de la activación de las órdenes seguirán al precio, y en el diario se mostrarán las entradas correspondientes a estos eventos.
Compensación:
Cobertura:
Autor: Artyom Trishkin