olá,
estou tentando fazer um indicador de saldo de agressão acumulado durante o pregão mas por algum motivo que nao consigo descobrir, se jogar o indicador depois das 9:00 ele traz um valor muito estranho para o acumulado de agressão das 9:00 até o ultimo minuto.
Olá, não sei se ajuda. Mas talvez como um plano B possa acumular os valores desse indicador que fiz.
https://www.mql5.com/pt/code/32914
- www.mql5.com
muito obrigado @Sidnei Da Silva Santos Junior .
O seu calculo é quase identico ao meu, eu to usando linha mas gostei do histograma que voce usou.
O meu problema ta no metodo carregaSaldoAgressão() que até busca os ticks de 9:00 até o minuto que estamos mas parece que vem alguma coisa na informacao dos ticks que nao bate pq o numero é sempre maior que o de outras plataformas.
muito obrigado @Sidnei Da Silva Santos Junior .
O seu calculo é quase identico ao meu, eu to usando linha mas gostei do histograma que voce usou.
O meu problema ta no metodo carregaSaldoAgressão() que até busca os ticks de 9:00 até o minuto que estamos mas parece que vem alguma coisa na informacao dos ticks que nao bate pq o numero é sempre maior que o de outras plataformas.
Então eu notei também a diferença na escala dos numeros, mas reparei visualmente que a proporção entre compra:venda é semelhante sabe?
consegui arrumar a forma de calcular.
tem 2 problemas, quando busca o historico do dia, as vezes não consegue recuperar, ai tem que remover o indicador e colocar novamente.
a divergencia que achei foi do dolar cheio. para dolar mini indice cheio e indice mini, os numeros estao proximos do tryd (usando somente negocios não diretos).
segue a versão atual;
#property copyright "2021 igor nunes" #property description "Delta" //--- indicator settings #property indicator_separate_window #property indicator_level1 0 #property indicator_buffers 1 #property indicator_plots 1 #property indicator_type1 DRAW_LINE #property indicator_color1 clrDarkOrange #property indicator_width1 2 //--- indicator buffers double DeltaBuffer[]; double saldo, compra, venda; MqlTick ticks[],tickAnterior; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ void OnInit() { saldo = 0; compra = 0; venda = 0; //--- indicator buffers mapping SetIndexBuffer(0,DeltaBuffer,INDICATOR_DATA); ArrayInitialize(DeltaBuffer,0); //--- set accuracy IndicatorSetInteger(INDICATOR_DIGITS,0); //--- sets first bar from what index will be drawn //PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,ExtPeriodRSI); //--- name for DataWindow and indicator subwindow label IndicatorSetString(INDICATOR_SHORTNAME,"Delta "+_Symbol); } //+------------------------------------------------------------------+ //| Relative Strength Index | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const int begin, const double &price[]){ if(prev_calculated==0){ saldo = carregaSaldoAgressao(); } else { int received1=CopyTicks(_Symbol,ticks,COPY_TICKS_TRADE,0,50); ArraySetAsSeries(ticks,true); if(received1>0){ for(int i = 0; i < ArraySize(ticks); i++){ MqlTick tick=ticks[i]; if(tick.time_msc > tickAnterior.time_msc){ //Print("#########"); //Print("=> flag:"+tick.flags+" bid:"+tick.bid+" ask:"+tick.ask+" last:"+tick.last); //Print("=> vol:"+tick.volume+" real:"+tick.volume_real+" time:"+tick.time+" msc:"+tick.time_msc); if(tick.flags==56) compra += tick.volume; if(tick.flags==88) venda += tick.volume; tickAnterior = tick; } } saldo = compra - venda; ZeroMemory(ticks); } } DeltaBuffer[rates_total-1] = saldo; return(rates_total); } double carregaSaldoAgressao(){ double saldoInicial = 0.0; MqlTick tickMini[]; string inicio = TimeToString(TimeCurrent(),TIME_DATE); datetime ini = StringToTime(inicio + " 09:00"); string agora = TimeToString(TimeCurrent(),TIME_MINUTES); datetime fim = StringToTime( inicio + " " + agora); int received1=CopyTicksRange(_Symbol,tickMini,COPY_TICKS_TRADE,ini*1000,fim*1000); ArraySetAsSeries(tickMini,true); if(received1>0){ for(int i = 0; i < ArraySize(tickMini); i++){ MqlTick tick=tickMini[i]; if(tick.flags==56) compra += tick.volume; if(tick.flags==88) venda += tick.volume; saldo = compra - venda; } ZeroMemory(tickMini); } Print("saldo inicial: " + saldo); return saldoInicial; }
consegui arrumar a forma de calcular.
tem 2 problemas, quando busca o historico do dia, as vezes não consegue recuperar, ai tem que remover o indicador e colocar novamente.
a divergencia que achei foi do dolar cheio. para dolar mini indice cheio e indice mini, os numeros estao proximos do tryd (usando somente negocios não diretos).
segue a versão atual;
Boa tarde meu amigo, parabéns pelo seu indicador, ficou muito bom.
Percebi um erro na função carregaSaldoAgressao
você declarou a variável "saldoInicial" mas dentro do "for" você está utilizando a variável global "saldo" para fazer a soma.
- 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á,
estou tentando fazer um indicador de saldo de agressão acumulado durante o pregão mas por algum motivo que nao consigo descobrir, se jogar o indicador depois das 9:00 ele traz um valor muito estranho para o acumulado de agressão das 9:00 até o ultimo minuto.