Aprendizaje automático en el trading: teoría, práctica, operaciones y más - página 265

 
SanSanych Fomenko:
Lo intenté, pero rápidamente se rompió: no está claro qué hacer con los agujeros de salida.

Los agujeros se toman en las discotecas el fin de semana :)

¿Cuándo vas a aprender a citar correctamente? No hace falta citar media página del foro para escribir tres palabras...

Pasemos al tema

Hice varias combinaciones de velas y otras cosas con la ayuda de Intenté enseñarlo concandelabros, resultó ser 100% de entrenamiento y error 0 tanto en los datos de entrenamiento como en los nuevos, es obvio que hay algunos predictores en los datos que miran hacia el futuro, así que no tuve que mirar en cada función solo quité los primeros 6 predictores que según la versión de forrest eran los más importantes y destacaban sobre los demás, esperaba que entre ellos estuvieran los que miran al futuro y entrené el MO de nuevo, el error fue de alrededor del 3%, en fin no sé qué demonios, por qué unos resultados tan fabulosos, quizás el error esté en mi código...

Karoch que quiere entender este es el código como hice la muestra, mi objetivo era "color de la vela".

En el código, sólo la selección en sí, el objetivo y otras manipulaciones hacen lo que quieres.

Pruébalo, experimenta porque es como 30 características más para tu 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, ¿cuándo vas a aprender a citar correctamente?

Los predictores no miran al futuro, sino que repiten el objetivo.

¿Dónde está la prueba de avance? ¿Qué sentido tiene hablar de la formación?

PS

Todo por encargo

 
SanSanych Fomenko:

Los predictores no miran al futuro, sino que repiten el objetivo.

¿Dónde está la prueba de avance? ¿Por qué hablar de formación?

Intenta enseñarlo en tu sitio y escribe lo que tienes, y entonces tendremos algo que discutir, espero...
 
mytarmailS:
Pruébalo por tu cuenta y anota lo que obtienes, y entonces habrá algo que discutir, ojalá...

Entiendo la razón.

Ahora ha llegado un nuevo precio, se han calculado todos los predictores sobre él, y luego se ha calculado el mismo precio sobre esos predictores: no predecimos nada en absoluto. El error de ajuste es cero. No veo nada sorprendente.

Si la predicción es interesante, entonces D se desplaza un paso a la izquierda. Este modelo predice un paso adelante. puede predecir varios

 
SanSanych Fomenko:

Entiendo la razón.

Ahora ha llegado un nuevo precio, se han calculado todos los predictores sobre él, y luego se ha calculado el mismo precio sobre esos predictores: no predecimos nada en absoluto. El error de ajuste es cero. No veo nada sorprendente.

Si la predicción es interesante, entonces D se desplaza un paso a la izquierda. Este modelo predice un paso adelante.

¿Qué quieres decir con que ha llegado el nuevo precio?

El código que te he dado sólo hace predictores a partir de los precios que se descargan de finam.

entonces se guardan los datos.

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

Luego abrimos estos datosen el nuevo script, fijamos elprecio objetivo y enseñamos el MO.

No tiene de dónde salir. Por supuesto, he desplazado el precio objetivo un paso, según la previsión, no es la primera vez que me entreno.

así que hay algo más

¿O es que no te entiendo?
 
mytarmailS:

¿Qué quieres decir con que ha llegado el nuevo precio?

el código que he dado sólo hace predictores de los precios descargados de finam

entonces los datos se guardan

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

Luego abrimos estos datoscandle_dat.RData en un nuevo script, hacemos un objetivo y enseñamos el MO.

No tiene de dónde salir. Por supuesto, he desplazado el objetivo de forma escalonada, según la previsión.

así que no es la primera vez que hago esto.

¿O te he entendido mal?
¿Cuál es el objetivo?
 
SanSanych Fomenko:
¿Cuál es el objetivo?

cloze es mayor que el cloze anterior

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:

el cloze de arriba es más bajo que el cloze anterior

No consigo averiguar dónde está el desplazamiento del objetivo. ¿Cuándo diferenciar? Pero en la primera línea de predictores, que se obtiene restando a 2, coincidimos con el primer valor del objetivo, es decir, CONOCEMOS los siguientes valores para el objetivo con índice 2.
 
SanSanych Fomenko:
No consigo averiguar dónde está el cambio de objetivo. ¿Cuándo diferenciar? Pero en la primera línea de predictores, que se obtiene restando a 2, ponemos el primer valor del objetivo, es decir, CONOCEMOS los siguientes valores para el objetivo con índice 2.

Al diferenciar, el desplazamiento es automático, ya que la serie se acorta en un elemento, entonces basta con acortar la muestra (tabla con observaciones) en el último elemento

aquí hay un ejemplo

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

Y <- diff(SomeData)

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


obtenemos

   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:

Al diferenciar, el desplazamiento es automático, ya que la fila se convierte en un elemento más corto, y entonces todo lo que se necesita es acortar la muestra por el último elemento

No son los predictores los que hay quedesplazar a la izquierda, sino el objetivo.

Permítanme que intente explicarlo una vez más.


La cadena de predictores con índice 1 se obtiene = a partir de la SEGUNDA y la primera cadena de predictores. El resultado se escribe en el lugar con índice 1.

El objetivo tiene índice =1 y lo sigue teniendo. Pero su valor lo predecimos en base a la información del FUTURO, segunda línea de predictores

Desplazar el objetivo en 1, es decir, en lugar de Y[1:n] tomar Y[2:n] y calcular

Razón de la queja: