Forum Think Finance - Bolsa e Forex

Geral => Comunidade de Traders => Tópico iniciado por: Thorn Gilts em 2014-01-15 01:29:22

Título: Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 01:29:22
Consegui finalmente terminar o meu algoritmo de analise técnica e fundamental de acções.

O algo já estava feito e já há muito funciona em carteira real, mas tinha de lançar os tickers um a um para descobrir as melhores acções. Agora consigo analisar as acções a todas a uma media de 20 por minuto. No fim escolho as melhores e imprimo os research apenas dessas.

No entanto, ainda esta lento, porque isto signfica aproximadamente 50 minutos de sistema a correr para analise todas estas acções.

Para já isto não esta mal, porque é uma analise a ser feita EOD ou no inicio do dia.

Mas como vou introduzir, em breve, outro algoritmo, este de negociação, precisava que a analise fosse feita mais rapidamente.

Uma vez que a analise fundamental e até a técnica nao se alteram em minutos, corria isto no inicio do dia e depois o sistema negociava apenas em função do preço... acontece que o rating que é atribuído, tem em consideração, por exemplo, a distância do preço para o fair value, assim como tem em consideração o preço objectivo em termos técnicos. Ora, uma alteração do preço, influencia também o rating da acçao e podemos ter uma que va para a frente e outra para tras. Isto torna mais complicado estancar a analise e depois fazer negociar sobre o preço apenas... seria como uma orquestra ser constituída so por um violino (pode tocar bem, mas não é uma orquestra).

Alguém já resolveu algum problema deste género? Como?
Título: Re:Algortimo de analise de acções
Enviado por: Zel em 2014-01-15 01:55:55
fizeste algum backtesting? que tipo de retornos esperas? nunca fiz nada assim
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 02:03:28
fizeste algum backtesting? que tipo de retornos esperas? nunca fiz nada assim

Sim, backtesting e trading real (faz um ano nos proximos dias. No entanto o sistema apenas fazia (até agora) research... dizia quais as acções a comprar, mas não dava sinais de saida (ou melhor, dava o preço alvo)... acontece que eu sai sempre (sempre) antes do preço alvo.

Os retornos são na ordem dos 40% anuais (mas o mercado também subiu muito nestes periodo) e o drawdown é muito pequeno (assim como o sharpe ratio é bom). a carteira é bastante diversificada. Não calculei os retornos em excesso (exactamente para tirar o efeito do mercado), quando tiver tempo faço isso.

Mas o que eu quero agora é realmente arranjar forma de acelerar o processo - Sem dividir o sistema por vários de computadores (pois essa é uma solução).

Título: Re:Algortimo de analise de acções
Enviado por: Zenith em 2014-01-15 10:41:07
A complexidade do algoritmo é que torna o processo lento?
Se for isso só conhecendo o algoritmo é que será possível dar sugestões para acelerar.
Título: Re:Algortimo de analise de acções
Enviado por: muze em 2014-01-15 11:37:26
não sei se percebi bem, mas parece-me que tens de calcular determinadas variáveis entre o final do dia e o inicio do dia, que depois serão utilizadas durante o dia quando estiveres a calcular os sinais

geralmente o que torna as os programas lentos são os ciclos (while e for) uns dentro dos outros...

uma ideia pode ser colocares logs para veres exactamente quais são as partes do programa que fazem demorar a maior parte desses 50 minutos.
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 14:02:58
não sei se percebi bem, mas parece-me que tens de calcular determinadas variáveis entre o final do dia e o inicio do dia, que depois serão utilizadas durante o dia quando estiveres a calcular os sinais

geralmente o que torna as os programas lentos são os ciclos (while e for) uns dentro dos outros...

uma ideia pode ser colocares logs para veres exactamente quais são as partes do programa que fazem demorar a maior parte desses 50 minutos.

Ja fiz isso tudo e isto não funciona com loops, whiles e for... nem com call...

Para funcionar bem e matar a memoria, dou saltos.. chamando procedimentos a cada segundo... ou seja, ele acaba o procedimento... e depois passado um segundo chama-o de novo.

De salientar que já fiz N programas deste genero altamente maximizados, e com base de dados e mais complexo do que este... a unica questão é que acabam por trabalhar com poucas acções, pelo que os dados eram sempre iguais, variando apenas o preço.

Aqui trabalhar com 3000 acoes e milhares de dados.

Eu encontrei uma solução mais ao menos.. mas nao a ideal... que foi partir os dados.
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 14:10:39
A complexidade do algoritmo é que torna o processo lento?
Se for isso só conhecendo o algoritmo é que será possível dar sugestões para acelerar.

Nao, é mesmo as limitações do sistema... signfica que não consigo processar tanta informação ao mesmo tempo.
Título: Re:Algortimo de analise de acções
Enviado por: vdap em 2014-01-15 15:52:22
Bem,

Isso pode ser muita coisa que esteja a comer memória ao PC, mas se não tens ciclos não devia ser lento. Existe alguma coisa aí pelo meio que  deve ser redundante, ou seja, formulas que precisam do seu resultado para obter o resultado, formando aí ciclos infinitos.(não sei se é apenas sugestão).

A única forma de ultrapassares as limitações é migrares de software, ou metastock que é muito simples de programar ou MetaTrader. Para programas de bolsa senão podes ser migrar para uma linguagem que te sintas à vontade.

Não sei que tipo de cálculos estás a utilizar, mas se não meter exponenciais, integrais,nem derivadas, e o histórico for relativamente pequeno, tens que ter aí redundância de formulas.

Um abraço,
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 18:28:18
Não cria ciclos infinitos ou redundancias, pois cada calculo termina ao fim de 3 segundos aproximadamente.

O problema é que ele faz N calculos seguidos... estou convencido se der mais tempo entre procedimentos, ele funciona.

Este programa esta ligado a outros 3, um deles que é o feed de dados... também pode ser por ai.

Eu já arranjei uma solucao mas que ainda nao me satifaz.

Amanha vou aumentar o tempo de ele demora a passar para outro ciclo... estava em 1 segundo, vou aumentar... Quando digo passar, é matar o actual e passado x segundos, começar de novo.

Eventualemente posso criar uma rotina que chegnado a um determinado limite, o sistema pare uns segundos para limpar a memoria e afins...

No computador de casa anda um pouco mais lento (porque esta cheio de porcarias e o processador é ligeiramente inferior a este).

Amanho testo melhor, porque agora esta a correr.
Título: Re:Algortimo de analise de acções
Enviado por: Zenith em 2014-01-15 20:31:17
Se os 3 segundos correspondem ao tempo de análise de uma acção e 50 minutos ao de 1000, então o tempo cresce proporcionalmente e não há necessiade de optimizar o tamnaho dos blocos. è um pouco estranho prque se vai buscar informação a outro lado e depois processa-a deveria perder menos tempo com acessos se fosse buscar informação bloco a bloco em vez de ser uma de cada vez (para blocos muito grandes poderia depois começar a piorar devido a limitações de memória).
De qq forma tens de ver o que é mais critico na execução: o processo de importar os preços; o algoritmo de cáculo; o processo de por os resultados cá para fora.

Sem mexer no sistema e se a importação de preços não tiver impacto na excução total, então para negociaçao uma solução é definir um intervalo de preços dentro do qual os cálulos não precisam de ser actualizados e o tempo médio para uma acção sair fora desse intervalo, e só actualizar o status da acção se sair fora desse intervalo.
Se por exemplo uma flutuação de +-1% não afectar as conclusões e verificares que o tempo médio para uma acção flutua mais  que +- 1% for de 30min, significa que durante uma hora num universo de 3000 acções serão necessárias umas 100 actualizações por minuto o que excede a capacidade. Se o intervalode  confiança for +-2% o nº médio de acções que necessitam actualização reduz-se drasticamente e talvez já dê.
Claro que se o problema estiver na importação dos dados isso não adianta nada.
Título: Re:Algortimo de analise de acções
Enviado por: muze em 2014-01-15 21:08:45
Ok,

o tempo está a ser perdido realmente em tempo de processamento ou em chamadas pela rede?

podes experimentar criar threads que corram vários em simultâneo e ver qual é o ponto ideal, se o problema for na rede provavelmente vai melhorar se tiveres bastantes, senão o ideal deve ser ter tantas como o número de cores do processado
Título: Re:Algortimo de analise de acções
Enviado por: joaogam em 2014-01-15 21:17:51
Bom, já que ninguém pergunta pergunto eu ::) Então e estás a pensar disponibilizar a parte de análise do algoritmo? 
Título: Re:Algortimo de analise de acções
Enviado por: rs_trader em 2014-01-15 21:37:24
Isso parece estar linkado à Bloomberg... não sei se será preciso algo assim tão elaborado (a nível de interações no excel) se for o caso.
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 22:07:47
Se os 3 segundos correspondem ao tempo de análise de uma acção e 50 minutos ao de 1000, então o tempo cresce proporcionalmente e não há necessiade de optimizar o tamnaho dos blocos. è um pouco estranho prque se vai buscar informação a outro lado e depois processa-a deveria perder menos tempo com acessos se fosse buscar informação bloco a bloco em vez de ser uma de cada vez (para blocos muito grandes poderia depois começar a piorar devido a limitações de memória).
De qq forma tens de ver o que é mais critico na execução: o processo de importar os preços; o algoritmo de cáculo; o processo de por os resultados cá para fora.

Sem mexer no sistema e se a importação de preços não tiver impacto na excução total, então para negociaçao uma solução é definir um intervalo de preços dentro do qual os cálulos não precisam de ser actualizados e o tempo médio para uma acção sair fora desse intervalo, e só actualizar o status da acção se sair fora desse intervalo.
Se por exemplo uma flutuação de +-1% não afectar as conclusões e verificares que o tempo médio para uma acção flutua mais  que +- 1% for de 30min, significa que durante uma hora num universo de 3000 acções serão necessárias umas 100 actualizações por minuto o que excede a capacidade. Se o intervalode  confiança for +-2% o nº médio de acções que necessitam actualização reduz-se drasticamente e talvez já dê.
Claro que se o problema estiver na importação dos dados isso não adianta nada.

Então é assim:

O sistema de analise já estava feito.. e a ideia era processar a analise uma a uma e emitir um relatório automático em pdf (igual ao de qualquer casa de investimento)... só não coloco aqui um relatório porque a propriedade do sistema é dos relatórios é de uma entidade a operarar no mercado.

isto obrigava a encontrar os potenciais tickers e lançar no sistema para verificar se eram de facto bons... esses potenciais filtros iamos buscar a outro sistema...

Esta analise demora 3 segundos aproximadamente (as vezes mais, outras menos) dependendo se os dados já estão carregados na base de dados de um sistema paralelo que temos ou se esse sistema os vai buscar. Por exemplo, se eu fizer analise ao ticker X, a seguir as outras com esse ticker são mais faceis, pois já esta carregada no sistema e portanto so muda o preço da acção em real time (lido de outro sistema). Se for novo o ticker ou tiver sido actualizado os dados, o sistema tem de os ler novamente (importar) e depois analise é feita... pelo que pode demorar entre 1 a 4 ou mais segundos dependentemente do caso.

Mas agora o que se decidiu fazer foi:

1- Não ter de selecionar as potencias acções superiores via o terceiro sistema e depois analisar uma a uma (a analise demora 3 segundos, mas ler analise, interpretar, apagar o ticker, meter outro, demora sempre mais).
a) em vez disso são lançados todos os tickers de acçoes americanas e analisadas.

2- A analise anterior já atribuia um rating as acçoes e recomendação. Agora simplesmente le todas as acoes e faz um raking das acções pelo rating (eliminado algumas que podem não cumprir alguns condições).

3- As 30 primeiras são a carteira. Todas as vezes que uma nova entra no top 30 é comprada e a que sai vendida. Isto pode acontecer por 3 razoes isoladas ou no conjunto: O preço de acção desceu (considerando as outras variaveis constantes) e deu um ponto de entrada face à avaliação feita (isto pode acontecer durante a sessão)... O preço subiu ou manteve, mas os fundamentais melhorarem bastante (este acontece apenas quando há alteração nos fundamentais - geralmente trimestralmente)... O preço subiu, desceu. manteve-se mas tecnicamente a accao melhorou.

Quando um destes factores ou todos conjugados elevam o rating e fazem entrar no top 30 é comprada.

Resumindo: depois da analise fundamental e tecnica feita, na verdade só se aguarda o ponto de entrada dado pelo preço que varia durante o dia. Mas a verdade é que esse preço também pondera no rating... por exemplo a, distancia para o fair value faz mexer o rating...


O problema é que o Excel não tem capacidade de processar isto... vou agora testar de outra forma.

Eu tenho outro sistema (de pairs trading) 100x mais complexo e 1000x mais pesado, mas funciona bem... porque depois de analisadas meia duzia de acçoes, ele mantem essa analise e deposi so negocei face a variação de preço.

Mas cheguei a ter um problema nessa na escolha de pares, ai resolvi quebrando a analise em varias parcelas...
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 22:09:05
Ok,

o tempo está a ser perdido realmente em tempo de processamento ou em chamadas pela rede?

podes experimentar criar threads que corram vários em simultâneo e ver qual é o ponto ideal, se o problema for na rede provavelmente vai melhorar se tiveres bastantes, senão o ideal deve ser ter tantas como o número de cores do processado

Se eu fizer dividir por vario computadores resulta bem...  Se for no mesmo não, pois o feed é puxado pelo mesmo programa, que por sua vez liga ao mesmo provider...
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 22:11:44
Bom, já que ninguém pergunta pergunto eu ::) Então e estás a pensar disponibilizar a parte de análise do algoritmo?

O algoritmo do rating não serve de nada sem as outras analises...

Isto considera para além da AT, a analise fundamental: calcula WACC, fair value pelos fluxos de caixa descontados, Dividendos descontados, z-Score, usa um modelo de avaliação de piotroski, templeton e graham, analise de racios, volume medio, short interest, etc..








Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-15 22:56:36
Citar
If Right(ThisWorkbook.Worksheets("STOCK LIST").Range("R34").Value, 3) = "000" Then
    ' clear memory
    N = vbNullString
Application.StatusBar = "Resting a bit..."
Application.OnTime EarliestTime:=Now + TimeValue("00:00:10"), Procedure:="Folha1.Find_share"
Else
Application.OnTime EarliestTime:=Now + TimeValue("00:00:01"), Procedure:="Folha1.Find_share"
End If

vamos ver se resulta
Título: Re:Algortimo de analise de acções
Enviado por: Zenith em 2014-01-16 00:39:07
Embora isso dependa se os critérios  usam fazer o ranking são super volateis ou não, mas se o não forem (e em análise fundamental de certeza que o não são), se só estas interessado no top 30, não precisas de analisar todas, já que é pouco provável que uma acção colocada na posição 1000 passe imediatamente para o top 30 ou que a acção colocada em 1º ou 2º desça 30 ou 40 posições.
Se a super volatilidade n se verificar podes ter várias maneiras de fazer um update selectivo. Por exemplo analizar sempre as que estão de 20 a 50 mais as 20 (independentemente da posição) que foram analizadas á mais tempo. Podes ter criterios mais complicados e eventualmente ate podes incluir eventos (por exemplo uma subida anorma) que forcem a inclusão no lote das analisadas.
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-16 00:47:39
Embora isso dependa se os critérios  usam fazer o ranking são super volateis ou não, mas se o não forem (e em análise fundamental de certeza que o não são), se só estas interessado no top 30, não precisas de analisar todas, já que é pouco provável que uma acção colocada na posição 1000 passe imediatamente para o top 30 ou que a acção colocada em 1º ou 2º desça 30 ou 40 posições.
Se a super volatilidade n se verificar podes ter várias maneiras de fazer um update selectivo. Por exemplo analizar sempre as que estão de 20 a 50 mais as 20 (independentemente da posição) que foram analizadas á mais tempo. Podes ter criterios mais complicados e eventualmente ate podes incluir eventos (por exemplo uma subida anorma) que forcem a inclusão no lote das analisadas.

Tenho de analisar sempre todas, porque isso pode acontecer, não pela volatilidade dos fundamentais, mas pela volatilidade do preço - com impacto na avaliação da empresa (distancia para o fair value) e em termos de analise tecnica.

Em todo o caso, esta a correr e quase acabar e penso que com o que coloquei acima e mais umas alterações, a coisa resultou.

E como sugeres quanto a mudanças anormais de preço, acabaria por consumir mais recurso (analise de historico inclusivamente)... pois obrigava a analises preliminares e em real-time na mesma.  Mas a parte de eliminar da analise as mesmo muito más, é boa ideia.
Título: Re:Algortimo de analise de acções
Enviado por: Thorn Gilts em 2014-01-16 01:22:40
Parece que resultou. Obrigado a todos pela ajuda e pela disponibilidade.
Título: Re: Algortimo de analise de acções
Enviado por: Thorn Gilts em 2022-07-30 17:10:00
https://www.marktechpost.com/2022/07/26/researchers-at-stanford-have-developed-an-artificial-intelligence-ai-model-stockbot-which-uses-lstms-to-predict-stock-prices-with-gains-higher-than-the-most-aggressive-etfs/ (https://www.marktechpost.com/2022/07/26/researchers-at-stanford-have-developed-an-artificial-intelligence-ai-model-stockbot-which-uses-lstms-to-predict-stock-prices-with-gains-higher-than-the-most-aggressive-etfs/)