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

 
mytarmailS:

dans le cadre d'une conversation personnelle

votre option

version simple

comme vous pouvez le voir les valeurs sont assez différentes, vous pouvez vérifier vous-même


Dans mon modèle.

donc une seule colonne, mais cela n'a pas vraiment d'importance.

===================UPD

Mec, ils sont différents à chaque fois que tu exécutes umap_tranform, ça ne devrait pas l'être.

Je ne faisais pas attention. Ça fait longtemps...

 
mytarmailS:

dans le cadre d'une conversation personnelle

votre option

version simple

comme vous pouvez le voir les valeurs sont assez différentes, vous pouvez vérifier vous-même


Dans mon modèle.

donc une seule colonne, mais cela n'a pas vraiment d'importance.

===================UPD

Mec, ils sont différents à chaque fois que tu exécutes umap_tranform, ça ne devrait pas être comme ça

Habituellement, la graine (du RNG intégré) est fixée à une certaine valeur pour la répétabilité. Sinon, le hasard est utilisé. Ce paquet peut aussi avoir un Seed - vérifiez-le.
 
elibrarius:
Habituellement, pour la répétabilité, vous réglez le Seed (du HSS intégré) à une certaine valeur. Sinon, le hasard est utilisé. Peut-être que ce paquet a aussi Seed - vérifiez-le.

Je pense que oui, mais le fait est que sans RMS il devrait toujours être le même, dans le paquet analogique "umap" le résultat est toujours le même.

 
Aleksey Vyazmikin:

pour vous, avec pour seul espoir que vous appreniez le r-ku)

install.packages("TTR","uwot")

clos <- d$X.CLOSE.

get.ind <- function(x,n=5){
  
  all_to.all_colums <- function(x,names){
    cb <- combn(ncol(x),2)
    res <- matrix(ncol = 0,nrow = nrow(x))
    for(i in 1:ncol(cb)){
      j1 <- cb[1,i]
      j2 <- cb[2,i]
      
      res <- cbind(res,   x[,j1] - x[,j2]  )
      colnames(res) <- paste0(names, 1:ncol(res))
    }
    return(res)}
  
  library(TTR)
  aroon  <- aroon(x,n)
  BBands <- BBands(x,n)            ;   BBands <- all_to.all_colums( BBands, names = "BBands")
  CCI    <- CCI(x,n)
  CMO    <- CMO(x,n)
  DEMA   <- diff(c(0,DEMA(x,n)))
  Donchian <- DonchianChannel(x,n) ;   Donchian <- all_to.all_colums( Donchian, names = "Donchian")
  MACD   <- MACD(x,n)
  moment <- momentum(x,n)
  PBands <- PBands(x,n)            ;   PBands <- all_to.all_colums( PBands, names = "PBands")
  RSI    <- RSI(x,n)
  SAR    <- diff(c(0,SAR(cbind(x,x,n))))   
  SMA    <- diff(c(0,SMA(x,n)))
  stoch  <- stoch(x,n)
  TDI    <- TDI(x,n)
  VHF    <- VHF(x,n)
  WPR    <- WPR(x,n)
  
  ind <- cbind.data.frame(aroon,BBands,CCI,CMO,DEMA,Donchian,
                          MACD,moment,PBands,
                          RSI,SAR,SMA,stoch,TDI,VHF,WPR)
  return(ind)
}
get.target <- function(x, change){
  zz <- TTR::ZigZag(x,change = change,percent = F)
  zz <- c(diff(zz),0) ; zz[zz>=0] <- 1 ; zz[zz<0] <- -1
  return(zz)
}

X <- get.ind(clos)
Y <- as.factor(get.target(clos,change = 0.001))


library(uwot)

train.idx <- 100:8000
test.idx <- 8001:10000

UM <- umap(X = X[train.idx,],
           y = Y[train.idx], 
            approx_pow = TRUE, 
            n_components = 3, 
            ret_model = TRUE,
            n_threads = 4 L, 
            scale = T)

predict.train <- umap_transform(X = X[train.idx,], 
                                model = UM, n_threads = 4 L, 
                                verbose = TRUE)

predict.test <- umap_transform(X = X[test.idx,], 
                                model = UM, n_threads = 4 L, 
                                verbose = TRUE)



library(car)

scatter3d(x = predict.train[,1], 
          y = predict.train[,2], 
          z = predict.train[,3],
          groups = Y[train.idx],
          grid = F, 
          surface = F,
          ellipsoid = F,
          bg.col = "black",surface.col = c(2,3))

il y a deux fonctions

get.ind

и

get.target

le premier crée un ensemble d'indicateurs de date, le second la cible du zigzag

tout ce que vous avez à faire est de charger les données avec un prix de clôture de 10k et de les écrire dans la variable clos.

et obtenir votre umap avec la cible


https://github.com/jlmelville/uwot
 
mytarmailS:

pour vous, avec pour seul espoir que vous appreniez le p)

il y a deux fonctions

и

le premier crée un ensemble d'indicateurs de date, le second crée une cible de zigzag

tout ce que vous avez à faire est de charger les données avec un prix de clôture de 10k et de les écrire dans la variable clos.

et obtenir votre umap avec la cible


https://github.com/jlmelville/uwot

Très heureux de vous rencontrer, merci !

Je souhaite plus de commentaires :)

La question ici est de savoir comment synchroniser les prédicteurs du fichier avec la cible résultante ?

 
Aleksey Vyazmikin:

Très heureux de vous rencontrer, merci !

Je souhaite plus de commentaires :)

La question ici est de savoir comment synchroniser les prédicteurs du fichier avec la cible ?

Eh bien, puisque la cible est construite à l'aide du prix, elle est déjà synchronisée, et si les prédicteurs sont construits à l'aide de la même scène, cela signifie qu'ils le sont aussi).

Ou je ne comprends pas la question.


J'ai essayé de nommer les variables de manière à ce qu'elles soient compréhensibles sans commentaires.

 

Une question d'un nerd.


Il y a trois variables A, B, C. Une sorte de condition est écrite à la main de leur part. Par exemple.

(A > B) && (A - B < C) && (A + 3 * C > 2 * B)


Je veux reproduire cette condition automatiquement. Je n'ai pas besoin de la trouver, car je la connais déjà. Mais j'ai besoin d'avoir, par exemple, des dizaines de coefficients de pondération dont la combinaison peut atteindre cette condition avec une forte probabilité, lorsque j'y place A, B, C (polynôme ou HC - je ne sais pas, car je connais zéro) et obtenir la condition originale.


Je suis intéressé par le type et le nombre de poids d'entrée de la fonction requise, de sorte que ces conditions originales puissent être reproduites par le biais des poids ?

 

Donc, comment les arbres ont été formés sur les clusters, je vous le dis et vous le montre.

Nous avons obtenu le modèle suivant pour la reconnaissance de classe

L'historique a une précision de 0,9196756 - c'est-à-dire que la logique du cluster est assez reproductible.

J'ai ensuite formé un modèle pour chaque groupe

Groupe 1

Groupe 2

Groupe 3

Groupe 4

Tous les clusters ont une précision d'environ 0,53.

Et voici à quoi ressemble le modèle sans la division en clusters.

La précision de 0,5293815 est à peu près la même que pour les clusters.

Si nous comparons les modèles pour les grappes et un modèle d'arbre avec l'ensemble de l'échantillon, nous voyons que les arbres de grappes ont plus de feuilles avec des informations généralisées sur l'échantillon avec la cible 1 et -1, ce qui est théoriquement bon.

Voyons ce que les tests révèlent - tout d'abord, examinons la période de formation.

Modèle sans partitionnement des clusters :

Modèle avec partitionnement en clusters :

Nous constatons que la précision est meilleure avec le modèle sans clustering, mais qu'elle est meilleure avec le modèle sur les clusters, ce qui permet de meilleures performances financières.

Examinons maintenant l'échantillon en dehors de la formation.

Et voici nos clusters :

Et le modèle sans clusters :

La situation ici semble être inversée - beaucoup de transactions ont eu un effet néfaste lorsque le marché a commencé à convulser à partir d'avril.

J'ai décidé d'examiner les feuilles des modèles de cluster individuellement, s'il n'y avait pas eu de cluster, sur un histogramme descendant :


Un total de 6 congés non rentables (zéro cible supprimée - il s'agit d'une interdiction d'entrée), il s'avère que nous ne sommes pas dans le bon cluster ?

 
mytarmailS:

Puisque l'objectif est basé sur le prix, il est déjà synchronisé, et si les prédicteurs sont basés sur la même scène, ils le sont aussi).

Ou je ne comprends pas la question.


J'ai essayé de nommer les variables de manière à ce qu'elles soient compréhensibles sans commentaires.

Comment prendre un jeu de données avec des prédicteurs et le prix de clôture et le charger avec la spécification d'une colonne avec le prix de clôture au lieu d'utiliser la variante de génération d'indicateurs dans R ?

Si je comprends bien, puisque la cible est les sommets ZZ, alors une partie de l'échantillon avec les prédicteurs devrait être filtrée, ici, et donc pour alimenter les prédicteurs il faudrait aussi filtrer le tableau avec les prédicteurs, ou quoi ?

 
fxsaber:

Une question d'un nerd.


Il y a trois variables A, B, C. Une sorte de condition est écrite à la main de leur part. Par exemple.


Je veux reproduire cette condition automatiquement. Je n'ai pas besoin de la trouver, car je la connais déjà. Mais j'ai besoin d'avoir, par exemple, des dizaines de coefficients de pondération dont la combinaison peut atteindre cette condition avec une forte probabilité, lorsque j'y place A, B, C (polynôme ou HC - je ne sais pas, car je connais zéro) et obtenir la condition originale.


Je suis intéressé par le type et le nombre de poids d'entrée de la fonction requise, de sorte que ces conditions originales puissent être reproduites par le biais des poids ?

ou encore

(A > B) && (A - B < C) && (A + 3 * C > 2 * B)

En entrée de NS - les valeurs A,B,C n fois (disons 1000), en sortie - les réponses de votre formule pour ces valeurs comme 0;1. Essayez-le. Et voyez l'erreur de classification et la façon dont le modèle reproduit la condition.

si vous voulez voir exactement de quel genre et l'interpréter, vous pouvez le faire à travers les arbres.

Variante 2 (si la première n'a pas bien fonctionné) - A, B, A-B, C, A+3*C, 2B - variables, toutes les mêmes que dans la première variante à mettre dans l'arbre. Et vous pouvez voir sa structure comme dans les photos d'Alexey ci-dessus.