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

 
SanSanych Fomenko:
La notion d'"objet" est beaucoup plus compliquée dans R que dans de nombreux langages de programmation.
Les objets ne sont pas différents, seules les fonctions str, plot, summary et similaires sont surchargées de nombreuses fois, chaque type a sa propre implémentation.
 
Alexey Burnakov:
Je ne comprends pas bien pourquoi cela prend autant de temps. Quel était le numéro d'optim_var_number ? Il devrait être à moins de 10. Réglez-le à 1200 secondes et ça devrait être quelque chose.

J'ai beaucoup de prédicteurs (9602), c'est pourquoi cela prend autant de temps. Ils sont pris pour 2015 à partir de l'eurusd d1, toutes sortes de prix, de temps et d'indicateurs là. Je ne suis pas encore sorti de d1, donc le nombre d'exemples d'entraînement n'est que de 250+, par le nombre de jours de bourse dans une année. Pas de sauts.

nombre_var_optimal = 0.8662363

Dossiers :
trainData.zip  14378 kb
 
Dr. Trader:

J'ai beaucoup de prédicteurs (9602), c'est pourquoi cela prend autant de temps. Ils sont pris pour 2015 à partir de l'eurusd d1, toutes sortes de prix, de temps et d'indicateurs là. Je ne suis pas encore sorti de d1, donc le nombre d'exemples d'entraînement n'est que de 250+, par le nombre de jours de bourse dans une année. Pas de sauts.

nombre_var_optimal = 0.8662363

Je vais jouer avec votre jeu. Tout devrait voler.
 
SanSanych Fomenko:

Dans la dernière, la première colonne indique que si l'on ne prend que la PC1, 0,9761 de la variabilité est expliquée (proportion cumulative), si l'on prend DEUX composantes - PC1 et PC2 - 0,99996 est expliqué, etc.

PC1 PC2 PC3 PC4 PC5

Écart-type 2,2092 0,34555 0,01057 0,008382 0,004236

Proportion de la variance 0.9761 0.02388 0.00002 0.000010 0.000000

Proportion cumulée 0,9761 0,99996 0,99998 1,000000 1,000000

Cette méthode ne fonctionne que si vous travaillez avec tous les composants possibles. La fonction prcomp possède un paramètre "tol", qui est NULL par défaut. Mais on peut lui attribuer n'importe quelle valeur de 0 à 1, pour réduire le nombre de composants trouvés. Cela fonctionne comme suit : lors de la recherche d'un nouveau composant, le sdev du premier composant est pris et multiplié par tol. Lorsque sdev du nouveau composant est inférieur à ce produit, les nouveaux composants ne seront pas générés. Par exemple, si tol = 0,1, toutes les composantes avec sdev <0,22 seront écartées, de sorte que vous n'aurez que les deux composantes principales. Si tol=0.003, alors seuls les composants avec sdev > 0.0066276 resteront, c'est-à-dire seulement quatre. Si tol=NULL (par défaut), la fonction générera le nombre maximum de composants, mais cela prend trop de temps, je veux donc raccourcir ce processus. Si j'utilise tol, tout fonctionne plus rapidement et il y a moins de composants, mais dans ce cas, ça casse. Il est en quelque sorte calculé sur la base des composants trouvés uniquement. La proportion cumulée du dernier composant trouvé sera toujours égale à 1. Même si seulement 2 composants sont trouvés au lieu de milliers - la propagation cumulative du second composant passera à 1 (par exemple de 0,1 dans le cas où tous les composants sont générés) et, par conséquent, la propagation cumulative de PC1 augmentera également. Il est possible que laproportion cumulative change également de manière incorrecte lors du tri des prédicteurs.

Donc, la proportion cumulative ne peut pas être fiable, si vous travaillez sérieusement avec un pca conscient de l'y, vous devriez écrire votre propre fonction pour calculer la variabilité expliquée.

 
Dr. Trader:

Cela s'est avéré être un peu mauvais - cette méthode ne fonctionne que si vous travaillez avec tous les composants possibles. La fonction prcomp possède un paramètre "tol", qui est NULL par défaut. Mais vous pouvez le définir sur n'importe quelle valeur de 0 à 1, pour réduire le nombre de composants trouvés. Cela fonctionne comme suit : lors de la recherche d'un nouveau composant, le sdev du premier composant est pris et multiplié par tol. Dès que sdev du nouveau composant tombe en dessous de ce produit, les nouveaux composants ne seront pas générés. Par exemple, si tol = 0,1, toutes les composantes avec sdev <0,22 seront écartées, de sorte que vous n'aurez que les deux composantes principales. Si tol=0.003, alors seuls les composants avec sdev > 0.0066276 resteront, c'est-à-dire seulement quatre. Si tol=NULL (par défaut), la fonction générera le nombre maximum de composants, mais cela prend trop de temps, je veux donc raccourcir ce processus. Si j'utilise tol, tout fonctionne plus vite et il y a moins de composants, mais dans ce cas, ça casse. Il est en quelque sorte calculé sur la base des composants trouvés uniquement. La proportion cumulée du dernier composant trouvé sera toujours égale à 1. Même si seulement 2 composants sont trouvés au lieu de milliers - la propagation cumulative du second composant passera à 1 (par exemple de 0,1 dans le cas où tous les composants sont générés) et, par conséquent, la propagation cumulative de PC1 augmentera également. Il est possible que laproportion cumulative change également de manière incorrecte lors du tri des prédicteurs.

Donc, il ne faut pas se fier à la proportion cumulative, si vous travaillez sérieusement avec l'analyse de la variabilité en fonction de l'âge, vous devriez écrire votre propre fonction pour calculer la variabilité expliquée.

C'est une idée intéressante, ce n'est pas pour rien que je vous ai incité à y jeter un œil.
 
Dr. Trader:

J'ai beaucoup de prédicteurs (9602), c'est pourquoi cela prend autant de temps. Ils sont pris pour 2015 à partir de l'eurusd d1, toutes sortes de prix, de temps et d'indicateurs là. Je ne suis pas encore sorti de d1, donc le nombre d'exemples d'entraînement n'est que de 250+, par le nombre de jours de bourse dans une année. Pas de sauts.

nombre_var_optimal = 0.8662363

J'ai regardé votre plateau. Soit je ne comprends pas quelque chose, par exemple que toutes les variables n'entrent pas, soit vous faites une grosse erreur. Vous avez beaucoup de valeurs de prix brutes, par exemple, 1.1354 (MA et autres). Il n'y a aucun moyen de le faire car il s'agit de données totalement non stationnaires. Toutes les données doivent être des indicateurs DIFFERENTS ou oscillants, et être omnidirectionnelles. La recherche de dépendances dans de telles données est un travail totalement inutile.
 

C'est vrai, j'oubliais, vous avez déjà dit que les données devaient être spécialement préparées. J'ai pris les données brutes. Il y a aussi des oscillateurs parmi les indicateurs, je vais essayer de ne prendre que ceux-là.

D'ailleurs, le modèle PCA fonctionne avec de telles données, mais il nécessite un centrage, une mise à l'échelle et une certaine rotation des données sources. Pour la neuronique, c'est plus facile, il suffit de normaliser les données dans [0...1].

 
Dr. Trader:

C'est vrai, j'oubliais, vous avez déjà dit que les données devaient être spécialement préparées. J'ai pris les données brutes. Il y a aussi des oscillateurs parmi les indicateurs, je vais essayer de ne prendre que ceux-là.

D'ailleurs, le modèle PCA fonctionne avec de telles données, mais il nécessite un centrage, une mise à l'échelle et une certaine rotation des données sources. Pour la neuronique, c'est plus facile, il suffit de normaliser les données dans [0...1].

Nan, tu ne comprends vraiment pas l'importance de la non-stationnarité. Peu importe qu'il s'agisse d'un modèle NS ou linéaire ou de mon modèle, si vos données sont non stationnaires, les dépendances trouvées sur celles-ci sont garanties ne pas se produire en dehors de l'échantillon. Toutes les données que vous avez sont des prix bruts, MA(prix brut), ouverture de barre(prix brut) etc. doivent être retirées du modèle. Vous devez prendre leur différence par rapport au dernier prix connu.

La mise à l'échelle dans un intervalle n'est pas possible ici.

 
Alexey Burnakov:

Si vous avez des données non stationnaires, il est garanti que les dépendances trouvées sur ces données ne se produiront pas en dehors de l'échantillon.

Il y a juste une nuance intéressante qui sème le doute quant à l'adéquation de la reproduction de telles données (différences par rapport aux valeurs précédentes)

1) par exemple si nous avons un prix,

2) nous générons sa différence

3) nous prenons deux segments de différences qui sont très proches l'un de l'autre par la structure (qu'elle soit euclidienne)

4) ces zones appartiennent presque à 100% à un même cluster en RF ou aux mêmes neurones et sont considérées comme des situations identiques.

5) on prend ensuite ces deux sections (différences) et on les ramène aux prix initiaux, c'est-à-dire qu'on les cumule

Et on voit que ces sections sont totalement différentes, souvent une section a une tendance à la hausse et l'autre à la baisse, c'est-à-dire qu'il n'y a aucune ressemblance, alors que l'algorithme pense que ce sont des sections identiques...

Qu'en pensez-vous, Alexey ? Vos commentaires sont intéressants en tant qu'homme d'expérience.

 
mytarmailS:

Il y a juste une nuance intéressante qui sème le doute sur l'adéquation de la reproduction de ces données (différences par rapport à la valeur précédente)

1) par exemple si nous avons un prix,

2) nous générons sa différence

3) nous prenons deux segments de différences qui sont très proches l'un de l'autre par la structure (qu'elle soit euclidienne)

4) ces zones appartiennent presque à 100% à un même cluster en RF ou aux mêmes neurones et sont considérées comme des situations identiques.

5) on prend ensuite ces deux sections (différences) et on les ramène aux prix initiaux, c'est-à-dire qu'on les cumule

Et on voit que ces sections sont totalement différentes, souvent une section a une tendance à la hausse et l'autre à la baisse, c'est-à-dire qu'il n'y a aucune ressemblance, alors que l'algorithme pense que ce sont des sections identiques...

Qu'en pensez-vous, Alexei ? Il est intéressant d'entendre vos commentaires en tant qu'homme d'expérience.

Pourquoi ça serait comme ça ? Si les différences sont les mêmes, alors les séries intégrales coïncident complètement. S'ils sont simplement similaires, les séries intégrales seront similaires (par tendance).

Je voulais dire à Trader de lire les bases de la préparation des données. Personne ne soumet de prix bruts pour l'entrée. Cela a déjà été joué des centaines de milliers de fois. Des données instables entraînent des dépendances instables.

Raison: