
Encontre estoques de altura em movimento antes de se moverem usando detecção de anomalia e aprendizado de máquina. A Surpreiver usa o aprendizado de máquina para analisar a ação do volume + preço e inferir padrões incomuns que podem resultar em grandes movimentos nos estoques.
| Caminho | Descrição |
|---|---|
| Surpree | Pasta principal. |
| └ Dicionários | Pasta para salvar dicionários de dados para uso posterior. |
| └ Figuras | Figuras para esses repositórios do GitHub. |
| └ Estoques | Lista de todas as ações que você deseja analisar. |
| data_loader.py | Módulo para carregar dados do Yahoo Finance. |
| detecção_engine.py | Módulo principal para executar a detecção de anomalias em dados e encontrar ações com padrões de preço e volume mais incomuns. |
| festere_generator.py | Gera recursos de retorno de preço e volume, bem como muitos indicadores técnicos. |
Você precisará instalar o seguinte pacote para treinar e testar os modelos.
Você pode instalar todos os pacotes usando o seguinte comando. Observe que o script foi escrito usando o Python3.
pip install -r requirements.txt
Você também pode usar o Docker se souber o que é e tiver algum conhecimento sobre como usá -lo. Aqui estão as etapas para executar a ferramenta com o Docker.
docker build . -t surpriver<C:\path\to\this\dir> pelo diretório em que você está trabalhando.docker-compose up -ddocker exec -it surpriver em sua linha de comando.Se você quiser seguir em frente e obter diretamente os estoques mais anômalos para hoje, poderá executar o comando seguinte para obter os estoques com os padrões mais incomuns. Vamos nos aprofundar no comando nas seções a seguir.
python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 1 --is_test 0 --future_bars 0
Este comando fornecerá as 25 principais ações que tiveram a maior pontuação de anomalia nas últimas 14 barras de 60 minutos de velas . Ele também armazenará todos os dados utilizados para fazer previsões na pasta Dictionaries/Data_Dict.npy . Abaixo está uma explicação mais detalhada de cada parâmetro.
python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 1 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 0 --is_test 0 --future_bars 0 --output_format 'CLI'
Observe a alteração no is_save_dictionary e is_load_from_dictionary .
Aqui está uma saída de como é uma única previsão. Observe que as pontuações negativas indicam padrões anômalos e incomuns mais altos, enquanto as pontuações positivas indicam padrões normais. Quanto menor, melhor .
Last Bar Time: 2020-08-25 11:30:00-04:00
Symbol: SPI
Anomaly Score: -0.029
Today Volume (Today = Date Above): 313.94K
Average Volume 5d: 206.53K
Average Volume 20d: 334.14K
Volatility 5bars: 0.013
Volatility 20bars: 0.038
Future Absolute Sum Price Changes: 72.87
Se você suspeitar do uso de aprendizado de máquina e inteligência artificial nas negociações, pode realmente testar as previsões dessa ferramenta sobre dados históricos. Os dois argumentos mais importantes da linha de comando para testes são IS_Test e Future_Bars . Se o primeiro estiver definido como 1 e o posterior for definido como algo mais que 5, a ferramenta realmente deixará essa quantidade de dados para fins de análise e usará os dados anteriores a previsões anômalas. Em seguida, ele analisará os dados restantes para ver como as previsões o fizeram. Aqui está um exemplo de um gráfico de dispersão do comando a seguir.
python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 1 --is_test 1 --future_bars 25
Se você já gerou o dicionário de dados, pode usar o seguinte comando onde definimos is_load_from_dictionary como 1 e is_save_dictionary como 0.
python detection_engine.py --top_n 25 --min_volume 5000 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 1 --data_dictionary_path 'dictionaries/data_dict.npy' --is_save_dictionary 0 --is_test 1 --future_bars 25

Como você pode ver na imagem acima, os estoques anômalos (pontuação <0) geralmente têm uma mudança absoluta mais alta no futuro, em média. Isso prova que as previsões são realmente para as ações que se moveram mais que a média nas próximas horas/dias. Uma pergunta surge aqui, e se a ferramenta estiver apenas escolhendo os estoques de volatilidade mais alta, porque eles produziriam altas mudanças absolutas futuras. Para provar que não é o caso, aqui está a descrição mais detalhada das estatísticas que você obtém do comando acima.
--> Future Performance
Correlation between future absolute change vs anomalous score (lower is better, range = (-1, 1)): **-0.23**
Total absolute change in future for Anomalous Stocks: **89.660**
Total absolute change in future for Normal Stocks: **43.000**
Average future volatility of Anomalous Stocks: **0.332**
Average future volatility of Normal Stocks: **0.585**
Historical volatility for Anomalous Stocks: **2.528**
Historical volatility for Normal Stocks: **2.076**
Você pode ver que a volatilidade histórica para estoques normais versus anômalos não é tão diferente. No entanto, a diferença na mudança futura absoluta total é o dobro de ações anômalas em comparação com os estoques normais.
Agora você pode especificar qual fonte de dados você gostaria de usar, juntamente com qual lista de ações você gostaria de usar.
python detection_engine.py --top_n 25 --min_volume 500 --data_granularity_minutes 60 --history_to_use 14 --is_load_from_dictionary 0 --data_dictionary_path 'dictionaries/feature_dict.npy' --is_save_dictionary 1 --is_test 0 --future_bars 0 --data_source binance --stock_list cryptos.txt
Tentaremos postar os 25 principais resultados para um único conjunto de parâmetros a cada semana.
A ferramenta encontra apenas os estoques que têm algum comportamento incomum em sua ação de preço e volume combinados. Não prevê em que direção o estoque vai se mover. Esse pode ser um recurso que eu implementarei no futuro, mas, no momento, você precisará olhar para as paradas e fazer seu DD para descobrir isso.
Um produto por traditica
Copyright (C) 2020-presente, tradytics.com