Obter através da App Store Leia esta publicação em nosso aplicativo!
Criando Sinais de Negociação em R.
Estou construindo uma estratégia comercial e estou preso em duas áreas-chave. Ao usar Stoch e MACD no quantmod, estou tentando criar um sinal quando o estocástico lento atravessa o estocástico rápido (1) e o visto-versa (-1) e o plano quando estiver no meio (0). MACD o código é idêntico exceto com os nomes das colunas MACD e Signal. Por fim, estou tentando mesclar os três sinais para criar um sinal mestre quando todos os três sinais são iguais a 1, -1, 0.
Atualização: Eu reparei todos os loops desagradáveis usando uma diferença, em vez disso, após essa resposta.
É assim que eu abordarei esse problema. Você está calculando todas as posições que possuem os relacionamentos desejados. Você quer apenas a primeira posição que satisfaça o sinal de negociação para atuar nele o mais rápido possível.
Eu configuraria o sinal da banda Bollinger como este:
Eu criaria o sinal estocástico como este:
Uma vez que você calcula a diferença, você deseja encontrar o primeiro crossover onde um é mais alto do que o outro, então você precisa considerar as posições i th e i-1 th. Além disso, o sinal será mais forte se você estiver em território de sobrecompra ou sobrevenda (0,8 ou 0,2).
Da mesma forma para MACD:
Agora nós os fundimos e calculamos o sinal de combinação:
Se fosse eu, preferiria ter uma soma dos sinais, porque isso lhe dirá como é confiável cada sinal. Se você tem um 3, isso é stong, mas um 1 ou 2 não é tão forte. Então eu iria com a soma como o sinal combinado.
Agora, tudo é uma matriz com todos os sinais e a última coluna é a força combinada do sinal.
Também pense em como isso pode não dar-lhe um bom sinal. Usando a abordagem para este gráfico, os sinais mais fortes que recebo são -2, e eu só recebo 5 ocasiões. Tipo de estranho, uma vez que o gráfico vai direto, mas não há compras fortes.
Estes sinais de venda apenas dão uma baixa desvantagem e, em seguida, os foguetes da carta maior. Claro que tudo depende do estoque etc.
Você também obtém situações como esta:
Alguns indicadores são mais rápidos ou mais lentos que outros. Esta seria a minha abordagem, mas você deve fazer testes baseados em larga escala e determinar se você acha que estes serão negócios acionáveis e se você fizer qualquer dinheiro agindo neles menos comissão e manter a duração.
Gerando sinais comerciais em r
Obter através da App Store Leia esta publicação em nosso aplicativo!
Gerando sinais comerciais e estratégias com dplyr.
Eu tenho jogado recentemente com técnicas técnicas de negociação em R.
Uma das coisas que eu acho que se torna um problema, especialmente com grandes informações de alta freqüência, está gerando o vetor de estratégia a partir do vetor de sinais. Eu queria saber se não há uma maneira mais rápida usando dplyr?
Comece por baixar o estoque da Apple e gerar médias móveis curtas e longas.
Agora temos nosso estoque selecionado, vamos gerar nosso vetor de sinal que indica uma ordem de compra e venda quando as duas médias móveis se cruzam.
Depois, usamos esse sinal para construir a estratégia - esta é a parte que demora em dados de alta freqüência - o que, obviamente, é devido ao loop for.
Minha abordagem dplyr atual é a seguinte, mas gera a estratégia errada.
Eu concordo com o comentário do epi99 sobre mantê-lo consistente com seu loop inicial para. Eu usei data. table e consegui uma correspondência exata, veja abaixo:
O problema que você teve foi provavelmente com a lógica "Comprar", "Vender" e "Sem mudança".
Criando Sinais de Negociação em R.
Estou construindo uma estratégia comercial e estou preso em duas áreas-chave. Ao usar Stoch e MACD no quantmod, estou tentando criar um sinal quando o estocástico lento atravessa o estocástico rápido (1) e o visto-versa (-1) e o plano quando estiver no meio (0). MACD o código é idêntico exceto com os nomes das colunas MACD e Signal. Por fim, estou tentando mesclar os três sinais para criar um sinal mestre quando todos os três sinais são iguais a 1, -1, 0.
Melhor Como:
Atualização: Eu reparei todos os loops desagradáveis usando uma diferença, em vez disso, após essa resposta.
É assim que eu abordarei esse problema. Você está calculando todas as posições que possuem os relacionamentos desejados. Você quer apenas a primeira posição que satisfaça o sinal de negociação para atuar nele o mais rápido possível.
Eu configuraria o sinal da banda Bollinger como este:
Eu criaria o sinal estocástico como este:
Uma vez que você calcula a diferença, você deseja encontrar o primeiro crossover onde um é mais alto do que o outro, então você precisa considerar as posições i th e i-1 th. Além disso, o sinal será mais forte se você estiver em território de sobrecompra ou sobrevenda (0,8 ou 0,2).
Da mesma forma para MACD:
Agora nós os fundimos e calculamos o sinal de combinação:
Se fosse eu, preferiria ter uma soma dos sinais, porque isso lhe dirá como é confiável cada sinal. Se você tem um 3, isso é stong, mas um 1 ou 2 não é tão forte. Então eu iria com a soma como o sinal combinado.
Agora, tudo é uma matriz com todos os sinais e a última coluna é a força combinada do sinal.
Também pense em como isso pode não dar-lhe um bom sinal. Usando a abordagem para este gráfico, os sinais mais fortes que recebo são -2, e eu só recebo 5 ocasiões. Tipo de estranho, uma vez que o gráfico vai direto, mas não há compras fortes.
Estes sinais de venda apenas dão uma baixa desvantagem e, em seguida, os foguetes da carta maior. Claro que tudo depende do estoque etc.
Você também obtém situações como esta:
Alguns indicadores são mais rápidos ou mais lentos que outros. Esta seria a minha abordagem, mas você deve fazer testes baseados em larga escala e determinar se você acha que estes serão negócios acionáveis e se você fizer qualquer dinheiro agindo neles menos comissão e manter a duração.
Mantenha a segunda ocorrência em uma coluna em R.
Aqui está outra biblioteca de solução de data. table possível (data. table) setDT (df1) [, list (Valor = c ("não censurado", "censurado"), Time = c (Time [match ("uncensored", Value)], Tempo [(.N - match ("não censurado", rev (Valor))) + 2L])), por = ID] # ID Valor Tempo # 1: 1 não censurado 3 # 2: 1 censurado 5 # 3: 2 sem censura 2 # 4: 2 censurado 5 Ou similarmente.
Retornar Nomes de Colunas quando Verdadeiro em R.
Você pode percorrer as linhas de seus dados, retornando os nomes das colunas onde os dados são configurados com um número apropriado de valores NA preenchidos no final: `colnames & lt; -` (t (apply (dat == 1, 1, function ( x) c (colnames (dat) [x], rep (NA, 4-soma (x))))), colar ("Impair", 1: 4)) # Impair1 Impair2 Impair3 Impair4 # 1 "A" NA NA N / D.
Valores ajustados na componente de data / hora faltante da previsão R.
Não use as datas em seu gráfico, use uma seqüência numérica como eixo x. Você pode usar as datas como rótulos. Experimente algo como isto: y = GED $ Mfg. Shipments. Total..USA. n = comprimento (y) modelo_a1 & lt; - raio auto. arima (y) (x = 1: n, y, xaxt = "n", xlab = "") eixo (1, a = seq (1, n, comprimento. out = 20), rótulos = índice (y) [seq (1, n, length. out = 20)], las = 2, cex. axis = .5) linhas (ajustadas (model_a1), col = 2) O resultado dependendo de seus dados será algo semelhante:.
Estou usando Sapply incorretamente?
Sapply itera através do vetor fornecido ou lista e fornece cada membro, por sua vez, para a função. No seu caso, você está obtendo os valores 2 e 4 e depois tentando indexar seu vetor novamente usando seus próprios valores. Uma vez que o vetor oth_let1 tem apenas dois membros, você obtém NA.
Remova as cotações para usar o resultado como nome do conjunto de dados.
Você pode obter os valores com get ou mget (para vários objetos) lst & lt; - mget (myvector) lapply (seq_along (lst), função (i) write. csv (lst [[i]], file = paste (myvector [ i], '.csv', sep = '')).
Como ler rapidamente um grande arquivo de dados txt (5GB) em R (RStudio) (Centrino 2 P8600, 4Gb RAM)
Se você tiver apenas 4 GB de RAM, não pode colocar 5 GB de dados "em R". Você pode, alternativamente, olhar para a seção "Grande memória e dados fora da memória" da visão da tarefa High Perfomance Computing em R. Pacotes projetados para processos fora da memória, como o ff, podem ajudá-lo. De outra forma.
Limite a variação de cor em R usando scale_color_grey.
Eu acho que esse código deve produzir a trama que deseja. No entanto, sem o seu conjunto de dados exato, eu tive que gerar dados simulados. ## Gera dados falsos e biblioteca de biblioteca de carga (ggplot2) df4 = data. frame (Restante = rep (0: 1, times = 4), Day = rep (1: 4, cada = 2), Genótipo = rep (c ( "wtb", "whd"), cada = 4).
Correlacionar por níveis de uma variável em R.
Você pode colocar seus registros em um data. frame e, em seguida, dividido pelas cateogias e, em seguida, executar a correlação para cada uma das categorias. sapply (split (data. frame (var1, var2), categorias), função (x) cor (x [[1]], x [[2]])) Isso pode parecer mais bonito com os dados da biblioteca da biblioteca dplyr (dplyr).frame (var1 = var1, var2 = var2, categories = categories)% & gt;% group_by (categorias)% & gt;% summary (cor = cor (var1, var2)).
Sumário semelhante ao histograma para dados de intervalo.
Usando IRanges, você deve usar findOverlaps ou mergeByOverlaps em vez de countOverlaps. Porém, por padrão, não retorna nenhuma correspondência. Vou deixar isso para você. Em vez disso, mostrará um método alternativo usando foverlaps () do pacote data. table: require (data. table) subject & lt; - data. table (interval = paste ("int", 1: 4, sep = ""), start = c (2,10,12,25), final = c (7,14,18,28)) consulta.
Rbind no tamanho da linha variável não dando NA's.
Você pode tentar cSplit library (splitstackshape) setnames (cSplit (fusionedDf, 'PROD_CODE', ','), paste0 ('X', 1: 4)) [] # X1 X2 X3 X4 # 1: PRD0900033 PRD0900135 PRD0900220 PRD0900709 # 2 : PRD0900097 PRD0900550 NA NA # 3: PRD0900121 NA NA NA # 4: PRD0900353 NA NA NA # 5: PRD0900547 PRD0900614 NA NA Ou usando a versão devel de data. table ou seja, v1.9.5 library (data. table) setDT (fusionedDf) [ .
como chamar o método Java que retorna qualquer lista da linguagem R? [em espera]
Você pode fazê-lo com o pacote rJava. install. packages ('rJava') library (rJava).jinit () jObj =.jnew ("JClass") resultado =.jcall (jObj, "[D", "method1") Aqui, JClass é uma classe Java que deve esteja em sua variável de ambiente ClassPath, method1 é um método estático de JClass que retorna duplo [], [D é uma notação JNI para uma matriz dupla. Veja a entrada do blog para.
Convertendo a coluna do tempo militar para o tempo padrão.
Dado seus critérios - que 322 é representado como 3 e 2045 é 20 - que tal dividir por 100 e, em seguida, arredondar para 0 com trunc (). time_24hr & lt; - c (1404, 322, 1945, 1005, 945) trunc (time_24hr / 100).
Como dividir um texto em duas palavras significativas em R.
Dada uma lista de palavras em inglês, você pode fazer isso simplesmente, procurando todas as divisões possíveis da palavra na lista. Vou usar o primeiro hit do Google que encontrei para a minha lista de palavras, que contém cerca de 70k palavras minúsculas: wl & lt; - read. table ("www-personal. umich. edu/
jlawler / lista de palavras ") $ V1 check. word & lt; - function (x, wl)
R: função recursiva para dar grupos de números consecutivos.
Sua chamada de sapply é aplicar diversão em todos os valores de x, quando você realmente quer que ele se aplique em todos os valores de i. Para obter o sapply para fazer o que eu suponho que você deseja fazer, você pode fazer o seguinte: sapply (X = 1: length (x), FUN = fun, x =.
Regressão multivariada linear em R.
A regressão múltipla multivariada pode ser feita por lm (). Isso está muito bem documentado, mas aqui segue um pequeno exemplo: rawMat & lt; - matrix (rnorm (200), ncol = 2) noise & lt; - matrix (rnorm (200, 0, 0.2), ncol = 2) B & lt; - matriz (1: 4, ncol = 2) P & lt; - t (B% *% t (rawMat)) + ajuste de ruído & lt; - lm (P.
rawMat) sumário (ajuste).
Agregando dados em R.
Usando data. table library (data. table) setDT (df1) [, list (pages = paste (page, collapse = "_")), list (user_id, date = as. Date (date, '% m /% d /% Y '))] Ou usando a biblioteca dplyr (dplyr) df1% & gt;% group_by (user_id, date = as. Date (data,'% m /% d /% Y '))% & gt;% resumir (páginas = colar (página, colapso = '_')).
Anexando uma moldura de dados com instruções para if e else ou como colocar impressão em dataframe.
Geralmente, não é uma boa idéia tentar adicionar linhas um-a-tempo a um data. frame. é melhor gerar todos os dados da coluna de uma vez e depois jogá-lo em um data. frame. Para o seu exemplo específico, a função ifelse () pode ajudar a listar & lt; - c (10,20,5) data. frame (x = list, y = ifelse (list & lt; 8, "Greater", "Less")).
Passe algumas linhas com o fread.
No linux, você pode usar awk com fread ou pode ser canalizado com read. table. Aqui, mudei o delimitador para, usando awk pth & lt; - '/home/akrun/file. txt' # troque para seu caminho v1 & lt; - sprintf ("awk" / ^ (ID_REF | LMN) / emparelhado 'OFS = \ ", \"% s ", pth) e lido com a biblioteca fread (data. table).
Subconectando linhas passando um argumento para uma função.
O problema é que você passa a condição como uma string e não como uma condição real, então R não pode avaliá-la quando quiser. se você ainda quiser passar como string, você precisa analisar e eval-lo no lugar certo, por exemplo: cond.
Substitua os valores - inf, NaN e NA por zero em um conjunto de dados em R.
Como por? Zoo: Subscrever por um objeto zoológico cujos dados contém valores lógicos é indefinido. Então, você precisa encerrar o subconjunto em uma chamada: log_ret [which (! Is. finite (log_ret))] & lt; - 0 log_ret x y z s p t 2005-01-01 0.234 -0.012 0 0 0.454 0.
R - frequências dentro de uma variável para repetir valores.
Você pode tentar a biblioteca (data. table) # v1.9.4 + setDT (yourdf) [,.N, by = A].
copie uma lista de data. tables.
copy () é para copiar data. table's. Você está usando para copiar uma lista. Tente ... zz & lt; - lapply (z, copy) zz [[1]] [, newColumn: = 1] Usando seu código original, você verá que a aplicação de cópia () na lista não faz uma cópia do original Tabela de dados. Eles ainda são referenciados por.
Encontre várias linhas vazias consecutivas.
Aqui está uma solução para extrair somente as linhas de artigos. Descobriu-se muito mais complexo e críptico do que esperava, mas tenho certeza de que funciona. Além disso, graças a Akrun para os dados do teste. v1 & lt; - c ('ard', 'b', '', '', '', 'rr', '', 'fr', '', '', '', '', 'gh', 'd'); ind & lt; -.
algoritmo de otimização para dados circulares.
Eu calcularia todos os pares de linhas em df: (pares & lt; - cbind (1: nrow (df), c (2: nrow (df), 1))) # [, 1] [, 2] # [1 ,] 1 2 # [2,] 2 3 # [3,] 3 4 # [4,] 4 5 # [5,] 5 6 # [6,] 6 1 Você pode encontrar o melhor emparelhamento com which. max.
Converta cadeias de dados em objetos "Dados" em R [duplicado]
Se você ler na página de ajuda R para as. Date digitando? Como. Date você verá que existe um formato padrão assumido se você não especificar. Então, para especificar seus dados, você faria nmmaps $ date & lt; - as. Date (nmmaps $ date, format = "% m /% d /% Y").
Como construir um loop 'for' com entrada $ i em R Shiny.
Use [[ou [se desejar subconjunto por nomes de string, não $. De Hadley's Advanced R, "x $ y é equivalente a x [[" y ", exato = FALSE]]". ## Criar entrada input & lt; - `names & lt; -` (lapply (landelist, function (x) sample (0: 1, 1)), landelist) filterland & lt; - c () para (landeselect in landelist) if (input [[landeselect]] == TRUE) # use `[[`.
Como posso minimizar esta função em R?
Eu acho que você quer minimizar o quadrado de a-fptotal. ff & lt; - function (x) myfun (x) ^ 2 & gt; otimize (ff, lower = 0, upper = 30000) $ minimum [1] 28356.39 $ objective [1] 1.323489e-23 Ou encontre a raiz (ou seja, onde myfun (x) == 0): uniroot (myfun, interval = c (0,30000)) $ root [1] 28356.39 $ f. root [1] 1.482476e-08 $ iter [1] 4 $ init. it [1] NA $ estim. prec [1] 6.103517e-05.
Armazene todos os valores em uma seqüência, exceto alguns valores.
Traduzindo Stata para R: colapso.
Sua intuição está correta. o colapso é o equivalente de Stata da função agregada de R, que produz um novo conjunto de dados a partir de um conjunto de dados de entrada, aplicando uma função de agregação (ou múltiplas funções de agregação, uma por variável) a cada variável em um conjunto de dados.
Como traçar pontos de dados em local específico em um mapa em R.
Isso deve levá-lo na direção certa, mas não deixe de conferir os exemplos apontados por Jaap nos comentários. mapa da biblioteca (ggmap) & lt; - get_map (location = "Mumbai", zoom = 12) df & lt; - data. frame (location = c ("Airoli", "Andheri East", "Andheri West", "Arya Nagar" , "Asalfa", "Bandra East", "Bandra West"), valores.
Dividir múltiplas entradas de Shiny.
Principal == input $ selectPrincipal | input $ selectPrincipal == "Todos".
Contar o número de linhas que atendem aos critérios em outra tabela - R PRogramming.
Usando dplyr para o seu primeiro problema: left_join (contatos, listagens, por = c ("id" = "id"))% & gt;% filter (abs (listing_date - contact_date) & lt; 30)% & gt;% group_by (id) % & gt;% summary (cnt = n ())% & gt;% right_join (listagens) E a saída é: id cnt city listing_date 1 6174 2 A 2015-03-01 2 2175 3 B 2015-03-14 3 9176 1 B 2015-03-30.
Usando R para atribuir tratamentos a grupos.
É mais fácil pensar nisso em termos de duas exposições que não são usadas, e não as cinco que são. Vamos limitar o número de vezes que uma exposição pode ser excluída: draw_exc & lt; - function (exposições, nexp, ng, max_excluded = 10)
Como definir o eixo x com valores de potência decrescentes em tamanhos iguais.
equivalente de ggplot para matplot.
Você pode criar um gráfico similar no ggplot, mas você precisará fazer uma nova remodelação dos dados primeiro. library (reshape2) #ggplot precisa de dados de dataframe & lt; - as. data. frame (data) #id variável para posição em dados de matriz $ id & lt; - 1: nrow (data) #reshape para formato longo plot_data & lt; - derreter (dados, id. var = "id") #plot ggplot (plot_data, aes (x = id, y = valor, grupo = variável, cor = variável)) + geom_point () + geom_line (aes (lty = variable)) .
Twitter: Obter seguidores de vários usuários ao mesmo tempo.
Aqui está um exemplo de código baseado no que você teve no seu problema original, que agregará os resultados do Twitter para um conjunto de usuários: # crie um quadro de dados com 4 colunas e nenhuma linha inicialmente df_result & lt; - data. frame (t (rep (NA , 4))) nomes (df_result) & lt; - c ('id', 'nome', 's_name', 'fol_count') df_result & lt; - df_result [0: 0,] #.
ggplot2 & facet_wrap - elimina a distância vertical entre as facetas.
Altere o argumento panel. margin para panel. margin = unidade (c (-0.5,0-0.5,0), "linhas"). Por algum motivo, as margens superior e inferior precisam ser negativas para se alinhar perfeitamente. Aqui está o resultado:.
Subtrair o tempo em r, forçando a unidade de resultados a minutos [duplicar]
Você pode tentar com difftime df1 $ time. diff & lt; - com (df1, difftime (time. stamp2, time. stamp1, unit = 'min')) df1 # time. stamp1 time. stamp2 time. diff # 1 2015-01 -05 15:00:00 2015-01-05 16:00:00 60 mins # 2 2015-01-05 16:00:00 2015-01-05 17:00:00 60 mins # 3 2015-01-05 18:00:00 2015-01-05 20:00:00 120 minutos # 4 2015-01-05 19:00:00 2015-01-05 20:00:00 60 mins # 5 2015-01-05 20: 00:00 2015-01-05 22:00:00 120.
Defina um temporizador em R para executar um programa.
Você pode fazer algo como isto: print_test & lt; - function (x) print_test (15) Se você quiser executá-lo por uma certa quantidade de iterações, use para incorporar um 'loop for' em sua função com o número de iterações.
como ler uma string como um número complexo?
R prefere usar eu em vez de j. Além disso, note que o complexo é diferente de asplex eo último é usado para conversão. Você pode fazer myStr & lt; - "0.76 + 0.41j" myStr_complex & lt; - asplex (sub ("j", "i", myStr)) Im (myStr_complex) # [1] 0.41.
R para exibir mapas.
Você está apenas salvando um mapa em variável e não exibindo. Apenas faça o mapa da biblioteca (ggmap) & lt; - mapa qmap ('Anaheim', zoom = 10, maptype = 'mapa roteiro') ou biblioteca (ggmap) qmap ('Anaheim', zoom = 10, maptype = 'roteiro').
Como (de forma vetoriais) para recuperar quantidades de valor único a partir de células de dataframe contendo arrays numéricos?
Parece que você está tentando capturar funções de resumo de cada entrada em uma lista, ignorando os elementos definidos para -999. Você pode fazer isso com algo como: get_scalar & lt; - function (name, FUN = max) Observe que eu mudei sua função.
Ajustando um modelo de subconjunto com apenas um atraso, usando o pacote R FitAR.
Use GetFitARpMLE (z, 4) Você receberá & gt; GetFitARpMLE (z, 4) $ loglikelihood [1] -2350.516 $ phiHat ar1 ar2 ar3 ar4 0.0000000 0.0000000 0.0000000 -0.9262513 $ constantTerm [1] 0.05388392.
Sleep Shiny WebApp para deixá-lo atualizar ... Alguma alternativa?
algum código reprodutível me permitiria dar-lhe algum código de exemplo, mas na ausência disso. envolva o que você tem atualmente em outro se (), verificando o comprimento = 0 (ou simplesmente e, com a verificação NULL primeiro) e exiba sua mensagem de espaço reservado favorita.
Destaque de intervalos específicos em um gráfico em R.
Ou você poderia colocar um retângulo na região de interesse: rect (xleft = 1994, xright = 1998, ybottom = range (CVD $ cvd) [1], ytop = range (CVD $ cvd) [2], densidade = 10, col = "azul").
Modificação em série de objetos em R.
Eu criaria uma lista de todas as suas matrizes usando mget e ls (e algumas expressões regex de acordo com os nomes de suas matrizes) e depois as modificamos de uma só vez usando as funções de substituição e laptops e lt; - rownames e lt; -. Algo entre essas linhas l & lt; - mget (ls (patter = "m \\ d +.m")) lapply (l, função (x).
como obter valores de selectInput com brilho.
Você pode simplesmente usar a entrada $ selectRunid como este: conteúdo (GET ("stats", path = "gentrap / alignments", query = list (runIds = input $ selectRunid, userId = "dev") add_headers ("X-SENTINEL-KEY "=" dev "), como =" analisado ")) Provavelmente é aconselhável adicionar algum tipo de botão de ação e disparar o download apenas por clique.
R: Usando a função "nomes" em um conjunto de dados criado em um loop.
Uma melhor abordagem seria ler os arquivos em uma lista de data. frames, em vez de um objeto data. frame por arquivo. Supondo que os arquivos são o vetor de nomes de arquivos (como você diz acima): importar & lt; - lapply (files, read. csv, header = FALSE) Então, se você quiser operar em cada data. frame na lista.
R Programa Vector, registro Percentagem de coluna.
Supondo que você deseja obter o rowSums de colunas que possuem 'Windows' como nomes de coluna, subconjamos o conjunto de dados ("sep1") usando o grep. Em seguida, obtenha o rowSums (Sub1), divida pelo rowSums de todas as colunas numéricas (sep1 [4: 7]), multiplique por 100 e atribua os resultados a uma nova coluna ("newCol") Sub1.
Um exemplo de estratégia comercial codificada em R.
O back-testing de uma estratégia de negociação pode ser implementado em quatro etapas.
Obtendo os dados históricos Formule a estratégia de negociação e especifique as regras Execute a estratégia nos dados históricos Avalie as métricas de desempenho.
Nesta publicação, voltaremos a testar a nossa estratégia de negociação em R. O pacote quantmod tornou muito fácil extrair dados históricos do Yahoo Finance. O código de uma linha abaixo obtém dados NSE (Nifty).
O Quantmod fornece vários recursos para visualizar dados. O comando abaixo cria um gráfico para os dados NSE.
TA = "Nulo" indica não usar nenhum indicador técnico. Veremos logo a aplicação de um indicador técnico em um gráfico. O próximo passo é escolher uma estratégia de negociação. Nós escolheremos MACD (Divergência de Convergência Médica em Movimento) para este exemplo. Em uma estratégia de cruzamento média móvel, duas médias são calculadas, uma média lenta e uma média móvel rápida. A diferença entre a média móvel rápida e a média lenta média é chamada de linha MACD. Uma terceira média chamada linha de sinal; uma média móvel exponencial de 9 dias do sinal MACD, também é calculada. Se a linha MACD cruza acima da linha de sinal, então é um sinal de alta e nós ficamos longos. Se a linha MACD cruza abaixo da linha de sinal, então é um sinal de baixa e ficamos curtos. Escolhemos o preço de fechamento dos dados NSE para calcular as médias. O comando seguinte cumpre esta tarefa.
O comando abaixo calcula o MACD para o preço de fechamento.
Pode-se escolher parâmetros variáveis para médias rápidas, lentas e de sinal, dependendo dos requisitos de negociação. Aqui ficamos com os parâmetros padrão. MACD é a função em quantmod que calcula a divergência de convergência média móvel, os dados são o preço de fechamento para NSE, nFast é a média em movimento rápido, nSlow é a média lenta, maType = SMA indica que escolhemos média móvel simples, percentagem = FALSO implica que estamos calculando a diferença entre média em movimento rápido e média lenta. Defini-lo VERDADEIRO retornaria a diferença percentual entre a média móvel rápida e a média lenta.
O comando a seguir traça o gráfico para o preço de fechamento da NSE, juntamente com os parâmetros do MACD.
Conforme discutido anteriormente, definimos nosso sinal de negociação da seguinte forma:
Se o sinal MACD se cruzou acima da linha de sinal, vamos longamente NSE Se o sinal MACD cruzado abaixo da linha de sinal, ficamos curtos em NSE.
O comando seguinte gera o sinal de negociação de acordo. Utilizamos o operador de desfasamento para eliminar o viés de avanço.
Vamos aplicar essa estratégia nos dados históricos da NSE de 2007-09-17 a 2015-09-22. O sinal de negociação é aplicado ao preço de fechamento para obter os retornos de nossa estratégia.
A função ROC fornece a diferença percentual entre os dois preços de fechamento. Podemos escolher a duração para a qual queremos ver os retornos. O seguinte comando escolhe os retornos entre 2008-06-02 e 2015-09-22.
Os retornos cumulativos podem ser calculados e plotados usando os seguintes comandos: -
O 4º passo do back-testing é avaliar métricas de desempenho. O pacote de análise de desempenho em R fornece uma plataforma consolidada para observar os parâmetros relacionados ao desempenho. Várias métricas, como retrabalhos, risco de queda podem ser observadas em R.
O comando seguinte fornece um resumo dos parâmetros acima mencionados e muito mais!
Aqui está a versão sucinta do código.
Depois de passar por esse exemplo, você aprendeu conceitos básicos sobre como projetar uma estratégia de negociação de quantos usando R. Agora, você pode começar a aprender sobre como começar com o pacote quantmod em R. Depois de ter aprendido com sucesso estes conceitos básicos, você pode testar seu habilidades em nosso curso interativo de 10 horas de duração do caminho de dados "Modelar uma Estratégia de Negociação Quantitativa em R"
Comentários estão fechados.
Posts populares recentes.
Artigos mais visitados da semana.
Empregos para usuários R.
É alimentado pelo WordPress usando um design bavotasan.
Direitos autorais e cópia; 2017 R-bloggers. Todos os direitos reservados. Termos e Condições para este site.
No comments:
Post a Comment