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

 
Vladimir Perervenko:


PS. Et paralléliser le calcul de lm(). C'est juste le bon moment pour le faire.

Merci.

J'ai vu comment paralléliser une opération dans une boucle grâce à foreach %dopar%. Je ne sais pas comment l'accrocher à une boucle cachée dans DT. Je ne sais pas si c'est plus rapide ou non.

 
Alexey Burnakov:

Merci.

J'ai vu comment paralléliser une opération dans une boucle grâce à foreach %dopar%. Je ne sais pas comment l'attacher à une boucle cachée dans DT. Et je ne sais pas si ça serait plus rapide.

Je voulais dire cette partie du code.

lm_models <-    x[,
{
        lapply(c(1:20), function(x) summary(lm(data = .SD[, c(1:x, 21), with = F],    formula = V21 ~ . -1))$'fstatistic'[[1]])
}
, by = sampling
]

Foreach() au lieu de lapply

 

Il y a quelque chose qui ne va pas avec les graphiques qui prennent plusieurs dizaines de secondes à construire.

Consultez ce paquet ("nhstplot"). C'est rapide à dessiner et je pense que c'est assez bon.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

 
Vladimir Perervenko:

Il y a quelque chose qui ne va pas avec les graphiques qui prennent plusieurs dizaines de secondes à construire.

Consultez ce paquet ("nhstplot"). C'est rapide à dessiner et je pense que c'est assez bon.

> plotftest(f = 4, dfnum = 3, dfdenom = 5, title = "Fisher's F test")

Je vais y jeter un coup d'œil. Mais où est la semi-transparence ici, où sont les centaines d'objets superposés ? Testez-le dans des conditions difficiles et nous comprendrons alors si c'est plus rapide ou non.
 
Vladimir Perervenko:

Ahh. Je vais essayer, merci. Il s'avère que la boucle lapply sera remplacée par une boucle parallèle. Et tout cela tourne dans une boucle DT avec 1000 itérations.

Ou il y a une autre façon de sauter ces 1000 itérations par foreach.

 
Alexey Burnakov:
J'y jetterai un coup d'œil, bien sûr. Mais où est la semi-transparence ici, où sont les centaines d'objets superposés ? Testez-le dans des conditions difficiles et nous comprendrons alors si c'est plus rapide ou non.

Un dessin semi-transparent rapide peut être réalisé avec une carte graphique OpenGL. En R, il y a une bibliothèque rgl pour cela, elle est plus pour la 3d, mais si vous pouvez faire une projection orthogonale, et dessiner des lignes, ce sera juste ce dont vous avez besoin. Je ne l'ai pas compris tout de suite, il faut lire la documentation.

Je l'ai :

Il est assez facile de dessiner des lignes semi-transparentes, il suffit d'avoir un tableau avec des coordonnées X et Y. Vous pourriez également ajouter une troisième colonne Z pour la tridimensionnalité.

library(rgl)
for(i in 1:1000){
    lines3d(cbind(1:1000, cumsum(rnorm(1000))), col="blue", alpha=0.1)
}

Mais il s'est avéré être lent tout de même. A en juger par procesexplorer - la vidéo n'est utilisée que par 5%, alors qu'un processeur logique est utilisé à 100%. Je pense que R est trop lent à fournir des données à OpenGL, beaucoup plus lent que ce qu'il peut recevoir. D'une certaine manière, c'est juste apparu comme ça.

Juste pour le plaisir d'encombrer :) faites-le, agrandissez la fenêtre en plein écran, et faites tourner "figure" avec le bouton gauche de la souris.

library(rgl)
for(i in 1:100){
    lines3d(cbind(cumsum(rnorm(100)), cumsum(rnorm(100)), cumsum(rnorm(100))), alpha=0.2)
}
 
Tu pourrais faire ça. Retirez une centaine de lignes au hasard. Et les distributions seraient pleines. Ce serait beaucoup plus rapide
 

J'ai finalement fait le premier essai de l'idée de cluster que j'ai annoncée plus tôt, c'est un essai, juste pour voir ce qui se passe, les prédicteurs sont simples

série mobile de 5 valeurs OHLC + volume + volatilité 6 prédicteurs de 5 valeurs chacun

apprendre l'histoire 100 000 bars

chaque prédicteur a été normalisé bien sûr) et ensuite regroupé en 100 clusters désolé pour le non-sens

La cible a été créée à l'improviste (en ce moment, je viens juste de m'asseoir), j'ai simplement pris le renversement sous cette forme : L'objectif est un extremum supérieur aux 4 bougies précédentes et supérieur aux 10 bougies suivantes.

J'ai commencé à chercher des motifs répétitifs...

Le meilleur que j'ai trouvé avec de tels prédicteurs est le modèle suivant

open high low close volum volat target_avg target_count
91      30  41    91    100   0.4        9

dans(open high low close volum volum) sont les nombres de clusters qui caractérisent ce modèle.

target_avg - il s'agit dela probabilité que mon retournement soit déclenché dans ce modèle. Je n'ai pas pu trouver de modèles avec une probabilité de 80-90% de déclenchement selon ces prédicteurs.

target_count - lenombre de fois que le motif a été détecté dans l'historique, je n'ai pas trouvé de motifs significatifs, qui ont été détectés 30-50 fois en utilisant ces prédicteurs.

La meilleure chose que j'ai trouvée avec ces prédicteurs est un modèle, dans lequel le renversement (cible) est déclenché dans 40% des cas et il n'y a que 9 observations (nombre de modèles).

C'est donc peut-être le seul élément d'information utile, le "NO BLOW" nécessaire, qui peut être extrait de l'ensemble des prédicteurs et il n'explique qu'une seule raison du renversement et même cela ne représente que 40 % de celui-ci et différentes raisons pour différents renversements et il n'y en a certainement pas 10 ou 30.

Et maintenant, pensez à la façon dont l'algorithme MO peut expliquer tous les mouvements du marché avec de tels prédicteurs, c'est impossible, car les prédicteurs ne peuvent expliquer que 2% et le reste est du bruit....

de plus, il n'y a pas de contrôle de la récurrence statistique, c'est-à-dire que le RI peut prendre une décision sur la base d'une ou deux observations, ce qui est vrai en fait dans la grande majorité des cas, soit moins de 95 % des cas.

Bref, je m'égare... continuons sur un schéma, après avoir estimé la qualité des intrants sur un nouvel échantillon je vais le dire, ce n'est pas la Mercedes mais si c'est un Zaporozhets tué alors cette approche un neuf tout juste sorti d'usine

La qualité des entrées est bien meilleure, plus claire, moins d'erreurs...

et l'autre chose est, le modèle complet est...

open high low close volum volat
91   6    30  41    91    100

lorsque j'ai exécuté la reconnaissance sur les nouvelles données de 50 000 chandeliers, l'algorithme n'a pas pu trouver un tel modèle, il n'est tout simplement pas apparu ;))

J'ai dû réduire le modèle et ne laisser que les prix.

open high low close volum volat
91   6    30  41    91    100

J'ai déjà trouvé une vingtaine de ces modèles

voici les entrées dans le modèle, je n'ai rien choisi "ala best entries" juste pris une photo telle quelle dans l'ordre dans lequel les transactions ont été faites, pas toutes les transactions bien sûr juste quelques-unes d'abord, de sorte que vous pouvez évaluer

й

l'eqiti est agréable, bien que le risque soit plus grand que prévu

к

n'oubliez pas qu'il ne s'agit que d'un seul modèle, et que c'est un short.

Si quelqu'un a besoin du code, je le posterai, mais j'en doute, il est déjà très clair.
 

214 pages, c'est beaucoup à étudier/apprendre. Chacun d'entre eux traite de quelque chose de différent et n'est pas toujours facile à comprendre).

Est-il possible de résumer toutes ces pages en un seul post, même s'il n'est pas très court ? Type : objectif fixé, méthodes de solution, résultats, conclusions.

Je précise tout de suite que mon modèle de marché est un processus aléatoire (mouvement brownien), ou plutôt la somme de plusieurs (peut-être beaucoup) de ces mouvements avec des rétroactions. Et prédire quoi que ce soit ou chercher des modèles autres que statistiques est un exercice absolument futile. En d'autres termes, les prédicteurs significatifs n'existent tout simplement pas, du moins à des fins spéculatives.

 
Le code, bien sûr. C'est intéressant.