Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 265

 
SanSanych Fomenko:
Tentei, mas avariou-se rapidamente: não é claro o que fazer com os orifícios de saída.

Os furos são tirados em discotecas no fim de semana :)

Quando vais aprender a citar correctamente? Não é preciso citar meia página do fórum para escrever três palavras...

Passando agora ao assunto

Eu fiz várias combinações de castiçais e outras coisas com a ajuda de Eu tentei ensiná-lo comcastiçais, acabou sendo 100% treinamento e erro 0 tanto em treinamento como em novos dados, é óbvio que existem alguns preditores nos dados que olham para o futuro, por isso não tive de olhar para cada função apenas removi os primeiros 6 preditores que, de acordo com a versão forrest, eram mais importantes e se destacavam dos outros, esperava que entre eles estivessem aqueles que olhavam para o futuro e treinavam o MO novamente, o erro era cerca de 3%, em suma, não sei o que raio, porquê resultados tão fabulosos, talvez o erro esteja no meu código...

Karoch que quer entender este é o código como eu fiz a amostra, o meu alvo era "cor de vela".

No código, só a própria amostra, o alvo e outras manipulações fazem o que você quer.

Experimente, experimente porque é como um extra 30 características para o seu modelo.

library(rusquant)
# загружаю последние 500 дней котировок индекса ртс
getSymbols("SPFB.RTS",src = "Finam",period="5min",from = Sys.Date()-500)
chart_Series(  tail(SPFB.RTS,100)  )

D <- SPFB.RTS

# cчитаем функции по свечным формациям и прочим добром
library(candlesticks)

X29<- TrendDetectionSMA(D)  
X28<- TrendDetectionChannel(D)  
X27<- nextCandlePosition(D)  
X26<- CSPThreeOutside(D)
X25<- CSPThreeMethods(D)
X24<- CSPThreeInside(D)
X23<- CSPTasukiGap(D)
X22<- CSPStomach(D)
X21<- CSPStar(D)
X20<- CSPShortCandleBody(D)
X19<- CSPShortCandle(D)
X18<- CSPPiercingPattern(D)
X17<- CSPOutsideDay(D)
X16<- CSPNLowerClose(D,N = 3)
X15<- CSPNHigherClose(D,N = 3)
X14<- CSPMarubozu(D)
X13<- CSPLongCandleBody(D)
X12<- CSPLongCandle(D)
X11<- CSPKicking(D)
X10<- CSPInvertedHammer(D)
X9 <- CSPInsideDay(D)
X8 <- CSPHarami(D)
X7 <- CSPHammer(D)
X6 <- CSPGap(D)
X5 <- CSPEngulfing(D)
X4 <- CSPDoji(D)
X3 <- CSPDarkCloudCover(D)
X2 <- CandleLength(D)
X1 <- CandleBodyLength(D)


dat <- cbind.data.frame(D, X1,X2,X3,X4,X5,X6,X7,X8,X9,X10,
                        X11,X12,X13,X14,X15,X16,X17,X18,X19,
                        X20,X21,X22,X13,X24,X25,X26,X27,X28,X29)


# true,false заменяю на 1 и -1 а NA-шки на 0
dat[dat==TRUE]     <- 1
dat[dat==0]        <- -1
dat[is.na(dat)]    <- 0

# пишем все в файл с которым удобно работать в будущем
save(dat,file = "D:/R/candles_lib/candle_dat.RData")  # ваш путь

 
mytarmailS:

Sanych, quando é que vais aprender a citar correctamente?

Os prognosticadores não olham para o futuro - repetem o alvo.

Onde está o teste de avanço? Qual é o objectivo de discutir o treino?

PS

Tudo a pedido

 
SanSanych Fomenko:

Os prognosticadores não olham para o futuro - repetem o alvo.

Onde está o teste de avanço? O que há para discutir sobre treinamento?

Tenta ensinar no teu site e escreve o que tens, e depois teremos algo para discutir, espero...
 
mytarmailS:
Experimente por conta própria e escreva o que conseguir, e depois haverá algo para discutir, esperançosamente...

Eu entendo a razão.

Agora chegou um novo preço, todos os preditores foram calculados sobre ele, e depois o mesmo preço foi calculado sobre esses preditores - nós não prevemos nada. O erro de encaixe é zero. Não vejo nada de surpreendente.

Se a previsão for interessante, então o D muda um passo para a esquerda. Este modelo prediz um passo à frente. você pode prever vários

 
SanSanych Fomenko:

Eu entendo a razão.

Agora chegou um novo preço, todos os preditores foram calculados sobre ele, e depois o mesmo preço foi calculado sobre esses preditores - nós não prevemos nada. O erro de encaixe é zero. Não vejo nada de surpreendente.

Se a previsão for interessante, então o D muda um passo para a esquerda. Este modelo prevê um passo em frente.

Como assim, o novo preço chegou?

O código que te dei só faz previsões a partir de preços que são baixados do Finam.

então os dados são gravados.

# пишем все в файл с которым удобно работать в будущем
save(dat,file = "D:/R/candles_lib/candle_dat.RData")  # ваш путь

Então abrimos estes dadosno novo script, definimos opreço alvo e ensinamos o MO.

Não tem de onde vir. Claro que mudei o preço alvo por um passo, de acordo com a previsão, não é a primeira vez que estou a treinar.

então algo mais está lá

Ou eu não te entendo?
 
mytarmailS:

Como assim, o novo preço chegou?

o código que eu dei só faz previsões a partir dos preços baixados do finam

então os dados são gravados

# пишем все в файл с которым удобно работать в будущем
save(dat,file = "D:/R/candles_lib/candle_dat.RData")  # ваш путь

Depois abrimos este datacandle_dat.RData em um novo script, fazemos um alvo e ensinamos o MO.

Não tem de onde vir. É claro que mudei o alvo um passo, de acordo com a previsão.

por isso esta não é a primeira vez que faço isto.

Ou será que te entendi mal?
Qual é o alvo?
 
SanSanych Fomenko:
Qual é o alvo?

cloze é mais alto que o anterior cloze

load(file = "D:/R/candles_lib/candle_dat.RData")

Y <- diff(dat$SPFB.RTS.Close)
Y[Y>=0] <- 1
Y[Y<0] <- 0

dat <- dat[-nrow(dat),]
Y <- as.factor(Y)

tr <- 1:10000
ts <- 10001:15000


library(randomForest)
cm <- colnames(dat)
colnames(dat) <- paste0("var_" , 1:ncol(dat))

model <- randomForest(Y[tr]~., dat[tr,]  , ntree=100, mtry=10)

layout(1:2)
plot(model)
varImpPlot(model,type = 2)

pr <- predict(model,dat[ts,])


library(caret)
confusionMatrix(Y[ts] , pr)
 
mytarmailS:

a cloze acima é mais baixa que a cloze anterior

Não consigo descobrir onde está a mudança do alvo? Ao diferenciar? Mas a primeira linha de preditores, que é obtida subtraindo de 2, nós combinamos o 1º valor do alvo, ou seja, nós SABemos os próximos valores para o alvo com o índice 2.
 
SanSanych Fomenko:
Não consigo descobrir onde está o turno no alvo? Ao diferenciar? Mas a primeira linha de preditores, que é obtida subtraindo de 2, colocamos o 1º valor do alvo, ou seja, SABemos os próximos valores para o alvo com índice 2.

Ao diferenciar, o deslocamento é automático, pois a série torna-se um elemento mais curto, então tudo o que é necessário é encurtar a amostra (tabela com observações) pelo último elemento

eis um exemplo

SomeData <- c(10,20,30,20,10,20,30,40,50,40)

Y <- diff(SomeData)

cbind.data.frame(  Y , SomeData[-length(SomeData)])


nós temos

   Y                   SomeData[-length(SomeData)]
1  10                          10
2  10                          20
3 -10                          30
4 -10                          20
5  10                          10
6  10                          20
7  10                          30
8  10                          40
9 -10                          50
 
mytarmailS:

Ao diferenciar, o turno é automático, pois a linha torna-se um elemento mais curto, e então tudo o que é necessário é encurtar a amostra pelo último elemento

Não são os preditores que precisam deser deslocados para a esquerda, mas sim o alvo.

Deixa-me tentar explicar mais uma vez.


A seqüência de preditores com índice 1 é obtida = do SEGUNDO e da primeira seqüência de preditores. O resultado é escrito no lugar com o índice 1.

O alvo tem índice =1 e ainda o tem. Mas o seu valor prevemos com base na informação do FUTURO, segunda linha de preditores

Desloque o alvo em 1, ou seja, em vez de Y[1:n] pegue Y[2:n] e calcule