Pegar data do vencimento de opção para simulação com dados históricos

 

Olá pessoal.

Eu estou usando o seguinto código para pegar a data de vencimento de uma opção

int optionDate = SymbolInfoInteger("PETRB55",SYMBOL_EXPIRATION_TIME);
   Print("Data do vencimento " + (string)optionDate);

Entretanto ao rodar a simulação para esse simbulo a data de vencimento aparece sempre a mesma (19/02/2018), mesmo com o Tick rodando em 2016.

Isso significa que cada simbolo de opção é único? mesmo com vencimento de mais de 2 anos? 

Sendo assim o valor do Strike também é constante?

 
ThadeuMelo:

Olá pessoal.

Eu estou usando o seguinto código para pegar a data de vencimento de uma opção

Entretanto ao rodar a simulação para esse simbulo a data de vencimento aparece sempre a mesma (19/02/2018), mesmo com o Tick rodando em 2016.

Isso significa que cada simbolo de opção é único? mesmo com vencimento de mais de 2 anos? 

Sendo assim o valor do Strike também é constante?

Oi Thadeu.

Acredito que seja porque os símbolos das opções se repetem todos os anos, de modo que opções com mesmo mês de vencimento e mesmo strike poderão ser negociadas com o mesmo símbolo a cada ano.

Por isso, pra você processar dados mais antigos que 1 ano, precisará usar o calendário para determinar a data correta de vencimento, pois a constante SYMBOL_EXPIRATION_DATE retornará sempre a data de vencimento da opção que está sendo negociada atualmente por meio daquele símbolo, em vez da data de vencimento da opção de mesmo símbolo que estava sendo negociada na época do Tick (que é o que você precisa).

A regra é simples: sabemos que na Bovespa as opções vencem sempre na terceira segunda-feira de cada mês e que os meses de janeiro a dezembro são representados pelas letras A a L para as calls e M a X para as puts.

Portanto, para você determinar a data de vencimento correta de uma opção PETRBxx em um Tick antigo, vc deverá considerar a data do Tick e verificar, no calendário, que dia caiu a terceira segunda-feira do mês de fevereiro (B = fevereiro) imediatamente após a data do Tick. Esta será a data correta da opção que foi negociada com esse símbolo naquele Tick antigo.

Quanto à sua última pergunta (se o valor do strike permanece o mesmo todos os anos), eu acredito que sim, mas nesse caso estou me baseando somente na minha observação pessoal de alguns exemplos. Não tenho certeza se isso vale SEMPRE ou se há exceções. Prefiro deixar para alguém que tenha certeza responder esta última pergunta.

Abraços

 
HeraldoAlmeida:

Oi Thadeu.

Acredito que seja porque os símbolos das opções se repetem todos os anos, de modo que opções com mesmo mês de vencimento e mesmo strike poderão ser negociadas com o mesmo símbolo a cada ano.

Por isso, pra você processar dados mais antigos que 1 ano, precisará usar o calendário para determinar a data correta de vencimento, pois a constante SYMBOL_EXPIRATION_DATE retornará sempre a data de vencimento da opção que está sendo negociada atualmente por meio daquele símbolo, em vez da data de vencimento da opção de mesmo símbolo que estava sendo negociada na época do Tick (que é o que você precisa).

A regra é simples: sabemos que na Bovespa as opções vencem sempre na terceira segunda-feira de cada mês e que os meses de janeiro a dezembro são representados pelas letras A a L para as calls e M a X para as puts.

Portanto, para você determinar a data de vencimento correta de uma opção PETRBxx em um Tick antigo, vc deverá considerar a data do Tick e verificar, no calendário, que dia caiu a terceira segunda-feira do mês de fevereiro (B = fevereiro) imediatamente após a data do Tick. Esta será a data correta da opção que foi negociada com esse símbolo naquele Tick antigo.

Quanto à sua última pergunta (se o valor do strike permanece o mesmo todos os anos), eu acredito que sim, mas nesse caso estou me baseando somente na minha observação pessoal de alguns exemplos. Não tenho certeza se isso vale SEMPRE ou se há exceções. Prefiro deixar para alguém que tenha certeza responder esta última pergunta.

Abraços

Complementando: pra você automatizar em MQL5 esse processo de determinação da data de vencimento que descrevi acima, serão úteis para você a estrutura MqlDateTime e as funções TimeToStruct e StructToTime.