Boa noite amigos!
No último versículo vimos a terceira parte de “A Formal Language for Analyzing Contracts”, hoje vemos a quarta.
Exemplo – Contrato de Opção
Agora, apresentamos outro tipo de contrato financeiro. Nesta opção Americana, o Titular tem o direito de comprar por $20 (o preço de exercício da opção) por ação um lote inteiro (100 ações) da XYZ Corp no ou antes do último dia de negociação de agosto. Esses tipos de contratos são chamados de “derivativos” porque a opção de compra é derivada do direito subjacente (aqui, ações).
callOptionAmerican (rightA=”1 round lot XYZ Corp.”,
rightB=”$2,000/lot”,
time=”end of trading on last trading day of August”) =
when beforeTime(time)
when choiceOf(Holder)
to Holder rightA with to Counterparty rightB
when afterTime(time)
terminate
Pense naquele elfo dançante novamente. (Ao ler ou escrever em nossa linguagem, é importante seguir esses elfos dançarinos. Se os elfos se tornarem irritantes, pense em algum outro personagem ou processo dinâmico para uma metáfora que seja adequada). À medida que avança, ele acorda cláusulas, tornando-as ativas, fazendo com que sejam executadas. Às vezes, pode haver mais de um elfo dançando no código ao mesmo tempo, por exemplo, se mais de uma instrução when é acionada enquanto outra está ativa, mas geralmente precisamos pensar apenas em uma de cada vez.
O contrato começa com duendes dançarinos nas duas cláusulas de nível superior:
when beforeTime(time)
when choiceOf(Holder)
to Holder rightA with to Counterparty rightB
when afterTime(time)
terminate
Essas instruções when estão aguardando seus respectivos eventos. Como os eventos são mutuamente exclusivos (é primeiro beforeTime(time), depois afterTime(time), mas nunca os dois), precisamos nos preocupar apenas com o primeiro a ser executado. Observe que, a menos que seja separado por um then, a ordem das cláusulas no mesmo nível não é importante. O código a seguir é idêntico ao código em nosso exemplo:
when afterTime(time)
terminate
when beforeTime(time)
when choiceOf(Holder)
to Holder rightA with to Counterparty rightB
O beforeTime(time) é imediatamente ativado, de modo que começamos com a(s) cláusula(s) aninhada(s) no nível imediatamente abaixo ativadas também – nesse caso, when choiceOf(Holder).
when beforeTime(time)
when choiceOf(Holder)
to Holder rightA with to Counterparty rightB
when afterTime(time)
terminate
Uma série de whenes no mesmo nível nessa cláusula começam a esperar que algum deles seja acionado. Quando um when recebe um evento lançado abaixo ou nele, a cláusula aninhada abaixo se torna ativa. Em seguida, as cláusulas abaixo ficam ativas e são executadas até os whenes do nível abaixo. Os whenes nesse nível passam de inativos para ativos, agora aguardando a ocorrência de seus eventos.
O when beforeTime(time) se torna ativo quando a própria opção é ativada pela primeira vez e permanece ativo até o time. Ao ser ativo, ele ativa o when choiceOf(Holder). Esse when especifica o evento que dá ao contrato sua natureza como uma opção – a escolha de seu titular para exercê-lo ou não. Se o Titular optar por fazê-lo, o Titular obtém as ações (rightA) da Contraparte (o autor da opção de compra) em troca do dinheiro (rightB). Os duendes dançantes passam da cláusula when para a cláusula swap:
when beforeTime(time)
when choiceOf(Holder)
to Holder rightA with to Counterparty rightB
when afterTime(time)
terminate
Foi esta a quarta parte da obra, amanhã a quinta. Abraços!