Discussão do artigo "Redes Neurais Profundas (Parte I). Preparando os Dados" - página 3

 
Vladimir Perervenko:

No ggplot2(v2.2.1), a definição de geom_candlestick (MRO 3.4.1) desapareceu.

Já desmontei o MRO 3.4.0, no qual fiz todos os cálculos, então encontrarei uma solução amanhã e escreverei.

Que versão do R você tem?

Obrigado!

A versão mais recente é "R versão 3.4.2 (2017-09-28)"

 

É por isso que não gosto desse ggplot2. Aqui está uma variante funcional que não incluí no artigo.

#--------quantmod----------------------------
require(quantmod)
require(timetk)
evalq(
  pr %>% tk_xts(.) %>%
        chartSeries(x = OHLC(.), 
                    #c("auto", "candlesticks", 
                    #"matchsticks", "bars","line")
                    type = "bars", 
                    subset = 'last 3 days',#weeks, months
                    show.grid = T,
                    name = "EURJPY M15",
                    tyme.scale = T,
                    log.scale = FALSE,
                    line.type = "l",
                    bar.type = "ohlc",
                    theme = chartTheme('white',
                                       up.col = 4, 
                                       dn.col = 2,
                                       grid.col = 3,
                                       main.col = 1,
                                       sub.col = 4), 
                    major.ticks = "day", 
                    minor.ticks = TRUE ,
                    plot = TRUE,
                    color.vol = F,
                    multi.col = F
                    ),
      env)

Ela tem a seguinte aparência.

horário

Boa sorte

 
Vladimir Perervenko:

É por isso que não gosto desse ggplot2. Aqui está uma variante funcional que não incluí no artigo.

Ela tem a seguinte aparência.


Boa sorte.

Obrigado!

Sua variante cria um gráfico normalmente no RStudio, mas no terminal MT4 ele não funciona. Estou lutando pelo segundo dia e o comando chartSeries não funciona no ambiente env.

Se possível, compartilhe um Expert Advisor para MT4 que descarregue as cotações e crie um gráfico. Obrigado.

Eu só poderia fazer isso da maneira antiga, como fazia antes. É muito inconveniente escrever todos os comandos no terminal, não no R.


Rv(R, "Data",tm);

Rv(R, "Time",tm);

Rv(R, "Open",o);

Rv(R, "High",hi);

Rv(R, "Low",lo);

Rv(R, "Close",clo);

Rv(R, "Volume",vol);


PREDICTION_COMMAND=

"library(magrittr) "+CR

+"library(dplyr) "+CR

+"library(xts) "+CR

+"library(quantmod) "+CR

+"price <- cbind(Time = rev(Time), Open = rev(Open), High = rev(High), Low = rev(Low), Close = rev(Close)) "+CR

+"price_t <- price "+CR

+"dts = price_t[,1]"+CR

+"mydates = structure(price_t[,1],class=c('POSIXt','POSIXct')) "+CR

+"price_time <- xts(x=price_t[,c(2:5)], order.by=mydates, tzone='GMT') "+CR

;

RExecuteAsync(R,PREDICTION_COMMAND);

Rx(R, "chartSeries(price_time, type = 'bars', subset = 'last 3 days',show.grid = T,name ='EURUSD M15',tyme.scale = T,log.scale = FALSE,line.type = 'l',bar.type = 'ohlc',theme = chartTheme('white',up.col = 4,dn.col = 2,grid.col = 3,main.col = 1,sub.col = 4),major.ticks = 'day',minor.ticks = TRUE,plot = TRUE,colour.vol = F,multi.col = F)");


 
Konstantin Kopylov:

Obrigado!

Sua variante cria um gráfico normalmente no RStudio, mas no terminal MT4 ele não funciona. No segundo dia, estou tendo dificuldades e não consigo obter o comando chartSeries por meio do ambiente env.

Se possível, compartilhe um Expert Advisor para MT4 que descarregue as cotações e crie um gráfico. Obrigado.

Eu só conseguia fazer isso da maneira antiga, como fazia antes. É muito inconveniente escrever todos os comandos no terminal, não no R.


Rv(R, "Data",tm);

Rv(R, "Time",tm);

Rv(R, "Open",o);

Rv(R, "High",hi);

Rv(R, "Low",lo);

Rv(R, "Close",clo);

Rv(R, "Volume",vol);


PREDICTION_COMMAND=

"library(magrittr) "+CR

+"library(dplyr) "+CR

+"library(xts) "+CR

+"library(quantmod) "+CR

+"price <- cbind(Time = rev(Time), Open = rev(Open), High = rev(High), Low = rev(Low), Close = rev(Close)) "+CR

+"price_t <- price "+CR

+"dts = price_t[,1]"+CR

+"mydates = structure(price_t[,1],class=c('POSIXt','POSIXct')) "+CR

+"price_time <- xts(x=price_t[,c(2:5)], order.by=mydates, tzone='GMT') "+CR

;

RExecuteAsync(R,PREDICTION_COMMAND);

Rx(R, "chartSeries(price_time, type = 'bars', subset = 'last 3 days',show.grid = T,name = 'EURUSD M15',tyme.scale = T,log.scale = FALSE,line.type = 'l',bar.type = 'ohlc',theme = chartTheme('white',up.col = 4,dn.col = 2,grid.col = 3,main.col = 1,sub.col = 4),major.ticks = 'day',minor.ticks = TRUE,plot = TRUE,colour.vol = F,multi.col = F))");


Boa tarde.

Não faço plotagem dessa forma no MT. É complicado e não é conveniente. Os gráficos interativos e quaisquer outros gráficos devem ser criados a partir do R via shiny.

Na parte V do artigo, anexarei um Expert Advisor com a saída de um gráfico simples. Mas não entendo por que você precisa de um gráfico de cotações?

Eu pretendia gerar um gráfico de resultados de testes, resultados de negociações em tempo real e uma análise por horário, símbolo etc. Talvez eu não consiga fazer tudo nesse Expert Advisor.

Para trabalhar com hora/data, procure o pacote timekt, que é mais conveniente. Sua escolha.

Boa sorte.

 

Olá, Vladimir,

1) Por que

v.rstl = c(NA, diff(rstl)*10)

é multiplicado por 10, mas os outros não?

Com a normalização, o efeito de multiplicação desaparecerá.

2) Os filtros digitais são contados pelos preços de fechamento. No início da barra, o preço de fechamento é desconhecido (e igual ao de abertura). E, ao contar pelo Close, você fica espiando o futuro, o que aumenta um pouco a precisão.
Talvez você devesse contar os filtros pelo Close da barra anterior ou, pelo menos, pelo Open da barra atual?

Para o experimento, tentei contar os filtros pelo Open - os resultados pioraram em alguns por cento.
De acordo com o experimento do sexto artigo

> #---5-----best----------------------
[1] 0.677 0.674 0.673 0.672 0.669 0.669 0.668

em vez de Fechar [1] 0,720 0,718 0,718 0,718 0,715 0,713 0,713 0,712.

3) Por que os filtros FATL, SATL, RFTL e RSTL foram excluídos dos cálculos posteriores? O cálculo é apenas sobre os osciladores. Tentei deixá-los, o clusterSim os considerou importantes e não os filtrou, o treinamento resultou em um erro de cerca de 50%, ou seja, embora sejam importantes, eles pioram significativamente o resultado.
Acho que faz sentido usar apenas osciladores como entradas para redes neurais?
 
elibrarius:

Olá, Vladimir,

1) Por que

é multiplicado por 10, mas os outros não?

Com a normalização, o efeito de multiplicação desaparecerá.

2) Os filtros digitais são contados pelos preços de fechamento. No início da barra, o preço de fechamento é desconhecido (e igual ao de abertura). E, ao contar pelo Close, você fica olhando para o futuro, o que aumenta um pouco a precisão.
Talvez você devesse contar os filtros pelo Close da barra anterior ou, pelo menos, pelo Open da barra atual?

Para o experimento, tentei contar os filtros pelo Open - os resultados pioraram em alguns por cento.
De acordo com o experimento do sexto artigo

> #---5-----best----------------------
[1] 0.677 0.674 0.673 0.672 0.669 0.669 0.668

em vez de Fechar [1] 0,720 0,718 0,718 0,718 0,715 0,713 0,713 0,712.

3) Por que os filtros FATL, SATL, RFTL e RSTL foram excluídos de outros cálculos? O cálculo é apenas sobre os osciladores. Tentei deixá-los, mas o clusterSim os considerou importantes e não os filtrou. Como resultado do treinamento, obtive um erro de cerca de 50%, ou seja, embora sejam importantes, eles pioram significativamente o resultado.
Acho que faz sentido usar apenas osciladores como entradas para redes neurais?

Boa tarde.

1. esse preditor tinha valores muito pequenos e poderia cair durante a normalização. Eu simplesmente o encaixei no intervalo dos outros preditores. Com o método SpatialSign, os preditores não devem diferir em ordens de magnitude.

2. Todos os valores de cotação são retirados das barras formadas a partir de 1. Em geral, é melhor contar um ziguezague por Alto/Baixo. Nos últimos artigos, forneci variantes do cálculo do ZZ.

3) Essas 4 são linhas contínuas e não são aplicáveis como entradas. A primeira diferença entre elas é aplicável

v.fatl = c(NA, diff(fatl)),
v.rftl = c(NA, diff(rftl)),
v.satl = c(NA, diff(satl)),
v.rstl = c(NA, diff(rstl)*10))

Os filtros digitais têm uma vantagem importante sobre outros indicadores: eles não são paramétricos (convencionalmente falando, é claro). Mas eu gosto muito deles.

Boa sorte

 

Olá, ao seguir seu artigo (é a primeira vez que toco no R), logo no segundo tijolo de código me deparei com o seguinte erro:

Error in evalq({ : object 'env' not found

env aqui significa algo nomeado no software do computador? Ou é realmente um objeto que foi criado automaticamente?


Artigo incrível, vou encontrar uma maneira de superá-lo, seria incrível se você pudesse ajudar :)

(Usando o RStudio e instalando o MRO 3.5.3 (porque o 3.4.0 estava desatualizado))

 
ferox875 :

Olá, seguindo seu artigo (tocando no R pela primeira vez), logo no segundo bloco de código, encontrei o seguinte erro:

Error in evalq ({: object 'env' not found

aqui env significa algo nomeado no software do computador? Ou é realmente um objeto gerado automaticamente?


Ótimo artigo, vou encontrar uma maneira de superar isso, seria ótimo se você pudesse ajudar :)

(Usando o RStudio e instalando o MRO 3.5.3 (já que o 3.4.0 está obsoleto))

O objeto env foi criado para separar os dados de várias ferramentas. Apenas no início do script, escreva

env <- new .env()
ls(env)
character( 0 )
env$a <- 23
ls(env)
[ 1 ] "a"
> env$a
[ 1 ] 23 

Boa sorte.

 

Prezado sr. Vladimir Perervenko, muito obrigado por sua rápida resposta. Depois de fazer um curso de R, espero conseguir pelo menos o suficiente para merecer o estudo de seu incrível trabalho.



Meus melhores cumprimentos


Ferox

 

Olá novamente, Sr. Perervenko, espero que esteja se sentindo bem. Tenho uma nova pergunta, quando você escreveu pela primeira vez sobre o ZigZag :

#------ZZ-----------------------------------
par <- c(25, 5)
ZZ <- function(x, par) {
# x - vector
  require(TTR)
  require(magrittr)
  ch = par[1] 
  mode = par[2]
  if (ch > 1) ch <- ch/(10 ^ (Dig - 1))
  switch(mode, xx <- x$Close,
         xx <- x$Med, xx <- x$Typ,
         xx <- x$Wd, xx <- x %>% select(High,Low))
  zz <- ZigZag(xx, change = ch, percent = F, 
               retrace = F, lastExtreme = T)
  n <- 1:length(zz)
  for (i in n) { if (is.na(zz[i])) zz[i] = zz[i - 1]}
  return(zz)
}

na 9ª linha, qual é o significado do objeto Dig?

Não consegui encontrá-lo no projeto nem nos pacotes necessários...


Atenciosamente, MR. Perervenko


Ferox