Ayuda con la codificación... ¿Cómo puedo hacer que el indicador filtre en lugar de alertar? - página 2

 
Aaragorn:
¿puedo hacer eso? solo escribir los bufferindexes en el indicador y usar las palabras superiores e inferiores así y que devuelva los valores de las líneas superiores e inferiores?

No en el indicador. En el EA. (Se puede hacer con un indicador, pero no usar el mismo indicador dentro de su propio código!!!!!)

 
elihayun:
No en el indicador. En el EA. (U puede hacerlo con un indicador, pero no utilizar el mismo indicador dentro de su propio código!!!!!)

Así que puedo escribir un índice de búfer en el EA, pero ¿cómo se obtiene el valor del indicador? No me refería a utilizar el indicador dentro de su propio código que sería un poco tonto. perdona mi fallo de comunicación. no es fácil de comunicar a veces lo suficientemente específica cuál es el problema. Ese es el problema tanto con la codificación y con hablar de la codificación a los demás.

 

Permítanme pedir disculpas a aquellos que pueden estar tratando de ayudarme, pero encontrar mis mensajes son la sobrecarga de información. He publicado un montón de código, básicamente, porque puedo poner dos ventanas abiertas al lado del otro, una ventana es este hilo y el otro es el metaeditor y mirar a una parte del código en una ventana y otra parte de ella en la otra ventana y lo hago para ayudarme a pensar mi camino a través del problema que estoy viendo. Soy bastante visual de esa manera y me ayuda a pensar en lo que estoy haciendo y queriendo hacer. No quiero abrumar a nadie con mucho código que tenga que mirar a través de todo ello. A veces he tratado de separar fragmentos después de la publicación de toda la EA o el indicador de todo como yo trato de concentrarse en donde y lo que hay que hacer. Aprecio a todos los que se toman el tiempo para mirar lo que estoy haciendo y ofrecer un aporte constructivo. Si el volumen de lo que publico es demasiado, simplemente filtre para buscar lo que estoy tratando de hacer y no se atasque en el resto que sólo está allí como un contexto para lo que estoy haciendo.

 
Aaragorn:
Así que puedo escribir un índice de búfer en el EA, pero ¿cómo se obtiene el valor del indicador? No me refería a utilizar el indicador dentro de su propio código que sería un poco tonto. perdona mi fallo de comunicación. no es fácil de comunicar a veces lo suficientemente específica cuál es el problema. Ese es el problema tanto con la codificación y con hablar de la codificación a los demás.

No te preocupes por el CÓMO. Deje que el Metatrader lo haga por usted. Sólo tiene que utilizar el código para obtener la información que desee.

Sugerencia: Cuando ejecute el EA, verá: "Bandas de tendencia cargadas con éxito", lo que significa que hace lo que usted quiere.

 
elihayun:
No te preocupes por el CÓMO. Deje que Metatrader lo haga por usted. Sólo tiene que utilizar el código para obtener la información que desee. Sugerencia: Cuando ejecute el EA, verá: "Bandas de tendencia cargadas con éxito", lo que significa que hace lo que usted quiere.

Me gusta el sonido de usar el código para obtener la información que me gusta, eso es lo que estoy tratando de aprender. Cómo utilizar el código para obtener la información que me gusta.

Entonces, ¿crees que la mejor manera de obtener el valor del tick para las bandas de tendencia es usar el iCustome()? y NO escribir el código dentro del EA como ya lo he hecho?

Para propósitos de instrucción... ya que tengo el código ya escrito en el EA ¿hay una manera de obtener los valores de allí?

 
elihayun:
Una cosa es escribir un indicador y otra cosa es escribir un EA. No los mezcles. En los indicadores tienes que manejar el historial también para dibujarlo correctamente. Cuando escribes un EA solo tienes el tick actual y tienes que calcular los valores cada tick (si no quieres perder una operación). Entonces, para obtener los valores del borde superior e inferior del tick ACTUAL puedes hacer 2 cosas
  1. Usar el indicador original como un indicador personalizado
  2. escribir la lógica del indicador dentro de su EA

La primera opción no es difícil. Tienes que averiguar primero, cuál es el índice del buffer que se utiliza para la línea superior y la línea inferior.

para encontrarlo tienes que buscar en el código del indicador

Espera un minuto, ¡tiene búferes! ¿Cómo podría haberlos perdido?

//+------------------------------------------------------------------+

//| Trend Bands.mq4 |

//| Dwt5 and adoleh2000 |

//| Copyright © 2005, MetaQuotes Software Corp. |

//| http://www.metaquotes.net |

//+------------------------------------------------------------------+

#property copyright "Copyright © 2005, MetaQuotes Software Corp."

#property link "http://www.metaquotes.net"

//+------------------------------------------------------------------+

//| Custom indicator initialization function |

//+------------------------------------------------------------------+

#property indicator_chart_window

#property indicator_buffers 5

#property indicator_color1 Red

#property indicator_color2 Black

#property indicator_color3 Blue

#property indicator_color4 Red

#property indicator_color5 Blue

double upper[], middle1[], middle2, lower[];

double Xup[], Xdown[];

extern int period = 34;

int init()

{

SetIndexStyle(0,DRAW_LINE,EMPTY,2);

SetIndexShift(0,0);

SetIndexDrawBegin(0,0);

SetIndexBuffer(0,upper);

SetIndexStyle(1,DRAW_LINE,EMPTY,2);

SetIndexShift(1,0);

SetIndexDrawBegin(1,0);

SetIndexBuffer(1,middle1);

SetIndexStyle(2,DRAW_LINE,EMPTY,2);

SetIndexShift(2,0);

SetIndexDrawBegin(2,0);

SetIndexBuffer(2,lower);

SetIndexStyle(3,DRAW_ARROW,EMPTY,2);

SetIndexArrow(3, 162);

SetIndexShift(3,0);

SetIndexDrawBegin(3,0);

SetIndexBuffer(3,Xdown);

SetIndexStyle(4,DRAW_ARROW,EMPTY,2);

SetIndexArrow(4, 162);

SetIndexShift(4,0);

SetIndexDrawBegin(4,0);

SetIndexBuffer(4,Xup);

//---- indicators

//----

return(0);

}

así que.... veo 5 buffers...uno superior, uno medio, uno inferior y uno superior y uno inferior...

Supongo que la información que quiero es del buffer superior e inferior...

 
 
Aaragorn:
Me refería a esto para ser un nuevo post no una edición de uno anterior, el funcionamiento del sitio a veces todavía me confunde...

Creo que la mejor manera de hacerlo es NO utilizar el indicador. Es la forma más sencilla. Para empezar es suficiente.

Usted está viendo los cambios que hice en el indicador. Si quieres usar este asegúrate de escribir el nombre correcto dentro de tu código.

Siempre y cuando sepas en qué buffer se encuentra la información que quieres, no importa cuántos indicadores hay en el código.

 
elihayun:
Escribir un indicador es una cosa, y escribir un EA es otra cosa. No los mezcles. En los indicadores tienes que lidiar con el historial también para dibujarlo correctamente. Cuando escribes un EA sólo tienes el tick actual y tienes que calcular los valores cada tick (si no quieres perder una operación). Entonces, para obtener los valores del borde superior e inferior del tick ACTUAL puedes hacer 2 cosas
  1. Usar el indicador original como un indicador custome
  2. escribir la lógica del indicador dentro de su EA

La primera opción no es difícil. Tienes que averiguar primero, cuál es el índice del buffer que se utiliza para la línea superior y la línea inferior.

Para encontrarlo tienes que buscar en el código del indicador

SetIndexBuffer(0,superior);

SetIndexBuffer(1,middle1);

SetIndexBuffer(2,lower);

como puedes ver la línea superior es el índice 0, la central es el índice 1 y la inferior es el índice 2.

Ahora que tenemos esta información tenemos que saber cuántos parámetros tiene el indicador. Para obtener esta información hay que buscar las líneas que empiezan con la palabra external

Sólo he encontrado 1 línea

extern int period = 34;

Ahora, podemos utilizar el indicador como un cliente

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);

34 es el parámetro del indicador

el 0 es el índice de la banda (2 para la inferior)

el último 0 es el desplazamiento de la barra (En el EA necesitamos la corriente, así que usamos 0)

ahora que tienes los valores superior e inferior puedes comprobarlos con el precio

Espero que te haga progresar

Eli

hey así que esto funcionará para sacar el valor actual de las líneas superior e inferior en el EA..

double upLevel = iCustome(NULL,0, "Trend Bands", 34, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", 34, 2, 0);

Creo que empiezo a entender esto gracias a la tutoría...

así que no tengo que escribir el código del indicador dentro del EA sólo llamarlo así desde el EA.... y me devolverá los valores actuales de las barras que luego puedo utilizar... ¡perfecto! ....¡Sabía que ALGUIEN sabía cómo hacer esto! (sólo que no era yo) ...

así que si quiero poder cambiar el número de periodos que uso para el indicador haría esto...

extern double back = 300 //--que podría cambiar a mi gusto

double upLevel = iCustome(NULL,0, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,0, "Trend Bands", back, 2, 0);

suponiendo que quiero llamar al valor del indicador a partir de un periodo de tiempo más largo que el que estoy usando en el gráfico... ¿podría hacer esto?

extern double back = 300 //--que podría cambiar a mi gusto

extern double TF = 30 //--que podría cambiar a mi gusto

double upLevel = iCustome(NULL,TF, "Trend Bands", back, 0, 0);

double LowLevel = iCustome(NULL,TF, "Trend Bands", back, 2, 0);

donde NULL utiliza el símbolo actual,

TF utiliza el período de la barra del gráfico que yo especifique

Trend Bands llama al indicador

back es el número de barras definido por el usuario para utilizar el promedio del indicador

0 o 2 le dice a qué buffer acceder

y el último 0 le dice que use la barra actual

¿funcionaría?

 
Aaragorn:
¿funcionaría?

¡¡¡Genial!!! ¡¡¡¡Ya tienes la idea!!!!

Funcionará perfectamente. y si quieres comprobar que 5M y 15M llegan al borde al mismo tiempo puedes obtener los valores de cada TF y probarlos juntos.

Pero deja eso para este último....

Razón de la queja: