Indicador MT4 Manipular un indicador para mostrar un alert

 

Publi

Manipular un indicador para mostrar un alert

 

Publi

Página 1 de 2 12 ÚltimoÚltimo
Resultados 1 al 10 de 11


  1. #1




    Reputación:
    Poder de reputación: 11

    Mensajes: 11
    Créditos: 200

    Manipular un indicador para mostrar un alert


    Publi
    Hola, estoy probando ha hacer cositas manipulando un indicador mq4, se algo de c pero se me esta haciendo complicado, os queria preguntar a ver si podriais ayudar.

    El caso es que el indicador lo que hacer es segun las ondas de elliot pone imprime en el grafico una flecha hacia arriba y otra hacia abajo, la cosa es que me gustaria que en el momento en el que la imprima me muestre una alerta en la pantalla. Aparente parece facil pero no doy con la forma a ver si podeis ayudar, he conseguido que segun el buffer me vaya imprimiendo la ultima que me ha mostrado pero no quiero eso.

    os pongo el código q no es mucho, porque no se como subir el archivo.

    Un saludo y a ver si es posible o no hacerlo.

    Código:
    #property copyright "tonyc2a@yahoo.com"#property link      ""
    
    
    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 Red
    #property indicator_color2 Blue
    
    
    extern int Fast.MA.Period = 5;
    extern int Slow.MA.Period = 34;
    extern int  Signal.period        = 5;
    
    
    //---- buffers
    double      Buffer1[],
                Buffer2[],
                b2[],
                b3[];
    extern int x;            
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- indicators
    
    
    // two additional buffers used for counting
    
    
       IndicatorBuffers(4);
            
       
       IndicatorShortName("Elliott_Arrow");
       
       SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(0,234);  // down  226 234  242
       SetIndexBuffer(0,b2);
       SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(1,233);   //UP   225  233 241
       SetIndexBuffer(1,b3);
       
    // These buffers are not plotted, just used to determine arrows
    
    
       SetIndexBuffer (2,Buffer1);
       SetIndexBuffer (3,Buffer2);
       //Alert(b2);
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custor indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //---- TODO: add your code here
        
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
       int    i, counted_bars=IndicatorCounted();
       double MA5,MA34;
       int limit=Bars-counted_bars;
       Print(" print limit = ", limit);
       if(counted_bars>0) limit++;
    //---- TODO: add your code here
       
    // Main line
       for(i=0; i<limit; i++)
       {
          MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          
          Buffer1[i]=MA5-MA34;
        }       
    
    
    // Signal line
    
    
      for(i=0; i<limit; i++)
       {
          Buffer2[i]=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);
       }
          
    // Arrows
    
    
       for(i=0; i<limit; i++)
       {
             if(Buffer1[i] > Buffer2[i] && Buffer1[i-1] < Buffer2[i-1]){
                   b2[i] = High[i]+10*Point; 
                   }     
             if(Buffer1[i] < Buffer2[i] && Buffer1[i-1] > Buffer2[i-1]){
                   b3[i] = Low[i]-10*Point; 
                   }
       }
       return(0);
      }
    Foro de Forex Trading United

  2. Publi
    Publi


  3. #2
    Avatar de boysinhaus
    habilis


    Reputación:
    Poder de reputación: 13

    Espana
    Mensajes: 224

    Re: Manipular un indicador para mostrar un alert

    Cita Iniciado por riscking Ver mensaje
    Hola, estoy probando ha hacer cositas manipulando un indicador mq4, se algo de c pero se me esta haciendo complicado, os queria preguntar a ver si podriais ayudar.

    El caso es que el indicador lo que hacer es segun las ondas de elliot pone imprime en el grafico una flecha hacia arriba y otra hacia abajo, la cosa es que me gustaria que en el momento en el que la imprima me muestre una alerta en la pantalla. Aparente parece facil pero no doy con la forma a ver si podeis ayudar, he conseguido que segun el buffer me vaya imprimiendo la ultima que me ha mostrado pero no quiero eso.

    os pongo el código q no es mucho, porque no se como subir el archivo.

    Un saludo y a ver si es posible o no hacerlo.

    Código:
    #property copyright "tonyc2a@yahoo.com"#property link      ""
    
    
    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 Red
    #property indicator_color2 Blue
    
    
    extern int Fast.MA.Period = 5;
    extern int Slow.MA.Period = 34;
    extern int  Signal.period        = 5;
    
    
    //---- buffers
    double      Buffer1[],
                Buffer2[],
                b2[],
                b3[];
    extern int x;            
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- indicators
    
    
    // two additional buffers used for counting
    
    
       IndicatorBuffers(4);
            
       
       IndicatorShortName("Elliott_Arrow");
       
       SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(0,234);  // down  226 234  242
       SetIndexBuffer(0,b2);
       SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(1,233);   //UP   225  233 241
       SetIndexBuffer(1,b3);
       
    // These buffers are not plotted, just used to determine arrows
    
    
       SetIndexBuffer (2,Buffer1);
       SetIndexBuffer (3,Buffer2);
       //Alert(b2);
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custor indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //---- TODO: add your code here
        
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
       int    i, counted_bars=IndicatorCounted();
       double MA5,MA34;
       int limit=Bars-counted_bars;
       Print(" print limit = ", limit);
       if(counted_bars>0) limit++;
    //---- TODO: add your code here
       
    // Main line
       for(i=0; i<limit; i++)
       {
          MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          
          Buffer1[i]=MA5-MA34;
        }       
    
    
    // Signal line
    
    
      for(i=0; i<limit; i++)
       {
          Buffer2[i]=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);
       }
          
    // Arrows
    
    
       for(i=0; i<limit; i++)
       {
             if(Buffer1[i] > Buffer2[i] && Buffer1[i-1] < Buffer2[i-1]){
                   b2[i] = High[i]+10*Point; 
                   }     
             if(Buffer1[i] < Buffer2[i] && Buffer1[i-1] > Buffer2[i-1]){
                   b3[i] = Low[i]-10*Point; 
                   }
       }
       return(0);
      }
    riscking, si quieres una alerta en pantalla debes utilizar la función Alert. Podría ser algo como esto:

    "Alert (Symbol()+" "+Period()+" comentario");

    Esto te sacaría una alerta en pantalla con la información del PAR, TimeFrame y el comentario que tu quieras poner.
    Espero que esto te ayude. Saludos.
    Foro de Forex Trading United

  4. #3




    Reputación:
    Poder de reputación: 11

    Mensajes: 11
    Créditos: 200

    Re: Manipular un indicador para mostrar un alert

    Estoy intentando leer el valor del indice de b2 o b3 desde un asesor experto as:
    int x= b2;
    int y =b3;
    double kk=iCustom( NULL, 0, "Elliott_Arrow",x,y, 1, 0);
    Alert(kk);

    pero siempre me da 0 errores no da,
    Alguno que controle de programación.
    Foro de Forex Trading United

  5. #4




    Reputación:
    Poder de reputación: 11

    Mensajes: 11
    Créditos: 200

    Re: Manipular un indicador para mostrar un alert

    Ok, lu subo.

    http://menu-graphics.net/mipc/Elliot...tor-Arrows.mq4

    Código:
    //+------------------------------------------------------------------+//|                                      Elliott Wave Oscillator.mq4 |
    //|                                                tonyc2a@yahoo.com |
    //|                                                                  |
    //+------------------------------------------------------------------+
    #property copyright "tonyc2a@yahoo.com"
    #property link      ""
    
    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 Red
    #property indicator_color2 Blue
    
    extern int Fast.MA.Period = 5;
    extern int Slow.MA.Period = 34;
    extern int  Signal.period        = 5;
    
    //---- buffers
    double      Buffer1[],
                Buffer2[],
                b2[],
                b3[];
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- indicators
    
    // two additional buffers used for counting
    
       IndicatorBuffers(4);
            
       
       IndicatorShortName("Elliott Wave Oscillator");
       
       SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(0,234);  // down  226 234  242
       SetIndexBuffer(0,b2);
    
       SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(1,233);   //UP   225  233 241
       SetIndexBuffer(1,b3);
       
    // These buffers are not plotted, just used to determine arrows
    
       SetIndexBuffer (2,Buffer1);
       SetIndexBuffer (3,Buffer2);
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custor indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //---- TODO: add your code here
       
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
       int    i, counted_bars=IndicatorCounted();
       double MA5,MA34;
       int limit=Bars-counted_bars;
       Print(" print limit = ", limit);
       if(counted_bars>0) limit++;
    //---- TODO: add your code here
       
    // Main line
       for(i=0; i<limit; i++)
       {
          MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          
          Buffer1[i]=MA5-MA34;
        }       
    
    // Signal line
    
      for(i=0; i<limit; i++)
       {
          Buffer2[i]=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);
       }
          
    // Arrows
    
       for(i=0; i<limit; i++)
       {
             if(Buffer1[i] > Buffer2[i] && Buffer1[i-1] < Buffer2[i-1])
                   b2[i] = High[i]+10*Point;      
             if(Buffer1[i] < Buffer2[i] && Buffer1[i-1] > Buffer2[i-1])
                   b3[i] = Low[i]-10*Point; 
       }
            
    //----
       return(0);
      } //+------------------------------------------------------------------+
    Saludos
    Foro de Forex Trading United

  6. #5




    Reputación:
    Poder de reputación: 11

    Mensajes: 11
    Créditos: 200

    Re: Manipular un indicador para mostrar un alert

    Vaya pensaba que habia contestado, le habre dado a vista previa. Lo escribo de nuevo.

    Decia que pienso que SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1); es la que imprime la flecha pero si pongo el alert debajo sale solo cuando se ejecuta al principio solamente.

    He estado leyendo mucho por ahi pero no me he entero de nada, lo unico que he podido sacar igual algo en claro es que igual se tiene que leer desde una asesor experto o algo asi.

    A ver si algien sabe algo mas del tema.

    un saludo.
    Foro de Forex Trading United

  7. #6
    Avatar de Wolfman



    Reputación:
    Poder de reputación: 22

    Mensajes: 2.039
    Créditos: 8.196

    Re: Manipular un indicador para mostrar un alert

    Cita Iniciado por riscking Ver mensaje
    Eso mismo habia pensao yo pero si pones un alerta ahi esta saltando constantemente cada vez que se mueve la vela y temina de calcular el limit que es la cantidad, jaja.

    Pero gracias por responder de ahi que no acabo de entender muy bien el codigo.

    A ver si hay alguna otra opcion.

    un saludo.
    Ok.

    Una pregunta esa es todo el codigo del indicador, porque solo seria de identificar la linea que hace que el indicador te dibuje la flecha que dices.

    Lo descargare y lo probare para salir de dudas, si pudieras subir imagenes seria mas facil que otros compañeros echen la mano.

    En el pasado he tenido problemas con indicador que solo dibujan algo, porque hay que realizar otras lineas para meterle la alarma.

    Saludos.
    Foro de Forex Trading United



    "La mente es como un paracaídas, sólo funciona si se abre. Albert Einstein

  8. #7
    Avatar de Wolfman



    Reputación:
    Poder de reputación: 22

    Mensajes: 2.039
    Créditos: 8.196

    Re: Manipular un indicador para mostrar un alert

    Cita Iniciado por riscking Ver mensaje
    Hola, estoy probando ha hacer cositas manipulando un indicador mq4, se algo de c pero se me esta haciendo complicado, os queria preguntar a ver si podriais ayudar.

    El caso es que el indicador lo que hacer es segun las ondas de elliot pone imprime en el grafico una flecha hacia arriba y otra hacia abajo, la cosa es que me gustaria que en el momento en el que la imprima me muestre una alerta en la pantalla. Aparente parece facil pero no doy con la forma a ver si podeis ayudar, he conseguido que segun el buffer me vaya imprimiendo la ultima que me ha mostrado pero no quiero eso.

    os pongo el código q no es mucho, porque no se como subir el archivo.

    Un saludo y a ver si es posible o no hacerlo.

    Código:
    #property copyright "tonyc2a@yahoo.com"#property link      ""
    
    
    #property indicator_chart_window
    #property indicator_buffers 2
    #property indicator_color1 Red
    #property indicator_color2 Blue
    
    
    extern int Fast.MA.Period = 5;
    extern int Slow.MA.Period = 34;
    extern int  Signal.period        = 5;
    
    
    //---- buffers
    double      Buffer1[],
                Buffer2[],
                b2[],
                b3[];
    extern int x;            
    //+------------------------------------------------------------------+
    //| Custom indicator initialization function                         |
    //+------------------------------------------------------------------+
    int init()
      {
    //---- indicators
    
    
    // two additional buffers used for counting
    
    
       IndicatorBuffers(4);
            
       
       IndicatorShortName("Elliott_Arrow");
       
       SetIndexStyle(0,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(0,234);  // down  226 234  242
       SetIndexBuffer(0,b2);
       SetIndexStyle(1,DRAW_ARROW,STYLE_SOLID,1);
       SetIndexArrow(1,233);   //UP   225  233 241
       SetIndexBuffer(1,b3);
       
    // These buffers are not plotted, just used to determine arrows
    
    
       SetIndexBuffer (2,Buffer1);
       SetIndexBuffer (3,Buffer2);
       //Alert(b2);
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custor indicator deinitialization function                       |
    //+------------------------------------------------------------------+
    int deinit()
      {
    //---- TODO: add your code here
        
    //----
       return(0);
      }
    //+------------------------------------------------------------------+
    //| Custom indicator iteration function                              |
    //+------------------------------------------------------------------+
    int start()
      {
       int    i, counted_bars=IndicatorCounted();
       double MA5,MA34;
       int limit=Bars-counted_bars;
       Print(" print limit = ", limit);
       if(counted_bars>0) limit++;
    //---- TODO: add your code here
       
    // Main line
       for(i=0; i<limit; i++)
       {
          MA5=iMA(NULL,0,Fast.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          MA34=iMA(NULL,0,Slow.MA.Period,0,MODE_SMA,PRICE_MEDIAN,i);
          
          Buffer1[i]=MA5-MA34;
        }       
    
    
    // Signal line
    
    
      for(i=0; i<limit; i++)
       {
          Buffer2[i]=iMAOnArray(Buffer1,Bars,Signal.period,0,MODE_LWMA,i);
       }
          
    // Arrows
    
    
       for(i=0; i<limit; i++)
       {
             if(Buffer1[i] > Buffer2[i] && Buffer1[i-1] < Buffer2[i-1]){
                   b2[i] = High[i]+10*Point; 
                    Alert Funcion
                   }     
             if(Buffer1[i] < Buffer2[i] && Buffer1[i-1] > Buffer2[i-1]){
                   b3[i] = Low[i]-10*Point; 
                    Alert funcion 
                   }
       }
       return(0);
      }
    En programación mis conocimientos son limitados

    Pero esta parte del código es el que calcula las flechas según entiendo por lo que al final de cada calculo si es positivo por lo que dibuje la flecha, tambien me de una alerta.

    Espero no estar equivocado

    Saludos




    Foro de Forex Trading United



    "La mente es como un paracaídas, sólo funciona si se abre. Albert Einstein

  9. #8
    Avatar de Wolfman



    Reputación:
    Poder de reputación: 22

    Mensajes: 2.039
    Créditos: 8.196

    Re: Manipular un indicador para mostrar un alert

    Después de revisar el código, espero haber dado con la solución.

    Espero te sirva, lo testeas y nos avisas cualquier situación.

    http://www.tradingunited.es/foro/tra...html#post59282


    Saludos y Exitos.
    Foro de Forex Trading United



    "La mente es como un paracaídas, sólo funciona si se abre. Albert Einstein

  10. #9
    Avatar de Wolfman



    Reputación:
    Poder de reputación: 22

    Mensajes: 2.039
    Créditos: 8.196

    Re: Manipular un indicador para mostrar un alert

    Cita Iniciado por riscking Ver mensaje
    Estoy intentando leer el valor del indice de b2 o b3 desde un asesor experto as:
    int x= b2;
    int y =b3;
    double kk=iCustom( NULL, 0, "Elliott_Arrow",x,y, 1, 0);
    Alert(kk);

    pero siempre me da 0 errores no da,
    Alguno que controle de programación.
    Es factible que subas el indicador, yo el problema que le veo que el indicador esta programado solo para mostrar algo en la pantalla y no guarda el valor de las variables, en cada vela se mete en lo buffer para calcular los valores.


    Si te fijas en el programa utiliza dos emas, la de 5 y 34 periodos a la de 5 periodos la denomina la señal,

    Me gustaria ver el indicador en un grafico para poder ver que es lo que hace.

    Saludos.
    Foro de Forex Trading United



    "La mente es como un paracaídas, sólo funciona si se abre. Albert Einstein

  11. #10




    Reputación:
    Poder de reputación: 11

    Mensajes: 11
    Créditos: 200

    Re: Manipular un indicador para mostrar un alert


    Publi
    Eso mismo habia pensao yo pero si pones un alerta ahi esta saltando constantemente cada vez que se mueve la vela y temina de calcular el limit que es la cantidad, jaja.

    Pero gracias por responder de ahi que no acabo de entender muy bien el codigo.

    A ver si hay alguna otra opcion.

    un saludo.
    Foro de Forex Trading United

Página 1 de 2 12 ÚltimoÚltimo
This website uses cookies
Utilizamos cookies propias y de terceros para elaborar información estadística y mostrarle publicidad personalizada a través del análisis de su navegación. Si continúa navegando acepta su uso. Más información y política de cookies.
     

 

Publi


Aviso Legal
Ley Orgánica 15/1999, de 13 de diciembre, de Protección de Datos de Carácter Personal