Directamente vindo da <i>pildra</i> e gozando os primeiros minutos de liberdade condicional...
Deixo aqui um artigo que escrevi há uns tempos atrás. É relativamente superficial mas aborda algumas questões pertinentes e dá algumas pistas.
Aqui fica o contributo:
<b>Sistemas por medida... Alta Costura!</b>
<i>Um artigo do tipo «Faça-Você-Mesmo». Requisitos mínimos: PC, Metastock, Conhecimentos-Mínimos-Em-AT e... Paciência-Muita-Paciência.</i>
<b>SISTEMA AUTOMÁTICO/MECÂNICO</b><p>
Um sistema automático/mecânico consiste num conjunto de regras que define a posição em relação a um dado título (posição aberta - longa ou curta - ou fechada). Neste artigo vou falar unicamente de Sistemas do tipo End-Of-Day, isto é, sistemas que levam em consideração o comportamento de cada sessão no seu todo e não expecificamente o que se passa no intraday. Ou seja, num sistema deste tipo só é possível a entrada no fecho de uma sessão (ou na abertura da seguinte) e a respectiva saída, aconteça o que acontecer só será possível na sessão seguinte, em idênticas condições.<br>
Este tipo de Sistema é relativamente fácil de elaborar no Metastock e melhor de que isso... muito fácil de ser testado no mesmo programa, sobre os históricos dos títulos de que dispusermos.<p>
Deste modo, a parte «fácil» é construir a base do Sistema - as regras que definem a entrada e saída. A entrada pode ser muito simplesmente um fecho que «cruze» uma média móvel. Deixo um exemplo:<p>
<i>CROSS(CLOSE,MOV(CLOSE,50,SIMPLE))</i><p>
Neste caso temos como condição de entrada um fecho que cruze (no sentido positivo) a Média Móvel Simples de 50 dias. Mas tão importante como a condição de entrada é a condição de saída. Esta poderia ser simplesmente o inverso, por exemplo, o cruzamento no sentido negativo. Para tal bastava inverter a ordem dos argumentos da função <i>CROSS( )</i> mas para ser mais «criativo» deixo uma totalmente diferente da ordem de entrada:<p>
<i>CLOSE«OPEN AND CLOSE«REF(CLOSE,-1)</i><p>
Ou seja, a saída é dada no dia em que simultaneamente se registam as duas condições: o fecho é inferior à abertura (vela negra) e ainda inferior ao fecho da sessão anterior (fecho em baixa).<p>
<p><i>ver imagem anexo</i><p>
<i>Exemplo do aspecto de um sistema sobre a Sonae. As setas verdes representam a entrada longa no título e as tabuletas vermelhas a respectiva saída. A linha a vermelho em cima representa a evolução do capital ao longo dos trades</i><p>
Logicamente as possibilidades são infinitas dada a parafernália de indicadores e funções matemáticas a que se pode recorrer. O melhor é ter algumas noções de Análise Técnica e alguma prática e habilidade para manipular funções matemáticas antes de começar.<p>
<b>Parametrização/Optimização</b><p>
Esta considero a parte mais difícil... A que exige paciência, muita paciência. E reveste-se de alguns perigos e armadilhas para os quais tentarei aqui alertar.<br>
Depois de se construir a base do sistema sobre algo que consideramos que poderá reverter resultados positivos (um indicador ou um conjunto de indicadores que forneçam sinal, uma tendência, etc...) a parte complexa é «garantir» os resultados - ou melhor, garantir que o sistema obtém com um alto grau de probabilidade uma rendibilidade positiva e não inverso. O processo mais simples é o processo de tentativa erro, introduzindo pequenas alterações que eliminem situações desvantajosas que estejam a comprometer a performance do sistema ou ainda alterando os parâmetros. A título de exemplo para as condições dadas anteriormente, alterar os 50 dias para 40 ou 60 ou ainda alterando ligeiramente a condição de saída.<br>
Neste campo, o Metastock dá uma ajuda ao permitir comparar a performance de vários sistemas sobre o mesmo histórico. Por exemplo, depois de se contruir o sistema, pode-se copiar o mesmo e nesta cópia introduzir algumas alterações com vista a melhorar o sistema. Depois, poderemos testar os dois em simultaneo fornecendo o Metastock um relatorio comparativo e assim poderemos constatar se de facto o sistema melhorou ou não. E podemos fazê-lo com duas, três, quatro, etc, variações do sistema.<p>
<b>Over-fitting</b><p>
O over-fitting consiste em ajustar em demasia o sistema ao conjunto de dados de que dispomos. Este é o grande problema dos Sistemas Automáticos e que é bastante difícil de contornar, uma vez que por vezes o efeito é bastante subtil e noutros casos até pode ser vantojoso. Saber distinguir quando o efeito é perverso ou benéfico e no primeiro caso, mesmo quando ele passa aparentemente despercebido, é para mim uma verdadeira arte.<br>
É óbvio que quanto mais restrito for o conjunto de dados que estudamos ou de que dispomos maior é a probabilidade de o overfitting estar a exercer um efeito perverso sobre o sistema que estamos a desenvolver e o que pode ocorrer é que os resultados «maravilhosos» que estamos a obter só se obtêm precisamente naquela conjunto de dados. E por muito bom que aparentemente seja, é importante recordar que o objectivo do sistema é vir a obter resultados em sessões futuras e não em sessões passadas. Imaginemos um sistema que dispara 10 vezes num perído de um ano e em todas excepto uma resultou numa perda de aproximadamente 1%... Na outra e porque «apanhou» uma subida espetacular do título reverteu num ganho de aproximadamente 30%. Grosso modo, naquele período, o sistema reverteu num ganho de 20%... Será um bom sistema? Claro que este enunciado é muito superficial, mas se me fornecessem apenas estes dados eu diria que não confiaria muito no sistema. Por exemplo, se em alternativa me apresentassem um sistema que sobre um período de 10 anos, dispare 100 vezes (em média, 10 vezes por ano) e que obtenha sucesso em 45% das vezes (tenha acertado em 45 vezes e falhado noutras 55) e que reverta num ganho anual médio de 15% (cerca de 300% ao fim dos 10 anos)... e que por acaso, até se obtenham resultados idênticos num outro título «independente»... Bem, eu confiaria muito mais neste sistema.
<p><i>ver imagem anexo</i><p>
<i>Exemplo de um sistema sobre a Parerede em que praticamente todos os trades são perdedores mas três deles asseguram o sucesso do sistema. Será um sistema seguro? Eficaz?</i><p>
<b>O que se pode fazer para evitar/reduzir o overfitting?</b><p>
Começando pelo mais básico, alargar os períodos de teste e recorrer a históricos o mais abrangentes possíveis. Se possível, com vários anos ou até algumas décadas (no nosso mercado é um pouco difícil e conforme o título teremos que nos contentar no máximo com uma dezena de anos).<br>
De preferência, definir um conjunto de títulos-alvo e testar o sistema nesses títulos. Quanto maior for o número de títulos em que o sistema resulta maior é a sua fiabilidade. No entanto, é extremamente difícil que funcione em todos e ao mesmo tempo reverta ganhos consideráveis. Os títulos têm características técnicas próprias: uns são mais voláteis, outros têm tendências mais definidas, outros são mais lentos nos movimentos, etc... Um sistema generalista, é um sistema de compromisso, não podendo estar optimizado para nenhuma situação ou característica particular e como tal dificilmente gerará resultados surpreendentes. Portanto, e neste sentido, parece-me benéfico um overfitting «controlado», pois pode-se tentar obter de forma deliberada melhores resultados à custa de uma restrição nos títulos a que o sistema é aplicável.<br>
Por fim, deve-se observar se a performance do sistema resulta de uma situação particular (um trade muito proveitoso ou de um limitado período atípico em que se concentram os trades ganhadores) ou de uma vantagem real (os trades ganhadores estão relativamente dispersos e ou 1) estão sistematicamente em maior número ou 2) sistematicamente revertem em ganhos superiores em valor absoluto às perdas embora se encontrem em menor número). Se o sistema gerar poucos trades, torna-se difícil avaliar estes pontos, pelo que pessoalmente prefiro que o sistema gere bastantes trades. Note-se que este ponto se aplica mesmo que se estejam a testar vários títulos - além de a cotação destes poder estar de alguma forma relacionada (por exemplo, a cotação da Sonae e das subsidiárias ou ainda a cotação das várias PT Multimédia), ou podem ter estado sujeitos a um comportamento idêntico durante um determinado período de tempo (por exemplo, o boom das TMT's). Por estes exemplos, penso que fica bastante claro que os resultados obtidos com base em cotações passadas, mesmo sobre <b>vários</b> títulos, podem ser muito traiçoeiros.<p>
<b>Mas então, qual a vantagem de um Sistema Automático?</b><p>
Assim de repente, ocorrem-me duas:<br>
- Uma de carácter «experimental-académico». Testar e confirmar com títulos e dados históricos concretos se um determinado sinal detém uma fiabilidade aceitável (e medir esse grau de fiabilidade) ou ainda se um dado estatístico aparente (do ponto de vista empírico) o é na realidade e se sim, se é economicamente aproveitável (em relação a este ponto lembro que no caso do Metastock e no seu System Tester é possível introduzir os valores correspondentes ao custo de negociação - comissões e despesas inerentes).<br>
- A outra é de carácter «prático». Se o sistema demonstrar ser fiável e rentável poderá ser utilizado como sistema de negociação rígido. Neste caso a vantagem do sistema é a de não estar sujeito à emotividade e sensibilidade de humores a que o investidor, enquanto pessoa, está. O sistema funciona como uma máquina errando apenas onde a sua definição erra. Não se deixa levar por rumores, notícias ou «repentes emocionais». Obviamente e como está tão desprovido de racionalidade como de emotividade, pode deixar escapar excelentes «oportunidades de lucro» ou incorrer em «perdas evidentes», comprando o que não devia. No entanto e relativamente a este último ponto sublinho que é sempre possível introduzir stops de protecção no sistema ou ainda, regras de saída que limitem a perda. Aliás, a regra de saída que deixei de exemplo é uma versão simplificada de uma outra que tenho utilizado nos sistemas que tento desenvolver e com a qual tenho obtido resultados sistematicamente melhores que com os stop-losses fixos, dos quais eu não sou particularmente grande adepto.<p>
Lembro: os resultados do sistema <b>nunca</b> são garantidos, por mais testado que esteja. Nunca é demais lembrar que sempre que o sistema é testado, é sobre um conjunto de situações passadas e não são essas que nos garantem a rentabilidade. A rentabilidade resulta unicamente do comportamente futuro, o qual obviamente nos é desconhecido e não é necessariamente idêntico ao comportamento passado. Neste campo, o máximo que podemos fazer é reduzir o grau de incerteza... E podemos ainda tentar garantir que nunca gerará grandes perdas (o que normalmente implica indirectamente limitar os ganhos).<p>
Portanto e em toque de retirada, se entende que preenche os requisitos mínimos que antes enunciei, arregace as mangas e... mãos à obra!... Um bom sistema pode valer uma fortuna.<p>
Só alguns conselhos:<br>
1) Seja persistente e creativo.<br>
2) Não se iluda com os primeiros resultados animadores... Não é assim tão fácil!...

<br>
3) Não divulgue o sistema. Se o sistema se tornar popular, provavelmente deixará de funcionar.<p>
Este último ponto é muito interessante. Existem exemplos do passado em que sistemas bastante performantes perderam a eficácia à medida que se tornaram mais populares... O que nos leva a um ponto muito interessante: os mercados mudam de atitude ao longo dos tempos!... Mas isto já foge ao tema do artigo. Fiquemos por aqui...<p>
Desejos de um bom trabalho e muito sucesso,<br>
Marco António.