Альберт Туйкин:
Ayuda, por alguna razón en el terminal no dibuja la línea roja superior, sólo la azul inferior.
¡He comprobado todo de nuevo, el indicador funciona con absoluta normalidad!
Ayuda, por alguna razón en el terminal no dibuja la línea roja superior, sólo la azul inferior.
Nikolay Kositsin:
¡He comprobado todo de nuevo, el indicador funciona absolutamente bien!
¡He comprobado todo de nuevo, el indicador funciona absolutamente bien!
En la mayoría de los gráficos funciona perfectamente. Pero en dos gráficos no dibuja la línea roja :(
Альберт Туйкин:
Funciona bien en la mayoría de los gráficos. Pero en dos gráficos no dibuja la línea roja :(
Cuando una persona tiene un problema, depende totalmente de ella cómo comunicar ese problema a los que la rodean de forma que éstos puedan verlo.
Funciona bien en la mayoría de los gráficos. Pero en dos gráficos no dibuja la línea roja :(
Pido disculpas, he añadido una captura de pantalla.
Por ejemplo, en el gráfico de índices RTS todo funciona, pero en el gráfico de futuros RTS sólo hay una línea azul.
Archivos adjuntos:
k3nkgna35.JPG
195 kb
Альберт Туйкин:
Está claro que el autor del código ha establecido los tamaños de fondo y techo globales demasiado pequeños en el código fuente. El código se modificará en breve. Pido disculpas, he añadido una captura de pantalla.
Por ejemplo, todo funciona en el gráfico de índices RTS, pero en el gráfico de futuros RTS sólo hay una línea azul.
//+------------------------------------------------------------------+ //|ATRStops_v1.1_Alert.mq5 || //|Copyright © 2006, Forex-TSD.com //| Escrito por IgorAD,igorad2003@yahoo.co.uk | //| http://finance.groups.yahoo.com/group/TrendLaboratory | //+------------------------------------------------------------------+ //---- autoría del indicador #property copyright "Copyright © 2006, Forex-TSD.com " //---- enlace a la página web del autor #property link "http://www.forex-tsd.com/" //---- número de versión del indicador #property version "1.10" //---- dibujar indicador en la ventana principal #property indicator_chart_window //---- Se utilizan 4 buffers para el cálculo y el dibujo del indicador #property indicator_buffers 4 //---- utilizó 4 construcciones gráficas #property indicator_plots 4 //+----------------------------------------------+ //|| Parámetros de dibujo del indicador alcista //+----------------------------------------------+ //---- dibujo del indicador 1 como una línea #property indicator_type1 DRAW_LINE //---- el color azul se utiliza como color de la línea indicadora #property indicator_color1 clrBlue //---- indicador línea 1 - sólido #property indicator_style1 STYLE_SOLID //---- indicador 1 grosor de línea es 2 #property indicator_width1 2 //---- indicador de pantalla marcador de línea #property indicator_label1 "Upper ATRStops_v1.1" //+----------------------------------------------+ //|| Parámetros de representación del indicador bajista //+----------------------------------------------+ //---- dibujo del indicador 2 como una línea #property indicator_type2 DRAW_LINE //---- El color IndianRed se utiliza como color de la línea indicadora #property indicator_color2 clrIndianRed //---- indicador línea 2 - sólido #property indicator_style2 STYLE_SOLID //---- indicador 2 grosor de línea es 2 #property indicator_width2 2 //---- indicador de pantalla marcador de línea #property indicator_label2 "Lower ATRStops_v1.1" //+----------------------------------------------+ //|| Parámetros de dibujo del indicador alcista //+----------------------------------------------+ //---- dibujo del indicador 3 como icono #property indicator_type3 DRAW_ARROW //---- color Se utiliza el azul como color indicador #property indicator_color3 clrBlue //---- espesor del indicador 3 es 4 #property indicator_width3 4 //---- etiqueta indicadora de la pantalla #property indicator_label3 "Buy ATRStops_v1.1" //+----------------------------------------------+ //|| Parámetros de representación del indicador bajista //+----------------------------------------------+ //---- dibujo del indicador 4 como icono #property indicator_type4 DRAW_ARROW //---- el color Rojo se utiliza como color indicador #property indicator_color4 clrRed //---- espesor del indicador 4 es 4 #property indicator_width4 4 //---- etiqueta indicadora de la pantalla #property indicator_label4 "Sell ATRStops_v1.1" //+----------------------------------------------+ //|| Parámetros de entrada del indicador //+----------------------------------------------+ input uint Length=10; // Período del indicador input uint ATRPeriod=5; // Período del indicador ATR input double Kv=2.5; // Volatilidad ATR input int Shift=0; // Desplazamiento horizontal del indicador en barras input uint NumberofBar=1; // Número de barra para señalización input bool SoundON=true; // Resolución de alerta input uint NumberofAlerts=2; // Número de descripciones input bool EMailON=false; // Habilitar el envío de la señal input bool PushON=false; // Activar el envío de una señal al teléfono móvil //+----------------------------------------------+ //---- declaración de matrices dinámicas, que se //---- se utilizará como búfer indicador double ExtMapBufferUp[]; double ExtMapBufferDown[]; double ExtMapBufferUp1[]; double ExtMapBufferDown1[]; //---- declaración de variables enteras para los indicadores int ATR_Handle; //---- declaración de variables de inicio de datos enteros int min_rates_total; //+------------------------------------------------------------------+ //| Función de inicialización del indicador personalizada | //+------------------------------------------------------------------+ int OnInit() { //---- obtener el indicador ATR ATR_Handle=iATR(NULL,0,ATRPeriod); if(ATR_Handle==INVALID_HANDLE) { Print("No se pudo obtener el indicador ATR"); return(1); } //---- inicialización de variables de inicio de datos min_rates_total=int(ATRPeriod+Length); //---- convirtiendo el array dinámico ExtMapBufferUp[] en buffer indicador SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA); //---- desplazamiento horizontal del indicador 1 mediante Shift PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- desplaza el inicio de la cuenta atrás del dibujo del indicador 1 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- indexación de elementos en buffers, como en timeseries ArraySetAsSeries(ExtMapBufferUp,true); //---- configuración de los valores de los indicadores que no serán visibles en el gráfico PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- convertir matriz dinámica ExtMapBufferDown[] en buffer indicador SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA); //---- desplazamiento horizontal del indicador 2 mediante Shift PlotIndexSetInteger(1,PLOT_SHIFT,Shift); //---- desplaza el inicio de la cuenta atrás de dibujo del indicador 2 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total); //---- indexación de elementos en buffers, como en timeseries ArraySetAsSeries(ExtMapBufferDown,true); //---- configuración de los valores de los indicadores que no serán visibles en el gráfico PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- convirtiendo el array dinámico ExtMapBufferUp1[] en buffer indicador SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA); //---- desplazamiento horizontal del indicador 1 mediante Shift PlotIndexSetInteger(2,PLOT_SHIFT,Shift); //---- desplazamiento del inicio del dibujo del indicador 3 PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total); //---- indexación de elementos en buffers, como en timeseries ArraySetAsSeries(ExtMapBufferUp1,true); //---- configuración de los valores de los indicadores que no serán visibles en el gráfico PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- carácter para el indicador PlotIndexSetInteger(2,PLOT_ARROW,175); //---- convertir matriz dinámica ExtMapBufferDown1[] en buffer indicador SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA); //---- desplazamiento horizontal del indicador 2 mediante Shift PlotIndexSetInteger(3,PLOT_SHIFT,Shift); //---- desplazamiento del inicio del dibujo del indicador 4 PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total); //---- indexación de elementos en buffers, como en timeseries ArraySetAsSeries(ExtMapBufferDown1,true); //---- configuración de los valores de los indicadores que no serán visibles en el gráfico PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- carácter para el indicador PlotIndexSetInteger(3,PLOT_ARROW,175); //---- inicialización de la variable para el nombre corto del indicador string shortname; StringConcatenate(shortname,"ATRStops_v1.1(",Length,", ",ATRPeriod,", ",DoubleToString(Kv,4),", ",Shift,")"); //--- creación de un nombre que se mostrará en una subventana separada y en un tooltip IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- determinar la precisión de la visualización de los valores de los indicadores IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- return(0); } //+------------------------------------------------------------------+ //| Función de iteración del indicador personalizada | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // cantidad de historia en barras en el tick actual const int prev_calculated,// cantidad de historia en barras en el tick anterior const datetime &time[], const double &open[], const double& high[], // matriz de precios máximos para el cálculo del indicador const double& low[], // matriz de precios mínimos para el cálculo del indicador const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- comprobar si el número de barras es suficiente para el cálculo if(BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(0); //---- declaraciones de variables locales double ATR[]; double smin0,smax0; int limit,to_copy,bar,trend0; static double smin1,smax1; static int trend1; //---- indexación de elementos en matrices, como en las series temporales ArraySetAsSeries(close,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(ATR,true); //---- cálculo del número límite de inicio del ciclo de recálculo de compases if(prev_calculated>rates_total || prev_calculated<=0) // comprobar el primer inicio del cálculo del indicador { limit=rates_total-min_rates_total-1; // número inicial para el cálculo de todas las barras trend1=0; smin1=-999999; smax1=+999999; } else { limit=rates_total-prev_calculated; // número de inicio para calcular nuevos compases } to_copy=int(limit+Length); //---- copiar los datos recién aparecidos en matrices if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(0); //---- ciclo de cálculo del indicador principal for(bar=limit; bar>=0; bar--) { ExtMapBufferUp[bar]=EMPTY_VALUE; ExtMapBufferDown[bar]=EMPTY_VALUE; ExtMapBufferUp1[bar]=EMPTY_VALUE; ExtMapBufferDown1[bar]=EMPTY_VALUE; smin0=-999999; smax0=+999999; for(int iii=0; iii<int(Length); iii++) { int barx=bar+iii; smin0=MathMax(smin0,high[barx]-Kv*ATR[barx]); smax0=MathMin(smax0,low[barx]+Kv*ATR[barx]); } trend0=trend1; if(close[bar]>smax1) trend0=+1; if(close[bar]<smin1) trend0=-1; if(trend0>0) { if(smin0<smin1) smin0=smin1; ExtMapBufferUp[bar]=smin0; } if(trend0<0) { if(smax0>smax1) smax0=smax1; ExtMapBufferDown[bar]=smax0; } if(ExtMapBufferUp[bar+1]==EMPTY_VALUE && ExtMapBufferUp[bar]!=EMPTY_VALUE) ExtMapBufferUp1[bar]=ExtMapBufferUp[bar]; if(ExtMapBufferDown[bar+1]==EMPTY_VALUE && ExtMapBufferDown[bar]!=EMPTY_VALUE) ExtMapBufferDown1[bar]=ExtMapBufferDown[bar]; if(bar>0) { smin1=smin0; smax1=smax0; trend1=trend0; } } //--- BuySignal("ATRStops_v1.1_Alert",ExtMapBufferUp1,rates_total,prev_calculated,close,spread); SellSignal("ATRStops_v1.1_Alert",ExtMapBufferDown1,rates_total,prev_calculated,close,spread); //--- return(rates_total); } //+------------------------------------------------------------------+ //| Función de señal de compra| //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texto del nombre del indicador para las señales de correo y push double &BuyArrow[], // tampón indicador con señales de compra const int Rates_total, // número actual de barras const int Prev_calculated, // número de barras en el tick anterior const double &Close[], // precio de cierre const int &Spread[]) // propagación { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool BuySignal=false; bool SeriesTest=ArrayGetAsSeries(BuyArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(BuyArrow[index],_Digits) && BuyArrow[index]!=EMPTY_VALUE) BuySignal=true; if(BuySignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("BUY signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": BUY signal alert","BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": BUY signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Función de señal de venta| //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // texto del nombre del indicador para las señales de correo y push double &SellArrow[], // tampón indicador con señales de compra const int Rates_total, // número actual de barras const int Prev_calculated, // número de barras en el tick anterior const double &Close[], // precio de cierre const int &Spread[]) // propagación { //--- static uint counter=0; if(Rates_total!=Prev_calculated) counter=0; bool SellSignal=false; bool SeriesTest=ArrayGetAsSeries(SellArrow); int index; if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; if(NormalizeDouble(SellArrow[index],_Digits) && SellArrow[index]!=EMPTY_VALUE) SellSignal=true; if(SellSignal && counter<=NumberofAlerts) { counter++; MqlDateTime tm; TimeToStruct(TimeCurrent(),tm); string text=TimeToString(TimeCurrent(),TIME_DATE)+" "+string(tm.hour)+":"+string(tm.min); SeriesTest=ArrayGetAsSeries(Close); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; double Ask=Close[index]; double Bid=Close[index]; SeriesTest=ArrayGetAsSeries(Spread); if(SeriesTest) index=int(NumberofBar); else index=Rates_total-int(NumberofBar)-1; Bid+=Spread[index]*_Point; string sAsk=DoubleToString(Ask,_Digits); string sBid=DoubleToString(Bid,_Digits); string sPeriod=GetStringTimeframe(ChartPeriod()); if(SoundON) Alert("SELL signal \n Ask=",Ask,"\n Bid=",Bid,"\n currtime=",text,"\n Symbol=",Symbol()," Period=",sPeriod); if(EMailON) SendMail(SignalSirname+": SELL signal alert","SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); if(PushON) SendNotification(SignalSirname+": SELL signal at Ask="+sAsk+", Bid="+sBid+", Date="+text+" Symbol="+Symbol()+" Period="+sPeriod); } //--- } //+------------------------------------------------------------------+ //| Obtener el marco temporal como una cadena| //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- } //+------------------------------------------------------------------+
¡Gracias, funcionó!
Hola,
¿Puede agregar el idioma Inglés en las propiedades, para que podamos entenderlo.
Gracias
gkb #: Hola, ¿Puede agregar el idioma Inglés en las propiedades, por lo que podemos entender it.Thanks
La publicación original fue en el CodeBase ruso en 2017. MetaQuotes es el que hizo una traducción de la publicación.
Traducido del ruso por MetaQuotes Ltd.
Código original: https: //www.mql5.com/ru/code/17881
Código original: https: //www.mql5.com/ru/code/17881
Así que dudo que el autor original lo haga. Podrías usar Google translate y cambiar los comentarios del código al inglés tú mismo.
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
ATRStops_v1.1_Alert:
Indicador de tendencia, ejecutado en forma de NRTR con posibilidad de suministrar alertas, enviar correos electrónicos y mensajes Push.
Autor: Nikolay Kositsin