Genio ??? Gracias, pero no lo creo. Más como un tropezón con experiencia :-) Apuesto por cada error, omisión o error tipográfico que pueda mostrar aquí: He hecho lo mismo en el pasado ... ¡y probablemente DOS VECES! Cheerio
Publi |
De acuerdo, me tomó un poco de tiempo averiguar qué significaba exactamente todo, sin embargo, cuando ingresé el código y lo imprimí dentro del bucle for, continuaría imprimiendo cada tic sin importar nada. Parece que se corrigió si cambio este fragmento de código: limit = limit lt; 1? 1: límite; Para esto: limit = limit lt; 1? 0: límite; Porque de lo contrario parece que Límite sería 1 sin importar qué. Avísame si me equivoco aquí. También parece que no está dibujando nuevas flechas, pero tal vez sea por el cambio que hice, así que lo probaré. EDITAR: Parece que cambiar eso cambió la capacidad de dibujar otros nuevos. EDIT 2: Así que lo cambié de nuevo a lo que era y está dibujando una nueva flecha, pero está imprimiéndolas mal porque está pensando que la vela que está formando actualmente ya está completa. EDIT 3: Cambio este fragmento de código: limit = limit lt; 1? 1: límite; Para esto: limit = limit lt; 1? 2: límite; Lo que lo desplaza a usar velas acabadas, lo que significa que no imprimirá ninguna flecha con una vela que se está formando actualmente y ahora está imprimiendo correctamente. Corrígeme si estoy equivocado.Iniciado por ;
Genio ??? Gracias, pero no lo creo. Más como un tropezón con experiencia :-) Apuesto por cada error, omisión o error tipográfico que pueda mostrar aquí: He hecho lo mismo en el pasado ... ¡y probablemente DOS VECES! Cheerio
Hola, AntiVi, además de lo que John compartió, también quieres adquirir el hábito de usar los datos pasados ??????como args en la función OnCalculate en lugar de confiar en los datos de los vars incorporados. Además, debes asegurarte de que estás haciendo tus retrospectivas correctamente. No necesita procesar todo el ciclo (todos los datos del gráfico) en cada tic. Solo necesita procesar la parte de los datos del indicador que necesita actualización. Aquí hay un ejemplo de cómo hacer un mejor uso de la función OnCalculate. Inserted Code #property strict #property indior_chart_window/START ADDED JvW #property indior_buffers 2/END ADDED JvW double Highs # ??????91; # 93 ;; double Lows # 91; # 93 ;;/ ----------------------------------------------- ------------------- /| Función de inicialización del indicador personalizado |/ ----------------------------------------------- ------------------- int OnInit () {//--- estilo de dibujo SetIndexStyle (0, DRAW_ARROW, EMPTY, 1, clrGreen); SetIndexArrow (0,234); SetIndexStyle (1, DRAW_ARROW, VACÍO, 1, clrRed); SetIndexArrow (1,233);/--- buffer de indicador SetIndexBuffer (0, Highs); SetIndexBuffer (1, Lows); return (INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Función de iteración del indicador personalizado |/ ----------------------------------------------- ------------------- int OnCalculate (const int rates_total, const int prev_calculated, const datetime time # 91; # 93 ;, const double open # 91; # 93; , const double high # 91; # 93 ;, const double down # 91; # 93 ;, const double close # 91; # 93 ;, const long tick_volume # 91; # 93 ;, const long volume # 91; # 93; , const int spread # 91; # 93 {//--- int limit = rates_total - prev_calculated - 2; límite = límite lt; 1? 1: límite; for (int i = limit; i gt; 0; i--) {if (alto # 91; i # 93; gt; alto # 91; i 1 # 93; alto # 91; i # 93; gt; alto # 91; i-1 # 93 Highs # ??????91; i # 93; = alto # 91; i # 93 ;; si (bajo # 91; i # 93; lt; bajo # 91; i 1 # 93; bajo # 91; i # 93; lt; bajo # 91; i-1 # 93 Bajas # 91; i # 93 ; = bajo # 91; i # 93 ;; }/--- devuelve el valor de prev_calculated para la devolución de la próxima llamada (rates_total); }Iniciado por ;
Usted señor es un genio. No puedo creer que la solución sea tan simple. Voy a echarle la culpa a mi inexperiencia y hágalo usted mismo aprendiendo. Pasé 5 horas tratando de resolverlo y todo lo que encontré fueron soluciones que no arreglaron nada. Editaré la primera publicación para incluir la solución, de modo que las personas puedan obtener la respuesta fácil si se molestan en buscarla. ¡Muchas gracias!Iniciado por ;
Hola, AntiVi, debes indicar cuántos búferes se requieren ... el siguiente cambio al principio en tu código (después de #property indior_chart_window) lo hace funcionar muy bien ... #property indior_buffers 2 Cheers Enjoy! John Inserted Code/ -------------------------------------------- ---------------------- /| FractalsExercise.mq4 |/| AntiVi |/| https://www.mql5.com |/ ----------------------------------------------- ------------------- #property copyright AntiVi #property link https://www.mql5.com #property version 1.00 #property strict #property indior_chart_window/START AGREGADO JvW #property indior_buffers 2/END ADDED JvW double Highs # ??????91; # 93 ;; double Lows # 91; # 93 ;;/ ----------------------------------------------- ------------------- /| Función de inicialización del indicador personalizado |/ ----------------------------------------------- ------------------- int OnInit () {//--- estilo de dibujo SetIndexStyle (0, DRAW_ARROW, EMPTY, 1, clrGreen); SetIndexArrow (0, 234); SetIndexStyle (1, DRAW_ARROW, VACÍO, 1, clrRed); SetIndexArrow (1, 233);/--- buffer de indicador SetIndexBuffer (0, Highs); SetIndexBuffer (1, Lows);/--- return (INIT_SUCCEEDED); }/ ---------------------------------------------- -------------------- /| Función de iteración del indicador personalizado |/ ----------------------------------------------- ------------------- int OnCalculate (const int rates_total, const int prev_calculated, const datetime time # 91; # 93 ;, const double open # 91; # 93; , const double high # 91; # 93 ;, const double down # 91; # 93 ;, const double close # 91; # 93 ;, const long tick_volume # 91; # 93 ;, const long volume # 91; # 93; , const int spread # 91; # 93 {//--- int i = 1; int ii = 1; int Limit = Bars - 1; while (i lt; Limit) {if (Alto # 91; i # 93; gt; Alto # 91; i 1 # 93 {si (Alto # 91; i # 93; gt; Alto # 91; i - 1 # 93 {Máximos # 91; i # 93; = Alto # 91; i # 93 ;; }} i ; } while (ii lt; Limit) {if (Bajo # 91; ii # 93; lt; Bajo # 91; ii 1 # 93 {if (Bajo # 91; ii # 93; lt; Bajo # 91; ii - 1 # 93 {Bajas # 91; ii # 93; = Bajo # 91; ii # 93 ;; }} ii ; }/--- devuelve el valor de prev_calculated para la devolución de la próxima llamada (rates_total); }/ ---------------------------------------------- --------------------
1 Adjunto (s)
Por lo que puedo ver, eso es lo que hace mi Límite, sin embargo, todavía lo inserté en el código solo para probarlo e incluso lo intenté en varias posiciones, sin embargo, el error persiste. Sinceramente estoy desconcertado sobre por qué me está dando el error. Esta es una imagen del resultado hasta el momento. Debería hacer lo mismo para los Lows con flechas rojas apuntando hacia arriba. También puede ver el error solo para darle a la gente una idea.Iniciado por ;
En cada ciclo, intente dividirlo con algo como el siguiente ejemplo para evitar ir más allá de las barras disponibles: Código insertado si (i gt; = Bars-1) se rompe; Código insertado si (ii gt; = Bars-1) se rompe;Iniciado por ;
Aviso legal: Ni forosforex.com ni ninguna persona involucrada en forosforex.com aceptarán ninguna responsabilidad por cualquier pérdida o daño en el trading como resultado de la confianza en la información contenida en este sitio web, incluidos datos, cotizaciones, gráficos y señales de compra/venta. Por favor, infórmese plenamente de los riesgos y costes asociados a las operaciones en los mercados financieros, una de las formas de inversión que más riesgos entrañan.
forosforex.com le quiere recordar que los datos contenidos en este sitio web no son necesariamente en tiempo real ni exactos. forosforex.com no asume responsabilidad alguna por las pérdidas en que usted podría incurrir como resultado de la utilización de estos datos. Este acuerdo se rige por su versión en inglés, que prevalecerá siempre que haya alguna discrepancia entre la versión en inglés y la versión en español.
Los CFD son un producto difícil de entender, varios organismos reguladores consideran que no es adecuado para inversores minoristas debido a su complejidad y riesgo.
Advertencia de riesgo: Los CFDs son un producto difícil de entender, y puede no ser adecuado para inversores minoristas debido a su complejidad y riesgo. Existe la posibilidad de sufrir una pérdida igual o superior a la inversión. Por lo tanto, no debe invertir o arriesgar dinero que no pueda permitirse perder. Debe asegurarse de que comprende todos los riesgos. Antes de abrir una cuenta en un broker por favor sea consciente e infórmese de los riesgos asociados con el trading. El contenido de este sitio web no debe interpretarse como asesoramiento personal. ForosForex recomienda que busque el consejo de un asesor financiero independiente.