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 ... 😁👍
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%.
- 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
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