Ajuda: por algum motivo, o terminal não desenha a linha vermelha superior, apenas a linha azul inferior.
Альберт Туйкин:
Por algum motivo, o terminal não desenha a linha vermelha superior, apenas a azul inferior.
Verifiquei tudo novamente e o indicador funciona normalmente!
Por algum motivo, o terminal não desenha a linha vermelha superior, apenas a azul inferior.
Nikolay Kositsin:
Verifiquei tudo novamente e o indicador funciona muito bem!
Verifiquei tudo novamente e o indicador funciona muito bem!
Na maioria dos gráficos, funciona perfeitamente. Mas em dois gráficos ele não desenha a linha vermelha :(
Альберт Туйкин:
Ele funciona bem na maioria dos gráficos. Mas em dois gráficos ele não desenha a linha vermelha :(
Quando uma pessoa tem um problema, cabe inteiramente a ela comunicar esse problema às pessoas ao seu redor de uma forma que elas possam ver.
Ele funciona bem na maioria dos gráficos. Mas em dois gráficos ele não desenha a linha vermelha :(
Peço desculpas, adicionei uma captura de tela.
Por exemplo, no gráfico de índice RTS, tudo funciona, mas no gráfico de futuros RTS, há apenas uma linha azul.
Arquivos anexados:
k3nkgna35.JPG
195 kb
Альберт Туйкин:
Está claro que o autor do código definiu os tamanhos do fundo global e do teto muito pequenos no código-fonte. O código será alterado em breve. Peço desculpas, adicionei uma captura de tela.
Por exemplo, tudo funciona no gráfico de índice RTS, mas no gráfico de futuros RTS há apenas uma linha azul.
//+------------------------------------------------------------------+ //|ATRStops_v1.1_Alert.mq5 //|Direitos autorais © 2006, Forex-TSD.com //| Escrito por IgorAD,igorad2003@yahoo.co.uk | //| http://finance.groups.yahoo.com/group/TrendLaboratory //+------------------------------------------------------------------+ //---- indicator authorship #property copyright "Direitos autorais © 2006, Forex-TSD.com " //---- link para o site do autor #property link "http://www.forex-tsd.com/" //---- número da versão do indicador #property version "1.10" //---- desenhar indicador na janela principal #property indicator_chart_window //---- 4 buffers são usados para cálculo e desenho do indicador #property indicator_buffers 4 //---- usou 4 construções gráficas #property indicator_plots 4 //+----------------------------------------------+ //|| Parâmetros de desenho do indicador de alta //+----------------------------------------------+ //---- desenho do indicador 1 como uma linha #property indicator_type1 DRAW_LINE //---- cor azul é usada como cor da linha indicadora #property indicator_color1 clrBlue //---- linha do indicador 1 - sólida #property indicator_style1 STYLE_SOLID //---- indicador 1 espessura da linha é 2 #property indicator_width1 2 //---- indicador de exibição marcador de linha #property indicator_label1 "Upper ATRStops_v1.1" //+----------------------------------------------+ //|| Parâmetros de renderização do indicador de baixa //+----------------------------------------------+ //---- desenho do indicador 2 como uma linha #property indicator_type2 DRAW_LINE //---- A cor IndianRed é usada como cor da linha indicadora #property indicator_color2 clrIndianRed //---- linha do indicador 2 - sólida #property indicator_style2 STYLE_SOLID //---- indicador 2 espessura da linha é 2 #property indicator_width2 2 //---- indicador de exibição marcador de linha #property indicator_label2 "Lower ATRStops_v1.1" //+----------------------------------------------+ //|| Parâmetros de desenho do indicador de alta //+----------------------------------------------+ //---- desenho do indicador 3 como um ícone #property indicator_type3 DRAW_ARROW //---- cor O azul é usado como cor indicadora #property indicator_color3 clrBlue //---- espessura do indicador 3 é 4 #property indicator_width3 4 //---- etiqueta do indicador do visor #property indicator_label3 "Buy ATRStops_v1.1" //+----------------------------------------------+ //|| Parâmetros de renderização do indicador de baixa //+----------------------------------------------+ //---- desenho do indicador 4 como um ícone #property indicator_type4 DRAW_ARROW //---- a cor vermelha é usada como cor indicadora #property indicator_color4 clrRed //---- espessura do indicador 4 é 4 #property indicator_width4 4 //---- etiqueta do indicador do visor #property indicator_label4 "Sell ATRStops_v1.1" //+----------------------------------------------+ //|| Parâmetros de entrada do indicador //+----------------------------------------------+ input uint Length=10; // Período do código input uint ATRPeriod=5; // Período do indicador ATR input double Kv=2.5; // Volatilidade ATR input int Shift=0; // Deslocamento do indicador horizontalmente em barras input uint NumberofBar=1; // Número da barra para sinalização input bool SoundON=true; // Resolução de alerta input uint NumberofAlerts=2; // Número de alertas input bool EMailON=false; // Ativar o envio do sinal input bool PushON=false; // Permitir o envio de um sinal para o telefone celular //+----------------------------------------------+ //---- declaração de vetores dinâmicos, que são mais //---- será usado como buffer de indicador double ExtMapBufferUp[]; double ExtMapBufferDown[]; double ExtMapBufferUp1[]; double ExtMapBufferDown1[]; //---- declaração de variáveis inteiras para alças de indicador int ATR_Handle; //---- declaração de variáveis de início de dados inteiros int min_rates_total; //+------------------------------------------------------------------+ //| Função de inicialização do indicador personalizado //+------------------------------------------------------------------+ int OnInit() { //---- obter o identificador do indicador ATR ATR_Handle=iATR(NULL,0,ATRPeriod); if(ATR_Handle==INVALID_HANDLE) { Print("Falha ao obter a alça do indicador ATR"); return(1); } //---- inicialização das variáveis de início de dados min_rates_total=int(ATRPeriod+Length); //---- transformando a matriz dinâmica ExtMapBufferUp[] em um buffer indicador SetIndexBuffer(0,ExtMapBufferUp,INDICATOR_DATA); //---- indicador de deslocamento 1 horizontalmente por Shift PlotIndexSetInteger(0,PLOT_SHIFT,Shift); //---- deslocando o início da contagem regressiva do desenho do indicador 1 PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,min_rates_total); //---- indexação de itens em buffers, como em séries temporais ArraySetAsSeries(ExtMapBufferUp,true); //---- definição de valores de indicadores que não serão visíveis no gráfico PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- transformando a matriz dinâmica ExtMapBufferDown[] em um buffer indicador SetIndexBuffer(1,ExtMapBufferDown,INDICATOR_DATA); //---- indicador de deslocamento 2 horizontalmente por Shift PlotIndexSetInteger(1,PLOT_SHIFT,Shift); //---- deslocando o início da contagem regressiva do desenho do indicador 2 PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,min_rates_total); //---- indexação de itens em buffers, como em séries temporais ArraySetAsSeries(ExtMapBufferDown,true); //---- definição de valores de indicadores que não serão visíveis no gráfico PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- transformando a matriz dinâmica ExtMapBufferUp1[] em um buffer indicador SetIndexBuffer(2,ExtMapBufferUp1,INDICATOR_DATA); //---- indicador de deslocamento 1 horizontalmente por Shift PlotIndexSetInteger(2,PLOT_SHIFT,Shift); //---- deslocamento do início do desenho do indicador 3 PlotIndexSetInteger(2,PLOT_DRAW_BEGIN,min_rates_total); //---- indexação de itens em buffers, como em séries temporais ArraySetAsSeries(ExtMapBufferUp1,true); //---- definição de valores de indicadores que não serão visíveis no gráfico PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- caractere para indicador PlotIndexSetInteger(2,PLOT_ARROW,175); //---- transformando a matriz dinâmica ExtMapBufferDown1[] em um buffer indicador SetIndexBuffer(3,ExtMapBufferDown1,INDICATOR_DATA); //---- indicador de deslocamento 2 horizontalmente por Shift PlotIndexSetInteger(3,PLOT_SHIFT,Shift); //---- deslocamento do início do desenho do indicador 4 PlotIndexSetInteger(3,PLOT_DRAW_BEGIN,min_rates_total); //---- indexação de itens em buffers, como em séries temporais ArraySetAsSeries(ExtMapBufferDown1,true); //---- definição de valores de indicadores que não serão visíveis no gráfico PlotIndexSetDouble(3,PLOT_EMPTY_VALUE,EMPTY_VALUE); //---- caractere para indicador PlotIndexSetInteger(3,PLOT_ARROW,175); //---- inicialização da variável para o nome curto do indicador string shortname; StringConcatenate(shortname,"ATRStops_v1.1(",Length,", ",ATRPeriod,", ",DoubleToString(Kv,4),", ",Shift,")"); //--- criação de um nome a ser exibido em uma subjanela e dica de ferramenta separadas IndicatorSetString(INDICATOR_SHORTNAME,shortname); //--- determinar a precisão da exibição dos valores do indicador IndicatorSetInteger(INDICATOR_DIGITS,_Digits); //---- return(0); } //+------------------------------------------------------------------+ //| Função de iteração de indicador personalizado //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, // a quantidade de histórico em barras no tique atual const int prev_calculated,// quantidade de histórico em barras no tique anterior const datetime &time[], const double &open[], const double& high[], // array de preços máximos para o cálculo do indicador const double& low[], // matriz de preços mínimos para o cálculo do indicador const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //---- verificar se o número de barras é suficiente para o cálculo if(BarsCalculated(ATR_Handle)<rates_total || rates_total<min_rates_total) return(0); //---- declarações de variáveis locais double ATR[]; double smin0,smax0; int limit,to_copy,bar,trend0; static double smin1,smax1; static int trend1; //---- indexação de elementos em matrizes, como em séries temporais ArraySetAsSeries(close,true); ArraySetAsSeries(high,true); ArraySetAsSeries(low,true); ArraySetAsSeries(ATR,true); //---- calculando o número do limite inicial para o ciclo de recálculo da barra if(prev_calculated>rates_total || prev_calculated<=0) // verificar o primeiro início do cálculo do indicador { limit=rates_total-min_rates_total-1; // número inicial para o cálculo de todas as barras trend1=0; smin1=-999999; smax1=+999999; } else { limit=rates_total-prev_calculated; // número inicial para o cálculo de novas barras } to_copy=int(limit+Length); //---- copiar os dados recém-aparecidos para as matrizes if(CopyBuffer(ATR_Handle,0,0,to_copy,ATR)<=0) return(0); //---- ciclo de cálculo do 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); } //+------------------------------------------------------------------+ //| Função de sinal de compra| //+------------------------------------------------------------------+ void BuySignal(string SignalSirname, // texto do nome do indicador para sinais de correio eletrônico e push double &BuyArrow[], // buffer do indicador com sinais de compra const int Rates_total, // número atual de barras const int Prev_calculated, // número de barras no tique anterior const double &Close[], // preço de fechamento const int &Spread[]) // propagação { //--- 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); } //--- } //+------------------------------------------------------------------+ //| Função de sinal de venda| //+------------------------------------------------------------------+ void SellSignal(string SignalSirname, // texto do nome do indicador para sinais de correio eletrônico e push double &SellArrow[], // buffer do indicador com sinais de compra const int Rates_total, // número atual de barras const int Prev_calculated, // número de barras no tique anterior const double &Close[], // preço de fechamento const int &Spread[]) // propagação { //--- 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); } //--- } //+------------------------------------------------------------------+ //| Obter o período de tempo como uma cadeia de caracteres| //+------------------------------------------------------------------+ string GetStringTimeframe(ENUM_TIMEFRAMES timeframe) { //---- return(StringSubstr(EnumToString(timeframe),7,-1)); //---- } //+------------------------------------------------------------------+
Obrigado, funcionou!
Hi,
Você pode adicionar o idioma inglês nas propriedades, para que possamos entendê-lo.
Agradecimentos
gkb #: Oi, você pode adicionar o idioma inglês nas propriedades, para que possamos entendê-lo. Obrigado
A publicação original foi feita no CodeBase russo em 2017. A MetaQuotes é a única que fez uma tradução da publicação.
Traduzido do russo pela MetaQuotes Ltd.
Código original: https: //www.mql5.com/ru/code/17881
Código original: https: //www.mql5.com/ru/code/17881
Portanto, duvido que o autor original faça isso. Você pode usar o Google Tradutor e alterar os comentários do código para o inglês.
Você está perdendo oportunidades de negociação:
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Registro
Login
Você concorda com a política do site e com os termos de uso
Se você não tem uma conta, por favor registre-se
ATRStops_v1.1_Alert:
Indicador de tendência executado como NRTR com possibilidade de enviar alertas e mensagens via Push.
Autor: Nikolay Kositsin