#property indicator_color1 clrGreen, clrRed if (close[i] > close[i - 1]) valc[i] = clrGreen; // Verde (compradora) else if (close[i] < close[i - 1]) valc[i] = clrRed; // Vermelho (vendedora)
Por favor não criar tópicos aleatoriamente sem ter em conta a secção adequada. O seu tópico foi movido para a secção: Indicadores técnicos
Peço desculpas, não me atentei a segmentação das dúvidas.
Lembre-se que terá de usar o índice da cor e não a cor em si ...
#property indicator_color1 clrGreen, clrRed if (close[i] > close[i - 1]) valc[i] = 0; // Verde (compradora) else if (close[i] < close[i - 1]) valc[i] = 1; // Vermelho (vendedora)
Bom dia!! É possível que você tenha alterado mais alguma coisa no código original e esqueceu, porque eu alterei apenas as linhas destacadas abaixo e funcionou aqui:
//------------------------------------------------------------------ #property copyright "© mladen, 2018" #property link "mladenfx@gmail.com" #property version "1.00" //------------------------------------------------------------------ #property indicator_separate_window #property indicator_buffers 3 #property indicator_plots 2 #property indicator_label1 "Volume" #property indicator_type1 DRAW_COLOR_HISTOGRAM #property indicator_color1 clrDarkGray,clrGreen,clrRed #property indicator_width1 2 #property indicator_label2 "Average" #property indicator_type2 DRAW_LINE #property indicator_color2 clrDarkGray //--- enum enMaTypes { ma_sma, // Simple moving average ma_ema, // Exponential moving average ma_smma, // Smoothed MA ma_lwma // Linear weighted MA }; //--- enum enVolumeType { vol_ticks, // Use ticks vol_volume // Use real volume }; //--- input parameters input enVolumeType inpVolumeType = vol_ticks; // Volume type to use input int inpAveragePeriod = 50; // Average period input enMaTypes inpAverageMethod = ma_ema; // Average method input double inpBreakoutPercent = 50; // Breakout percentage //--- buffers double val[],valc[],average[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { //---- indicator buffers mapping SetIndexBuffer(0,val,INDICATOR_DATA); SetIndexBuffer(1,valc,INDICATOR_COLOR_INDEX); SetIndexBuffer(2,average,INDICATOR_DATA); string _avgNames[]= {"SMA","EMA","SMMA","LWMA"}; IndicatorSetString(INDICATOR_SHORTNAME,"Volume "+_avgNames[inpAverageMethod]+" average ("+(string)inpAveragePeriod+")"); } //+------------------------------------------------------------------+ //| 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(Bars(_Symbol,_Period)<rates_total) return(-1); int i=(int)MathMax(prev_calculated-1,0); for(; i<rates_total && !_StopFlag; i++) { double _volume=double((inpVolumeType==vol_ticks) ? tick_volume[i]: volume[i]); average[i] = iCustomMa(inpAverageMethod,_volume,inpAveragePeriod,i,rates_total); val[i] = _volume; valc[i] = 0; if(i>0 && close[i] > close[i-1]) valc[i] = 1; if(i>0 && close[i] < close[i-1]) valc[i] = 2; } return(i); } //+------------------------------------------------------------------+ //| Custom functions | //+------------------------------------------------------------------+ #define _maInstances 1 #define _maWorkBufferx1 1*_maInstances //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double iCustomMa(int mode,double price,double length,int r,int bars,int instanceNo=0) { switch(mode) { case ma_sma : return(iSma(price,(int)length,r,bars,instanceNo)); case ma_ema : return(iEma(price,length,r,bars,instanceNo)); case ma_smma : return(iSmma(price,(int)length,r,bars,instanceNo)); case ma_lwma : return(iLwma(price,(int)length,r,bars,instanceNo)); default : return(price); } } double workSma[][_maWorkBufferx1]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double iSma(double price,int period,int r,int _bars,int instanceNo=0) { if(ArrayRange(workSma,0)!=_bars) ArrayResize(workSma,_bars); workSma[r][instanceNo]=price; double avg=price; int k=1; for(; k<period && (r-k)>=0; k++) avg+=workSma[r-k][instanceNo]; return(avg/(double)k); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double workEma[][_maWorkBufferx1]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double iEma(double price,double period,int r,int _bars,int instanceNo=0) { if(ArrayRange(workEma,0)!=_bars) ArrayResize(workEma,_bars); workEma[r][instanceNo]=price; if(r>0 && period>1) workEma[r][instanceNo]=workEma[r-1][instanceNo]+(2.0/(1.0+period))*(price-workEma[r-1][instanceNo]); return(workEma[r][instanceNo]); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double workSmma[][_maWorkBufferx1]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double iSmma(double price,double period,int r,int _bars,int instanceNo=0) { if(ArrayRange(workSmma,0)!=_bars) ArrayResize(workSmma,_bars); workSmma[r][instanceNo]=price; if(r>1 && period>1) workSmma[r][instanceNo]=workSmma[r-1][instanceNo]+(price-workSmma[r-1][instanceNo])/period; return(workSmma[r][instanceNo]); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double workLwma[][_maWorkBufferx1]; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ double iLwma(double price,double period,int r,int _bars,int instanceNo=0) { if(ArrayRange(workLwma,0)!=_bars) ArrayResize(workLwma,_bars); workLwma[r][instanceNo] = price; if(period<1) return(price); double sumw = period; double sum = period*price; for(int k=1; k<period && (r-k)>=0; k++) { double weight=period-k; sumw += weight; sum += weight*workLwma[r-k][instanceNo]; } return(sum/sumw); } //+------------------------------------------------------------------+
Também, tem a certeza que quer compara os preços de fecho?
Será que a sua intenção é comparar os volumes e não o fecho?
if (val[i] > val[i - 1]) valc[i] = 0; // Verde (compradora) else if (val[i] < val[i - 1]) valc[i] = 1; // Vermelho (vendedora)
Bom dia!! É possível que você tenha alterado mais alguma coisa no código original e esqueceu, porque eu alterei apenas as linhas destacadas abaixo e funcionou aqui:
Muito estranho, provavelmente eu fiz alguma besteira aqui, rs. Copiei o código que voce colocou, compilei e funcionou. Muito Obrigado!
Sim! Tal como salientei, estava a comparar os preços de fecho ...
if (close[i] > close[i - 1]) valc[i] = 0; // Verde (compradora) else if (close[i] < close[i - 1]) valc[i] = 1; // Vermelho (vendedora)
em vez do volume ...
if (val[i] > val[i - 1]) valc[i] = 0; // Verde (compradora) else if (val[i] < val[i - 1]) valc[i] = 1; // Vermelho (vendedora)
- 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
Tive acesso a um código em mql5 de volume financeiro, o qual estou tentando aplicar no grafico do mini indice no tempo M15.
Originalmente, o indicador plotava as barras em uma espécie de escala de cores, que iniciava em vermelho e ia mudando, para laranja, amarelo, até chegar no verde. Para a estratégia que vou utilizar, só preciso que ele fique verde ou vermelho, e ao aplicar essas modificações, mesmo aparecendo 0 erros após compilar, quando adicionado ao gráfico, ele me mostra apenas a MA e não aparece mais as barras de volume. Poderiam dar uma olhada e me ajudar a identificar onde está o problema?
Desde já agradeço!