//+------------------------------------------------------------------ //| cand_color_RSI.mq5 | //| ProF | //| http:// | //+------------------------------------------------------------------ #property copyright "ProF" //Author #property indicator_chart_window //indicador en una ventana separada //Especifique el número de buffers del indicador //4 buffers para las velas + 1 búfer para los índices de color + 1 buffer para almacenar los datos del RSI #property indicator_buffers 6 //Especifica los nombres, que se muestran en la ventana de datos #property indicator_label1 "Open;High;Low;Close" #property indicator_plots 1 //Número de tramas del gráfico #property indicator_type1 DRAW_COLOR_CANDLES //Estilo de dibujo - colores de velas #property indicator_width1 3 //Anchura de la línea (opcional) //Declaración de buffers double buffer_open[],buffer_high[],buffer_low[],buffer_close[]; //Buffers para los datos double buffer_color_line[]; //Buffers para los indices de color double buffer_tmp[1]; //Búffer temporal para valores del RSI double buffer_RSI[]; //Indicador de buffer de RSI int handle_rsi=0; //Manejador del indicador indicador RSI //+------------------------------------------------------------------ //| Establece colores para una representación gráfica | //+------------------------------------------------------------------ /* * La función ajusta los colores para una representación gráfica * 50 colores desde el verde hasta el azul. * El índice de la trama gráfica es pasada a la función. */ void setPlotColor(int plot) { PlotIndexSetInteger(plot,PLOT_COLOR_INDEXES,50); //Especifica el número de colores //En el bucle especificamos los colores for(int i=0;i<=24;i++) { PlotIndexSetInteger(plot,PLOT_LINE_COLOR,i,StringToColor("\"0,175,"+IntegerToString(i*7)+"\"")); } for(int i=0;i<=24;i++) { PlotIndexSetInteger(plot,PLOT_LINE_COLOR,i+25,StringToColor("\"0,"+IntegerToString(175-i*7)+",175\"")); } } //+------------------------------------------------------------------ //| Obtiene el indice del color | //+------------------------------------------------------------------ /* * La función retorna el índice del color. * El primer parámetro es el valor actual del indicador. * El segundo parámetro es el valor mínimo del indicador. * El tercer parámetro es el valor máximo del indicador. */ int getPlotColor(double current,double min,double max) { return((int)NormalizeDouble((50/(max-min))*current,0)); } //+------------------------------------------------------------------ //| Función de inicialización del indicador personalizado | //+------------------------------------------------------------------ int OnInit() { /** * El orden de los buffers del indicador es MUY IMPORTANTE! * Los buffers de datos son los primeros * Los buffers de color son los siguientes * Y por último, los buffers para los cálculos internos. */ //Asignar los arrays con los buffers de los indicadores SetIndexBuffer(0,buffer_open,INDICATOR_DATA); SetIndexBuffer(1,buffer_high,INDICATOR_DATA); SetIndexBuffer(2,buffer_low,INDICATOR_DATA); SetIndexBuffer(3,buffer_close,INDICATOR_DATA); //Asigna el array con el buffer de índices de color SetIndexBuffer(4,buffer_color_line,INDICATOR_COLOR_INDEX); //Asigna el array con el buffer del indicador RSI SetIndexBuffer(5,buffer_RSI,INDICATOR_CALCULATIONS); //Especifica los indices de color setPlotColor(0); //Obtiene el manejador del indicador RSI, es necesario obtener sus valores handle_rsi=iCustom(_Symbol,_Period,"Examples\\RSI",6); return(0); } //+------------------------------------------------------------------ //| Función de iteración del indicador personalizado | //+------------------------------------------------------------------ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //Para cada barra llenamos el buffer de datos y el buffer con índices de color utilizando el bucle for(int i=prev_calculated;i<=rates_total-1;i++) { //Copiando los datos del indicador RSI en el búffer temporal buffer_tmp CopyBuffer(handle_rsi,0,BarsCalculated(handle_rsi)-i-1,1,buffer_tmp); //Luego copia los datos del buffer temporal buffer_RSI[i]=buffer_tmp[0]; //Especifica los datos para el trazado buffer_open[i]=open[i]; //Precio de apertura buffer_high[i]=high[i]; //Alto del precio buffer_low[i]=low[i]; //Bajo del precio buffer_close[i]=close[i];//Precio de cierre //Pinta las velas en función de los valores del indicador RSI //RSI = 0 - La vela es Verde //RSI = 0 - La vela es Azul //0