Olá, Visitante. Por favor entre ou registe-se se ainda não for membro.

Entrar com nome de utilizador, password e duração da sessão
 

Autor Tópico: Algortimo de analise de acções  (Lida 5481 vezes)

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Algortimo de analise de acções
« 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?
we all have a story we nevel tell

Zel

  • Visitante
Re:Algortimo de analise de acções
« Responder #1 em: 2014-01-15 01:55:55 »
fizeste algum backtesting? que tipo de retornos esperas? nunca fiz nada assim

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #2 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).

we all have a story we nevel tell

Zenith

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 5259
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #3 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.

muze

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 2000
    • Ver Perfil
    • Rhymit
Re:Algortimo de analise de acções
« Responder #4 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.

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #5 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.
we all have a story we nevel tell

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #6 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.
we all have a story we nevel tell

vdap

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 2706
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #7 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,
« Última modificação: 2014-01-15 15:54:08 por vdap »
The duty of a patriot is to protect his country from its government

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #8 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.
we all have a story we nevel tell

Zenith

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 5259
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #9 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.

muze

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 2000
    • Ver Perfil
    • Rhymit
Re:Algortimo de analise de acções
« Responder #10 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

joaogam

  • Jr. Member
  • **
  • Mensagens: 22
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #11 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? 

rs_trader

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 3259
    • Ver Perfil
    • Algo Trading Strategies and Trading System Development and Evaluation.
Re:Algortimo de analise de acções
« Responder #12 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.
Em memória do grande DeMelo: "PQP... gajo chato fdx."

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #13 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...
we all have a story we nevel tell

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #14 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...
we all have a story we nevel tell

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #15 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..








we all have a story we nevel tell

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #16 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
we all have a story we nevel tell

Zenith

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 5259
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #17 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.

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #18 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.
« Última modificação: 2014-01-16 00:52:37 por Thorn Gilts »
we all have a story we nevel tell

Thorn Gilts

  • Ordem dos Especialistas
  • Hero Member
  • *****
  • Mensagens: 14243
    • Ver Perfil
Re:Algortimo de analise de acções
« Responder #19 em: 2014-01-16 01:22:40 »
Parece que resultou. Obrigado a todos pela ajuda e pela disponibilidade.
« Última modificação: 2014-01-16 01:25:07 por Thorn Gilts »
we all have a story we nevel tell