Programação de Indicadores: Identificando os últimos negócios antes de desenhar a próxima barra!

Aproveitando que tenho compartilhado informações sobre a codificação de robôs no Metatrader5 (ainda em “indicadores“) e algumas dúvidas ou curiosidades estão surgindo, resolvi demonstrar o código que utilizo para identificar os últimos negócios ou nova barra.

A função isNewBar foi definida, inicialmente, para permitir a identificação de uma nova barra – o meu objetivo era abrir os cálculos a cada nova barra.

Parecia simples, bastava comparar “last_time!=lastbar_time” (ou seja, comparar valor atual com o anterior e retornar true quando os valores não forem iguais).

bool isNewBar(const datetime lastbar_time, const int prev_calc) {
   ...
   if (last_time==0 || init_time==0 || last_time!=lastbar_time) {
      last_time=lastbar_time;
      init_time=init_auxtime;
      if (last_time==0) return(false);
      return(true);
   }
   ...
   return(false);
}

O valor de lastbar_time é o horário da barra atual (baseado na abertura, e fornecido pela variável time[i]) – mudará apenas na próxima barra. E last_time é o último horário capturado.

Funciona perfeitamente para a primeira execução do indicador, quando prev_calculated for 0 (com dados históricos). Porém, a lógica não pode ser a mesma quando o indicador estiver analisando os negócios em tempo real.

Suponhamos que você queira trocar a cor do candle quando o preço de abertura for igual ao preço de fechamento (para fechar posição)…

Com os dados históricos (prev_calculated 0), a barra não é processada ticket a ticket. Então, se compararmos open com close assim que a função isNewBar retornar true, teremos a certeza de que open[i] representa o primeiro negócio e close[i] o último (no intervalo de tempo representado pela barra).

Pois é, mas o comportamento não será o mesmo quando prev_calculated for maior que 0 (em tempo real). Neste caso, assim que a próxima barra for desenhada, para o primeiro ticket, teremos open igual a close. Ou seja, a comparação será SEMPRE verdadeira logo que surgir a próxima barra.

Por esta razão, inclui o controle de tempo decorrido (time_match):

   ...
   datetime init_auxtime=TimeCurrent();
   ...
   // 5 minutos
   limit_time=300;
   time_match=(limit_time-(init_auxtime-init_time));
   ...
   if (last_time==0 || init_time==0 || last_time!=lastbar_time) {
      last_time=lastbar_time;
      init_time=init_auxtime;
      if (last_time==0) return(false);
   }

   if (prev_aux==0) return(true);
   else if (time_match<=1) {
      if (time_match<=0) {
         last_time=lastbar_time;
         init_time=init_auxtime;
         return(false);
      }
      return(true);
    }
    ...

Esta é uma das várias pegadinhas deste tipo de programação! 😉

Confiram, logo a seguir, a função completa:

...
int time_punish=0;
...
bool isNewBar(const datetime lastbar_time, const int prev_calc)
  {
//--- memorize the time of opening of the last bar in the static variable
   static datetime last_time=0;
   static datetime init_time=0;
   
   datetime init_auxtime=TimeCurrent();

   int limit_time=0,prev_aux=prev_calc;
   long time_match=0;
   
   limit_time=300;
   time_match=(limit_time-(init_auxtime-init_time));
   if (time_match<0) time_match=0;
   
   string label_name1="Seconds", label_text="Seconds... "+(string) (long)time_match;
   ObjectDelete(0, label_name1);
   ObjectCreate(0, label_name1, OBJ_LABEL, 0, 0, 0);
   //ObjectSetInteger(0,label_name1,OBJPROP_XDISTANCE,960);
   ObjectSetInteger(0,label_name1,OBJPROP_XDISTANCE,ChartGetInteger(0,CHART_WIDTH_IN_PIXELS,0)-100);
   ObjectSetInteger(0,label_name1,OBJPROP_YDISTANCE,30);
   ObjectSetInteger(0,label_name1,OBJPROP_COLOR,YellowGreen);
   ObjectSetString(0,label_name1,OBJPROP_TEXT,label_text);
   
//--- if it is the first call of the function or new bar
   if (last_time!=lastbar_time && trade_open>0) bars_trade++;
   if (last_time==0 || init_time==0 || last_time!=lastbar_time) {
      if (init_auxtime>=init_time+limit_time && init_time>0) prev_aux=0;
      time_punish=1;
      last_time=lastbar_time;
      init_time=init_auxtime;
      if (last_time==0) return(false);
   }

//--- allow after 5 minutes - 1s
   if (time_match>2 && time_match<250) time_punish=0;
   if (prev_aux==0) return(true);
   else if (time_match<=1) {
      if (time_match<=0) {
         last_time=lastbar_time;
         init_time=init_auxtime;
         time_punish=1;
         return(false);
      }
      if (time_punish==0) return(true);
   }
   
//--- if we passed to this line, then the bar is not new; return false
   return(false);
  }

"A primeira definição, com a criação de um objeto do tipo LABEL, exibirá o contador decrescente (time_match) dos segundos decorridos (300s ou 5min)"

O código responsável pelos cálculos fica limitado pela função isNewBar:

if (isNewBar(time[i], last)==true) {
   ...
   // codificação para mudança de cor do candlestick
   if (open[i]==close[i]) buf_color_line[i]=0;
   ...
}


Resultado do mês de março (2019)

Apesar das “pequenas turbulências” no cenário político-econômico (em torno da proposta para a reforma da previdência), o resultado do mês foi excelente – provavelmente o melhor do ano (contamos com rendimentos “generosos”). Pela primeira vez conferimos o índice IBov romper os 100.000 pts. O clima de tensão atual fez com que o índice recuasse, mas existe a influência do ímpeto de realização de lucros também. Sem muitas delongas, vamos aos resultados.

Estamos entrando no último mês para a entrega para declaração anual do Imposto de Renda (IRPF), terei bastante trabalho para os próximos dias. Sendo assim, desta vez, serei mais direto. Para quem investe em renda variável, recomendo a contratação de alguma calculadora de IR, como o IRPFBolsa – lhe asseguro, quanto mais adiar, maior será seu arrependimento no futuro (é muito trabalhoso, risos).


Apesar de pequenas turbulências, o otimismo no mercado de capitais prevalece. Se avaliarmos o período de 6 meses, estamos com uma vantagem de 16.790,90 pts.

Fonte: Google

Um “pequeno atrito” entre o Presidente da Câmara e representantes do atual governo geraram incertezas momentâneas para o mercado. Seja como for, acredito que um movimento corretivo era esperado.

Como de costume, confiram os principais números e acontecimentos que sacudiram o país e o mundo (do redator chefe da Modal):

Para quem tem interesse em aperfeiçoar o conhecimento sobre o mercado financeiro, surgiu uma oportunidade bastante interessante: a BTG Pactual abriu inscrições (até 7 de abril) para um curso de graduação – será ministrado pelos sócios do Banco.

Para ter acesso ou acompanhar os balanços, recomendo o seguinte link:
https://www.acionista.com.br/agenda/resultados-das-cias.html

Quanto aos investimentos…

Recebi proventos de BBAS3, EGIE3, ITSA3, ITUB3, WEGE3, BRCR11 (9,95%), FCFL11 (0,555%), PQDP11 (0,495%), KNRI11 (0,484%), RNGO11 (0,585%), SAAG11 (0,740%), GGRC11 (0,634%), MXRF11 (0,629%), KNCR11 (0,515%), HGRE11 (0,493%), FLMA11 (0,374%), HGBS11 (0,560%) e FIGS11 (1,358%). O mês foi simplesmente impressionante (risos). Finalizada a negociação com a Brookfield, o fundo BRCR11 distribuiu o rendimento de 9,95% (R$ 10,57 por cota) – portanto, não foi um evento recorrente, mas a previsão é que o fundo apresente uma performance melhor no ano (até pela diminuição da vacância). De maneira geral, o rendimento da carteira permanece excelente, sendo reforçado (e que reforço) com o pagamento de dividendos e JCP de BBAS3, EGIE, ITSA3, ITUB3 e WEGE3.

O rendimento da carteira quebrou qualquer expectativa para o ano. É óbvio que foi um resultado atípico e acho pouco provável que os próximos meses superem. E agora… Entendem porque a atuação como holder é praticamente obrigatória.

Com o rendimento da própria carteira, somado ao capital que me prontifico separar para investir mensalmente, comprei mais ações (ou cotas) de BBAS3, ITSA3, ITUB3, WEGE3, FLRY3, BBSE3, HYPE3, EGIE3, ODPV3, BRCR11 e KNRI11. Os menores aportes foi para ODPV3, BBAS3 e BRCR11, e os maiores para ITUB3, WEGE3 e KNRI11 (de maneira geral, foram bem equilibrados). Como o rendimento foi bastante expressivo, decidi “distribuir melhor” os aportes.

Confiram a distribuição dos ativos, segundo o portal CEI (NÃO inclui o Fundo DI):

A proporção em ações continua bastante expressiva em decorrência da forte valorização do índice Ibov

A composição atual ficou assim (gráfico do IrpfBolsa):

Vale lembrar que o gráfico acima representa uma distribuição baseada no custo de aquisição, não no valor de mercado

O resultado mensal foi MUITO surpreendente. Fiquei extremamente satisfeito, pois minha capacidade de aporte foi maior. É preciso saber aproveitar bem estes momentos, pois não são frequentes.

O robô de trade abriu o mês com vários gains, mas, infelizmente, finalizou com prejuízo de R$20. Já estou na 22 revisão do código e o índice de acerto está melhorando bastante – ainda não coloquei em produção a última revisão.

De maneira geral, estou bastante satisfeito. Vale lembrar que, no curto prazo, oscilações são naturais e esperadas (com movimentos de repique, por exemplo). Dentro de qualquer tendência, os papeis não se movimentam em linha reta.

Estou apenas demonstrando o potencial de crescimento, isto não é recomendação de investimento.

FCL: Analisando Fluxo de Caixa Livre

Analisar o balanço para identificar boas empresas é uma etapa mandatória para selecionar mais adequadamente a empresa em que desejamos nos tornar sócios (visão de Holders).

https://media.treasy.com.br/media/2018/08/Fluxo-de-Caixa-livre.jpg

De acordo com o portal Treasy, “a definição mais simples para entender o que é Fluxo de Caixa Livre é dizer que se trata da quantidade de dinheiro restante em uma empresa. Em outras palavras, é o montante de caixa (fluxo de caixa operacional) que permanece em um negócio após todos os gastos (dívidas, despesas com aluguel, salários etc.) terem sido pagos.”

Confiram uma leitura praticamente obrigatória para Holders:
https://www.treasy.com.br/blog/fluxo-de-caixa-livre/

Resumindo: “Se encontramos uma empresa com lucro líquido consistente, dívida saudável (ou descrescente, de preferência), margem bruta estável e FCL consistente e crescente, estamos diante de uma empresa com características sólidas para investimento“.

Para a análise descrita anteriormente, recomendo o site:
https://www.oceans14.com.br/acoes/

Aliás, foi usando estes critérios que decidi manter uma pequena posição em CRFB3 (Carrefour).

Instalando Metatrader5 no Linux

A dica desta vez é voltada para usuários de Linux. Se não for o seu caso, este artigo não será de grande serventia.

De qualquer forma, para quem estiver interessado na utilização de um robô na “conta quente”, recomendo fazer isto em uma instalação Windows ( para execução nativa).

wget -nc https://dl.winehq.org/wine-builds/winehq.key
sudo apt-key add winehq.key apt-add-repository https://dl.winehq.org/wine-builds/ubuntu/ apt-get update apt-get install --install-recommends winehq-stable



Um Brasil do lado de lá do espelho

Recebi um texto, em nome de Marcelo Rates Quaranta (autor), achei a sequência de argumentos fantástica e resolvi compartilhá-lo. O texto é longo, mas vale a penas separar alguns minutinhos para leitura!

*Um Brasil do lado de lá do espelho*

Pablo Vittar é cotado como “mulher” mais sexy, Thammy Gretchen é cotada como “homem” mais sexy e agora só falta o Tiririca ganhar um assento na Academia Brasileira de Letras e a Jojo Todynho ganhar o concurso de Miss Brasil. Isso não é nada para um país que tem um presidiário analfabeto como Doutor Honoris Causa e um Presidente da Suprema Corte que nunca foi Juiz.

Vivemos no país do espelho, onde as imagens são invertidas pela grande mídia comprometida com a esquerda. Uma parcela do povo idolatra e pede a liberdade de um corrupto que não só roubou dinheiro, mas também os sonhos das pessoas, e ainda chamam de “criminoso” o Juiz que o condenou pelos crimes.

Mulheres escrevem cartas de amor para um ex-goleiro matador de mulher; gays idolatram Che Guevara que matava gays e ativistas negros endeusam um líder de quilombo que mantinha escravos negros, mas esquecem de todos os brancos abolicionistas que lutaram pela liberdade dos escravos, sobretudo daquela que a assinou.

Que maravilha de país! Guerrilheiros recebem pensão como prêmio por assaltos, assassinatos e sequestros e um fuzil nas mãos de um bandido não representa qualquer ameaça.

Enquanto isso nossos policiais são mortos aos borbotões. Mas o que esperar de uma gente que transformou Marielle em heroína, mas esqueceu da professorinha que morreu queimada depois de salvar várias crianças de um incêndio criminoso? Isso fora os que acharam um absurdo uma policial matar um bandido que ameaçava mães na porta de uma escola.

Invasores de terras matam gado, destroem laboratórios e queimam casas em nome da “justiça social”, e manifestantes queimam carros, depredam patrimônio público e saqueiam lojas pedindo “ordem”. Tempos atrás foi por causa de um aumento de vinte centavos nas passagens, mas são os mesmos que clamam pela liberdade de quem lhes roubou bilhões de reais, e quando roubou, ficaram calados.

Nas universidades, que deveriam ensinar os alunos a serem produtivos, doutrinam com base nas filosofias de um vagabundo improdutivo chamado Marx, e que viveu a vida inteira às custas da mulher, rica. Mulheres gritam contra o feminicídio, mas defendem a morte de inocentes no ventre.

Aqui os militantes que pregam a paz são os que praticam o ódio e os políticos que falam em liberdade são os que aprisionam os humildes na ignorância. Até o que veio pedir o fim das “fake news” foi o que mais se utilizou de mentiras em sua campanha.

Aqui, meu filho, comunistas falam em igualdade morando em mansões, voando de primeira classe, comendo em restaurantes caros e com rolex no pulso. Lutam contra o capitalismo tirando férias na Disney ou Nova York, e fazendo discursos tomando um scotch 20 anos no baixo Leblon. É lá que fazem defesas apaixonadas da “democracia” de Cuba, onde não tem eleições desde 1959 e nem é permitido existir oposição. É onde empunham suas bandeiras contra a ditadura e defendem a liberdade de expressão, mas reverenciam Maduro, que condena seus opositores às masmorras, retira toda a liberdade de expressão e pune com a morte os manifestantes. Puxa… Que romântico!

Esse foi o legado deixado pela esquerda depois de longos 14 anos.

*Só espero, sinceramente, que estejamos entrando numa nova fase, e que o Brasil comece a sair dessa inversão maldita, passando a trilhar por uma estrada reta e decente, porque nunca antes se viu um país pegando um atalho tão curto para a decadência.*

_Marcelo Rates Quaranta_