1. Crie uma estratégia de trade usando condicionais e variáveis, calculando o lucro no final das 100 iterações ( 100 cotações de preços simuladas). Por exemplo, uma estratégia pode ser: caso o preço diminuir por 2 vezes consecutivas, compre o ativo; caso o preço aumentar por 2 vezes consecutivas, venda o ativo. Reporte o lucro final e o número total de trades realizados. Para simplificar, pode assumir:
  • que uma compra ou uma venda é sempre de uma única ação/ativo;
  • que você sempre tem saldo para comprar 1 ativo independente do valor dele;
  • que uma compra antecede uma venda e vice-versa, ou seja, sempre se alternam (ver exemplo abaixo).
    a) Iteração 1: Cotação: 60 reais.
    b) Iteração 2: Cotação: 57 reais.
    c) Iteração 3: Cotação: 53 reais (caiu 2 vezes). Comprei um ativo a 53 reais.
    d) Iteração 4: Cotação: 59 reais.
    e) Iteração 5: Cotação: 70 reais (subiu 2 vezes). Vendi um ativo a 70 reais; (lucro de 17)
    f) …
    g) Iteração 100: (lucro acumulado final de: 44; trades: 8)
Dica: para esta simulação ser rápida, desabilite a parte gráfica, ou seja, não use comandos do módulo turtle (tartaruga).

Passo 1

O que o enunciado pede e quais dados temos:
  • Pedem que eu crie uma estratégia de trade usando condicionais e variáveis e que eu simule \,100) cotações de preços (ou seja, \,100) iterações).
  • A estratégia a aplicar é: se o preço cair por \,2) vezes consecutivas, compro \,1) ação; se o preço subir por \,2) vezes consecutivas, vendo \,1) ação.
  • Regras adicionais que devemos respeitar (dadas no enunciado):
    • Cada compra ou venda é exatamente de \,1) unidade do ativo.
    • Há sempre saldo suficiente para comprar \,1) ativo.
    • As operações se alternam: compra antecede venda e venda antecede compra — ou seja, não faço duas compras seguidas sem uma venda entre elas.
  • O objetivo final: reportar o lucro final após as \,100) iterações e o número total de trades realizados.
  • Observação que vou seguir: vou contar como “trade” qualquer execução (compra ou venda). O lucro final reportado será o lucro realizado (ou seja, soma das diferenças venda - compra para pares já fechados). Se houver posição aberta ao final das \,100) iterações, indicarei separadamente que ela está em aberto (mas NÃO a incluirei no lucro realizado, a menos que você peça marcar a mercado).

Passo 2

Quais variáveis e estruturas usamos (explicação didática e simples)
  • Vamos precisar destas variáveis principais:
    • \text{price}: preço corrente do ativo em cada iteração.
    • \text{position}: indica se estamos com posição aberta. Vou usar \text{position}=0 para “sem ação” e \text{position}=1 para “possuindo 1 ação”.
    • \text{buy\_price}: armazena o preço em que compramos a ação (válido somente quando \text{position}=1).
    • \text{profit}: acumulador do lucro realizado (começa em \,0)).
    • \text{trades}: contador do número total de trades executados (cada compra ou venda incrementa em \,1)).
    • \text{consec\_down} e \text{consec\_up}: contadores de quedas consecutivas e altas consecutivas. Sempre que o preço atual é menor que o anterior incrementamos \text{consec\_down} e zeramos \text{consec\_up}; e vice-versa.
  • Lógica condicional (explicação didática):
    • Um condicional é uma instrução “se … então …” que toma decisão com base numa condição booleana (verdadeira/falsa). Exemplo simples: “se \text{consec\_down}\ge 2 e \text{position}=0 então comprar”.
    • Em pseudocódigo a compra seria:
      • if \text{consec\_down} \ge 2 and \text{position} = 0 then:
        • \text{buy\_price} \leftarrow \text{price}
        • \text{position} \leftarrow 1
        • \text{trades} \leftarrow \text{trades} + 1
    • A venda análoga:
      • if \text{consec\_up} \ge 2 and \text{position} = 1 then:
        • \text{profit} \leftarrow \text{profit} + (\text{price} - \text{buy\_price})
        • \text{position} \leftarrow 0
        • \text{trades} \leftarrow \text{trades} + 1
  • Por que organizar assim? Porque precisamos acompanhar sequência de movimentos (para detectar dois baixas ou dois altas) e garantir alternância de operações pela variável \text{position}.

Passo 3

Como vou gerar os \,100) preços de forma simples, determinística e fácil de calcular na prova (escolha de método)
  • Para a simulação eu poderia usar um processo aleatório (por exemplo, ruído normal), mas isso deixa o resultado diferente a cada execução e também é mais trabalhoso de calcular manualmente.
  • Em vez disso escolho uma sequência determinística e periódica de variações que deixe o padrão claro e que facilite a contagem de trades manualmente. A sequência de variações que escolho (deltas) é: \{-2,\,-2,\,+4,\,+4\}e essa sequência de deltas se repete até completarmos \,100) preços.
  • Explicação do porquê: esse padrão cria exatamente “duas quedas seguidas” e depois “duas altas seguidas”, o que dispara sempre uma compra seguida de uma venda em cada ciclo. Assim consigo calcular lucro por ciclo e multiplicar pelo número de ciclos — método prático e perfeitamente válido para demonstrar a estratégia.
  • Vou começar o preço inicial em \text{price}_1=100.

Passo 4

Simulação do primeiro ciclo passo a passo (mostrando as variáveis mudando)
  • Iteração \,1): preço \text{price}_1 = 100. Não há movimento anterior, então \text{consec\_up}=0 e \text{consec\_down}=0. \text{position}=0, \text{profit}=0, \text{trades}=0.
  • Aplicando o primeiro delta -2 para obter o preço da iteração \,2):
    • Iteração \,2: \text{price}_2 = 100 + (-2) = 98.
    • Movimento: caiu em relação ao anterior ( 98<100), então \text{consec\_down}=1 e \text{consec\_up}=0.
    • Nenhuma operação porque ainda não chegou a \,2) quedas consecutivas.
  • Aplicando o segundo delta -2:
    • Iteração \,3: \text{price}_3 = 98 + (-2) = 96.
    • Movimento: caiu novamente ( 96<98), então \text{consec\_down}=2, \text{consec\_up}=0.
    • Agora condição de compra satisfeita: \text{consec\_down}\ge 2 e \text{position}=0.
    • Executamos compra:
      • \text{buy\_price} \leftarrow 96.
      • \text{position} \leftarrow 1.
      • \text{trades} \leftarrow 1.
  • Aplicando o terceiro delta +4:
    • Iteração \,4: \text{price}_4 = 96 + 4 = 100.
    • Movimento: subiu ( 100>96), então \text{consec\_up}=1, \text{consec\_down}=0.
    • Ainda não vendemos porque precisamos de \,2) altas consecutivas.
  • Aplicando o quarto delta +4:
    • Iteração \,5: \text{price}_5 = 100 + 4 = 104.
    • Movimento: subiu novamente ( 104>100), então \text{consec\_up}=2.
    • Condição de venda satisfeita: \text{consec\_up}\ge 2 e \text{position}=1.
    • Executamos venda:
      • Lucro dessa operação: \text{price}_5 - \text{buy\_price} = 104 - 96 = 8.
      • \text{profit} \leftarrow 0 + 8 = 8.
      • \text{position} \leftarrow 0.
      • \text{trades} \leftarrow 2.
  • Conclusão do primeiro ciclo: compramos em \,96) e vendemos em \,104) com lucro de \,8) e \,2) trades realizados.

Passo 5

Generalização: lucro por ciclo e periodicidade
  • Observe que a cada repetição completa da sequência de deltas \{-2,-2,+4,+4\} obtemos exatamente:
    • Compra no terceiro preço relativo ao começo do ciclo (preço inicial menos \,4)).
    • Venda duas etapas depois, com preço de venda igual ao preço de compra mais \,8).
  • Portanto o lucro por ciclo é constante e igual a: \text{lucro\_por\_ciclo} = 8.
  • Em termos de iterações: começamos com \,1) preço inicial e cada ciclo consome \,4) deltas, ou seja, \,4) novas cotações. Para formar preços até \,100) iterações, temos \,99) deltas disponíveis (porque o primeiro preço já está dado). Logo o número de ciclos completos é: \text{n\_ciclos} = \left\lfloor \frac{99}{4} \right\rfloor = 24.(Aqui \lfloor\cdot\rfloor é a função “parte inteira”, ou “floor”.)

Passo 6

Cálculo do lucro realizado a partir dos ciclos completos
  • Cada ciclo completo dá \,8) de lucro e gera \,2) trades (uma compra e uma venda).
  • Para \,\text{n\_ciclos}=24) ciclos completos: \text{profit\_from\_full\_cycles} = 24 \times 8 = 192.
\text{trades\_from\_full\_cycles} = 24 \times 2 = 48.

Passo 7

O que sobra até \,100) iterações e se há trades adicionais
  • Usamos \,24 \times 4 = 96) deltas para esses \,24) ciclos, o que junto com o preço inicial gera \,1+96=97) preços. Ainda faltam \,100-97=3) preços (ou seja, \,3) deltas adicionais) para chegar a \,100) iterações.
  • Aplicando os \,3) deltas seguintes (seguindo o padrão -2,-2,+4):
    • O primeiro deles fará o preço cair (contando como \text{consec\_down}=1).
    • O segundo fará uma segunda queda ( \text{consec\_down}=2), o que dispara UMA COMPRA no penúltimo preço (isto é, haverá uma compra extra).
    • O terceiro é um aumento ( \text{consec\_up}=1), mas não chega a duas altas consecutivas, portanto NÃO há venda adicional antes de chegar ao fim das \,100) iterações.
  • Conclusão: há uma compra adicional no final que fica com posição aberta (não é fechada), então ela conta como um trade executado, mas não gera lucro realizado dentro das \,100) iterações.
  • Assim: \text{trades\_extra} = 1 \quad(\text{compra sem venda}).

Passo 8

Resultado final (lucro realizado, número total de trades, posição final)
  • Lucro realizado (apenas com pares compra-venda fechados) é: \text{profit} = \text{profit\_from\_full\_cycles} = 192.
  • Número total de trades executados (contando compras e vendas) é: \text{trades} = \text{trades\_from\_full\_cycles} + \text{trades\_extra} = 48 + 1 = 49.
  • Posição ao final das \,100) iterações:
    • Ficamos com \text{position}=1 (uma ação em carteira) porque a última operação foi uma compra sem venda subsequente.
    • Se você quiser o valor de marcação a mercado dessa posição aberta, posso calcular: a compra extra aconteceu no preço da iteração \,99). Com o padrão usado, esse preço é:
      • O preço final antes do bloco final (chegando no início dos 3 deltas restantes) era P_{97}. Aplicando -2 e -2 obtemos P_{98}=P_{97}-2 e P_{99}=P_{97}-4. Mas como você pediu apenas lucro realizado, eu não incluí mark-to-market no lucro final. Se quiser, calculo o valor não realizado.

Resposta

Lucro realizado final: \,192.
Número total de trades realizados: \,49.

Exercícios relacionados