Estratégias Quantitativas de Negociação na Parte R 1 de 3.
Categoria: Documentos.
Finanças Computacionais e Gerenciamento de Riscos mm 40 60 80 100 120 Estratégias de Negociação Quantitativas em R 40 Parte 1 de 3 60 Guy Yollin Consultor Principal, r-programming Professor Visitante, Universidade de Washington 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em Quantstrat R - I 1/72 Contorno mm 40 60 80 100 120 1 O pacote de absorção 40 2 O pacote quantstrat 60 3 Análise de desempenho 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 2/72 Pacotes para desenvolvimento de sistemas de negociação em R mm PerformanceAnalytics: Ferramentas econométricas para análise de desempenho e risco 40 Métricas e gráficos de desempenho 60 80 100 120 quantstrat: modelo de estratégia quantitativa blotter: ferramentas para desenvolvimento de sistemas de negociação orientados a transações 40 Quantitative trading rules e trading quantmod: estrutura de modelagem financeira quantitativa TTR : regras técnicas de negociação 60 Acesso a dados, gráficos, indicadores xts: séries temporais extensíveis 80 zoo: order ob servations Objetos de séries temporais Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 3/72 Sobre blotter e quantstrat mm 40 80 100 Infraestrutura de transação para 60 instrumentos de definição, transações, 120 portfólios e contas para sistemas de negociação e simulação. Fornece suporte de portfólio para portfólios de várias classes de ativos e várias moedas. Ainda em desenvolvimento pesado. O software está em um estágio alfa / beta algumas coisas não são completamente implementadas (ou documentadas) algumas coisas invariavelmente têm erros que algumas implementações irão mudar no futuro 60 40 O software está em desenvolvimento há vários anos com o uso de blotter: Dec-2008 quantstrat: Fev-2010 Software é usado todos os dias por profissionais que trabalham na gestão de ativos 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 4/72 Referências bibliográficas mm 40 60 100 Página do projeto TradeAnalytics em R-forja: 80 r-forge. r-project / projetos / blotter / documentos e demonstrações para: 40 pacote blotter pacote quantstrat 120 R-SIG-FINANCE: stat. ethz. ch/mailman/listinfo/r-sig-finance 60 Tim Russell Timely Portfólio blog: timelyportfolio. blogspot / exemplo quantstrat de 6 partes 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 5/72 Contorno mm 40 60 80 100 120 1 O pacote de blotter 40 2 O pacote quantstrat 60 3 Analítica de desempenho 80 Guy Yollin ( Copyright © 2011 Estratégias de Negociação Quantitativas em R quantstrat-I 6/72 O pacote de blotter mm 40 60 80 100 120 Descrição Infraestrutura de transação para definir instrumentos, transações, portfólios e contas para sistemas de negociação e simulação. Fornece suporte de portfólio para portfólios de várias classes de ativos e várias moedas. Os principais recursos suportam portfólios de vários ativos. As contas de múltiplos portfólios suportam cálculos e roll-up de P & L. 60 Autores Peter Carl Brian Peterson 80 40 Guy Yollin (Copyright © 2011) Quantitative Trading Strategies in R quantstrat-I 7/72 Fluxo de trabalho de backtesting de estratégia básica para blotter mm 40 60 80 100 120 Inicialização Processamento barra a barra Relatório 40 Inicializar moeda e instrumentos e carregar dados do histórico Inicializar portfólio e conta Verificar preços e indicadores para verificar se Compra ou Venda acionados Atualizar posição e patrimônio Fim de dados Gerar relatórios de desempenho e gráficos 60 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 8/72 Principais funções de blotter mmFunction initPortf initAcct 40 40 getPosQty addTxn updatePortf updateAcct updateEndEq getEndEq 60 chart. Posn PortfReturns getAccount getPortfolio getTxns tradeStats 80 60 80 100 Descrição Inicialização inicializa um objeto de portfólio inicializa um objeto de conta Proc essing recupera o valor mais recente da conta de capital obtém posição em Data adiciona transações a um portfólio calcula o resultado para cada símbolo para cada período calcula o patrimônio líquido dos dados do portfólio atualiza o patrimônio líquido para uma conta Dados do mercado do gráfico de análise, tamanho da posição e P & L cumulativo retornos de instrumento de portfólio obter um objeto de conta do ambiente. blotter obter um objeto de portfólio do ambiente. blotter recuperar transações de um portfólio calcular estatísticas de comércio 120 Guy Yollin (Copyright © 2011) Quantitative Trading Strategies em R quantstrat-I 9/72 blotter package R Código: mm> biblioteca (blotter)> search () [1] [3] [5] [7] [9] [11] [13] [15] pacote ".GlobalEnv" "package: FinancialInstrument" " : Pacote "40" TTR: pacote "xts": stats "" pacote: grDevices "" pacote: datasets "" Pacotes automáticos "" pacote: blotter "" pacote: quantmod "" pacote: Padrões "" pacote: zoológico "" pacote: gráficos "" pacote: utils "" pacote: métodos "" pacote: base "40 60 80 100 120 6 0 O blotter de carregamento faz com que essas outras bibliotecas sejam carregadas automaticamente. Instrumento Quantitative TTR 80 Instrumento Financeiro xts zoo Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 10/72 O ambiente. blotter e. instrument 40 40 80 80 O pacote blotter cria um ambiente chamado. blotter para armazenamento privado de objetos de portfólio e de conta. Da mesma forma, 40 o pacote FinancialInstrument cria um ambiente chamado instrumento para armazenamento privado de instrumentos definidos (por exemplo, moeda, estoque, futuro, etc.) R Código: 60 ".instrumento"> ls (todos = T) [1] ".blotter" 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 11/72 Fluxo de trabalho de backtesting de estratégia básica para blotter mm 40 60 80 100 120 Inicialização Processamento barra a barra Relatórios 40 Inicializar moeda e instrumentos e carregar dados do histórico Inicializar portfólio e conta Verificar preços e indicadores para ver se Compra ou Venda acionada Atualizar posição e patrimônio Finalizar de Dados Gerar relatórios e gráficos de desempenho 60 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 12/72 Construtores de classe de instrumento O pacote FinancialInstrument fornece a facilidade de lidar com diversos tipos de instrumentos e diferentes moedas mm 40 60 80 100 120 R Código: Construtores de instrumentos> função args (currency) (primary_id, currency = NULL, multiplicador = 1, identificadores = NULL,.) 40 NULL> função args (stock) (primary_id, currency = NULL, multiplicador = 1, ti ck_size = 0.01, identificadores = NULL,. ) 60 NULL Argumentos principais: cadeia de caracteres de ID primária fornecendo um ID não válido para a moeda 80 do instrumento que descreve o multiplicador numérico multiplicador de ID da moeda (multiplicador × preço = valores nocionais) aumento do tick do preço do instrumento Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 13/72 Inicializar o instrumento monetário R Código:> moeda ("USD") mm 40 60 80 100 120 [1] "USD"> get ("USD", envir =.instrument) $ primary_id [1] "USD" $ currency [1] "USD" $ multiplicador [1] 1 $ tick_size [1] 0.01 $ identificadores NULL 40 60 80 $ tipo [1] "moeda" attr (, "classe") Guy Yollin (Copyright © 2011) Quantitative Trading Strategies na R quantstrat-I 14/72 Initialize the trading instrument R Código:> estoque ("SPY", moeda = "USD", multiplicador = 1) mm 40 60 80 100 120 [1] " SPY "> get (" SPY ", envir =.instrument) $ primary_id [1]" SPY "$ currency [1]" USD "$ multiplicador [1] 1 $ tick_size [1] 0.01 $ lista de identificadores () 40 60 80 $ type [1] "stock" attr (, "classe") Guy Yollin (Copyright © 2011) Quantitative Trading Strategies em R quantstrat-I 15/72 Buscar dados históricos R Código: mm 40 60 80 100 120> getSymbols ('SPY', de = '1998-01-01', to = '2011- 07-31 ', ajuste = T)> SPY = a. mês (SPY, indexAt =' endof ')> SPY $ cauda SMA10m (SPY) 40 SPY. Open 2011-02-28 128.2641 2011-03-31 132.3362 2011- 04-29 132.7519 2011-05-31 136.3938 2011-06-3060 133.8464 2011-07-29 132.0900 SPY. High 133.4458 132.5031 135.8963 136.5033 134.2544 135.7000 SPY. Low SPY. Fechar SPY. Volume SPY. Adjusted SMA10m 128.1849 131.9201 2846131894 131.92 114.9287 124.1228 131.9359 4825610492 131.94 117.4512 128.8711 135.7570 2826839043 135.76 120.9079 130.7319 134.2345 3354154109 134.23 123.5213 125.6968 131.9700 4723424476 131.97 126.3944 127.9700 129.3300 3840839000 129.33 128.0790 Nota conversão de dados diários para dados mensais usando o último dia de negociação do mês (funcionalidade xts) 80 Guy Yollin (Copyright © 2011) Quantitative Trading Strategies no R quantstrat-I 16/72 Backtesting estratégia básica wor k fl ow para mata-borrão mm 40 60 80 100 120 Inicialização Processamento barra a barra Relatórios 40 Inicializar moeda e instrumentos e carregar dados do histórico Inicializar portfólio e conta Verificar preços e indicadores para ver se Compra ou Venda acionados Atualizar posição e patrimônio Fim dos dados Gerar relatórios e gráficos de desempenho 60 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 17/72 A função initPortf A função initPortf constrói e inicializa um objeto de portfólio, que é usado para conter transações, posições e nível de agregação. valores. 120 mm 40 60 100 R Código: A função initPortf> função args (initPortf) (name = "default", símbolos, initPosQty = 0, initDate = "1950-01-01", 40 currency = "USD",.) NULL Argumentos principais: nome símbolos 60 nome para o objeto de portfólio resultante lista de símbolos a serem incluídos no portfólio initPosQty quantidade de posição inicial initDate 80 data para patrimônio de conta inicial e posição (antes do primeiro preço de fechamento) moeda identificadora Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 18/72 A função initAcct A função initAcct constrói o contêiner de dados usado para armazenar valores calculados de conta como 60 P & L agregado, patrimônio líquido, 100 etc. mm 40 80 R Código: A função initAcct> args (initAcct) function (name = "default", portfólios, initDate = "1950-01-01", 40 initEq = 0, currency = "USD",.) NULL 120 Argumentos principais: nome initDate initEq currency 80 60 nome para o vetor de portfólios de objetos de conta resultante do portfólio de nomenclatura de cadeias de caracteres s incluídos nesta data de conta para o patrimônio da conta inicial e posição (antes do primeiro preço de fechamento) identificador inicial da conta identificada por Guy Yollin (Copyright © 2011) Quantitative Trading Strategies na R quantstrat-I 19/72 Initialize portfolio and account mm R Code :> b. strategy initPortf (b. strategy, 'SPY', initDate = '1997-12-31') 40 [1] "bFaber"> initAcct (b. estratégia, portfolios = b. strategy, initDate = '1997- 12-31 ', initEq = 1e6) [1] "bFaber" 40 60 80 100 120 60 Observe que o initDate é anterior ao início dos dados 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 20 / 72 O ambiente. blotter e. instrument R Código: mm> ls () [1] "SPY"> ls (.blotter) "b. estratégia" 40 60 80 100 120 40 [1] "account. bFaber"> ls (.instrument) [1] "SPY" "USD" "portfolio. bFaber" 60 vários objetos (incluindo o preço histórico xts objeto) armazenados no portfólio de ambiente global e objetos de conta armazenados em. blotter moeda ambiente e instrumento de negociação o objetos armazenados no ambiente. instrument 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 21/72 Fluxo de trabalho de backtesting de estratégia básica para blotter mm 40 60 80 100 120 Inicialização Processamento Bar-by-bar Relatórios 40 Inicializar moeda e instrumentos e carregar dados históricos Inicializar portfólio e conta Verificar preços e indicadores para ver se Buy or Sell triggered Atualizar posição e equidade Fim dos dados Gerar relatórios de desempenho e gráficos 60 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 22/72 Inventário mensal SPY e 10 meses SMA mm 40 60 80 100 120 R Código:>>>>>>> tema chart_Posn (b. strategy, Symbol = 'SPY', Datas = '1998 ::')> enredo (add_SMA (n = 10, col = 4, on = 1, lwd = 2)) 60 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 31/72 Performance plot SPY 140 1998−01−30 / 2011−07−29 mm 40 60 80 100 120 130 120 115 140 130 120 110 110 105 100 100 90 40 95 90 85 80 80 75 70 70 1000 800 600 400 200 0 120000 Posicionamento 1000 qqqqqqqq 1000 800 600 400 200 60 qqqqqqq 0 120000 100000 80000 60000 CumPL 98314.97275 100000 80000 60000 40000 20000 0 1998 Jan 1998 Jul 1998 Jan 1999 1999 Jul 1999 Jan 2000 2000 Jul 2000 Jan 2001 2001 Jul 2003 Jan 2002 2002 Jul 2002 Jan 2003 2003 Jul 2003 Jan 2004 2004 Jul 2004 Jan 2005 2005 Jul 2005 Jan 2006 2006 Jul 2006 Jan 2007 2007 Jul 2007 Jan 2008 2008 Jul 2008 Jan 2009 2009 Jul 2009 Jan 2010 2010 Jul 2010 2011 Jan 2011 Jul 2011 80 40000 20000 0 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 32/72 Transações Código R: mm Txn. Qty 1997-12-31 0 1998-10-30 1000 1999-09-3040 -1000 1999-10-29 1000 2000-09-29 -1000 2002-03-28 1000 2002-04-30 -1000 2003-04-30 1000 2004-08-3160 -1000 2004-09-30 1000 2007-12 -31 -1000 2009-06-30 1000 2010-06-30 -1000 2010-07-30 1000 2010-08-3180 -1000 2010-09-30 1000 40 60 80 100 120> getTxns (Portfólio = b. estratégia, Símbolo = "SPY") Txn. Price Txn. Fees Tx n Valor Txn. Avg. Cost Net. Txn. Realized. PL 0,00000 0,00 0,00000 0,000 89,25095 0 89250,95 95,25095 0,000 105,61590 0 -105615,90 105,61590 16364,941 112,38352 0 112383,52 112,38352 0,000 118,98858 0 -118988,58 118,98858 6605,062 96,28988 0 96289,88 96,28988 0,000 90,69007 0 - 90.690,07 90,69007 78,59565 -5599,813 0 78595,65 0,000 78,59565 96,86532 0 -96865,32 96,86532 97,83755 0 18269,669 97837,55 97,83755 0,000 136,15069 0 -136150,69 136,15069 38313,139 88811,19 0 88,81119 88,81119 0,000 101,18979 0 -101189,79 101,18979 12378,598 108,10113 0 108101,13 108,10113 0,000 103,23868 0 -103238,68 103,23868 -4.862,443 112,48419 0 112484.19 112.48419 0,000 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em Quantstrat R I 33/72 Contorno mm 40 60 80 100 120 1 O pacote de absorção 40 2 O pacote quantstrat 60 3 Análise de Desempenho 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 34/72 O pacote quantstrat mm 40 60 80 100 120 Descrição Specif y, construir e fazer back-teste de estratégias quantitativas de negociação e carteira financeira. Os principais recursos suportam estratégias que incluem indicadores, sinais e regras que permitem que as estratégias sejam aplicadas aos portfólios que alavancam o pacote de registros para contabilidade comercial. I 35/72 Fluxo de trabalho de backtesting de estratégia básica para quantstrat mm 40 60 80 100 120 Inicialização Definir estratégia Processamento barra a barra Relatórios de atualização 40 Inicializar moeda e instrumentos e carregar dados históricos Inicializar portfólio, conta, ordens, estratégia Adicionar indicadores, sinais, e regras Aplicar estratégia ao portfólio Atualizar carteira, conta, patrimônio Gerar relatórios de desempenho e gráficos 60 80 Guy Yollin (Copyright © 2011) Quantitativas Estratégias de Negociação em R quantstrat-I 36/72 Principais funções de quantstrat mm Função 40 Iniciativas estratégia 40 add. signal add. rule add. indicator sigComparison sigCrossover 60 sigFormula sigPeak sigThreshold ruleSignal osNoOp 80 applyStrategy 60 80 100 Descrição Inicialização inicializar contêiner de ordem construtor para objeto estratégico Definição de estratégia adicionar um indicador a uma estratégia adicionar um sinal a uma estratégia adicionar uma regra a uma estratégia Funções padrão gerar sinal de comparação gerar um sinal de cruzamento gerar um sinal de uma função de sinal de fórmula sinais de pico / vale geram uma regra padrão de sinal de limiar para gerar uma ordem de negociação em uma função de dimensionamento de ordem padrão de sinal Processamento aplica a estratégia a dados de mercado arbitrários 120 Guy Yollin (Copyright © 2011) Quantitative Trading Strategies in R quantstrat-I 37/72 Basic fluxo de trabalho de backtesting de estratégia para quantstrat mm 40 60 80 100 120 Inicialização Definir estratégia Processamento barra a barra Relatórios de atualização 40 Inicializar moeda e instrumentos e carregar dados históricos Inicializar portfólio, conta, ordens, estratégia Adicionar indicadores, sinais e regras Aplicar estratégia a portfólio Atualizar carteira, conta, patrimônio Gerar relatórios de desempenho e gráficos 60 80 G uy Yollin (Copyright © 2011) Quantitative Trading Strategies no R quantstrat-I 38/72 Inicializar portfólio e conta mm R Código:> # inz portfólio, conta e ordens> qs. strategy initPortf (qs. strategy, 'SPY', initDate = '1997-12-31') [1] "qsFaber"> initAcct (qs. strategy, portfolios = qs. strategy, initDate = '1997-12-31', initEq = 1e6) [1] "qsFaber" 40 60 80 100 120 60 Código idêntico utilizado anteriormente 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 39/72 Inicializar ordens e estratégia mm 40 60 80 100 120 R Código:>>>>> # initialize orders container 40 biblioteca (quantstrat) initOrders (portfolio = qs. strategy, initDate = '1997-12-31') # instanciar uma nova estratégia objeto classe strat (estratégia) [1] "estratégia"> resumo (estratégia) 40 Comprimento nome 1 ativos 0 indicadores 0 sinais 600 regras 1 restrições 0 init 0 wrapup 0 chamada 2 Classe - nenhum-nenhum-nenhum-nenhum-nenhum-nenhum-nenhum-nenhumTipo de caractere lista de lista NULL lista de lista NULL chamada 40 60 80 100 120 80 Guy Yollin (Copyright © 2 011) Estratégias de Negociação Quantitativas em R quantstrat-I 41/72 Fluxo de trabalho de backtesting de estratégia básica para quantstrat mm 40 60 80 100 120 Inicialização Definir estratégia Processamento barra a barra Atualizar Relatório 40 Inicializar moeda e instrumentos e carregar dados históricos Inicializar portfólio, contabilizar , ordens, estratégia Adicionar indicadores, sinais e regras Aplicar estratégia ao portfólio Atualizar carteira, conta, patrimônio Gerar relatórios de desempenho e gráficos 60 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 42/72 O add. indicator Os indicadores são tipicamente analíticos técnicos ou estatísticos padrão. 60 60 120 produtos, como 40 médias móveis, bandas, 80 modelos de preços ou indicadores são aplicados antes de sinais e regras, e a saída de indicadores pode ser usada como insumo para construir sinais ou regras 40 Código R: A função add. indicator> args (add. indicator) (estratégia, nome, argumentos, parâmetros = NULL, label = NULL,. enabled = TRUE, indexnum = NULL, loja = FALSE) NULL 60 Argumentos principais: estratégia estratégia nome do objeto nome do indicador (deve ser uma função R) 80 argumentos argumentos a serem passados para o nome do rótulo da função do indicador para referenciar o indicador Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 43/72 Adicionando um indicador a uma estratégia mm 40 60 80 100 120 adicionar uma média móvel simples de 10 meses R Código:> resumo de strat (strat) Nome do comprimento 1 assets 0 indicadores 1 60 sinais 0 regras 1 restrições 0 init 0 wrapup 0 chamada 2 Classe - nenhum-nenhum-nenhum-nenhum-nenhum-nenhum-nenhum-nenhumTipo de caractere lista de lista de NULL lista de lista de NULL chamada 80 Guy Yollin (Copyright © 2011 Estratégias de Negociação Quantitativas em R quantstrat-I 44/72 A função add. signals quantstrat suporta os seguintes tipos de sinais: sinal de cruzamento sigCrossover (”gt”, ”lt”, ”eq”, “gte”, ”100 lte”) mm 40 60 80 sigComparison sinal de comparação ("gt", "lt", "eq", "gte" ), lte ”sinal do limiar do limiar do limiar (” gt ”,“ lt ”,” eq ”,“ gte ”,”) lte ”sinal de pico / vale sigPeak (“ pico ”,“ fundo ”) 40 sinal sigFormula calculado a partir de uma fórmula R Código: A função add. signals function> args (add. signal) (estratégia, nome, argumentos, parâmetros = NULL, label = NULL, 60. enabled = TRUE, indexnum = NULL, loja = FALSE) NULL 120 Argumentos principais: estratégia 80 nome do objeto de estratégia nome do sinal (um dos 5 sinais suportados) argumentos argumentos a serem passados para a função do indicador Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 45/72 Adicionar sinais a uma estratégia adicionar sinal para cruzar acima do sinal SMA 40 addmm para cruzar abaixo de 60 SMA R Código:> strat strat summary (strat) Comprimento 601 nome ativos 0 indicadores 1 sinais 2 regras 1 restrições 0 800 inicialização wrap 0 chamada 2 Guy Yollin (Copyright 80 100 120 © Classe - none-none-none-none-none-none-none-none2011) Caractere de modo lista de lista de NULL lista de lista de NULL chamada Quantitative Trading Strategies in R quantstrat-I 46/72 A função add. rules A função add. rule adiciona uma regra a uma estratégia mm 40 60 80 R Código: A função add. rule> args (add. rule) function (estratégia, nome, argumentos , parameters = NULL, label = NULL, tipo = 40 c (NULL, "risco", "ordem", "rebalanceamento", "exi t "," enter "),. habilitado = TRUE, indexnum = NULL, path. dep = TRUE, timespan = NULL, store = FALSE) NULL 100 120 Argumentos principais: 60 nome da estratégia argumentos tipo 80 nome do objeto de estratégia da regra (geralmente ruleSignal) argumentos a serem passados para o regra função tipo de regra (”risco”, “ordem”, “reequilíbrio”, “sair” entrar ”,”) Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas na quantia-I R 47/72 A função ruleSignal ruleSignal é a regra padrão para gerar uma ordem de negociação em um sinal Código R: A função ruleSignal> args (ruleSignal) function (dados = mktdata, timestamp, sigco, sigval, orderqty = 0, ordertype, orderside = NULL, threshold = NULL, tmult = FALSE , substituir = TRUE, atraso = 1e-04, osFUN = "osNoOp", preço = c ("mercado", 40 "oposta", "fabricante"), portfólio, símbolo,. ruletype, TxnFees = 0, prefer = NULL, sethold = FALSE) NULL mm 40 60 80 100 120 Argumentos principais: 60 dados um objeto xts contendo dados de mercado (padrão mktdata) sigcol nome da coluna para checar r valor do sinal sigval do sinal para combinar a quantidade do pedido para o pedido ou "tudo", modificado pelo osFUN ordertype80 "mercado" limite "," stoplimit "," stoptrailing "," iceberg "," encomendas "longo”, curto ”ou NULL, função osFUN ou função de dimensionamento de nome do pedido (o padrão é osNoOp) Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 48/72 Adicionar regras a uma estratégia mm 40 60 80 100 120 adicionar regra para entrar quando Cl. gt. SMA é true add rule para sair quando Cl. lt. SMA é true R Code: 40> # go long quando fechar> MA> strat # exit60 quando close strat strat (strat) Comprimento 401 nome ativos 0 indicadores 1 sinais 2 regras 3 restrições 0 600 init wrapup 0 call 2 Classe - none-none-none-none-none-none-none-noneMode character NULL list list list NULL list list call O objeto strategy contém: 1 indicador definido pelo usuário 80 2 user definished signals 2 regras de negociação definidas pelo usuário Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 50/72 Fluxo de trabalho de backtesting de estratégia básica para quantstrat mm 40 60 80 100 120 Inicialização Definir estratégia Processamento barra a barra Atualizar relatório 40 Inicializar moeda e instrumentos e carregar dados históricos Inicializar portfólio, conta, ordens, estratégia Adicionar indicadores, sinais e regras Aplicar estratégia ao portfólio Atualizar carteira, conta, patrimônio Gerar relatórios de desempenho e gráficos 60 80 Guy Yollin (Copyright © 2011) Quantitative Trading Strategies no R quantstrat-I 51/72 A função applyStrategy mm 60 80 100 120 A função applyStrategy 40 aplica o estratégia para dados de mercado arbitrários Código R: A função applyStrategy function> args (applyStrategy) (estratégia, portfolios, mktdata = NULL, parameters = NULL, 40. verbose = TRUE) NULL Principais argumentos: estratégia 60 um objeto do tipo 'estratégia' portfólios parâmetros 80 uma lista de portfólios para aplicar a estratégia à lista nomeada de parâmetros a serem aplicados durante a avaliação da estratégia Guy Yollin (Copyright © 2011) Negociação Quantitativa Estratégias no R quantstrat-I 52/72 Aplicar a estratégia mm R Código:> out nomes (out) 40 60 80 100 120 40 [1] "qsFaber"> nomes (out $ qsFaber) [1] "SPY"> nomes ( out $ qsFaber $ SPY) 60 [1] "indicadores" "sinais" "regras"> classe (out $ qsFaber $ SPY $ indicadores) [1] "xts" "zoo" 80 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação O objeto mktdata é uma variável especial construída durante a execução de mm applyStrategy. É o objeto da série temporal 40 que contém 100 dados históricos dos dados 60 80 120, bem como os indicadores, sinais e regras calculados: Código R:> cauda (mktdata [, - (1: 5)], 12) 40 2010- 08-31 2010-09-30 2010-10-29 2010-11-30 2010-12-31 2011-01-31 2011-02-28 2011-03-31 2011-04-29 2011-05-31 2011- 06-30 2011-07-29 SPY. Adjustado 103,24 112,48 116,78 116,78 124,59 127,49 131,92 131,94 135,76 134,23 131,97 129,33 60 SMA10m 107,7569 108,3360 109,1411 110,3413 111,9953 113,32989 114,9287 117,4512 120,9029 123,5213 126,3944 128,0790 SMA10 Cl. gt. SMA Cl. lt. SMA 107,7569 ND 1 108.3360 1 NA 109.1411 NA NA 110.3413 ND NA 111.9953 NA NA 113.3289 NA NA 114.9287 NA NA 117.4512 NA NA 120.9079 NA NA 123.5213 NA NA 126.3944 NA NA 128.0790 NA NA 80 Inspecionar mktdata pode ser muito útil para entender o processamento e depuração de estratégia de Guy Yollin ( Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 54/72 Fluxo de trabalho de backtesting de estratégia básica para quantstrat mm 40 60 80 100 120 Inicialização D Estratégia efine Processamento barra a barra Relatórios de atualização 40 Inicializar moeda e instrumentos, e carregar dados históricos Inicializar portfólio, conta, ordens, estratégia Adicionar indicadores, sinais e regras Aplicar estratégia ao portfólio Atualizar carteira, conta, patrimônio Gerar relatórios de desempenho e gráficos 60 80 Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas no R quantstrat-I 55/72 atualização P & L mm 40 60 80 100 120 atualiza um intervalo de datas inteiro de uma vez funções devem ser chamadas em ordem Código R: 40> updatePortf (Portfólio = qs. strategy, Datas = paste ('::', as. Date (Sys. time ()), sep = '')) [1] "qsFaber"> updateAcct (nome = qs. strategy, Datas = índice (SPY )) 60 [1] "qsFaber"> dummy chart_Posn (qs. estratégia, símbolo = 'SPY', Datas = '1998 ::')> plot (add_SMA (n = 10, col = 4, on = 1, lwd = 2)) 60 80 Guy Yollin (Copyright © 2011) Quantitativas Estratégias de Negociação em R quantstrat-I 58/72 desempenho do sistema Faber / quanstrat SPY 140 1998-01-30 / 2011−07−29 mm 40 60 80 100 120 130 120 115 140 130 120 110 110 105 100 100 90 40 95 90 85 80 80 75 70 70 1000 800 600 400 200 0 1e + 05 Posicionamento 1000 qqqqqqq 1000 800 600 400 200 60 qqqqqq 0 1e + 05 8e + 04 6e + 04 4e + 04 CumPL 81950.02164 8e + 04 6e + 04 4e + 04 2e + 04 0e + 00 1998 Jan 1998 Jul 1998 Jan 1999 1999 Jul 1999 Jan 2000 2000 Jul 2000 Jan 2001 2001 Jul 2001 Jan 2002 2002 Jul 2002 Jan 2003 2003 Jul 2003 Jan 2004 2004 Jul 2004 Jan 2005 2005 Jul 2005 Jan 2006 2006 Jul 2006 Jan 2007 2007 Jul 2007 Jan 2008 2008 Jul 2008 Jan 2009 2009 Jul 2009 Jan 2010 2010 Jul 2010 2011 Jan 2011 Jul 2011 80 2e + 04 0e + 00 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 59/72 Transações Código R: mm 40 60 80 100 120> getTxns (Portfólio = qs. strategy, Symbol = "SPY") Txn. Qty 1997-12-31 0 1999-10-29 1000 40 2000- 09-29 -1000 2002-03-28 1000 2002-04-30 -1000 2003-04-30 1000 2004-08-31 -1000 2004-09-3060 1000 2007-12-31 -1000 2009-06-30 1000 2010-06-30 -1000 2010-07-30 1000 2010-08-31 -1000 2010-09-3080 1000 Txn. Price Txn. Fees Txn. Value Tx n. Avg. Cost Net. Txn. Realized. PL 0.00000 0 0.00 0.00000 0.000 112.38352 0 112383.52 112.38352 0.000 118.98858 0 -118988.58 118.98858 6605.062 96.28988 0 96289.88 96.28988 0.000 90.69007 0 -90690.07 90.69007 -5599.813 78.59565 0 78595.65 78.59565 0,000 96.86532 0 -96865.32 96.86532 18269.669 97,83755 0 97837,55 97,83755 0,000 136,15069 0 -136150,69 136,15069 38313,139 88,81119 0 88811,19 88,81119 0,000 101,18979 0 -101189,79 101,18979 12378,598 108,10113 0 108101,13 108,10113 0,000 103,23868 0 -103238,68 103,23868 -4862,443 112,48419 0 112484,19 112,48419 0,000 Guy Yollin (Copyright: © 2011) Estratégias de Negociação quantitativos em R quantstrat-I 60/72 Contorno mm 40 60 80 100 120 1 O pacote de absorção 40 2 O pacote quantstrat 60 3 Análise de desempenho 80 Guy Yollin (Copyright © 2011) Quantitativas Estratégias de Negociação em R quantstrat-I 61/72 O portfólio de blotter objeto R Código: mm 40 60 80 100 120> thePortfolio = getPortfolio (b. strategy)> nomes (thePortfolio) [1] "símbolos" "resumo"> nd mes (os $ símbolos do Portfólio) 40 [1] "SPY"> nomes (o Portfólio $ símbolos $ SPY) [1] "txn" "posPL" "posPL. USD" 60> nomes (o Portfólio $ resumo) [1] "Longo. Valor "[5]" Realizado. PL "[9]" Net. Trading. PL "" Short. Value "" Não realizado. PL "" Valor líquido "" Valor bruto "" Gross. Trading. PL "" Txn. Taxas "> biblioteca (treliça) 80> enredo (xyplot (thePortfolio $ summary, xlab =" ", tipo =" h ", col = 4)) Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 62 / 72 Gráfico do resumo da carteira série temporal objeto 2000 −0,4 0,0 0,4 100000 2005 2010 mm Long. Value 40 60 80 Short. Value 100 120 0 Net. Value 100000 Gross. Value 40 Realizado. PL 0 0 100000 Unrealized. PL 0 0 20000 - 10000 0 10000 −10000 0 10000 Gross. Trading. PL −0,4 0,0 0,4−40000 Txn. Fees 60 Net. Trading. PL 80 2000 2005 2010 Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 63/72 Blotter account object Código R: mm 40 60 80 100 120> theAccount = getAccount (b. strategy)> nomes (theAccount) [1] "portfólios" "sumar y "> nomes (os portfólios da Conta $) 40 [1]" bFaber "> nomes (a conta $ portfólios $ bFaber) [1]" Long. Value "[5]" Realizado. PL "60 [9]" Net. Trading. PL "" Short. Value "" Unrealized. PL "" Net. Value "" Valor bruto "" Gross. Trading. PL "" Txn. Fees "> nomes (theAccount $ summary) [1]" Adições "[5] "Int. Income" [9] "Advisory. Fees" 80 "Retiradas" "Realizado. PL" "Gross. Trading. PL" "Txn. Fees" "Net. Performance" "End. Eq" "Unrealized. PL" " Net. Trading. PL "Guy Yollin (Copyright © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 64/72 Estatísticas do Comércio mm R Código:> (biblioteca tstats (PerformanceAnalytics)> rets tail (rets, 12) SPY 2010-08- 3140 -4.862443e-03 2010-09-30 0.000000e + 00 2010-10-29 4.297123e-03 2010-11-30 0.000000e + 00 2010-12-31 7.807092e-03 2011-01-31 2.902940‐ 03 2011-02-28604.428709e-03 2011-03-31 1.584192e-05 2011-04-29 3.821053e-03 2011-05-31 -1.522454e-03 2011-06-30 -2.264505e-03 2011-07 -29 -2.640000e-03> charts. PerformanceSummary (rets, colorset = bluefocus) 80 100 120 80 Guy Yollin (Copyrig © 2011) Estratégias de Negociação Quantitativas em R quantstrat-I 67/72 Retorno cumulativo e rebaixamento Desempenho SPY 0,10 mm 40 60 80 100 120 Retorno acumulado 0,04 0,06 0,08 40 Retorno mensal 0,000 0,00 0 0,010 0,00 0,02 60 0,000 −0,010 Abaixamento −0,010 −0,020 80 Dez 97 Jul 98 Jul 99 Jul 00 Jul 01 Jul 02 Jul 03 Jul 04 Jul 05 Jul 06 Jul 07 Jul 08 Jul 09 Jul 10 Jul 11 Data Guy Yollin (Copyright © 2011) Estratégias Quantitativas de Negociação em R quantstrat-I 68/72 Calcule as estatísticas de retorno mm 40 60 80 100 120 R Código:> PA1.tab PA2.tab tab1 res. tab1 res. tab2 res. tab3 tab2.
Estratégias Quantitativas de Negociação na RPart 1 de 3.
Estratégias Quantitativas de Negociação na Parte R 3 de 3.
Estratégias Quantitativas de Negociação na RPart 3 de 3.
Estratégias Quantitativas de Negociação na R Parte 2 de 3.
Estratégias Quantitativas de Negociação na RPart 2 de 3.
© 2012 Locke em seu sucesso, LLC. Parte 1 de 3, 2/4/12 de John Tradinge Locke em seu sucesso, LLC. Saiba o que você quer, faça isso.
document. write(adsense. get_banner_code('200x90')); Slide 1 © 2012 Locke in Your Success, LLC. Butterfly Trading Strategies part 1 of 3, 2/4/12 John Locke Locke…
© 2012 Locke in Your Success, LLC. Butterfly Trading Strategies part 2 of 3, 2/4/12 John Locke Locke in Your Success, LLC. Know what you want, make it.
document. write(adsense. get_banner_code('200x90')); Slide 1 © 2012 Locke in Your Success, LLC. Butterfly Trading Strategies part 2 of 3, 2/4/12 John Locke Locke…
2008 in Pictures - Part 1 of 3.
Enciclopédia de Estratégias de Negociação.
Enciclopédia de Estratégias de Negociação.
Mixed strategies in baseball Part 1.
The Application of Trend Following Strategies in Stock Market Trading.
The Application of Trend Following Strategies in Stock Market Trading Simon Fong, Jackie Tai Department of Computer and Information Science University of Macau, Macao SAR…
Marketing Growth Strategies for Accounting Firms - Marketing Machine Webinar - Part 1 of 3.
Slides from 9 June 2010 webinar, "10 Steps to Building a Marketing Machine for Growing Your Accounting Firm" by Practice Paradox.
© 2009 IBM Corporation 1 Eric Hess, IBM 2008 IBM Power Systems - IBM i High Availability Strategies & Planning for 2012 Part 3 of 3 - Part 3 of 3 - HA.
Slide 1 © 2009 IBM Corporation 1 Eric Hess, IBM 2008 IBM Power Systems - IBM i High Availability Strategies & Planning for 2012 Part 3 of 3 - Part 3 of 3 - HA and DR…
Advanced Trading Strategies in Options.
Overview Advanced Trading Strategies in Options Option or choice is a derivative financial instrument whose market is growing fast. It is a contract between a buyer and a…
A Enciclopédia das Estratégias de Negociação.
THE ENCYCLOPEDIA OF TRADING STRATEGIES JEFFREY OWEN KATZ, Ph. D. DONNA 1. M C CORMICK T R A D E M A R K S A N D S E R V I C E M A R K S Company and product names associated…
Implementing Strategies ( Part 1 )
3 Easy Forex Trading Strategies for Beginners.
Novo no Forex? Click the link to learn more about the truths of the Foreign Exchange Market!
Advances in Quantitative Analysis of Finance and Accounting Vol. 1
5405.tp 1/7/04 3:03 PM Page 1 ADVANCES IN QUANTITATIVE ANALYSIS OF FINANCE AND ACCOUNTING New Series July 13, 2005 13:47 WSPC/B272 fm. tex Advances in Quantitative Analysis…
Quantitative Finance Graduate Level Part 1.
Teaching Materials Useful for Quantitative Risk Management.
Forex Multiplier - The 3 In 1 Trading Software.
The Only Software Suitable For Conservative, Moderate And Aggressive Traders. It Gives Exact Entry Points, Targets And Stop Losses. Professional Copywrite With Video Ad.…
Algorithmic & quantitative trading webinar.
This webinar gives a brief introduction to Algorithmic Trading followed by the changing skill sets that are required in the new age trading business by mapping the required…
Palm Tree of Devorah Part 3 - R. Moses Cordovero.
Palm Tree of Devorah Part 3 - R. Moses Cordovero.
Prof. David R. Jackson Dept. of ECE Notes 6 ECE 5317-6351 Microwave Engineering Fall 2011 Waveguides Part 3: Attenuation 1.
Slide 1 Prof. David R. Jackson Dept. of ECE Notes 6 ECE 5317-6351 Microwave Engineering Fall 2011 Waveguides Part 3: Attenuation 1 Slide 2 For most practical waveguides and…
Estratégia de Negociação Quantitativa Usando R: Um Guia Passo a Passo.
Neste post vamos discutir sobre a construção de uma estratégia de negociação usando R. Antes de nos concentrarmos nos jargões de negociação usando R, vamos passar algum tempo entendendo o que R é. R é uma fonte aberta. Existem mais de 4000 pacotes adicionais, 18.000 mais membros do grupo do LinkedIn e quase 80 grupos Meetup atualmente em vigor. É uma ferramenta perfeita para análise estatística, especialmente para análise de dados. A configuração concisa do Comprehensive R Archive Network sabe como CRAN fornece a lista de pacotes, juntamente com a instalação básica necessária. Há muitos pacotes disponíveis dependendo da análise que precisa ser feita. Para implementar a estratégia de negociação, usaremos o pacote chamado quantstrat.
Processo de quatro etapas de qualquer estratégia básica de negociação.
Teste de formação de hipóteses.
Nossa hipótese é formulada como “mercado é revertido à média”. A reversão à média é uma teoria que sugere que os preços acabam voltando ao valor médio. A segunda etapa envolve testar a hipótese para a qual formulamos uma estratégia em nossa hipótese e calculamos indicadores, sinais e métricas de desempenho. A fase de testes pode ser dividida em três etapas, obtendo os dados, escrevendo a estratégia e analisando a saída. Neste exemplo, consideramos NIFTY-Bees. É um fundo negociado em bolsa administrado pela Goldman Sachs. NSE tem um volume enorme para o instrumento, portanto, consideramos isso. A imagem abaixo mostra o preço do Open-High-Low-Close do mesmo.
Nós definimos um nível de limiar para comparar as flutuações no preço. Se o preço aumenta / diminui, atualizamos a coluna de limite. O preço de fechamento é comparado com a faixa superior e com a faixa inferior. Quando a banda superior é cruzada, é um sinal para vender. Da mesma forma, quando a banda inferior é cruzada, é um sinal de venda.
A seção de codificação pode ser resumida como segue,
Uma visão de helicóptero para a saída da estratégia é dada no diagrama abaixo.
Assim, nossa hipótese de que o mercado é reversão à média é suportada. Como este é o back-testing, temos espaço para refinar os parâmetros de negociação que melhorariam nossos retornos médios e os lucros realizados. Isso pode ser feito definindo diferentes níveis de limite, regras de entrada mais rigorosas, stop loss etc. Pode-se escolher mais dados para back-testing, usar a abordagem bayseiana para configurar o limiar, considerar a volatilidade.
Uma vez que você esteja confiante sobre a estratégia de negociação apoiada pelos resultados do backtesting, você pode entrar em negociações ao vivo. O ambiente de produção é um grande tópico em si e está fora do escopo no contexto do artigo. Para explicar em breve isso envolveria escrever a estratégia em uma plataforma de negociação.
Como mencionado anteriormente, estaríamos construindo o modelo usando o pacote quantstrat. O Quantstrat fornece uma infraestrutura genérica para modelar e fazer backtest de estratégias quantitativas baseadas em sinal. É uma camada de abstração de alto nível (construída em xts, FinancialInstrument, blotter, etc.) que permite construir e testar estratégias em poucas linhas de código.
As principais características do quantstrat são,
Suporta estratégias que incluem indicadores, sinais e regras Permite que estratégias sejam aplicadas a portfólios de múltiplos ativos Suporta os tipos de pedidos de mercado, limite, stoplimit e stoptrailing Suporta o dimensionamento de pedidos e a otimização de parâmetros.
Neste post, construímos uma estratégia que inclui indicadores, sinais e regras.
Para um modelo baseado em sinal genérico, seguem os objetos que se deve considerar,
Instrumentos - Contém indicadores de dados de mercado - Valores quantitativos derivados de dados de mercado Sinais - Resultado da interação entre dados de mercado e indicadores Regras - Gerar ordens usando dados de mercado, indicadores e sinais.
Sem muita demora, vamos discutir a parte de codificação. Nós preferimos R studio para codificação e insistimos que você use o mesmo. Você precisa ter certos pacotes instalados antes de programar a estratégia.
O seguinte conjunto de comandos instala os pacotes necessários.
Depois de instalar os pacotes, importe-os para uso posterior.
Leia os dados do arquivo csv e converta-os em objeto xts.
Inicializamos o portfólio com o estoque, a moeda, o patrimônio inicial e o tipo de estratégia.
Adicione o limite de posição se você deseja negociar mais de uma vez no mesmo lado.
Crie o objeto de estratégia.
Nós construímos uma função que calcula os limiares que queremos trocar. Se o preço se mover pelo thresh1, atualizamos o limite para o novo preço. Novas bandas para negociação são Threshold +/- Thresh2. A saída é um objeto xts, embora usemos a função reclass para garantir.
Adicione o indicador, o sinal e a regra de negociação.
Execute a estratégia e dê uma olhada no livro de pedidos.
Atualize o portfólio e visualize as estatísticas do comércio.
Aqui está o código completo.
Quando estiver familiarizado com essas noções básicas, você poderá dar uma olhada em como começar a usar o pacote quantimod em R. Ou, caso você seja bom em C ++, dê uma olhada em uma estratégia de exemplo codificada em C ++.
Se você é um profissional de varejo ou um profissional da área de tecnologia que deseja iniciar sua própria agência de negociação automatizada, comece a aprender o comércio de algoritmos hoje mesmo! Comece com conceitos básicos como arquitetura de negociação automatizada, microestrutura de mercado, sistema de backtesting de estratégia e sistema de gerenciamento de pedidos.
LearnDataSci.
Home » Python for Finance, Part 2: Intro to Quantitative Trading Strategies.
Python for Finance, Part 2: Intro to Quantitative Trading Strategies.
Python for Finance, Part 2: Intro to Quantitative Trading Strategies.
Language: Python 3.5 Libraries: pandas, numpy, and matplotlib iPython notebook: available on GitHub.
In Python for Finance, Part I, we focused on using Python and Pandas to.
retrieve financial time-series from free online sources (Yahoo), format the data by filling missing observations and aligning them, calculate some simple indicators such as rolling moving averages and visualise the final time-series.
Como um lembrete, o dataframe contendo os três & # 8220; limpos & # 8221; preço timeeries tem o seguinte formato:
We have also calculated the rolling moving averages of these three timeseries as follows. Note that when calculating the $M$ days moving average, the first $M-1$ are not valid, as $M$ prices are required for the first moving average data point.
Building on these results, our ultimate goal will be to design a simple yet realistic trading strategy. However, first we need to go through some of the basic concepts related to quantitative trading strategies, as well as the tools and technues in the process.
General considerations about trading strategies.
There are several ways one can go about when a trading strategy is to be developed. One approach would be to use the price time-series directly and work with numbers that correspond to some monetary value. For example, a researcher could be working with time-series expressing the price of a given stock, like the time-series we used in the previous article. Similarly, if working with fixed income instruments, e. g. bonds, one could be using a time-series expressing the price of the bond as a percentage of a given reference value, in this case the par value of the bond. Working with this type of time-series can be more intuitive as people are used to thinking in terms of prices. However, price time-series have some drawbacks. Prices are usually only positive, which makes it harder to use models and approaches which require or produce negative numbers. In addition, price time-series are usually non-stationary, that is their statistical properties are less stable over time.
An alternative approach is to use time-series which correspond not to actual values but changes in the monetary value of the asset. These time-series can and do assume negative values and also, their statistical properties are usually more stable than the ones of price time-series. The most frequently used forms used are relative returns defined as.
and log-returns defined as.
where $p\left(t\right)$ is the price of the asset at time $t$. For example, if $p\left(t\right) = 101$ and $p\left(t-1\right) = 100$ then $r_ >\left(t\right) = \frac = 1\%$.
There are several reasons why log-returns are being used in the industry and some of them are related to long-standing assumptions about the behaviour of asset returns and are out of our scope. However, what we need to point out are two quite interesting properties. Log-returns are additive and this facilitates treatment of our time-series, relative returns are not. We can see the additivity of log-returns in the following equation.
which is simply the log-return from $t_0$ to $t_2$. Secondly, log-returns are approximately equal to the relative returns for values of $\frac $ sufficiently close to $1$. By taking the 1st order Taylor expansion of $\log\left( \frac \right)$ around $1$, we get.
Both of these are trivially calculated using Pandas as:
O R Trader.
Usando R e ferramentas relacionadas em Finanças Quantitativas.
Arquivo para as Estratégias de Negociação & # 8216; & # 8217; Categoria.
Vinculando R ao IQFeed com o pacote QuantTools.
O IQFeed fornece serviços de dados de fluxo contínuo e soluções de negociação que cobrem o mercado agrícola, de energia e financeiro. É um provedor de feed de dados bem conhecido e reconhecido, voltado para usuários de varejo e pequenas instituições. O preço da assinatura começa em cerca de US $ 80 / mês.
Stanislav Kovalevsky desenvolveu um pacote chamado QuantTools. É um pacote tudo em um projetado para melhorar a modelagem de negociação quantitativa. Ele permite baixar e organizar dados históricos de mercado de várias fontes, como Yahoo, Google, Finam, MOEX e IQFeed. O recurso que mais me interessa é a capacidade de vincular o IQFeed à R. Eu uso o IQFeed há alguns anos e estou feliz com ele (não estou afiliado à empresa em nenhum caminho). Mais informações podem ser encontradas aqui. Eu tenho procurado uma integração dentro de R por um tempo e aqui está. Como resultado, depois que fiz alguns testes, mudei meu código que ainda estava em Python para R. Apenas para completar, aqui está um link que explica como baixar dados históricos do IQFeed usando Python.
A QuantTools oferece quatro funcionalidades principais: Obter dados de mercado, Armazenar / Recuperar dados de mercado, Dados de séries temporais de plotagem e Testes reversos.
Primeiro, verifique se o IQfeed está aberto. Você pode baixar dados diários ou intradiários. O código abaixo faz o download dos preços diários (Aberto, Alto, Baixo, Fechado) para o SPY de 1º de janeiro de 2017 a 1º de junho de 2017.
O código abaixo faz o download dos dados intraday de 1º de maio de 2017 a 3 de maio de 2017.
Observe o parâmetro do período. Pode usar qualquer um dos seguintes valores: tick, 1min, 5min, 10min, 15min, 30min, hora, dia, semana, mês, dependendo da freqüência que você precisa.
O QuantTools facilita o processo de gerenciar e armazenar dados do mercado de ticks. Você acabou de configurar os parâmetros de armazenamento e está pronto para começar. Os parâmetros são onde, desde que data e quais símbolos você gostaria de armazenar. Sempre que você puder adicionar mais símbolos e se eles não estiverem presentes em um armazenamento, o QuantTools tentará obter os dados da data de início especificada. O código abaixo salvará os dados no seguinte diretório: & # 8220; C: / Users / Arnaud / Documents / Market Data / feed & # 8221 ;. Há uma subpasta por instrumento e os dados são exibidos em arquivos. rds.
Você também pode armazenar dados entre datas específicas. Substitua a última linha de código acima por uma das abaixo.
Agora, se você quiser recuperar alguns dos dados armazenados, basta executar algo como:
Observe que apenas os ticks são suportados no armazenamento local, portanto, o período deve ser & # 8216; tick & # 8217;
O QuantTools fornece a função plot_ts para plotar dados de séries temporais sem fins de semana, feriados e lacunas durante a noite. No exemplo abaixo, primeiro recupero os dados armazenados acima, depois seleciono as primeiras 100 observações de preço e, finalmente, desenho o gráfico.
Duas coisas para notar: primeiro espião é um objeto data. table, portanto, a sintaxe acima. Para obter uma visão geral rápida dos recursos do data. table, confira esta excelente folha de dicas do DataCamp. Segundo, o parâmetro local é TRUE, pois os dados são recuperados do armazenamento interno.
O QuantTools permite escrever sua própria estratégia de negociação usando sua API C ++. Eu não vou elaborar sobre isso, pois isso é basicamente código C ++. Você pode consultar a seção Exemplos no site da QuantTools.
No geral, acho o pacote extremamente útil e bem documentado. O único bit faltante é o feed ao vivo entre R e IQFeed, que fará do pacote uma solução real de ponta a ponta.
Como de costume, qualquer comentário é bem-vindo.
BERT: um recém-chegado na conexão R Excel.
Há alguns meses, um leitor me mostrou essa nova maneira de conectar R e Excel. Eu não sei há quanto tempo isso acontece, mas nunca me deparei com isso e nunca vi nenhum post ou artigo de blog sobre isso. Então eu decidi escrever um post enquanto a ferramenta realmente vale a pena e antes que alguém pergunte, eu não estou relacionado à empresa de forma alguma.
BERT significa Basic Excel R Toolkit. É gratuito (licenciado sob a GPL v2) e foi desenvolvido pela Structured Data LLC. No momento em que escrevo, a versão atual do BERT é 1.07. Mais informações podem ser encontradas aqui. De uma perspectiva mais técnica, o BERT é projetado para suportar a execução de funções R a partir de células da planilha do Excel. Em termos do Excel, é para escrever Funções definidas pelo usuário (UDFs) em R.
Neste post eu não vou mostrar como R e Excel interagem via BERT. Há muito bons tutoriais aqui, aqui e aqui. Em vez disso, quero mostrar como usei BERT para construir uma torre de controle & # 8220; & # 8221; para minha negociação.
Meus sinais de negociação são gerados usando uma longa lista de arquivos R, mas eu preciso da flexibilidade do Excel para exibir os resultados de forma rápida e eficiente. Como mostrado acima, o BERT pode fazer isso para mim, mas também quero adaptar o aplicativo às minhas necessidades. Combinando o poder do XML, VBA, R e BERT, posso criar um aplicativo bonito, mas poderoso, na forma de um arquivo do Excel com código VBA mínimo. Por fim, tenho um único arquivo do Excel reunindo todas as tarefas necessárias para gerenciar meu portfólio: atualização de banco de dados, geração de sinal, submissão de pedidos, etc. & # 8230; Minha abordagem pode ser dividida nos três passos abaixo:
Use XML para criar menus e botões definidos pelo usuário em um arquivo do Excel. Os menus e botões acima são essencialmente chamadas para funções do VBA. Essas funções do VBA são encapsuladas em torno de funções R definidas usando BERT.
Com essa abordagem, posso manter uma clara distinção entre o núcleo do meu código mantido em R, SQL e Python e tudo o que é usado para exibir e formatar os resultados mantidos no Excel, VBA & amp; XML Nas próximas seções apresento o pré-requisito para desenvolver tal abordagem e um guia passo a passo que explica como o BERT poderia ser usado para simplesmente passar dados de R para o Excel com o mínimo de código VBA.
1 & # 8211; Baixe e instale o BERT neste link. Quando a instalação estiver concluída, você deve ter um novo menu Add-Ins no Excel com os botões, conforme mostrado abaixo. É assim que o BERT se materializa no Excel.
2 & # 8211; Faça o download e instale o editor de interface do usuário personalizada: O Editor de interface do usuário personalizado permite criar menus e botões definidos pelo usuário na faixa de opções do Excel. Um procedimento passo a passo está disponível aqui.
1 & # 8211; Código R: A função R abaixo é um código muito simples apenas para fins ilustrativos. Calcula e retorna os resíduos de uma regressão linear. É isso que queremos recuperar no Excel. Salve isso em um arquivo chamado myRCode. R (qualquer outro nome é bom) em um diretório de sua escolha.
2 & # 8211; functions. R em BERT: No Excel selecione Add-Ins - & gt; Diretório base e abra o arquivo chamado functions. R. Neste arquivo, cole o seguinte código. Certifique-se de inserir o caminho correto.
Isso é apenas o fornecimento de BERT no arquivo R que você criou acima. Em seguida, salve e feche as funções do arquivo. Se você quiser fazer qualquer alteração no arquivo R criado na etapa 1, terá que recarregá-lo usando o botão BERT & # 8220; Recarregar o arquivo de inicialização & # 8221; do menu Add-Ins no Excel.
3 & # 8211; No Excel: Crie e salve um arquivo chamado myFile. xslm (qualquer outro nome é bom). Este é um arquivo habilitado para macro que você salva no diretório de sua escolha. Depois que o arquivo for salvo, feche-o.
4 & # 8211; Abra o arquivo criado acima no editor da interface do usuário personalizada: Depois que o arquivo estiver aberto, cole o código abaixo.
Você deve ter algo parecido com isto no editor de XML:
Essencialmente, este pedaço de código XML cria um menu adicional (RTrader), um novo grupo (My Group) e um botão definido pelo usuário (New Button) na faixa de opções do Excel. Quando terminar, abra myFile. xslm no Excel e feche o Editor de UI personalizado. Você deveria ver algo assim.
5 & # 8211; Abra o editor VBA: Em myFile. xlsm, insira um novo módulo. Cole o código abaixo no módulo recém-criado.
Isso apaga os resultados anteriores na planilha antes de lidar com os novos.
6 & # 8211; Clique no botão New: Agora volte para a planilha e no menu RTrader, clique no botão & # 8220; New Button & # 8221; botão. Você deve ver algo como o abaixo aparece.
O guia acima é uma versão muito básica do que pode ser obtido usando o BERT, mas mostra como combinar o poder de várias ferramentas específicas para criar seu próprio aplicativo personalizado. Da minha perspectiva, o interesse de tal abordagem é a capacidade de colar R e Excel, obviamente, mas também incluir pedaços de código XML (e em lote) do Python, SQL e muito mais. Isso é exatamente o que eu precisava. Por fim, gostaria de saber se alguém tem alguma experiência com o BERT?
Estratégia de negociação: aproveitando ao máximo os dados da amostra.
Ao testar estratégias de negociação, uma abordagem comum é dividir o conjunto de dados inicial em dados de amostra: a parte dos dados projetados para calibrar o modelo e os dados de amostra: a parte dos dados usada para validar a calibração e garantir que o desempenho criado na amostra será refletido no mundo real. Como regra geral, cerca de 70% dos dados iniciais podem ser usados para calibração (ou seja, na amostra) e 30% para validação (ou seja, fora da amostra). Em seguida, uma comparação entre os dados de entrada e de saída ajuda a decidir se o modelo é suficientemente robusto. Este post visa dar um passo adiante e fornece um método estatístico para decidir se os dados fora da amostra estão alinhados com o que foi criado na amostra.
No gráfico abaixo, a área azul representa o desempenho fora da amostra de uma das minhas estratégias.
Uma inspeção visual simples revela um bom ajuste entre o desempenho de entrada e saída da amostra, mas que grau de confiança eu tenho nisso? Nesta fase não muito e esta é a questão. O que é realmente necessário é uma medida de similaridade entre os conjuntos de dados de entrada e de saída. Em termos estatísticos, isso pode ser traduzido como a probabilidade de que os números de desempenho dentro e fora da amostra sejam provenientes da mesma distribuição. Existe um teste estatístico não paramétrico que faz exatamente isso: o teste de Kruskall-Wallis. Uma boa definição deste teste pode ser encontrada no R-Tutor Uma coleção de amostras de dados é independente se eles vêm de populações não relacionadas e as amostras não afetam umas às outras. Usando o Teste de Kruskal-Wallis, podemos decidir se as distribuições populacionais são idênticas sem assumi-las para seguir a distribuição normal. & # 8221; O benefício adicional desse teste não está assumindo uma distribuição normal.
Existem outros testes da mesma natureza que poderiam se encaixar nessa estrutura. O teste de Mann-Whitney-Wilcoxon ou os testes de Kolmogorov-Smirnov se encaixam perfeitamente na estrutura descrita aqui, porém isso está além do escopo deste artigo para discutir os prós e contras de cada um desses testes. Uma boa descrição junto com exemplos de R pode ser encontrada aqui.
Aqui está o código usado para gerar o gráfico acima e a análise:
No exemplo acima, o período de amostragem é maior do que o período de amostragem, portanto, criei aleatoriamente 1.000 subconjuntos dos dados da amostra, cada um deles tendo o mesmo comprimento que os dados fora da amostra. Então, testei cada um em um subconjunto de amostras em relação aos dados fora da amostra e gravei os valores p. Esse processo não cria um único valor p para o teste Kruskall-Wallis, mas uma distribuição que torna a análise mais robusta. Neste exemplo, a média dos valores de p é bem acima de zero (0,478), indicando que a hipótese nula deve ser aceita: há fortes evidências de que os dados de entrada e saída da amostra são provenientes da mesma distribuição.
Como de costume, o que é apresentado neste post é um exemplo de brinquedo que apenas arranha a superfície do problema e deve ser adaptado às necessidades individuais. No entanto, penso que propõe um quadro estatístico interessante e racional para avaliar os resultados fora da amostra.
Este post é inspirado nos dois artigos seguintes:
Vigier Alexandre, Chmil Swann (2007), "Efeitos de várias funções de otimização no desempenho fora da amostra de estratégias de negociação geneticamente evoluídas", prevendo a conferência sobre mercados financeiros.
Vigier Alexandre, Chmil Swann (2010), «Um processo de otimização para melhorar a consistência da amostra, um caso da Bolsa de Valores», JP Morgan Cazenove Equity Quantitative Conference, Londres, outubro de 2010.
Apresentando o fidlr: LoanceR de Dados Financeiros.
O fidlr é um suplemento do RStudio projetado para simplificar o processo de download de dados financeiros de vários provedores. Esta versão inicial é um wrapper em torno da função getSymbols no pacote quantmod e somente o Yahoo, Google, FRED e Oanda são suportados. Eu provavelmente adicionarei funcionalidades ao longo do tempo. Como de costume com essas coisas, apenas um lembrete: "O SOFTWARE É FORNECIDO" COMO ESTÁ, SEM GARANTIA DE NENHUM TIPO "# 8230; & # 8221;
Como instalar e usar o fidlr?
Você pode obter o addin / package do seu repositório Github aqui (eu vou registrá-lo no CRAN mais tarde) Instale o addin. Existe um excelente tutorial para instalar o RStudio Addins aqui. Depois que o addin é instalado, ele deve aparecer no menu Addin. Basta escolher fidlr no menu e uma janela como abaixo deve aparecer. Escolha um provedor de dados no menu suspenso Origem. Selecione um intervalo de datas no menu Data Insira o símbolo que você deseja baixar na caixa de texto do instrumento. Para baixar vários símbolos basta digitar os símbolos separados por vírgulas. Use os botões de opção para escolher se deseja baixar o instrumento em um arquivo csv ou no ambiente global. O arquivo csv será salvo no diretório de trabalho e haverá um arquivo csv por instrumento. Pressione Executar para obter os dados ou Fechar para fechar o suplemento.
Mensagens de erro e avisos são manipulados pelos pacotes subjacentes (quantmod e Shiny) e podem ser lidos no console.
Esta é uma primeira versão do projeto, então não espere a perfeição, mas esperamos que melhore com o tempo. Por favor, informe qualquer comentário, sugestão, erro etc & # 8230; para: thertrader @ gmail.
Manter um banco de dados de arquivos de preços em R.
Fazer pesquisa quantitativa implica muita análise de dados e é preciso dados limpos e confiáveis para conseguir isso. O que é realmente necessário são dados limpos que sejam facilmente acessíveis (mesmo sem uma conexão com a Internet). A maneira mais eficiente de fazer isso para mim foi manter um conjunto de arquivos csv. Obviamente, este processo pode ser tratado de várias maneiras, mas eu achei um tempo extra muito eficiente e simples para manter um diretório onde eu armazeno e atualizo arquivos csv. Eu tenho um arquivo csv por instrumento e cada arquivo é nomeado após o instrumento que ele contém. A razão pela qual eu faço isso é dupla: Primeiro, eu não quero baixar dados (de preço) do Yahoo, Google, etc & # 8230; toda vez que eu quiser testar uma nova ideia, mas mais importante, uma vez que eu identifiquei e consertei um problema, eu não quero ter que fazer isso novamente na próxima vez que eu precisar do mesmo instrumento. Simples, mas muito eficiente até agora. O processo é resumido no gráfico abaixo.
Em tudo o que se segue, presumo que os dados estão vindo do Yahoo. O código terá que ser alterado para os dados do Google, Quandl, etc & # 8230; Além disso, apresento o processo de atualização dos dados diários de preços. A configuração será diferente para dados de frequência mais alta e outro tipo de conjunto de dados (ou seja, diferente dos preços).
1 & # 8211; Download de dados inicial (listOfInstruments. R & amp; historicalData. R)
O arquivo listOfInstruments. R é um arquivo contendo apenas a lista de todos os instrumentos.
Se um instrumento não é parte da minha lista (ou seja, nenhum arquivo csv na minha pasta de dados) ou se você fizer isso pela primeira vez, você terá que baixar o conjunto de dados históricos inicial. O exemplo abaixo faz o download de um conjunto de cotações diárias dos ETFs do Yahoo Finance até janeiro de 2000 e armazena os dados em um arquivo csv.
2 & # 8211; Atualizar dados existentes (updateData. R)
O código abaixo começa a partir de arquivos existentes na pasta dedicada e atualiza todos eles um após o outro. Eu costumo executar este processo todos os dias, exceto quando eu estou de férias. Para adicionar um novo instrumento, basta executar o passo 1 acima apenas para este instrumento.
3 & # 8211; Crie um arquivo de lote (updateDailyPrices. bat)
Outra parte importante do trabalho é criar um arquivo em lotes que automatize o processo de atualização acima (eu sou um usuário do Windows). Isso evita abrir o R / RStudio e executar o código a partir dele. O código abaixo é colocado em um arquivo. bat (o caminho deve ser alterado com a configuração do leitor). Note que eu adicionei um arquivo de saída (updateLog. txt) para rastrear a execução.
O processo acima é extremamente simples, pois descreve apenas como atualizar dados de preços diários. Eu tenho usado isso por um tempo e tem funcionado muito bem para mim até agora. Para dados mais avançados e / ou freqüências mais altas, as coisas podem ficar muito mais complicadas.
Como de costume, qualquer comentário é bem-vindo.
Avaliação fatorial na gestão quantitativa de portfólios.
Quando se trata de gerenciar uma carteira de ações versus um benchmark, o problema é muito diferente de definir uma estratégia de retorno absoluto. No primeiro, é preciso manter mais estoques do que no segundo, onde nenhuma ação pode ser mantida se não houver oportunidade suficiente. A razão para isso é o erro de rastreamento. Isso é definido como o desvio padrão do retorno da carteira menos o retorno de referência. Quanto menos ações forem mantidas em relação a um benchmark, maior será o erro de rastreamento (por exemplo, maior risco).
A análise a seguir é amplamente inspirada no livro "Active Portfolio Management" # 8221; por Grinold & amp; Kahn Esta é a bíblia para qualquer pessoa interessada em administrar um portfólio em relação a um benchmark. Eu encorajo fortemente qualquer pessoa com interesse no tópico a ler o livro do começo ao fim. É muito bem escrito e estabelece as bases da gestão sistemática de carteiras ativas (não tenho nenhuma afiliação ao editor ou aos autores).
Aqui, estamos tentando classificar com a maior precisão possível as ações no universo de investimento em uma base de retorno a termo. Muitas pessoas criaram muitas ferramentas e inúmeras variantes dessas ferramentas foram desenvolvidas para conseguir isso. Neste post concentro-me em duas métricas simples e amplamente utilizadas: Coeficiente de Informação (IC) e Quantiles Return (QR).
O CI fornece uma visão geral da capacidade de previsão do fator. Mais precisamente, isso é uma medida de quão bem o fator classifica os estoques em uma base de retorno a termo. O IC é definido como a correlação de classificação (ρ) entre a métrica (por exemplo, fator) e o retorno para a frente. Em termos estatísticos, a correlação de postos é uma medida não paramétrica da dependência entre duas variáveis. Para uma amostra de tamanho n, as n pontuações brutas são convertidas em classificações e ρ é calculado a partir de:
O horizonte para o retorno para frente tem que ser definido pelo analista e é uma função do turnover da estratégia e da decadência alfa (isso tem sido objeto de extensa pesquisa). Obviamente, os CIs devem ser o mais alto possível em termos absolutos.
Para o leitor atento, no livro de Grinold & amp; Kahn é uma fórmula que liga a Relação de Informação (IR) e IC: com amplitude sendo o número de apostas independentes (trades). Essa fórmula é conhecida como a lei fundamental do gerenciamento ativo. O problema é que, muitas vezes, definir com precisão a amplitude não é tão fácil quanto parece.
Para obter uma estimativa mais precisa do fator poder preditivo, é necessário dar um passo além e agrupar os estoques por quantis de valores de fatores e, em seguida, analisar o retorno médio a termo (ou qualquer outra métrica de tendência central) de cada um deles. quantis. A utilidade desta ferramenta é simples. Um fator pode ter um bom IC, mas seu poder preditivo pode ser limitado a um pequeno número de ações. Isso não é bom, pois um gerente de portfólio terá que escolher ações dentro de todo o universo para cumprir sua restrição de erro de rastreamento. Os bons quantis-retorno são caracterizados por uma relação monótona entre os quantis individuais e os retornos futuros.
Todas as ações no índice S & amp; P500 (no momento da redação). Obviamente, há um viés de sobrevivência: a lista de ações no índice mudou significativamente entre o início e o final do período de amostragem, no entanto, é bom o suficiente apenas para fins ilustrativos.
O código abaixo faz o download dos preços das ações individuais no S & amp; P500 entre janeiro de 2005 e hoje (leva um tempo) e transforma os preços brutos em retorno nos últimos 12 meses e no último mês. O primeiro é o nosso fator, o último será usado como medida de retorno para frente.
Abaixo está o código para calcular o Coeficiente de Informação e o Retorno de Quantiles. Observe que eu usei quintis neste exemplo, mas qualquer outro método de agrupamento (terciles, deciles, etc.) pode ser usado. isso realmente depende do tamanho da amostra, do que você quer capturar e do tempo em que deseja ter uma visão geral ampla ou se concentrar nas caudas de distribuição. Para estimar os retornos dentro de cada quintil, a mediana tem sido usada como o estimador de tendência central. Essa medida é muito menos sensível a outliers do que a média aritmética.
E finalmente o código para produzir o gráfico de retorno Quantiles.
3 & # 8211; Como explorar as informações acima?
No gráfico acima, o Q1 é mais baixo nos últimos 12 meses e o Q5, o mais alto. Há um aumento quase monótono no retorno dos quantis entre Q1 e Q5, o que indica claramente que os estoques que caem em Q5 superam aqueles que caem em Q1 em cerca de 1% ao mês. Isso é muito significativo e poderoso para um fator tão simples (não é realmente uma surpresa, ainda que & # 8230;). Portanto, há maiores chances de vencer o índice superpondo as ações no Q5 e subestimando as que caem no primeiro trimestre em relação ao benchmark.
Um IC de 0,0206 pode não significar muito em si, mas é significativamente diferente de 0 e indica um bom poder de previsão dos últimos 12 meses de retorno geral. Testes de significância formal podem ser avaliados, mas isso está além do escopo deste artigo.
A estrutura acima é excelente para avaliar a qualidade dos fatores de investimento, mas há uma série de limitações práticas que devem ser abordadas para a implementação na vida real:
Reequilíbrio: Na descrição acima, é assumido que no final de cada mês a carteira é totalmente reequilibrada. Isso significa que todas as ações que caíram no 1T estão abaixo do peso e todas as ações que caíram no 5ºT estão com sobrepeso em relação ao benchmark. Isso nem sempre é possível por razões práticas: algumas ações podem ser excluídas do universo de investimentos, existem restrições sobre o peso da indústria ou do setor, há restrições no volume de negócios etc. & # 8230; Custos de Transação: Isso não foi levado em consideração na análise acima e isso é um sério freio para a implementação da vida real. Considerações de rotatividade são geralmente implementadas na vida real em uma forma de penalidade na qualidade do fator. Coeficiente de transferência: Esta é uma extensão da lei fundamental da gestão ativa e relaxa a suposição do modelo de Grinold de que os gerentes não enfrentam restrições que os impeçam de traduzir suas percepções de investimentos diretamente em apostas de portfólio.
E, finalmente, estou espantado com o que pode ser alcançado em menos de 80 linhas de código com o R & # 8230;
Como de costume, qualquer comentário é bem-vindo.
Risco como uma Variável de Sobrevivência & # 8221;
Me deparo com muitas estratégias na blogosfera, algumas são interessantes, algumas são uma completa perda de tempo, mas a maioria compartilha uma característica comum: pessoas desenvolvendo essas estratégias fazem sua lição de casa para analisar o retorno, mas muito menos atenção é dada ao lado do risco sua natureza aleatória. Eu vi comentários como "um rebaixamento de 25% em 2011, mas um excelente retorno geral". Bem, a minha aposta é que ninguém na terra permitirá que você experimente uma perda de 25% com seu dinheiro (a menos que acordos especiais estejam em vigor). No mundo dos fundos de hedge, as pessoas têm muito pouca tolerância ao saque. Geralmente, como um novo operador em um fundo de hedge, supondo que você não tenha reputação, você tem muito pouco tempo para se provar. Você deve ganhar dinheiro a partir do primeiro dia e continuar fazendo isso por alguns meses antes de ganhar um pouco de credibilidade.
Primeiro, digamos que você começou mal e perdeu dinheiro no começo. Com um rebaixamento de 10%, você certamente está fora, mas mesmo com um rebaixamento de 5%, as chances de ver sua alocação reduzida são muito altas. Isso tem implicações significativas em suas estratégias. Suponhamos que, se você perder 5%, sua alocação será dividida por 2 e você voltará a sua alocação inicial somente quando ultrapassar a marca d'água alta novamente (por exemplo, o levantamento voltará a 0). No gráfico abaixo, simulei o experimento com uma das minhas estratégias.
Você começa a operar em 1º de junho de 2003 e tudo vai bem até 23 de julho de 2003, onde sua curva de rebaixamento atinge o limite de -5% (** 1 **). Sua alocação é reduzida em 50% e você não cruza o limite máximo até 05 de dezembro de 2003 (** 3 **). Se você mantiver a alocação inalterada, o nível da marca d'água alta teria sido ultrapassado em 28 de outubro de 2003 (** 2 **) e até o final do ano você teria ganho mais dinheiro.
Mas vamos empurrar o raciocínio um pouco mais. Ainda no gráfico acima, suponha que você tenha muito azar e comece a negociar em meados de junho de 2003. Você atingiu o limite de rebaixamento de 10% no início de agosto e está provavelmente fora do jogo. Você teria começado no início de agosto a sua alocação não teria sido cortada e você acaba fazendo um bom ano em apenas 4 meses completos de negociação. Nesses dois exemplos, nada mudou, mas sua data de início & # 8230 ;.
O sucesso comercial de qualquer indivíduo tem alguma forma de dependência de caminho e não há muito o que fazer sobre isso. No entanto, você pode controlar o tamanho do drawdown de uma estratégia e isso deve ser tratado com muito cuidado. Um portfólio deve ser diversificado em todas as dimensões possíveis: classes de ativos, estratégias de investimento, frequências de negociação, etc & # 8230 ;. Dessa perspectiva, o risco é a sua "variável de sobrevivência". Se gerenciado corretamente, você tem a chance de permanecer no jogo por tempo suficiente para perceber o potencial de sua estratégia. Caso contrário, você não estará lá no próximo mês para ver o que acontece.
Como de costume, qualquer comentário é bem-vindo.
Um aplicativo simples e brilhante para monitorar as estratégias de negociação & # 8211; Parte II.
Esta é uma continuação do meu post anterior & # 8220; Um aplicativo simples e simples para monitorar as estratégias de negociação & # 8220 ;. Eu adicionei algumas melhorias que tornam o aplicativo um pouco melhor (pelo menos para mim!). Abaixo está a lista de novos recursos:
Um arquivo. csv de amostra (aquele que contém os dados brutos) A & # 8220; EndDate & # 8221; caixa suspensa que permite especificar o final do período. A & # 8220; Risco & # 8221; página contendo uma análise de VaR e um gráfico de pior desempenho ao longo de vários horizontes A & # 8220; How To & # 8221; página explicando como usar e adaptar o aplicativo às necessidades individuais.
Eu também fiz o aplicativo totalmente auto-contido. Agora ele está disponível como um produto autônomo e não é necessário ter o R / RStudio instalado em seu computador para executá-lo. Ele pode ser baixado da conta do Google R Trader Google. Esta versão do aplicativo é executada usando o R portátil e o Chrome portátil. Para o leitor atento, este link explica detalhadamente como empacotar um aplicativo Shiny em um aplicativo de desktop (somente Windows por enquanto).
1 & # 8211; Como instalar o & amp; execute o aplicativo no seu computador.
Criar uma pasta específica Descompacte o conteúdo do arquivo. zip nessa nova pasta. Altere os caminhos no arquivo runShinyApp para corresponder às suas configurações Para executar o aplicativo, basta ativar o arquivo run. vbs. Eu também incluí um ícone (RTraderTradingApp. ico) se você quiser criar um atalho na sua área de trabalho.
ui. R: controla o layout e a aparência do servidor de aplicativos. R: contém as instruções necessárias para criar o aplicativo. Você pode carregar quantas estratégias quiser, contanto que o arquivo csv correspondente tenha o formato correto (veja abaixo). shinyStrategyGeneral. R: carrega os pacotes necessários e inicia o aplicativo.
3 & # 8211; Como adicionar uma estratégia de negociação?
Crie o arquivo. csv correspondente no diretório direito Crie uma nova entrada na função reativa de dados (dentro do arquivo server. R) Adicione um elemento extra ao parâmetro choice na primeira selectInput no sidebarPanel (dentro do arquivo ui. R) . O nome do elemento deve corresponder ao nome da nova entrada acima.
Remova a entrada na função reativa de dados correspondente à estratégia que você deseja remover (dentro do arquivo server. R). Remova o elemento no parâmetro choice na primeira selectInput no sidebarPanel correspondente à estratégia que você deseja remover (dentro da interface do usuário). Arquivo. R).
Por favor, sinta-se à vontade para entrar em contato caso tenha alguma sugestão.
Um aplicativo simples e brilhante para monitorar as estratégias de negociação.
Em um post anterior, mostrei como usar R, Knitr e LaTeX para criar um relatório de estratégia de modelo. Este post vai um passo além, tornando a análise interativa. Além da interatividade, o Aplicativo Brilhante também resolve dois problemas:
Agora posso acessar todas as minhas estratégias de negociação a partir de um único ponto, independentemente do instrumento negociado. Juntamente com a interatividade brilhante, permite uma comparação mais fácil. Eu posso me concentrar em um período de tempo específico.
O código usado neste post está disponível em um repositório Gist / Github. Existem essencialmente 3 arquivos.
ui. R: controla o layout e a aparência do aplicativo. server. R: contém as instruções necessárias para criar o aplicativo. Ele carrega os dados e os formata. Há um arquivo csv por estratégia, cada um contendo pelo menos duas colunas: date e retorna com o seguinte formato: (& # 8220; 2010-12-22 & # 8243;, & # 8221; 0.04% & # 8221;). Você pode carregar quantas estratégias quiser, desde que elas tenham o formato correto. shinyStrategyG eneral. R: carrega os pacotes necessários e inicia o aplicativo.
Este aplicativo está provavelmente longe de ser perfeito e certamente o aprimorarei no futuro. Sinta-se à vontade para entrar em contato caso tenha alguma sugestão.
Um grande obrigado à equipe do RStudio / Shiny por uma ótima ferramenta.
Usando Algoritmos Genéticos no Comércio Quantitativo.
A pergunta que se deve sempre fazer quando se utiliza indicadores técnicos é o que seria um critério objetivo para selecionar os parâmetros dos indicadores (por exemplo, por que usar uma RSI de 14 dias em vez de 15 ou 20 dias?). Algoritmos genéticos (GA) são ferramentas adequadas para responder a essa pergunta. Neste post eu vou mostrar como configurar o problema em R. Antes de prosseguir, o lembrete usual: O que eu apresento neste post é apenas um exemplo de brinquedo e não um convite para investir. Também não é uma estratégia acabada, mas uma ideia de pesquisa que precisa ser mais pesquisada, desenvolvida e adaptada às necessidades individuais.
O que são algoritmos genéticos?
A melhor descrição do GA que eu descobri vem da Cybernatic Trading, um livro de Murray A. Ruggiero. Os algoritmos genéticos foram inventados por John Holland em meados de 1970 para resolver problemas difíceis de otimização. Este método usa a seleção natural, sobrevivência do mais apto & # 8221;. O processo geral segue as etapas abaixo:
Codifique o problema em cromossomos Usando a codificação, desenvolva uma função de adequação para avaliar o valor de cada cromossomo na solução de um determinado problema Inicialize uma população de cromossomos Avalie cada cromossomo na população Crie novos cromossomos acasalando dois cromossomos. Isso é feito mutando e recombinando dois pais para formar dois filhos (os pais são selecionados aleatoriamente, mas influenciados por sua aptidão) Avaliar o novo cromossomo Excluir um membro da população que está menos apto do que o novo cromossomo e inserir o novo cromossomo na população . Se o critério de parada for atingido (número máximo de gerações, os critérios de aptidão são bons o suficiente & # 8230;) então retorne o melhor cromossomo ou vá para o passo 4.
De uma perspectiva de negociação, GA é muito útil porque é bom em lidar com problemas altamente não-lineares. No entanto, eles exibem algumas características desagradáveis que valem a pena mencionar:
Over fitting: Este é o principal problema e cabe ao analista configurar o problema de forma a minimizar esse risco. Tempo de computação: Se o problema não for definido corretamente, pode ser extremamente longo para chegar a uma solução decente e a complexidade aumenta exponencialmente com o número de variáveis. Daí a necessidade de selecionar cuidadosamente os parâmetros.
Existem vários pacotes R lidando com GA, eu escolhi usar o mais comum: rgenoud.
Os preços de fechamento diários para a maioria dos ETFs líquidos do Yahoo financiam desde janeiro de 2000. O período de amostragem vai de janeiro de 2000 a dezembro de 2010. O período fora da amostra começa em janeiro de 2011.
A lógica é a seguinte: a função de adequação é otimizada durante o período de amostragem para obter um conjunto de parâmetros ótimos para os indicadores técnicos selecionados. O desempenho desses indicadores é então avaliado no período fora da amostra. Mas antes disso, os indicadores técnicos devem ser selecionados.
O mercado de ações apresenta duas características principais que são familiares para qualquer pessoa com alguma experiência de negociação. Momento de longo prazo e reversão de curto prazo. Essas características podem ser traduzidas em termos de indicadores técnicos por: médias móveis cross over e RSI. Isto representa um conjunto de 4 parâmetros: Períodos de look-back para médias móveis de longo e curto prazo, período de retorno para o RSI e limiar RSI. Os conjuntos de parâmetros são os cromossomos. O outro elemento-chave é a função de fitness. Podemos querer usar algo como: máximo retorno ou taxa de Sharpe ou rebaixamento médio mínimo. A seguir, optei por maximizar o índice de Sharpe.
A implementação de R é um conjunto de 3 funções:
FunçãoFuncional: define a função de adequação (por exemplo, índice máximo de Sharpe) a ser usado no mecanismo de negociação do Google Analytics: resumo das estatísticas de negociação para dentro e fora dos períodos de amostra para fins de comparação genoud: o mecanismo GA do pacote rgenoud.
A função genoud é bastante complexa, mas eu não vou explicar o que cada parâmetro significa, pois quero manter este post curto (e a documentação é realmente boa).
Na tabela abaixo, apresento para cada instrumento os parâmetros ótimos (período de retorno do RSI, limiar do RSI, média móvel de curto prazo e média móvel de longo prazo) juntamente com as estatísticas de entrada e saída da amostra.
Abordagem Quant para Construir Estratégias de Negociação: Parte Um.
Recentemente, Quandl entrevistou um gerente sênior de carteira quantitativa em um grande fundo de hedge. Nós falamos sobre como ela constrói estratégias de negociação - como ela transita de uma representação abstrata do mercado para algo concreto com poderes preditivos genuínos.
Você pode nos dizer como você cria novas estratégias de negociação?
Tudo começa com uma hipótese. Eu conjecturo que deve haver uma relação entre dois instrumentos, ou talvez haja um novo instrumento no mercado que esteja ganhando popularidade, ou talvez haja um fator macroeconômico incomum que descobri que impulsiona o comportamento de precificação de micro. Então eu escrevo uma equação - um modelo, se você quiser - que visa capturar esse relacionamento. Normalmente, haverá algum tipo de equação de processo que mostra como as variáveis evoluem com o tempo, com um componente aleatório (estocástico).
O próximo passo é encontrar uma solução de formato fechado para este modelo. Às vezes isso é fácil; às vezes isso leva dias e semanas de álgebra; às vezes não há solução de forma fechada e tenho que me contentar com uma aproximação. Acho muito útil o kit de ferramentas de manipulação simbólica do Mathematica nesta etapa do processo.
Ok, agora eu tenho um modelo do mercado. Eu preciso testar se é realista. Nesta fase, geralmente me volto para o Matlab. Assumo alguns valores plausíveis para vários parâmetros e executo algumas simulações. As saídas simuladas parecem razoáveis? Eles refletem, pelo menos conceitualmente, a dinâmica real do mercado?
Assumindo que o modelo passe por essa verificação de integridade, é hora de ir além da exploração ou ideação do céu azul e da pesquisa formal.
O que você quer dizer com “pesquisa formal”? E por que isso é necessário?
Refiro-me à transição de uma representação abstrata e estilizada do mercado para algo concreto e não ambíguo, com poderes preditivos genuínos.
É difícil criar modelos realmente preditivos. Mas é muito fácil se enganar pensando que você criou um modelo preditivo, quando, na realidade, você simplesmente se ajustou ou usou testes na amostra ou impôs um conhecimento exógeno em suas regras, ou o que você tem. A maioria dos "sistemas" desmorona no mundo real por esse motivo preciso.
Eu não quero que isso aconteça ao meu modelo; Eu vou estar arriscando dinheiro real com isso. Assim, ao longo dos anos, construí e aprimorei uma abordagem sistemática, lenta e constante que minimiza o risco de me enganar. Isso é o que eu chamo de "pesquisa formal".
Quais etapas você inclui no seu processo formal de pesquisa?
Logo no início, meu maior medo é a contaminação de dados. A história é um recurso limitado; Depois de esgotar os dados históricos para testar, você não poderá gerar mais nenhum. Estou paranóico por não ter esgotado meu suprimento de dados fora de amostra não contaminados.
Então começo dividindo meus dados históricos em partes não sobrepostas. Eu então escolho aleatoriamente para que nem eu saiba qual pedaço é qual. (Isso protege contra preconceitos subconscientes: por exemplo, ter aversão ao risco quando eu sei que meu conjunto de dados de teste é 2008, ou que estou buscando risco em 2009).
Eu designo um pedaço como meu conjunto de calibração. Eu costumo usar o Python para calibração: eu uso suas bibliotecas de otimização internas e escrevi algumas das minhas. Neste exemplo em particular, meus parâmetros são restritos e correlacionados. Então eu uso um processo de otimização de 2 etapas chamado algoritmo EM. Os otimizadores podem ser sensíveis às condições iniciais, então eu uso o Monte Carlo para escolher um número de pontos de partida no espaço da solução. Tudo isso é muito fácil de fazer em Python.
O resultado dessa calibração deve ser um conjunto de “parâmetros do modelo” - valores numéricos - que podem ser combinados com observações reais do mercado para prever outros preços de mercado.
Depois de calibrar o modelo, testei a amostra. As previsões são estáveis e os resíduos significam uma reversão? Se não, o modelo não funciona; tão simples como isso. Eu tento vários "truques" para quebrar o modelo. Por exemplo, calibre dados mensais, mas teste em dados diários. Ou eu testo parâmetros dos EUA nos dados do mercado canadense. Se o modelo reflete verdadeiramente a realidade econômica subjacente, deve ser bastante robusto para esses tipos de ataques. (Economia não muda quando você cruza fronteiras).
Então, você separa estritamente na amostra e fora da amostra; você se cega para intervalos de datas; você usa Monte Carlo para evitar vieses de ponto inicial; e você tenta vários truques de robustez. O que mais você faz para garantir que não se engane?
Eu coloco um prêmio muito alto em parcimônia. Se meu modelo requer muitos parâmetros ou tem muitos graus de liberdade, é apenas ajuste de curva; não é um modelo de todo. Então, estou constantemente tentando remover fatores. Se o modelo continuar funcionando (e permanecer "rico") com vários fatores removidos, provavelmente será um bom.
Uma segunda prova de robustez é se o modelo funciona bem, não importa qual estratégia de negociação você construa em cima dele. Se você só pode ganhar dinheiro usando uma regra de escala não linear complexa com todos os tipos de condições de borda, isso sugere uma falta de robustez.
Por fim, não há substituto para os dados. Penso em todos os conjuntos de dados possíveis fora da amostra em que posso testar o modelo de forma plausível: diferentes países, diferentes instrumentos, diferentes intervalos de tempo, diferentes frequências de datas. O modelo tem que trabalhar em todos eles; senão você tem viés de seleção nos resultados.
Isso parece abrangente. O que acontece depois?
Armado com um modelo calibrado, o próximo passo é construir uma simulação de PL. Resíduos de reversão média podem não ser suficientes se o conjunto de oportunidades for muito pequeno para compensar o bid-ask, ou se as explosões ocasionais matarem todos os meus lucros. Então eu preciso testar uma estratégia de negociação real usando o meu modelo. Aqui é onde eu tenho que exercitar o máximo cuidado: é muito fácil adaptar-se à curva adicionando novas variáveis livres, ou distorcer os resultados com conhecimento subconsciente, ou eliminar os valores discrepantes. Simplicidade, separação rigorosa de amostras e honestidade intelectual são importantes aqui.
Eu uso o Excel para back-testing. Esta é uma escolha deliberada: o Excel não é tão poderoso quanto o Python, e isso significa que existe um limite superior em quão complexo eu posso fazer minhas regras de negociação. Isso é uma coisa boa: uma estratégia que requer complexidade para ser lucrativa provavelmente não é uma boa estratégia em primeiro lugar.
O Excel também permite que eu veja minhas suposições explicitadas; É fácil perder o controle de tais coisas quando você está trabalhando no código. Ele me permite visualizar as estatísticas de desempenho (risco, retorno, rebaixamentos, eficiência de capital, taxa de Sharpe e assim por diante) de forma rápida e clara. Mesmo que meu modelo “funcione”, não há garantia de que uma estratégia de negociação construída em torno do modelo será economicamente viável, portanto, essas estatísticas são importantes.
Muito poucos modelos de negociação superam todas as etapas acima: formulação de blue-sky e testes de sanidade; calibração histórica e desempenho fora da amostra; back-test e rentabilidade da estratégia de negociação. Mas, para os poucos que fazem isso, agora é hora de entrar em produção. Este é um jogo totalmente diferente.
Você pode ler a segunda parte da entrevista aqui. Nele, discutimos como a produção é um jogo totalmente novo e onde obter ideias para novas estratégias. Também respondemos às perguntas do leitor na terceira parte da entrevista.
Alguma pergunta para o nosso quant? Comentários? Deixe-os abaixo e ela responderá a você. Gostaríamos de saber sobre seu processo de criação de estratégias de negociação.
Quantitative trading strategies in r part 1 of 3
I am learning R, and want to start using a backtester. I have spent about a day reading all I can about R backtesters, and it seems there are 2 main contenders:
For anyone who has experience with either of these, can you tell me if they have done everything you expected.
[Edit] To clarify: I am writing some R code that needs to use a backtester, and from my research quantstrat and SIT are the 2 main contenders.
I am not looking for a religious debate a la Python/R :) but rather whether there is a general consensus as to which is more widely used, which is richer feature-wise, or whether both are worthy contenders.
While I've never used SIT, I have used quantstrat quite a bit and can attest to its strength. It has a solid developer community backing it (7 contributors on Github), is part of the TradeAnalytics project on R-Forge, and while it's still technically in beta, it should provide plenty of functionality. There is admittedly a pretty steep learning curve when you're first learning how to use it, but once you learn how to set things up it will manage portfolios and handle accounting rather gracefully. It has good documentation surrounding it with some solid examples to help get you going (see the QuantStrat TradeR blog). If speed is a priority, quantstrat can also make use of parallel processing functionality, though your mileage may vary depending on operating system.
Taking a look into SIT, it appears that it's mostly a tool built around a specific developer's needs/preferences, and might be slightly less mature at this stage. The documentation seems mostly limited to the SIT blog, and the author looks like the only project contributor on Github. Having not used it in practice, I can't speak directly to its strengths/weaknesses, but I get the subjective impression that quantstrat might currently be the more robust option of the two.
I've never used QuantStrat, but have used SIT for about two years. Michael's blog provides a great way to learn R, understand SIT, and learn about backtesting strategies. I've never found a mistake in his code, and that's how I made a living for 20+ years. It takes some real persistence to understand how to use it in depth, but you can easily set up tests by just copying and modifying one of Michael's own backtest stubs. Michael seems to have tapered off blogging recently, as has David Varadi, whose strategies Michael often tested. Still, I highly recommend it as a full featured tool that supports universe selection, top n selection, numerous weighting schemes, commissions, various rebalancing periods, leverage use, etc., all customizable and extensible.
rbresearch.
Pesquisa quantitativa, idéias de estratégia de negociação e backtesting para os mercados de ações e FX.
Brilhante com o exemplo PerformanceAnalytics.
O pessoal da Rstudio fez um trabalho incrível com o pacote brilhante. A partir da brilhante página inicial, "Shiny torna super simples para usuários de R como você transformar análises em aplicativos da Web interativos que qualquer um pode usar. # 8221; Desenvolver aplicações web sempre me atraiu, mas hospedagem, aprendizado de javascript, html, etc. me fez colocar isso bem baixo na minha lista de prioridades. Com brilhante, pode-se escrever aplicações web em R.
Este exemplo usa o conjunto de dados de gerentes com chamadas para charts. PerformanceSummary e table. Stats do pacote PerformanceAnalytics para exibir um gráfico e uma tabela no aplicativo brilhante.
Abaixo está uma captura de tela do aplicativo.
You need to have shiny and Performance Analytics packages installed to run the application. Uma vez que estes estão instalados, abra o seu prompt R e execute:
Há um ótimo tutorial brilhante do Rstudio, bem como exemplos do SystematicInvestor para aqueles interessados em aprender mais.
Momento em R: Parte 4 com Quantstrat.
Os últimos posts no momentum com R se concentraram em uma maneira relativamente simples de fazer backtest de estratégias de momentum. Na parte 4, eu uso o framework quantstrat para backtest uma estratégia de momentum. Using quantstrat opens the door to several features and options as well as an order book to check the trades at the completion of the backtest.
Eu introduzo algumas novas funções que são usadas para preparar os dados e calcular as classificações. Eu não vou passar por eles em detalhes, essas funções estão disponíveis no repositório github na pasta rank-functions.
Esse primeiro bloco de código apenas carrega as bibliotecas necessárias, dados e aplica a função ave3ROC para classificar os ativos com base na média dos retornos de 2, 4 e 6 meses. Note que você precisará carregar as funções no Rank. R e mensalmente.
O próximo pedaço de código é uma etapa crítica na preparação dos dados a serem usados no quantstrat. Com as fileiras computadas, o próximo passo é vincular as classificações aos dados de mercado reais a serem usados com quantstrat. Também é importante alterar os nomes das colunas para, e. XLY. Rank porque isso será usado como a coluna do sinal de negociação quando o quantstrat for usado.
Agora o backtest pode ser executado. A função qstratRank é apenas uma função de conveniência que oculta a implementação do quantstrat para minha estratégia de classificação.
Para este primeiro backtest, estou negociando os dois principais ativos com um tamanho de posição de 1.000 unidades.
Changing the argument to max. levels=2 gives the flexibility of “scaling” em um comércio. Neste exemplo, digamos que o ativo ABC esteja classificado como 1 no primeiro mês & # 8212; Eu compro 500 unidades. No mês 2, o ativo ABC ainda está classificado como 1 & # 8212; Eu compro outras 500 unidades.
Momento em R: Parte 3.
No post anterior, demonstrei backtests simples para negociar um número de ativos classificados com base em seus retornos simples de mês 3, 6, 9 ou 12 (ou seja, períodos de lookback). While it was not an exhaustive backtest, the results showed that when trading the top 8 ranked assets, the ranking based 3, 6, 9, and 12 month returns resulted in similar performance.
If the results were similar for the different lookback periods, which lookback period should I choose for my strategy? Minha resposta é incluir vários períodos de lookback no método de classificação.
This can be accomplished by taking the average of the 6, 9, and 12 month returns, or any other n-month returns. Isso nos dá o benefício de diversificar em vários períodos de lookback. Se eu acredito que o período de lookback dos retornos de 9 meses é melhor que o dos 6 e 12 meses, eu posso usar uma média ponderada para dar ao retorno de 9 meses um peso maior para que ele tenha mais influência na determinação da classificação. Isso pode ser implementado facilmente com o que estou chamando de função WeightAve3ROC () mostrada abaixo.
A função é bastante autoexplicativa, mas fique à vontade para perguntar se você tem alguma dúvida.
Agora para os resultados do teste. O gráfico abaixo mostra os resultados do uso de retornos de 6, 9 e 12 meses, bem como uma média de retornos de 6, 9 e 12 meses e média ponderada de retornos de 6, 9 e 12 meses.
Caso 1: teste de momento simples baseado no ROC de 6 meses para classificar o caso 2: teste de momento simples baseado no ROC de 9 meses para classificar o caso 3: teste de momentum simples baseado no ROC de 12 meses para classificar o caso 4 , 9 e 12 meses de ROC para classificar o caso 5: teste de momento simples baseado na média ponderada de 6, 9 e 12 meses de ROC para classificação. Os pesos são 1/6, 2/3, 1/6 para retornos de 6, 9 e 12 meses.
Aqui está uma tabela dos retornos e rebotes máximos para o teste.
Este teste demonstra como pode ser possível obter melhores retornos ajustados ao risco (maior CAGR e menores rebaixamentos nesse caso) considerando vários períodos de lookback no método de classificação.
O código R completo está abaixo. Eu incluí todas as funções no script R abaixo para facilitar a reprodução dos testes e testar as coisas, mas eu recomendaria colocar as funções em um arquivo separado e usar source () para carregar as funções para manter o código limpador.
Momento em R: Parte 2.
Muitos dos sites que eu vinculei no post anterior têm artigos ou artigos sobre investimento momentâneo que investigam os fatores típicos de classificação; Retornos de 3, 6, 9 e 12 meses. A maioria (nem todos) dos artigos procura descobrir qual é o “melhor” período de retrospectiva para classificar os ativos. Digamos que o resultado do artigo seja que o lookback de 6 meses tenha os maiores retornos. A negociação de uma estratégia que usa apenas um período de lookback de 6 meses para classificar os ativos me deixa vulnerável ao ajuste excessivo com base nos resultados do backtest. O backtest nos diz nada mais do que estratégia que realizou o melhor no passado, isso não nos diz nada sobre o futuro & # 8230; duh!
Sempre que reviso os resultados dos backtests, sempre me faço muitas perguntas do tipo “what if”. Aqui estão 3 "what if" perguntas que eu peço para este backtest são:
E se a estratégia baseada em uma retrospectiva de 6 meses se realizar e a de 9 meses ou 3 meses começar a se superar? E se as estratégias baseadas nos períodos de lookback de 3, 6 e 9 meses tiverem o mesmo perfil de retorno e risco, com qual estratégia eu devo negociar? E se os ativos com alta volatilidade estão dominando o ranking e, portanto, impulsionando os retornos?
Os backtests mostrados são backtests simples destinados a demonstrar a variabilidade nos retornos com base nos períodos de look-back e número de ativos negociados.
Os gráficos abaixo mostram o desempenho de uma estratégia de momentum usando retornos de 3, 6, 9 e 12 meses e negociando os principais ativos 1, 4 e 8 classificados. Você notará que há volatilidade e variabilidade significativas nos retornos apenas negociando um ativo. The variability between look-back periods is reduced, but there is still no one clear “best” look-back period. Há períodos de desempenho insuficiente e desempenho superior para todos os períodos de retrospectiva no teste.
Aqui está o código R usado para os backtests e os gráficos. Deixe um comentário se você tiver alguma dúvida sobre o código abaixo.
Momento com R: Parte 1.
O tempo realmente voa ... é difícil acreditar que já passou mais de um mês desde o meu último post. Trabalho e vida em geral consumiram muito do meu tempo ultimamente e deixaram pouco tempo para pesquisas e posts. Enfim, para o post!
Este post será o primeiro de uma série para cobrir uma estratégia de dinâmica usando R.
Uma das minhas estratégias favoritas é uma estratégia de momentum ou força relativa. Aqui estão apenas algumas das razões pelas quais eu gosto de impulso:
Simples de implementar portfólios Long only ou long / short Muitas maneiras de definir a força ou a medida do momentum Ele simplesmente funciona.
Além disso, uma estratégia de momentum se presta bem ao potencial de diversificação. O universo dos instrumentos pode ser infinito, mas os instrumentos negociados são finitos. Pense nisso desta maneira ... Investidor A analisa 10 instrumentos e investe US $ 1000 nos 5 principais instrumentos classificados pelo momento. O Investidor B analisa 100 instrumentos e investe $ 1000 nos 5 principais instrumentos classificados por momento. O investidor A está limitando seu potencial de diversificação, tendo apenas um universo de 10 instrumentos. O investidor B tem um universo de instrumentos muito maior e pode, em teoria, ser mais diversificado. Theoretically speaking, you can trade an infinite number of instruments with a finite amount of trading capital using a momentum or relative strength strategy.
Confira esses links para ler mais.
In this first post of the series on momentum, I will go over some of the basic setup and functions we will be using.
O primeiro passo é obter dados do yahoo.
Observe que o loop for converte os dados em dados mensais e em subconjuntos para que a única coluna que mantemos seja a coluna de fechamento ajustada. Agora temos quatro objetos (XLY, XLP, XLE, XLF) que possuem o preço de fechamento ajustado.
O próximo passo é mesclar esses quatro objetos em um único objeto mantendo o preço do fechamento ajustado. Podemos fazer isso em um simples one-liner em R!
Para o fator que será classificado, usarei a taxa de variação de 3 períodos (ROC).
Em seguida, aplicamos a função de classificação em cada linha do objeto roc.
That will wrap up this first post for a quick and easy way to rank assets based on 3 month simple returns. As postagens futuras explorarão outros métodos para classificar e usar quantstrat para o momento de backtest.
Gekko Quant - Negociação Quantitativa.
Negociação Quantitativa, Arbitragem Estatística, Aprendizado de Máquina e Opções Binárias.
Pós-navegação.
Hidden Markov Models – Examples In R – Part 3 of 4.
This post will explore how to train hidden markov models in R. The previous posts in this series detailed the maths that power the HMM, fortunately all of this has been implemented for us in the RHmm package. HMMs can be used in two ways for regime detection, the first is to use a single HMM where each state in the HMM is considered a “regime”. The second method is to have multiple HMMs each designed to model an individual regime, the task is then to chose between models by looking at which is the most likely to have generated the data. I will explore both methods.
Method One – Single HMM Each State is a Regime.
The credit for this section must go to the fantastic Systematic Investor blog systematicinvestor. wordpress/2012/11/01/regime-detection/. The code is well commented and should be self explanatory. Essentially two markets regimes (bull and bear) are simulated, a 2 state HMM is then trained on the data. The forward backward algorithm is then used to calculate the probability of being in a given state at any given time.
Method Two – Multiple HMMs with multiple states – Each HMM a regime.
Three market regimes are simulated; bull, bear and a sideways market. Three different 2 stage HMM models are trained on each regime. Model 1 is the HMM for the bull market, Model 2 is the HMM for the bear market, and Model 3 is the HMM for a side ways market. A rolling window of 50 days worth of data is passed into each HMM and a log likelihood score produced. The higher the log likelihood the more likely it is that the model generated the observed data.
As can be seen in the above chart, the log likelihood is fairly decent for determining the difference between the bull and bear markets. Sadly the side ways model seems very likely in both the bull and bear cases, it’s log likelihood is fairly stable and doesn’t change per regime.
Комментарии
Отправить комментарий