Bibliotecas: Mercado Futuro - Buscando o ativo (código) da série vigente

 

Mercado Futuro - Buscando o ativo (código) da série vigente:

O código dessa biblioteca tem o objetivo de retornar o valor do ativo vigente para o (mini)índice e (mini)dólar da bolsa brasileira B3.

Autor: Guilherme Mendonca

 

Legal ... mas ainda assim, o código ficaria mais eficiente, e consequentemente mais simples, se você testa-se se o ativo, está ou não dentro do prazo de validade, ou seja, se ele já expirou ou não. Isto seria feito ao observar o valor retornado pela função >>  SymbolInfoInteger(Symbol(), SYMBOL_EXPIRATION_TIME) << mas você teria que modificar ela para >> SymbolInfoInteger(cur_symbol, SYMBOL_EXPIRATION_TIME) << isto da forma como seu código foi implementado, desta forma você não precisaria fazer tantos testes, a fim de verificar o mês de vencimento, pois se o ativo tive expirado, a função ira retorna o valor 0, qualquer outro valor indica que o ativo ainda estaria vigente ... mas mesmo assim gostei da alternativa ... apesar de ter sido mais trabalhosa em termos de testagem ... 😁👍

Mais um detalhe: Troque a chamada TimeLocal() por TimeCurrent() assim a coisa irá ficar bem melhor, já que independerá da hora local, a hora será a que o servidor na B3 estiver informando ... tem outras melhorias que podem ser feitas, mas não foi estragar a surpresa ... 😁👍

 
Daniel Jose #:

Legal ... mas ainda assim, o código ficaria mais eficiente, e consequentemente mais simples, se você testa-se se o ativo, está ou não dentro do prazo de validade, ou seja, se ele já expirou ou não. Isto seria feito ao observar o valor retornado pela função >>  SymbolInfoInteger(Symbol(), SYMBOL_EXPIRATION_TIME) << mas você teria que modificar ela para >> SymbolInfoInteger(cur_symbol, SYMBOL_EXPIRATION_TIME) << isto da forma como seu código foi implementado, desta forma você não precisaria fazer tantos testes, a fim de verificar o mês de vencimento, pois se o ativo tive expirado, a função ira retorna o valor 0, qualquer outro valor indica que o ativo ainda estaria vigente ... mas mesmo assim gostei da alternativa ... apesar de ter sido mais trabalhosa em termos de testagem ... 😁👍

Mais um detalhe: Troque a chamada TimeLocal() por TimeCurrent() assim a coisa irá ficar bem melhor, já que independerá da hora local, a hora será a que o servidor na B3 estiver informando ... tem outras melhorias que podem ser feitas, mas não foi estragar a surpresa ... 😁👍


Olá Daniel, 

Obrigado por responder. Sua opinião sempre é válida. :)

Como eu disse, algumas corretoras no Brasil não retornam valor para a função SYMBOL_EXPIRATION_TIME e por isso meu objetivo foi fazer um código que não dependesse em nada dessa função. Sem contar a diferença das datas entre corretoras.
Exemplo: Corretora A = 2022.10.03 00:00 / Corretora B =  2022.09.30 19:15.  

O uso do TimeCurrent() é válido e pode ser usado também, mas eu quis deixar o código independente do horário do mercado, pois quando o mercado esta fechado, a função TimeCurrent() fica travada no horário da última negociação. Cada uma das funções tem suas vantagens e desvantagens.

É importante notar também que usando o SYMBOL_EXPIRATION_TIME para o dólar. Em caso da data cair em um dia de final de semana, o código pode continuar operando a série que está vencendo na sexta-feira.

Outro ponto para o dólar é o dia 31/12 que é um feriado, ou seja, no dia 30/12 ele continuaria na mesma série sem passar para a próxima.  


Claro que pode existir maneiras mais fáceis de escrever esse código, até mesmo porque não sou programador profissional, mas eu fiz testes exaustivos com esse código e funcionou 100%.  

 
Mesmo antes de testar, mas já lendo os comentários, dá para notar que você dedicou muito tempo e atenção para disponibilizar o código para a comunidade. E por isso já votei total e lhe dou os parabéns antecipados. Vou testar e qualquer coisa retorno aqui. Parabéns mais uma vez.
Razão: