Dois métodos diferentes para aplicar algumas análises de Corey Hoffstein ao seu TAA - Milbus
Classificação AdaOpt em dígitos manuscritos MNIST (sem pré-processamento)
Então, primeiro: acabei de terminar uma ciência de dados do Thinkful no programa de bootcamp python que deveria levar seis meses, em cerca de quatro meses. Todos os meus projetos principais foram aplicados à negociação de volatilidade; Para encurtar a história, nenhuma das técnicas de ML funcionou e, quanto mais complexa a técnica que eu tentei, pior ela foi. Existe um lugar para a ciência de dados em Python no mundo? Claro. Algumas empresas juram por isso. No entanto, atualmente o R tem muito mais bibliotecas desenvolvidas especificamente para finanças quantitativas, como PerformanceAnalytics, quantstrat, PortfolioAnalytics e assim por diante. Mesmo para tarefas mais básicas de gerenciamento de portfólio, eu uso funções como Return.Portfolio e charts.PerformanceSummary em R, o equivalente ao qual não vi no Python. Embora existam alguns sites com seus próprios dialetos construídos no Python, como quantConnect e quantopian, acho que essa é mais a sua própria marca especial de sintaxe, em vez de ser capaz de criar estratégias de backtest de portfólio de forma livre a partir de pandas.
De qualquer forma, eis o meu portfólio Python do bootcamp que concluí. O fato de a ingestão de dados do Yahoo ter interrompido o índice SHORTVOL significa que os notebooks supervisionados e não supervisionados precisam que seus dados sejam substituídos por aquele no projeto final do capstone. Você pode olhar os cadernos para ver exatamente o que eu tentei, mas para ir direto ao ponto, nenhuma das técnicas funcionou. Florestas aleatórias, SVMs, aumento de XG, UMAP … elas não se aplicam realmente à previsão de retornos. Os recursos que usei foram aqueles que utilizo em minha própria estratégia de negociação, pelo menos alguns deles, por isso não foi um caso de "lixo dentro, lixo fora". E quanto mais avançada a técnica, piores os resultados. Nas palavras de um parceiro comercial quant sênior: "Auto-ML = auto-falido". Portanto, quando as pessoas dizem "usamos IA e aprendizado de máquina para gerar retornos superiores", eles descobriram algo absolutamente espetacular (altamente improvável) ou estão apenas usando os termos mais recentes do hype. Afinal, até a regressão linear pode ser pensada como um modelo de aprendizado.
Mesmo o uso de PCAs de vários recursos da estrutura de termos fez um trabalho pior do que minha estratégia básica de negociação de volatilidade. Obviamente, ficou melhor desde então, à medida que adicionei mais gerenciamento de riscos à estratégia e percebi uma boa parte do movimento de longo volume de coronavírus em março. Você pode se inscrever aqui.
Leia Também Usando Python para trapacear no Scrabble
Então, sim, eu codifico em Python agora (se o post anterior não era qualquer indicação, então aqueles que precisam de algum desenvolvimento em Python para trabalhar com quant, se ele usa a pilha numpy / scipy / pandas usual, sinta-se à vontade para entrar em contato comigo) .
Enfim, este post é sobre como adicionar algumas análises de estilo de Corey Hoffstein às estratégias de alocação de ativos, desta vez em R, porque esta é uma técnica que eu usei para um projeto freelancer muito recente para uma empresa de alocação de ativos para a qual atualmente trabalho como freelancer (off e on) . Eu chamo isso de estilo Corey Hoffstein, porque no twitter ele sempre fala sobre analisar o impacto da sorte no tempo. Seu blog na Newfound Research é ótimo para pensar em elementos que não se vê em muitos outros lugares, como analisar estratégias de acompanhamento de tendências no contexto de pagamentos de opções, o impacto da sorte no tempo e vários parâmetros das janelas de lookback etc. .
A idéia rápida é a seguinte: quando você reequilibra um portfólio todos os meses, deseja saber como a alteração dos vários dias de negociação afeta seus resultados. É isso que Walter faz na AllocateSmartly.
Mas uma pergunta mais interessante é o que acontece quando um portfólio é reequilibrado em prazos mais longos – ou seja, o que acontece quando você reequilibra um portfólio apenas uma vez por trimestre, uma vez a cada seis meses ou uma vez por ano? E se, em vez de reequilibrar trimestralmente em janeiro, abril e assim por diante, você reequilibrar em fevereiro, maio etc.?
Este é um pedaço de código (em R, até agora) que faz exatamente isso:
offset_monthly_endpoints
Observe como obtemos diferentes datas de término do reequilíbrio trimestral. Isso também funciona semestralmente, anualmente e assim por diante. A única ressalva a esse método, porém, é que, ao fazer uma análise tática da alocação de ativos em R, eu subconjunto por pontos de extremidade. E como eu costumo usar terminais mensais em intervalos de um (ou seja, todos os terminais mensais), é bastante simples para mim incorporar medidas de momento em qualquer período de lookback mensal. Ou seja, 1 mês, 3 meses etc. são todos bastante simples quando se reequilibra todos os meses. No entanto, por exemplo, se alguém fizer um reequilíbrio a cada trimestre e adotar apenas pontos finais trimestrais, obter uma medida de impulso de um mês a cada trimestre exigiria um pouco mais de trabalho. Se você quiser fazer o reequilíbrio trimestral, tranche-o todos os meses, mas também não basta reequilibrar no final do mês, mas reequilibrar várias vezes ao longo do mês, o que exigiria ainda mais meticulosidade.
No entanto, um tipo de segundo método "kludge-y" para fazer isso seria executar o backtest para encontrar todos os pesos e, em seguida, aplicar uma metodologia de codificação semelhante aos * pesos *. Por exemplo, se você tiver uma série temporal de pesos mensais, basta criar um índice que varia de 1 ao comprimento dos pesos, dependendo da frequência com que você deseja reequilibrar, subconjunto para cada mod 3 == 0, 1 ou 2 De maneira mais geral, se você reequilibrar uma vez a cada k meses, criará um índice que varia de 1 ao tamanho do seu índice, se o idioma for base 1 (R) ou 0 ao comprimento n-1, se Python. Então, você simplesmente vê quais índices dão o restante de 0 a k-1 ao usar o módulo K, e é isso. Isso permitirá que você obtenha k diferentes tranches de reequilíbrio, tomando os índices desses pontos de extremidade. E você ainda pode compensar esses pontos de extremidade diariamente também. A ressalva aqui, é claro, é que você precisa executar o backtest para todos os meses individuais e, se tiver uma rotina de otimização complexa, isso poderá levar um tempo desnecessariamente longo. Portanto, qual método você usa depende da tarefa em questão. Esse segundo método, no entanto, é o que eu usaria como invólucro para um algoritmo de reequilíbrio mensal que já existe, como meu algoritmo de alocação de ativos KDA.
É isso neste post. Em termos das coisas que quero construir daqui para frente: gostaria de portar algumas funcionalidades básicas de R para Python, como Return.Portfolio e charts.PerformanceSummary, e quando eu conseguir fazer isso funcionar, para demonstrar como fazer um muito do mesmo trabalho de alocação de ativos que fiz em R ... em Python também.
NOTA: Atualmente, estou procurando uma função em tempo integral para usar minhas habilidades em R (e agora em Python). Se você está contratando ou conhece alguém que não seja, não hesite em entrar em contato comigo no meu LinkedIn.