L'apprentissage automatique dans la négociation : théorie, modèles, pratique et algo-trading - page 265

 
SanSanych Fomenko:
J'ai essayé, mais j'ai vite déchanté : on ne sait pas trop quoi faire avec les trous de sortie.

Les trous sont pris dans les discothèques le week-end :)

Quand vas-tu apprendre à citer correctement ? Tu n'as pas besoin de citer la moitié d'une page du forum pour écrire trois mots...

Passons maintenant au sujet

J'ai fait diverses combinaisons de chandeliers et autres choses avec l'aide de J'ai essayé de l'enseigner avec deschandeliers, il s'est avéré être 100% de formation et d'erreur 0 à la fois sur la formation et de nouvelles données, il est évident qu'il ya des prédicteurs dans les données qui regardent dans l'avenir, Ainsi, je n'ai pas eu à examiner chaque fonction, j'ai juste retiré les 6 premiers prédicteurs qui, selon la version de Forrest, étaient les plus importants et se démarquaient des autres, j'espérais que parmi eux se trouvaient ceux qui regardaient vers l'avenir et j'ai entraîné le MO à nouveau, l'erreur était d'environ 3%, en bref, je ne sais pas ce qui se passe, pourquoi des résultats aussi fabuleux, peut-être que l'erreur se trouve dans mon code ...

Karoch qui veut comprendre c'est le code comment j'ai fait l'échantillon, ma cible était "couleur de bougie".

Dans le code, seule la sélection elle-même, la cible et les autres manipulations font ce que vous voulez.

Essayez-le, expérimentez-le parce que c'est comme 30 fonctions supplémentaires pour votre modèle.

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, quand allez-vous apprendre à citer correctement ?

Les prédicteurs ne se projettent pas dans l'avenir - ils répètent l'objectif.

Où se trouve l'essai avant ? Quel est l'intérêt de discuter de la formation ?

PS

Tous par demande

 
SanSanych Fomenko:

Les prédicteurs ne se tournent pas vers l'avenir - ils répètent l'objectif.

Où se trouve l'essai avant ? Qu'y a-t-il à discuter de la formation ?

Essayez simplement de l'enseigner sur votre site et écrivez ce que vous avez obtenu, et ensuite nous aurons quelque chose à discuter, j'espère...
 
mytarmailS:
Essayez-le par vous-même et notez ce que vous obtenez, et il y aura alors matière à discussion, espérons-le...

Je comprends la raison.

Maintenant, un nouveau prix est entré, tous les prédicteurs ont été calculés dessus, puis le même prix a été calculé sur ces prédicteurs - nous ne prédisons rien du tout. L'erreur d'ajustement est nulle. Je ne vois rien de surprenant.

Si la prédiction est intéressante, alors D se déplace d'un cran vers la gauche. Ce modèle prédit un pas en avant. Vous pouvez prédire plusieurs pas en avant.

 
SanSanych Fomenko:

Je comprends la raison.

Maintenant, un nouveau prix est entré, tous les prédicteurs ont été calculés dessus, puis le même prix a été calculé sur ces prédicteurs - nous ne prédisons rien du tout. L'erreur d'ajustement est nulle. Je ne vois rien de surprenant.

Si la prédiction est intéressante, alors D se déplace d'un cran vers la gauche. Ce modèle prévoit un pas en avant.

Comment ça, le nouveau prix est arrivé?

Le code que je vous ai donné fait juste des prédicteurs à partir des prix qui sont téléchargés de finam.

puis les données sont sauvegardées.

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

Ensuite, nous ouvrons ces donnéesdans le nouveau script, définissons leprix cible et enseignons le MO.

Il n'a nulle part où aller. Bien sûr, j'ai décalé le prix cible d'un cran, en fonction des prévisions, ce n'est pas la première fois que je l'enseigne...

donc quelque chose d'autre est là

Ou je ne vous comprends pas ?
 
mytarmailS:

Comment ça, le nouveau prix est arrivé?

le code que j'ai donné fait juste des prédicteurs à partir des prix téléchargés de finam

puis les données sont sauvegardées

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

Ensuite nous ouvrons ces donnéescandle_dat.RData dans un nouveau script, faisons une cible et enseignons le MO.

Il n'a nulle part où aller. Bien sûr, j'ai déplacé la cible d'une étape à l'autre, en fonction des prévisions.

donc ce n'est pas la première fois que je fais ça.

Ou est-ce que je vous ai mal compris ?
Quel est l'objectif ?
 
SanSanych Fomenko:
Quel est l'objectif ?

la cloche est plus élevée que la cloche précédente

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:

la cloche ci-dessus est plus basse que la cloche précédente

Je n'arrive pas à savoir où se trouve le décalage de la cible ? Lors de la différenciation ? Mais la première ligne de prédicteurs, qui est obtenue en soustrayant de 2, nous correspondons à la 1ère valeur de la cible, c'est-à-dire que nous SAVONS les valeurs suivantes pour la cible avec l'indice 2.
 
SanSanych Fomenko:
Je n'arrive pas à comprendre où se trouve le décalage de la cible ? Lors de la différenciation ? Mais sur la première ligne de prédicteurs, qui est obtenue par soustraction de 2, on met la 1ère valeur de la cible, c'est-à-dire qu'on SAIT les valeurs suivantes pour la cible d'indice 2.

Lors de la différenciation, le changement est automatique, puisque la série devient plus courte d'un élément, il suffit alors de raccourcir l'échantillon (tableau d'observations) du dernier élément.

voici un exemple

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

Y <- diff(SomeData)

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


on obtient

   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:

Lors de la différenciation, le décalage est automatique, puisque la ligne devient plus courte d'un élément, et il suffit alors de raccourcir l'échantillon du dernier élément.

Ce ne sont pas les prédicteurs qui doivent êtredéplacés vers la gauche, mais la cible.

Laissez-moi essayer de l'expliquer une fois de plus.


La chaîne de prédicteurs d'indice 1 est obtenue = à partir de la SECONDE et de la première chaîne de prédicteurs. Le résultat est écrit en place avec l'index 1.

La cible a l'indice =1 et l'a toujours. Mais sa valeur, nous la prédisons sur la base d'informations provenant du FUTUR, deuxième ligne de prédicteurs.

Décalez la cible de 1, c'est-à-dire qu'au lieu de Y[1:n] prenez Y[2:n] et calculez

Raison: