Cara eu também sou noob, mas vc meteu 3 Loops "for" um dentro do outro, claro que "pesa tanto assim a conta".
e vc pode zerar os buffers na função OnInit()não vai ajudar no seu caso, mas já é uma economia:
ArrayInitialize(MediaBuffer,EMPTY_VALUE);
ArrayInitialize(SuporteAltoBuffer,EMPTY_VALUE);
ArrayInitialize(SUporteBaixoBuffer,EMPTY_VALUE);
Olá Pessoal!
Olá,
no seu post anterior já havia comentado sobre a otimização do indicador.
//+------------------------------------------------------------------+ //| Média Completa.mq5 | //| Daniel Bandeira | //| | //+------------------------------------------------------------------+ #property copyright "Daniel Bandeira" #property link "" #property version "1.00" #property indicator_chart_window #property indicator_buffers 3 #property indicator_plots 3 //--- plot Média #property indicator_label1 "Média" #property indicator_type1 DRAW_LINE #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 1 //--- plot SuporteAlto #property indicator_label2 "SuporteAlto" #property indicator_type2 DRAW_LINE #property indicator_color2 clrDarkTurquoise #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- plot SUporteBaixo #property indicator_label3 "SUporteBaixo" #property indicator_type3 DRAW_LINE #property indicator_color3 clrDarkTurquoise #property indicator_style3 STYLE_SOLID #property indicator_width3 1 //--- input parameters input int Velas=14; //--- indicator buffers double MediaBuffer[]; //para a média double SuporteAltoBuffer[]; // para armazenar o "suporte" double SUporteBaixoBuffer[]; //para armazenar a "resistencia" bool PrimeiraVez; // para analisar se o valor da resistencia deve ser refeito int inicio; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,MediaBuffer,INDICATOR_DATA); SetIndexBuffer(1,SuporteAltoBuffer,INDICATOR_DATA); SetIndexBuffer(2,SUporteBaixoBuffer,INDICATOR_DATA); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ 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[]) { //--- if(rates_total<2*Velas) return(0); // qtd. mínima de rates para calc do indicador. if(prev_calculated==0) inicio=2*Velas-1; // rate inicial p/ calc da indicador else inicio=prev_calculated; // último rate para o qual o indicador já foi calculado for(int k=inicio; k<rates_total; k++) { MediaBuffer[k]=0; PrimeiraVez=true; for(int i=0;i<Velas;i++) { if(PrimeiraVez) { SuporteAltoBuffer[k]=high[k]; SUporteBaixoBuffer[k]=low[k]; PrimeiraVez=false; } MediaBuffer[k]+=((high[k+i-Velas+1]+low[k+i-Velas+1])/2+close[k+i-Velas+1]+open[k+i-Velas+1])/3/Velas; for(int m=0;m<2*Velas;m++) { if(SuporteAltoBuffer[k] < high[k-2*Velas+1+m]) SuporteAltoBuffer[k] = high[k-2*Velas+1+m]; if(SUporteBaixoBuffer[k]> low[k-2*Velas+1+m]) SUporteBaixoBuffer[k] = low[k-2*Velas+1+m]; } } } return(rates_total-1); // N-1 velas para trás já foram calculadas } //+------------------------------------------------------------------+
Cara eu também sou noob, mas vc meteu 3 Loops "for" um dentro do outro, claro que "pesa tanto assim a conta".
e vc pode zerar os buffers na função OnInit()não vai ajudar no seu caso, mas já é uma economia:
Certo. Mas loops simples destes poderiam pesar tanto? Como falei, eu vi isso e mudei. Mas não esperava que 1 indicador, pesaria como 100! Sacou?
Olá,
no seu post anterior já havia comentado sobre a otimização do indicador.
Me surpreendeu pesar tanto. Mas parece que foi só para mim! KKK
Muito obrigado pela sua presente ajuda! Muito valiosa! Aprendi e aprendo bastante com você! Valeu!
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Olá Pessoal!
Criei um indicador, só para treino mesmo (I'm noob), e, dentre os vários problemas corriqueiros, o pior. Usava tal indicador e este, por algum motivo que não entendo, trava o tempo de resposta do MetaTrader. Alguém poderia me dizer o porquê? O indicador "busca" suporte e traça a média.
Abaixo, o programa em si.
É notório que ele de longe está do jeito mais grosseiro. É o protótipo... mas esse deveria pesar mais que vários outros indicadores trabalhando junto ao mesmo tempo?
Na verdade, fiz (a pouco) uma correção que PARECEter solucionado o problema. Mas não estou crendo que muda um if de lugar (junto com outro comandos afins) possa ter mudado tanto o desempenho.
Imagino que várias indicadores, a priori, pese mais que um if fora de lugar. Estou certo?