Escolar Documentos
Profissional Documentos
Cultura Documentos
SERRA
2023
BRUNO VIANA DE MELLO
SERRA
2023
DECLARAÇÃO DO AUTOR
_____________________________________
(P. T. Barnum)
RESUMO
The modernization, popularization and increased accessibility of the stock market have
attracted more and more people interested in this kind of investment. The automation
of operations on stock exchanges is a facility that many investors have been looking
for. This work shows one of the ways that this automation can be performed. Initially,
operational rules were defined, that is, which price conditions should be considered as
motivating buy and/or sell orders and how risks will be managed in order to define
potential trading moments. The second step was to define which of these potential
operations would actually be carried out. The choice task was then assigned to a set
of six classification algorithms whose attributes are data from technical indicators
based on asset prices and other market information such as trading volume. Programs
were developed to choose the assets to be operated, select the most relevant
attributes, as well as configure the parameters of the classifiers and define the
classification thresholds in an automated way. The results obtained were satisfactory,
demonstrating that the classification system was able to improve the financial result,
performing an efficient selection of the operations to be carried out, bringing a result
superior to that obtained when operating on all candidate occasions.
1 INTRODUÇÃO ............................................................................................. 14
1.1 PROBLEMA ................................................................................................. 16
1.2 JUSTIFICATIVA ........................................................................................... 17
1.3 OBJETIVOS ................................................................................................. 17
1.4 ESTRUTURA DO TRABALHO ..................................................................... 20
2 REFERENCIAL TEÓRICO ........................................................................... 21
2.1 A ANÁLISE DO MERCADO DE AÇÕES ...................................................... 21
2.2 O GRÁFICO DE CANDLESTICK ................................................................. 23
2.3 COMO OPERAR NO MERCADO DE AÇÕES ............................................. 24
2.4 AUTOMATIZAÇÃO DA ANÁLISE TÉCNICA ATRAVÉS DE UM TRADING
dddddiiiiSYSTEM ...................................................................................................... 24
2.5 INDICADORES TÉCNICOS ........................................................................ 27
2.6 A PLATAFORMA METATRADER 5 ............................................................ 29
2.7 APRENDIZAGEM DE MÁQUINA ................................................................ 31
2.7.1 Modelos preditivos .................................................................................... 33
2.7.1.1 Algoritmo knn (k-nearest neighbor) ............................................................. 33
2.7.1.2 Teorema de bayes e classificador naive bayes ............................................ 34
2.7.1.3 Random forest .............................................................................................. 35
2.7.1.4 Extreme gradient boosting (xgboost) ............................................................ 37
2.7.1.5 Support vector machines .............................................................................. 38
2.7.2 Métricas de avaliação de desempenho do modelo ................................. 42
2.7.2.1 Matriz de confusão ....................................................................................... 42
2.7.2.2 Outras métricas ............................................................................................ 43
2.7.2.3 A métrica lucro ............................................................................................. 45
2.7.3 Base de dados desbalanceadas ............................................................... 45
2.7.4 Otimização de hiperparâmetros ................................................................ 46
2.7.5 Pré-processamento de dados ................................................................... 47
3 METODOLOGIA .......................................................................................... 48
3.1 O TRADING SYSTEM .................................................................................. 49
3.1.1 Parametros do indicador de topos e fundos ........................................... 49
3.1.2 Definição dos pontos de entrada e saída das operações ....................... 50
3.1.3 Definição dos parâmetros para operação ................................................ 52
3.2 O MODO DE OPERAÇÃO DO ROBÔ TRADER ........................................... 56
3.2.1 Definição das classes ................................................................................. 57
3.2.2 Definição dos indicadores a serem utilizados como entrada para osaaaaa
aaaaiaiclassificadores ............................................................................................. 58
3.2.3 iaConfiguração dos classificadores – definição dos hiperparâmetros ..... 61
3.2.4 Configuração dos classificadores ............................................................. 62
3.2.5 Operação do robô trader ............................................................................ 64
4 RESULTADOS .............................................................................................. 64
4.1 DEFINIÇÃO DOS LIMIARES ........................................................................ 65
4.2 TESTE DE DESEMPENHO DOS CLASSIFICADORES ............................... 69
4.3 DESEMPENHO DO ROBÔ TRADER EM OPERAÇÕES REAIS .................. 70
5 CONCLUSÕES ............................................................................................. 70
5.1 TRABALHOS FUTUROS .............................................................................. 71
REFERÊNCIAS ............................................................................................. 72
14
1 INTRODUÇÃO
Através dos séculos o homem tem se questionado sobre uma questão tão antiga
quanto a eternidade: “Como é que se adquire riqueza?” (WILDER, 2000). Desde as
primeiras civilizações o ser humano sempre buscou uma maneira de possuir e
acumular os recursos necessários à sua sobrevivência. No mundo moderno, o recurso
tangível que nos permite ter o que comer, onde dormir e o que vestir – o que já pode
ser considerado uma riqueza, sem dúvida é o dinheiro.
Mas de qual maneira que se ganha dinheiro? Bem, a maioria das pessoas trabalha
pelo dinheiro, vendendo suas habilidades laborais e principalmente seu tempo em
troca de um salário. Mas por que alguns homens ficam ricos enquanto outros, que
trabalham tanto ou mais do que eles, não ficam? (WILDER, 2000). A resposta a essa
pergunta não é universal. Uma resposta válida, contudo, consiste na habilidade do
sujeito em ser capaz de inverter os papeis tradicionais na relação homem × dinheiro,
fazendo com que este “trabalhe” para si, ao invés de trabalhar por ele. Uma das
ferramentas que permitem tal façanha é o mercado de capitais com seus produtos e
serviços.
Na era do Big Data, a relação do mercado de capitais com a análise de dados por
computadores, especialmente o aprendizado de máquina, tem se tornado cada vez
mais sólida, tornando esse setor da economia cada vez mais automatizado (SUTTER,
2018). Dentre os exemplos de aplicação na área de finanças que podem ser citados
estão o sistema de detecção de fraude (TUYLS, MAES, VANSCHOENWINKEL,
2018), que para prever possíveis falsificações, combina o fluxo de informações em
uma instituição financeira com fatores de risco; gerenciamento de portifólio com
minimização da intervenção humana, deixando um robô-advisor responsável pelas
sugestões de investimentos (GU; KELLY; XIU, 2018); o trading algoritmo
(PRASSANA; DEVARASAN, 2013), que realiza a predição das oscilações do
mercado, bem como a automatização das negociações nas bolsas de valores e o
trabalho de SUTTER (2018) que empregou técnicas de aprendizado de máquinas com
o objetivo de predizer as oscilações dos preços das ações nas bolsas de valores.
O foco deste trabalho está mais relacionado com os dois últimos citados, utilizando,
contudo, uma abordagem diferente do problema. Ao invés de tentar prever as
oscilações futuras dos preços das ações, para orientar na decisão de compra ou
venda, utiliza-se dados dos preços e dos indicadores da análise técnica para definir
em situações de possibilidade de ganho, se a operação será realizada ou não. Todo
o processo de análise e de execução de ordens é automatizado e baseado em
aprendizagem de máquina.
O foco do trabalho está nas operações de day trade, que são operações iniciadas e
finalizadas no mesmo dia.
1.1 PROBLEMA
Processar todos esses dados e ainda obter sucesso nos investimentos não é uma
tarefa fácil, ainda mais levando-se em conta os fatores psicológicos e muitas vezes a
falta do tempo necessário para realizar as análises. Nesse sentido, a automatização
das operações pode ser uma solução para aqueles que desejam operar no mercado
de ações. É preciso compreender, contudo, que não pode existir uma solução única
para todos os investidores, pois um grande fluxo de negociações em um mesmo
sentido e ao mesmo tempo, alteraria artificialmente a dinâmica natural do mercado,
forçando nos outros participantes uma resposta que não pode ser prevista nos dados
estatísticos (BAZIN, 2017). Por exemplo, para um ativo cuja negociação diária seja
em média R$ 1.000.000,00, um investidor negociando em lotes de R$ 10.000,00
provavelmente não “moveria” os preços de cotação ao negociar. Contudo, caso as
mesmas operações sejam feitas simultaneamente por 100 investidores, os resultados
já seriam bem distintos, de modo que os dados estatísticos das cotações com o robô
de negociação ativo seriam diferentes dos dados com o robô inativo, tirando toda a
previsibilidade de possíveis ganhos a partir de dados históricos. Sendo assim, mesmo
a solução de automatização dos negócios, exige esforço, dedicação e conhecimento
dos interessados, não se configurando, portanto, como uma solução simples.
17
1.2 JUSTIFICATIVA
1.3 OBJETIVOS
Estratégias operacionais podem ser das mais diversas possíveis, contudo geralmente
seguem uma “receitinha de bolo” básica que visa a proteção do capital e dos lucros
obtidos (DEBASTIANI, 2008), o que é conhecido como trading system e será descrito
detalhadamente mais adiante.
Como objetivos específicos, dadas as ressalvas colocadas, tem-se para este trabalho:
Fonte: O Autor.
20
2 REFERENCIAL TEÓRICO
2.1 A ANÁLISE DO MERCADO DE AÇÕES
Já a análise técnica, foca seus estudos no gráfico de preços dos ativos, buscando
padrões e tendências que se repetem ao longo do tempo, independente do balanço
das empresas e da conjuntura econômica e/ou política. Os que utilizam a análise
técnica também se valem de indicadores, que são calculados através dos preços
históricos dos ativos ou qualquer outro dado que se julgue relevante (NORONHA,
2009). No mercado, muitas vezes o analista técnico nem mesmo é considerado um
investidor, mas apenas um trader ou especulador, uma vez que através da análise
técnica é possível obter lucros sem nem mesmo saber em qual empresa ou qual setor
se está investindo, baseando-se apenas no gráfico sem qualquer “compromisso” com
o desenvolvimento da empresa, entrando e saindo do papel simplesmente quando os
requisitos gráficos são atendidos.
Um indicador técnico é uma série de dados que são modificados através de algum
tipo de fórmula. Esses dados podem englobar os preços de abertura, máxima, mínima
ou fechamento de um período de tempo ou mesmo outros tipos de dados como
volume e em alguns casos até as fases da lua! (NORONHA, 2009).
Diante das características de cada tipo de análise, fica evidente que a análise técnica
é a que permite uma automatização mais direta, afinal ela é baseada apenas em
dados dos preços e dos indicadores e não leva em consideração fatores tão
complexos como situação geo política atual e perspectivas futuras do mercado.
Atualmente, o mercado de ações brasileiro é bem acessível para quem deseja operar.
O acesso ao pregão de negociações da BOVESPA, a Bolsa de Valores de São Paulo,
principal bolsa de valores do Brasil, pode ser feito através de bancos ou corretoras e
as ordens de compra e venda são enviadas em sua maioria pela internet através de
uma ferramenta chamada home broker ou plataformas de negociação específicas ou
não de cada instituição. É importante considerar que existe uma série de custos
envolvidos nas operações e o investidor precisa levar isso em conta na hora de fazer
seus investimentos, uma vez que seus ganhos deverão ser superiores aos custos para
que o resultado final seja positivo.
Dentre os ativos que podem ser negociados além das ações no mercado brasileiro,
destacam-se os contratos e minicontratos de índice futuro e de dólar futuro, um tipo
de derivativo que se opera baseado na expectativa para o nível do índice IBOVESPA
no futuro e para o preço do dólar no futuro respectivamente. A vantagem desses ativos
é que suas taxas são menores e normalmente é oferecido uma grande alavancagem
para operá-los, o que permite operações de grande valor, dispondo-se de pouco
capital, o que pode permitir por sua vez, a maximização dos ganhos, mas também das
perdas. A negociação de minicontratos possui algumas particularidades comparando-
se com a negociação de ações. As ações sofrem variação em seu preço em centavos,
sendo geralmente a variação mínima igual 1 centavo. O valor financeiro dessas
variações também é da mesma ordem de grandeza, ou seja, se uma ação subiu 10
centavos e uma pessoa tem 100 dessas ações, então ela ganhou 10 reais. No caso
dos minicontratos de índice, as oscilações no preço não são em centavos, mas sim
em pontos, sendo a oscilação mínima de 5 pontos. Cada ponto corresponde a 20
centavos, dessa forma, uma oscilação de 5 pontos corresponde a uma oscilação de 1
real por contrato. Os minicontratos de dólar também têm suas oscilações medidas em
25
Deve-se observar também que existem quantidades mínimas quanto ao volume dos
ativos negociados. As ações são negociadas pelo lote mínimo e múltiplo de 100
unidades no mercado padrão e pelo lote mínimo de 1 unidade no mercado fracionário.
Os minicontratos são negociados pelo lote mínimo de uma unidade, ao passo que os
contratos integrais são negociados pelo lote mínimo e múltiplo de 5 unidades.
meses, costuma-se usar o gráfico diário. Já para operações de maior prazo, nas quais
se mantém o papel na carteira por vários meses, no chamado position trade, é comum
se utilizar o gráfico semanal ou mensal.
Não existe uma estratégia pronta e nem tão pouco única para se obter lucro no
mercado de ações. Cada papel, em cada período gráfico escolhido para operar,
possui características únicas, que inclusive variam ao longo do tempo, necessitando
de reanálises e ajuste constantes. Mesmo sendo exclusivas para um ativo em
determinado período gráfico, é indispensável que essas estratégias possuam algumas
características em comum (DEBASTIANI, 2008) (NORONHA, 2009):
Além dos dados de preços dos ativos contidos no gráfico, a análise técnica lança mão
também de indicadores técnicos que servem para auxiliar o investidor na tomada de
decisões. Um indicador bem simples é o volume de negócios, que nada mais é do que
a quantidade de operações ou o volume financeiro negociado em determinado
período. Outro indicador muito comum são as médias móveis, que é o valor médio
dos preços nos últimos n períodos observados. Existe um número enorme de
indicadores “consagrados” desenvolvidos por grandes estudiosos do mercado e
utilizados por um amplo número de investidores já há muitas décadas como o índice
de força relativa, MACD e OBV (NORONHA, 2009). Além disso, qualquer operador do
mercado pode desenvolver seu próprio indicador utilizando os dados disponíveis para
realizar o cálculo que desejar.
Um topo é marcado pela cotação máxima do pregão em que foi fechado o negócio
com preço mais elevado, dentro de determinado horizonte de análise, ou seja, um
dia cuja máxima é mais alta que as máximas dos dias adjacentes, tanto os
sucessores quanto os predecessores.
De forma inversa, um fundo é marcado pela cotação mínima do pregão em que foi
fechado o negócio com menor preço dentro de um determinado horizonte de
análise, ou seja, um dia cuja mínima ficou abaixo das mínimas dos dias adjacentes,
tanto os sucessores quanto os predecessores.
Esta definição não é muito precisa no sentido de que não existe um valor ou percentual
estático do qual os preços se afastam para se considerar um topo ou um fundo. Isso
vai depender de qual ativo está sendo analisado, do período gráfico e ainda deve-se
29
levar em conta que esses níveis podem variar ao longo do tempo para um mesmo
ativo. Por exemplo, uma ação que há anos era negociada a valores próximos de
R$ 5,00 com baixa liquidez e agora é negociada por valores próximos a R$ 200,00
com maior liquidez, certamente sofrerá variação em seus níveis definidores de topos
e fundos.
Topos e fundos podem ser muito interessantes para se definir pontos de entrada e de
saída das operações, principalmente por serem regiões de preço adequadas para
colocação do stop loss (proteção do capital), uma vez que é esperado que um fundo
atue como um suporte dos preços, ou seja, um nível de preços do qual o mercado
possa ter dificuldade em praticar preços menores e os topos podem atuar como
resistência de preços – níveis de preços em que o mercado pode apresentar
dificuldades em superar para cima. Dadas estas características, pode-se definir
algumas estratégias de trade baseando-se em topos e fundos, valendo-se da
confirmação ou frustação das expectativas citadas:
Scripts são códigos que são executados uma única vez e são úteis para a extração
de dados e execução de testes ou mesmo para a realização de operações pontuais,
como o fechamento imediato de todas a posições em aberto.
Os robôs traders, também conhecidos como expert advisors (EA) são programas
executados no ambiente do Metatatrader e monitoram o mercado em tempo real,
podendo utilizar dados de indicadores e definindo automaticamente, conforme
programado, se uma operação será realizada ou não.
...
...
...
...
EN xN1 XN2 XNM yN
Fonte: FERRERO (2009)
algoritmos do tipo lazy não constroem explicitamente uma hipótese e necessitam ter
registrado os exemplos de treinamento, pois eles são necessários para predizer o
valor y de um novo exemplo (FERRERO, 2009). Um exemplo de algoritmo eager é a
regressão logística, enquanto um exemplo de algoritmo lazy é o kNN (k-Nearest
Neighbor) ambos detalhados nos itens a seguir.
O algoritmo random forest utiliza uma diversidade de árvores de decisão afim de obter
uma performance maior do que a que seria obtida utilizando apenas uma única árvore,
daí a menção ao termo floresta em seu nome. Esta característica o define como um
método do tipo ensemble learning. O algoritmo constrói um conjunto de árvores de
decisão na etapa de treinamento e retorna como resultado, na etapa de predição, a
média do resultado de múltiplas árvores (HO, 1998) (HO, 1995).
O objetivo de uma árvore de decisão é criar um modelo capaz de predizer uma variável
alvo aprendendo regras inferidas do conjunto de dados.
A Figura 7 ilustra a ideia de uma floresta. Cada uma das árvores é treinada com um
subconjunto dos dados na etapa de treinamento. Na etapa de predição, o algoritmo
agrega os resultados através de uma função denominada discriminator. No exemplo
dado, trata-se do somatório das probabilidades.
37
Extreme Gradient Boosting (XGBoost é uma biblioteca de código aberto que fornece
uma implementação eficiente e eficaz do algoritmo de aumento de gradiente (Gradient
Boosting). Gradient Boosting é uma classe com um conjunto de algoritmos de
aprendizagem de máquina que podem ser usados para problemas de classificação ou
regressão.
A próxima figura ilustra um exemplo de hiperplano ótimo. Nos pontos mais extremos
das categorias, ou seja, nas “bordas”, passam duas retas, uma para cada categoria.
Outro aspecto importante sobre SVM é que apesar de ser um classificador linear de
origem, ele é aplicável à padrões de dados que não sejam linearmente separáveis. O
padrão da Figura 10 visivelmente não pode ser separado por uma reta. Para lidar com
essa situação existe um artifício matemático denominado de kernel trick
(SCHÖLKOPF; SMOLA, 2002) que consiste em aplicar uma transformação nos dados
de forma a levar os dados a um espaço dimensional superior. Essa transformação
nada mais é do que a aplicação de uma kernel function sobre os dados, sendo as
mais populares: Polinomial, Gaussiana e Radial Basis Function (JUNIOR, 2018).
variáveis preditoras. No caso de apenas uma variável preditora xi, tem-se a regressão
logística simples cujo modelo é definido por (1):
Onde:
E(Yi/xi) é o valor esperado de Y dado o valor de x;
Yi é uma variável dicotômica, assumindo os valores 0 ou 1;
β0 e β1 são os coeficientes de regressão a serem estimados pelo método da máxima
verossimilhança;
xi é o valor observado da variável x;
A função p(xi) pode ser transformada usando a transformação logística na forma linear
temos (2):
𝑝(𝑥) (2)
g(x) = ln [1−𝑝(𝑥)] = β0 + β1x
A variável Yi pode ser expressa como Yi = p (xi) + εi, onde o termo εi é o erro aleatório
do modelo e representa a diferença entre o valor observado de Yi e o valor esperado
condicionado de Yi dado xi. Enquanto nos modelos de regressão linear os erros devem
seguir uma distribuição normal com média 0 e variância constante, para um dado valor
de x, os erros do modelo de regressão logística condicionados a X = x i, seguem uma
distribuição de Bernoulli com média 0 e variância p(xi)(1 – p(xi)).
A matriz de confusão dá uma visão direta e objetiva dos erros e acertos do modelo de
classificação em relação aos valores reais. Na diagonal principal tem-se as
classificações que foram feitas corretamente, ao passo que na diagonal oposta
constam as classificações incorretas. As classificações corretas podem ser
Verdadeiros Positivos (TP) e Verdadeiros Negativos (TN), enquanto as classificações
incorretas são denominadas Falso Positivo (FP) e Falso Negativo (FN).
43
Fonte: O AUTOR.
Fonte: O AUTOR.
𝑇𝑃 (4)
Precisão =
𝑇𝑃 + 𝐹𝑃
16
Para o exemplo da seção anterior, a precisão seria igual a = 0,73 ou 73%.
16+6
𝑇𝑃 + 𝑇𝑁 (5)
Acurácia =
𝑇𝑃 + 𝐹𝑃 + 𝑇𝑁 + 𝐹𝑁
16+12
Para o exemplo da seção anterior a acurácia seria igual a 16+6+12+4 = 0,74 ou 74%.
𝑇𝑃 (6)
Sensibilidade =
𝑇𝑃 + 𝐹𝑁
Para este trabalho específico, considerando que o maior objetivo dos modelos é
escolher as operações que sejam lucrativas, adotou-se como métrica principal o lucro
obtido nas operações selecionadas por eles. O resultado das operações pode variar
muito e nem sempre o modelo que apresenta melhor resultado de acurácia, precisão
ou sensibilidade, é o modelo capaz de escolher as operações mais lucrativas. Dessa
forma, avalia-se o resultado das operações escolhidas por cada modelo e seleciona-
se aquele que escolheu as que proporcionaram melhor resultado financeiro.
No caso de dados extraídos através do Metatrader, quando este está vinculado à uma
corretora cuja base de dados é confiável, este tipo de problema é praticamente
inexistente. Contudo, uma situação que demanda atenção é a grande variação da
ordem de grandeza dos atributos utilizados. Enquanto os valores de alguns atributos
são da ordem de 10-1 outros são da ordem de 106 por exemplo. Isso pode fazer com
que os modelos de predição priorizem os atributo de maior ordem de grandeza, em
detrimento aos demais.
Uma solução para este problema é a padronização dos dados e uma ferramenta que
traz essa solução é a classe de StandardScaler, em python. O StandardScaler realiza
uma transformação nos dados fazendo com que sejam representados em uma
distribuição Gaussiana, ou seja, com média zero e variância unitária. O algoritmo faz
isso removendo de cada valor de um determinado atributo a média de todos os valores
do mesmo atributo e dividindo o resultado pelo desvio padrão (SCIKIT-LEARN, 2022).
48
3 METODOLOGIA
Nos itens a seguir será demonstrada a metodologia utilizada em cada uma das etapas
de desenvolvimento do trabalho.
Conforme já mencionado no item 1.4, um bom trading system deve ter primeiramente
uma definição clara e objetiva dos pontos de entrada e de saída de uma operação.
Como neste trabalho estes pontos são definidos pelo indicador de topos e fundos, foi
necessário primeiramente definir este indicador.
Para este indicador, portanto, a única definição que deve ser feita é o fator a ser
utilizado conforme descrito no passo 3. Ressalta-se que todo o processo de cálculo é
feito em tempo real e de maneira nativa no Metatrader, a partir do indicador de topos
e fundos que contém todas as definições e fórmulas necessárias.
O indicador também irá sinalizar através de uma flag qual candle formou um topo ou
um fundo bem como qual candle superou para cima o preço do último topo ou superou
para baixo o preço do último fundo (rompimento do último topo ou fundo). Esta
informação é fundamental para o funcionamento do expert advisor.
- Opera-se vendido:
2 – No preço de abertura do candle posterior ao que rompeu para baixo o último fundo,
com o stop de perda posicionado um tick acima da máxima do candle que realizou o
51
- Opera-se comprado:
2 – No preço de abertura do candle posterior ao que rompeu para cima o último topo,
com o stop de perda posicionado um tick abaixo da mínima do candle que realizou o
rompimento do topo e o stop de ganho no preço de entrada mais o preço de stop de
perda multiplicado por um fator de ganho maior que 1.
Topos e fundos são tratados como um possível ponto de reversão de uma tendência.
Quando é formado um fundo, é esperado que os preços passem a subir por um
determinado período, ao passo que quando é formado um topo, espera-se por uma
queda momentânea nos preços. Por esta razão, um stop de perda pode ser colocado
um pouco abaixo do fundo para operações de compra e um pouco acima do topo para
operações de venda, uma vez que há expectativa de que os preços não atingirão
esses níveis e no caso de atingirem, considera-se como frustrada a operação
realizada, que deve ser finalizada imediatamente como medida de proteção do capital.
Esta finalização imediata da operação é operacionalizada pelo stop loss.
Como medida de proteção do lucro, caso seja formado um fundo acima do fundo em
que se encontra o stop de perda de uma operação de compra, este stop é
imediatamente movido para um tick abaixo deste novo fundo. Procedimento similar a
este é realizado para mover stops de venda para um tick acima de um eventual topo
abaixo do stop anterior.
Em suma, cada operação aberta terá dois preços alvos distintos. Um preço para
encerrar a operação caso o mercado se movimente para o sentido desejado,
determinado pelo preço de entrada mais ou menos o risco assumido multiplicado pelo
52
fator de ganho - stop gain ou take profit. E um preço para encerrar a operação caso
essa se desenvolva no sentido contrário ao planejado, o já mencionado anteriormente
stop loss.
Para se definir qual ativo operar, qual será o período gráfico, qual será o fator do
indicador topos e fundos e qual será o fator de ganho, é necessário saber qual
configuração pode ser mais lucrativa. Apesar de a decisão de operar ou não ser
tomada pelo algoritmo de classificação, é mais viável submeter aos classificadores o
set que apresenta naturalmente a melhor relação risco retorno, deixando “as coisas
mais fáceis” para eles. Nesse sentido, foi desenvolvido um script do Metatrader que
retorna em um arquivo csv o resultado que seria obtido caso fossem realizadas
operações em todos os momentos possíveis citados no item 2.3 em um dado período
gráfico adotando-se vários fatores para o indicador de topos e fundos e vários fatores
de ganho. São calculados os resultados no curto, médio e longo prazos com intuito de
se avaliar a consistência desses resultados. Os dados então são classificados em
ordem decrescente do ganho total afim de se avaliar a melhor opção.
esses ganhos, além disso, nem todos os ativos têm liquidez suficiente a ponto de
permitir operar grandes lotes sem que isso modifique os preços alvo de entrada e
saída na operação.
Fonte: O AUTOR
55
Fonte: O AUTOR
Fonte: O AUTOR
Esta comparação serve para ilustrar que nem todos os ativos apresentam bons
desempenhos e sets diferentes de um mesmo ativo podem apresentar resultados bem
56
Em se tratando de operações daytrade, este tipo de análise deve ser concluída pelo
trader o mais rápido possível para não perder o timing da operação, pois uma demora
na inicialização da operação pode inviabilizá-la, uma vez que os preços podem atingir
um nível em que não é mais vantajoso correr o risco. Sendo assim, na prática, a sua
análise é bem superficial e mais qualitativa do que quantitativa. Quanto mais dados o
trader analisar para validar sua operação ou não, mais consistentes podem ser suas
operações. Por esse motivo é que geralmente este profissional se utiliza de várias
telas simultaneamente, nas quais pode acompanhar tudo aquilo que julgar relevante.
Como a subjetividade é muito grande, é necessário longo tempo de experiência até
se adquirir o “feeling” do mercado.
57
Sendo assim, nos momentos definidos como sendo pontos de entrada no item 3.1.2,
são extraídos os dados dos indicadores e enviados para processamento. Este
processamento, foi definido como sendo uma tarefa de classificação para definir se a
operação será realizada ou não assim como é feito pelo trader. São treinados um total
de 6 algoritmos de classificação: Regressão Logística; Random Forest; KNN; SVM;
Naive Bayes e XGBoost. Posteriormente é feita a seleção dos que serão utilizados em
cada situação, medindo-se qual combinação gera melhor resultado financeiro.
Em uma primeira abordagem, foi definido como classe 1, ou seja, operações que
devem ser realizadas, apenas aquelas que atingiam o preço de stop gain, em outras
palavras, apenas aquelas que geravam o lucro máximo. Esta regra, no entanto,
provocou um grande desequilíbrio entre a quantidade de classes 0 e classe 1, uma
vez que em boa parte dos casos, mesmo as operações lucrativas não atingem o preço
alvo e são encerradas pelo stop de perda modificado para proteção do lucro ou em
razão do fechamento do pregão – já que se trata de operações de daytrade. Esse
desequilíbrio acaba gerando uma “tendência” nos classificadores de escolher a classe
majoritária, além de essa abordagem não ser a mais adequada levando-se em conta
os movimentos normais do mercado.
É importante considerar que as operações são realizadas baseadas em uma
expectativa de ganho no futuro e a única maneira de se fazer essa previsão na
abordagem da análise técnica adotada neste trabalho, é através de dados do
58
passado. Não se trata de tentar prever o futuro, mas sim de tentar rastrear o caminho
que os preços estão seguindo com base nos indicadores. Contudo, é da natureza do
mercado, alterar seu fluxo com muita frequência no curto prazo e uma “virada de fluxo”
no futuro não pode ser prevista com dados do passado, ainda mais levando-se em
conta que uma operação pode durar vários minutos e até mesmo horas antes de ser
finalizada. Nesse sentido, valendo-se da experiência do autor deste TCC em
operações e realizando-se vários testes práticos e experimentais, definiu-se que a
classe 1 será para além das operações que atingem o stop de ganho:
- Aquelas que tem ao menos um ajuste no stop loss, mesmo que resultem em prejuízo;
- Aquelas que em algum momento atingem 70% do preço alvo para o stop gain,
mesmo que finalizadas com prejuízo.
Estas definições foram feitas buscando permitir que de alguma forma o robô trader
pudesse identificar a direção momentânea do fluxo do mercado e tomar decisões mais
parecidas com as que seriam tomadas por um operador humano.
Por eliminação, todas as outras operações que não atingem os critérios para ser
definidas como classe 1, são denominadas como classe 0.
entradas diferentes para cada tipo de operação possível de ser realizada conforme
descrito no item 3.1.2. Ou seja, para cada evento motivador de uma operação, serão
utilizados dados e classificadores distintos. Ou seja, os atributos serão diferentes para
formação de fundo e topo bem como para cada tipo de rompimento destes. Mais uma
vez, de acordo com resultados práticos, o número ideal de entradas para os
classificadores ficou definido como sendo 80. A seleção desses indicadores se dá da
seguinte maneira:
O objetivo desta etapa é encontrar a maneira mais generalizada possível de uso dos
classificadores. Os dados do mercado serão processados por todos os 6
classificadores mencionados no item 3.2, contudo, é preciso se estabelecer um limiar
do número de retornos de classe 1 para se decidir se a operação será realizada ou
não. A solução encontrada para decidir este limiar foi a técnica de validação cruzada,
na qual a base de dados é dividida em n partes, das quais n-1 partes são utilizadas
para treinamento e uma parte é utilizada para teste. Esse processo é repetido por n
vezes, deslocando-se os dados de treinamento e teste. Por exemplo, para um valor
de n igual a 10, inicia-se utilizando-se as partes de 2 a 10 como treinamento e a parte
1 como teste. Na próxima execução, o treinamento é feito com a parte 1 e as partes
de 3 a 10, sendo a parte 2 utilizada como teste e assim por diante. Destaca-se que os
dados gerais são inicialmente divididos por tipo de evento (topo, fundo e rompimentos)
e passam por balanceamento e padronização de modo que a definição do limiar se
dá para cada um dos eventos. Em cada um dos testes realizados é registrado o limiar
que possibilitou o melhor lucro nos dados testados, conforme descrito no item 2.7.2.3,
pela métrica do lucro, ou seja, verifica-se qual limiar proporcionou o maior lucro. Em
seguida calcula-se a moda dos valores registrados. Caso essa moda seja um valor de
limiar que ocorreu pelo menos na metade dos testes, então utiliza-se este valor, caso
contrário calcula-se a média aritmética entre os limiares dos testes para ser utilizada.
Essa série de regras se mostrou necessária devido ser comum em alguns casos a
grande variância entre os valores dos limiares, tornando difícil determinar qual deve
ser o melhor para ser utilizado nas operações reais.
Definido o limiar, é então realizada uma simulação para visualização dos resultados e
avaliação do desempenho dos classificadores. Essa simulação consiste em treinar os
classificadores baseando-se na mesma divisão por n partes citada anteriormente,
sendo n-1 partes para treinamento e uma parte – correspondente aos últimos registros
de dados na ordem cronológica, para teste. Nesse teste utiliza-se o limiar calculado e
se avalia o resultado obtido. Na avaliação do desempenho, tão importante quanto a
63
Fonte: O AUTOR
No retorno do script, pode-se ver cada um dos limiares calculados para cada evento:
formação de fundo (thereshold_bottom), formação de topo (thereshod_top),
rompimento de topo (thereshold_top) e rompimento de fundo (thereshold_bd). É
possível visualizar também a variação no número de operações e no resultado
financeiro em cada caso.
4 RESULTADOS
Para realizar o teste de desempenho do robô trader foi utilizado o ativo GOLL4,
timeframe de 15 minutos, fator de topo e fundo 1,5 e fator de ganho 3. A seleção deste
ativo e destas configurações se deu conforme os critérios descritos no item 3.1.3. O
Metatrader já possui uma aplicação nativa para testes de estratégias de negócios,
contudo, essa ferramenta não é compatível com o uso de conexões por sockets como
é o caso neste trabalho. Por este motivo, para a verificação dos resultados foi
desenvolvido um script em Python para processamento dos dados de mercado
posteriores aos utilizados no treinamento dos classificadores. O retorno dos
classificadores foi então comparado com o limiar em cada caso para determinar se a
operação seria realizada ou não e consequentemente, se seu resultado financeiro
seria considerado.
65
Fonte: O AUTOR
operação, todas elas devem ser realizadas, sem nenhuma seleção. O resultado mais
significativo foi nas operações em formação de fundos em que o total de operações
foi reduzido de 2.243 para 1.163 e resultado financeiro evolui de R$ -8,51 (por unidade
de ação negociada em todo o período) para R$ 2,13. O resultado geral variou de
R$ 220,81 para R$ 239,57, representando um acréscimo no ganho de 8,5% caso se
realizasse todas as operações possíveis. Por mais que este ganho no resultado
financeiro possa parecer pouco, é importante destacar que o total de operações foi
reduzido de 7.130 para 5.758, ou seja 19,25% a menos, o que pode representar uma
redução muito significativa nos custos operacionais. Infelizmente, calcular
precisamente o ganho com a redução no número de operações é uma tarefa muito
complexa, pois depende do número de lotes que serão negociados por operação, as
taxas da corretora, as recolocações de ordem, dentre outros fatores. Contudo,
resultados operacionais reais em operações de daytrade com ações realizadas pelo
autor permitem determinar que os custos consomem algo em torno de 40% dos
ganhos.
Figura 21 - Listas com os melhores limiares para cada evento em cada teste
Fonte: O AUTOR
Figura 22 - Matrizes de confusão referentes à segunda iteração no loop de teste do melhor limiar para
o evento formação de topo. (a) Regressão Logística, (b) Random Forest, (c) kNN, (d) SVM, (e) Naive
Bayes, (f) XGBoost considerando a precisão.
Fonte: O AUTOR
68
Figura 23 - Matrizes de confusão referentes à segunda iteração no loop de teste do melhor limiar para
o evento rompimento de fundo. (a) Regressão Logística, (b) Random Forest, (c) kNN, (d) SVM, (e)
Naive Bayes, (f) XGBoost considerando a precisão.
Fonte: O AUTOR
69
Concluída a etapa de cálculo dos limiares, foi gerado um arquivo contendo os dados
mais recentes e ainda não processados pelos classificadores compreendendo o
período de 18/11/22 a 13/12/22. Estes dados foram processados em um script no qual
os classificadores salvos na etapa anterior foram carregados juntamente com os
valores dos limiares. Foram tratadas somente as operações de formação fundo e
rompimento de topo, já que para os outros eventos, o limiar calculado foi zero. Na
Figura 24 encontram-se os dados de retorno do script.
Fonte: O AUTOR
O número total de operações no período foi reduzido de 150 para 116, uma diminuição
de 23%. O resultado final geral permaneceu negativo, havendo, contudo, uma redução
nas perdas de R$ -3,09 para R$ -1,50 por unidade de ação negociada.
70
Apesar de os testes realizados com dados passados servirem como bons medidores
do desempenho do robô trader, o mais adequado seria obter resultados de operações
realizadas no mercado em tempo real, onde são incluídos os custos operacionais e
variações do ganho esperado por problemas de atrasos em cotações ou recolocação
de ordens, mesmo que essas variáveis não possam ser controladas pelo algoritmo
desenvolvido, mas seriam importantes para se avaliar a viabilidade da implantação do
sistema automatizado de negociação. Porém, para se ter um sistema confiável que
não comprometa o desempenho do robô trader é necessário um computador de bom
desempenho (mínimo 12 GB de memória ram, processador de 4 núcleos com clock
de 2 GHz e drive SSD – dados empíricos levantados nos testes), além de uma rede
elétrica e conexão com a internet confiáveis e baixa latência com o servidor da
corretora. A maneira mais simples de se atender a todos esses requisitos é a locação
de uma máquina virtual junto a servidores de boa reputação como Microsoft Azure®
ou Google Clouds®. O custo médio para esse serviço em levantamento no ano de
2022 fica em torno de R$ 1.100,00 mensais. Acrescenta-se ainda a necessidade de
um saldo na conta da corretora para a realização das operações, que devido a
exigências de garantias e provisões de perdas – afinal, nem todas as operações
apresentam resultado positivo – seja de pelo menos R$ 5.000,00. Diante do exposto,
pela indisponibilidade do valor a ser investido na execução deste trabalho, não estão
disponíveis dados reais do mercado para o sistema de negociação aqui discutido.
5 CONCLUSÕES
REFERÊNCIAS
ÁVILA, Leandro. Como investir na bolsa – Análise técnica para investir no médio
e longo prazo. Editora Clube dos poupadores, 2018. ISBN 9788590724117.
BAZIN, Décio. Faça uma fortuna com ações, antes que seja tarde. Profissional
do mercado mostra o caminho. 8ª Edição – São Paulo: Editora CLA, 2017.
GU, S.; KELLY, B. T.; XIU, D. Empirical asset pricing via machine learning. 2018.
74
HO, T. K. The random subspace method for constructing decision forests. IEEE
Transactions on Pattern Analysis and Machine Intelligence, v. 20, 1998. ISSN
01628828.
LEMOS, F. Análise técnica dos mercados financeiros. Saraiva Editora, 2015. ISBN
9788502637825.
VILAR, João. Fundamentos de Data Science – Machine Learning (Parte 1). JOAO
VILAR TECHNOLOGY. 2017. Disponível
em: <https://jvilar.wordpress.com/2017/01/29/fundamentos-de-data-science-
machinelearning-parte-1/>. Acesso em: 24 mar. 2022.
ZHENG, Huiting; YUAN, Jiabin; CHEN, Long. Short-term load forecasting using
EMDLSTM neural networks with a Xgboost algorithm for feature importance
evaluation. Energies, 2017.