Prezadíssimos,
Tentando montar combinados RSF e MFI (economia de espaço), estou com o seguinte problema. O comando if que estou utilizando para minimizar contas desnecessárias faz com que tudo nele não funcione e não estou conseguindo achar a causa. Para mim está tudo ok. Tenho certeza que alguém, batendo o olho, resolve. (não quero fritar mais com a aprendizagem da linguagem hoje - XD). Muito Obrigado! Aceito sujeitos para lidar melhor com o problema em questão - de evitar repetição de cálculos no OnCalculate.
Grato
Bom,
do jeito que está, precisa do else do if.
if(primeiraVez) { CopyBuffer(iRSI(_Symbol,_Period,Periodos,PRICE_WEIGHTED),0,0,rates_total,RaeBufferA); CopyBuffer(iMFI(_Symbol,_Period,Periodos,VOLUME_REAL),0,0,rates_total,RaeBufferB); primeiraVez=false; } else { CopyBuffer(iRSI(_Symbol,_Period,Periodos,PRICE_WEIGHTED),0,0,1,RaeBufferA); CopyBuffer(iMFI(_Symbol,_Period,Periodos,VOLUME_REAL),0,0,1,RaeBufferB); }
Bom,
do jeito que está, precisa do else do if.
Obrigado pela milésima vez, Rogério. Mas, mais uma pergunta: por que a necessidade do else? O programa corre de qualquer jeito. Aliás, do jeito que está, a parte que não é lida é justamente a parte do if (e não a que esta fora dele). Ainda não entendi.
Mas novamente, muito obrigado pela ajuda!!!
Obrigado pela milésima vez, Rogério. Mas, mais uma pergunta: por que a necessidade do else? O programa corre de qualquer jeito. Aliás, do jeito que está, a parte que não é lida é justamente a parte do if (e não a que esta fora dele). Ainda não entendi.
Mas novamente, muito obrigado pela ajuda!!!
Testei a proposta e não deu certo.
Daí pensei em mais uma coisa: Já que o else é o padrão, vale mais a pena inverter o conteúdo do if com o else e,juntamente a variável booleana, não? (mas reforçando, não deu certo!)
Não dá certo significou dar na mesmaTestei a proposta e não deu certo.
Daí pensei em mais uma coisa: Já que o else é o padrão, vale mais a pena inverter o conteúdo do if com o else e,juntamente a variável booleana, não? (mas reforçando, não deu certo!)
Não dá certo significou dar na mesmaBom dia,
a verdade é que não testei nada, só foquei se a lógica do IF estaria correta ou não, enfim segue o programa com correções.
//+------------------------------------------------------------------+ //| RSI and MFI.mq5 | //| Daniel Bandeira | //| | //+------------------------------------------------------------------+ #property copyright "Daniel Bandeira" #property version "1.00" #property indicator_separate_window #property indicator_buffers 6 #property indicator_plots 2 //--- plot RSI and MFI #property indicator_label1 "RSI" #property indicator_type1 DRAW_LINE #property indicator_color1 clrDodgerBlue #property indicator_style1 STYLE_SOLID #property indicator_width1 1 #property indicator_label2 "MFI" #property indicator_type2 DRAW_LINE #property indicator_color2 clrLime #property indicator_style2 STYLE_SOLID #property indicator_width2 1 //--- indicator buffers double RaeBufferA[]; //RSI e MFI buffers double RaeBufferB[]; input int Periodos=14; int rsiHandle,mfiHandle; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping IndicatorSetString(INDICATOR_SHORTNAME,"RSI (dogde blue) and MFI (lime) : (dual graph)"); SetIndexBuffer(0,RaeBufferA,INDICATOR_DATA); SetIndexBuffer(1,RaeBufferB,INDICATOR_DATA); IndicatorSetInteger(INDICATOR_LEVELS,3); IndicatorSetDouble(INDICATOR_LEVELVALUE,0,30); IndicatorSetDouble(INDICATOR_LEVELVALUE,1,50); IndicatorSetDouble(INDICATOR_LEVELVALUE,2,70); IndicatorSetDouble(INDICATOR_MINIMUM,0); IndicatorSetDouble(INDICATOR_MAXIMUM,100); IndicatorSetInteger(INDICATOR_LEVELWIDTH,0,1); IndicatorSetInteger(INDICATOR_LEVELWIDTH,1,1); IndicatorSetInteger(INDICATOR_LEVELWIDTH,2,1); IndicatorSetInteger(INDICATOR_LEVELSTYLE,0,STYLE_DASH); IndicatorSetInteger(INDICATOR_LEVELSTYLE,1,STYLE_DASH); IndicatorSetInteger(INDICATOR_LEVELSTYLE,2,STYLE_DASH); IndicatorSetInteger(INDICATOR_LEVELCOLOR,0,clrTomato); IndicatorSetInteger(INDICATOR_LEVELCOLOR,1,clrAqua); IndicatorSetInteger(INDICATOR_LEVELCOLOR,2,clrTomato); IndicatorSetString(INDICATOR_LEVELTEXT,0,"Compra"); IndicatorSetString(INDICATOR_LEVELTEXT,1,"Espera"); IndicatorSetString(INDICATOR_LEVELTEXT,2,"Vender"); IndicatorSetInteger(INDICATOR_DIGITS,1); if(ArraySetAsSeries(RaeBufferA,true) && ArraySetAsSeries(RaeBufferB,true)) printf("Both arrays set as time series"); Comment("GetLastError() ",GetLastError()); rsiHandle=iRSI(_Symbol,_Period,Periodos,PRICE_WEIGHTED); mfiHandle=iMFI(_Symbol,_Period,Periodos,VOLUME_REAL); //--- 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(prev_calculated==0) { if(CopyBuffer(rsiHandle,0,0,rates_total,RaeBufferA)<rates_total) return(0); if(CopyBuffer(mfiHandle,0,0,rates_total,RaeBufferB)<rates_total) return(0); } CopyBuffer(rsiHandle,0,0,1,RaeBufferA); CopyBuffer(mfiHandle,0,0,1,RaeBufferB); //--- return value of prev_calculated for next call return(rates_total); } //+------------------------------------------------------------------+
Bom dia,
a verdade é que não testei nada, só foquei se a lógica do IF estaria correta ou não, enfim segue o programa com correções.
Rogério,
Obrigado pela atenção e paciência. Eu já tinha quebrado a cabeça e já tinha corrigido. Mas valeu, achei a solução que você deu melhor e simples. Agradeço a paciência e boa vontade. No futuro, espero poder vir com dúvidas relevantes.
Obrigado mesmo!

- 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
Prezadíssimos,
Tentando montar combinados RSF e MFI (economia de espaço), estou com o seguinte problema. O comando if que estou utilizando para minimizar contas desnecessárias faz com que tudo nele não funcione e não estou conseguindo achar a causa. Para mim está tudo ok. Tenho certeza que alguém, batendo o olho, resolve. (não quero fritar mais com a aprendizagem da linguagem hoje - XD). Muito Obrigado! Aceito sujeitos para lidar melhor com o problema em questão - de evitar repetição de cálculos no OnCalculate.
Grato