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

 
Aleksey Nikolayev:

Si, par exemple, toutes les stratégies ne font que du BUY, alors il s'agit probablement de minimiser leur intersection dans le temps (minimiser les corrélations, qui sont toujours positives). Si l'achat et la vente sont autorisés, les croisements temporels peuvent être utiles pour compenser mutuellement les mauvaises parties des stratégies (les corrélations négatives sont généralement bonnes pour le portefeuille).

Je suppose que la corrélation peut être déterminée simplement par le timing des stratégies et le moment de leur chevauchement.

En général, je suis d'accord sur la compensation mutuelle de signaux dirigés différemment, mais pour cela dans mon cas, je dois appliquer différentes stratégies, et faire un balisage pour chacune - c'est une autre chanson, mais je compte l'appliquer aussi.

Mais pour trouver des stratégies similaires afin de les sélectionner dans un groupe ou de diviser leur risque (lot), nous devons considérer non seulement les heures d'entrée et de sortie, mais aussi la direction d'entrée. Je devrais réfléchir à comment mieux le faire.

 
Aleksey Vyazmikin:

Comment ça, il le fait parfaitement ? Je ne le fais pas manuellement, j'écris un script qui le fait de la manière dont je le vois maintenant.

Dans mon cas, l'idéal serait une évaluation séparée de chaque variante de valeur prédictive. Et, je veux fusionner les plages d'activation d'un prédicteur amplifiant une cible en un seul prédicteur, ce que les maillages que je connais ne font pas en divisant les plages de manière séquentielle, de même en fusionnant le prédicteur dans le classement à spar (en construisant un nœud) avec un autre prédicteur. Jusqu'ici en théorie.


Quel type de grille de partitionnement permettrait de regrouper les plages en une seule division, en éliminant les valeurs intermédiaires, comme dans la figure ci-dessous les valeurs 1 et 4 ?


Parfait - dans le sens d'une précision parfaite selon la fonction d'estimation partagée. Il évaluera des milliers d'options et retiendra la meilleure, et il deviendra un nœud.

Le plus simple est de former 24 forêts/boostings standard, chacun alimentant des prédicteurs de l'heure appropriée.

 
elibrarius:

Parfait - dans le sens d'une précision parfaite selon la fonction d'évaluation fractionnée. Il évalue des milliers de choix et retient le meilleur, qui devient le nœud.

Cela est clairement conforme à l'algorithme, mais quel algorithme est correct ? Seulement dans CatBoost il y a 3 algorithmes pour la construction d'une grille.

elibrarius:

La méthode la plus simple consiste à former 24 forêts/busées standard, chacune alimentant des prédicteurs de l'heure appropriée.

Cela réduirait l'échantillon d'environ 24 fois (et mon échantillon est déjà petit), et ensuite, en observant le principe d'avidité de la construction d'un arbre (qui n'est pas toujours vrai, comme il s'est avéré lors de mes expériences de division d'arbres), nous ne sélectionnerions que les prédicteurs pour l'arbre de branchement, qui, à une heure donnée, ont statistiquement la meilleure probabilité, Mais à mon avis, nous devrions trouver les prédicteurs et les mettre dans l'arbre, ceux qui indépendamment des autres conditionnalités ont donné un avantage dans l'échantillon entier, alors nous obtiendrons non pas un ajustement pour une heure concrète de la journée (description conditionnellement plus précise d'un événement pour l'activation), mais une accumulation de probabilités indépendantes dans une feuille.

 
Aleksey Vyazmikin:

Il s'agit d'un algorithme qui vérifie la capacité prédictive de la plage de valeurs prédictives et tente de partitionner les parties de la plage de manière à mieux mettre en évidence la capacité prédictive. Supposons qu'il y a un échantillon avec 3 cibles, l'échantillon est distribué comme 1 - 24%, 2 - 50%, 3 - 26%, et il y a un prédicteur avec une gamme de valeurs, donc le but de la grille est de trouver des zones de valeurs de prédicteur où, disons la cible 1 sera "prédite" par plus de 24%, et la division mettra en évidence cette zone. Il existe différentes variantes d'algorithmes pour construire de telles grilles.

Idée intéressante, mais n'est-ce pas plus simple de faire comme ça... ?

p.1) Nous avons une sorte d'algorithme d'apprentissage automatique. MO

p.2) Il y a un échantillon qui est divisé en un train et un test.

p.3) il y a un prix qui est regroupé selon un certain principe (temps, modèle graphique, tous ensemble, quelque chose d'autre ... ...) (il peut être perçu comme une situation de marché ou juste un regroupement)

pp. il devrait y avoir de nombreux ou très nombreux clusters


algorithme d'actions :

1) enseigner le MO sur un plateau

2) prédire le test en utilisant un modèle semi-prédictif.

3) sur le test nous identifions les points que le modèle a prédit sans erreur, nous les appelons XT (bon point)

4) chaque ht correspond à un cluster de l'étape 3 ci-dessus...

C'est tout, maintenant nous savons quels clusters (états) du marché le modèle commercialise bien... Les clusters (états) sont comme un analogue de votre grille, c'est-à-dire que nous essayons d'estimer à travers les clusters (états) ce que nous pouvons prévoir et ce que nous ne pouvons pas...


Mais les deux approches présentent des problèmes conceptuels qui doivent être résolus en premier lieu. Le problème ne réside même pas dans l'approche, mais dans la manière dont les informations sont présentées.

 
mytarmailS:


p.3) il y a un prix qui est groupé selon un certain principe (temps, modèle graphique, tous ensemble, quelque chose d'autre... ...) (il peut être perçu comme une condition de marché ou juste un groupe)

pp. il devrait y avoir de nombreux ou très nombreux clusters

Ici, je ne comprends pas, vous suggérez de prendre le prix nu des points de majoration cibles et de les regrouper ou quoi ?


mytarmailS:


3) lors d'un test, nous identifions les points que le modèle a prédits sans erreur, appelons-les HT (good point).

4) chaque point chaud correspond à un cluster de l'étape 3 ci-dessus...

C'est tout, maintenant nous savons quels clusters (états) du marché le modèle négocie bien... Les clusters (états) sont comme un analogue de votre grille, c'est-à-dire que nous essayons d'utiliser les clusters pour diviser ce que nous pouvons prévoir et ce que nous ne pouvons pas...

L'idée est intéressante, mais son principe n'est pas lié à ma suggestion ou je ne la comprends pas complètement. Nous avons découvert que le modèle activait un certain pourcentage de clusters, et ensuite que faire avec ? Je comprends que nous devons regarder quelle feuille (si nous parlons d'un arbre) combien de clusters ont été activés, et si la feuille active un cluster beaucoup plus souvent, alors c'est seulement un signe qu'elle a appris à l'identifier. Ici, il se pourrait qu'une grande partie des feuilles s'activent correctement sur différents clusters , ce qui indiquerait un caractère aléatoire, apparemment. Encore une fois, vous devez être sûr de l'algorithme de clustering - assurez-vous que le résultat est des clusters uniques et non de nombreux clusters similaires...

 
Aleksey Vyazmikin:

Cela est clairement conforme à l'algorithme, mais quel algorithme est correct ? Seul CatBoost possède 3 algorithmes pour construire la grille.

Cela réduira l'échantillon d'environ 24 fois (et mon échantillon est déjà petit), puis, en observant le principe de la construction d'arbres gourmands (ce n'est pas toujours vrai, comme il s'est avéré de mes expériences avec les arbres de fractionnement), nous allons sélectionner uniquement les prédicteurs pour la ramification de l'arbre, qui est dans une heure particulière statistiquement ont la meilleure probabilité, et la nécessité, à mon avis, de trouver des signes et de les mettre dans l'arbre, ceux qui, indépendamment des autres conditions a donné l'avantage sur l'ensemble de l'échantillon, alors vous obtenez pas adapté à une heure particulière de la journée (conditionnel).

Quelle différence cela fait-il de savoir où vous réduisez l'échantillon ? A l'extérieur, en faisant 24 forêts ou à l'intérieur, par exemple en ajoutant les 24 premiers nœuds séparés par des heures ? A partir de ces 24 noeuds, chaque branche restante prendra 1/24ème de l'échantillon.

 
Au fait, ce que je n'aime pas dans le boosting, c'est que la profondeur recommandée pour les arbres est de 7 à 10.
Autrement dit, si nous avons 100 prédicteurs et que la division commence au milieu de chaque prédicteur. Il est très probable que nous ayons 7 prédicteurs différents répartis au milieu. Peut-être qu'un ou deux se diviseront en un quart, probablement moins.
Ou bien, dans les algorithmes de boosting, l'algorithme ne fonctionne pas par demi-division, mais par petits morceaux ? Quelqu'un le sait-il ?
Et qui utilise quelle profondeur d'arbre ?
 
elibrarius:

Quelle différence cela fait-il de savoir où vous réduisez l'échantillonnage ? A l'extérieur, en faisant 24 forêts ou à l'intérieur, par exemple en ajoutant les 24 premiers nœuds avec une horloge divisée ? A partir de ces 24 noeuds, chaque branche restante prendra 1/24ème de l'échantillon.

Il ne s'agit pas de réduction, mais de statistiques sur le comportement du prédicteur sur l'échantillon en dehors de la division - cela devrait réduire le caractère aléatoire de la sélection de la valeur du prédicteur.

Au fait, est-ce qu'AlgLib fait la grille à chaque fractionnement ou une fois et utilise ensuite cette grille ? D'après ce que j'ai compris, les développeurs de CatBoost affirment que la grille est faite une fois par eux.

 
Aleksey Vyazmikin:

Je ne comprends pas, vous suggérez de prendre le prix nu des points de majoration cibles et de les regrouper ou quoi ?

La cible est la vôtre, n'importe quelle cible... Je suis un peu déchiré ....

Vous n'avez besoin de grappes que pour une seule cible :


Ici, nous avons trouvé les HTs sur les nouveaux tests, et les avons acceptés comme bons...

Maintenant, sur les nouvelles données, nous devons trouver ce TX pour lui appliquer le modèle, puisque le modèle ne fonctionne bien que sur le TX, et comment le reconnaître sur les nouvelles données ? comme une option par le numéro de cluster.

 
Aleksey Vyazmikin:

En général, je suis d'accord sur la compensation mutuelle de signaux dirigés différemment, mais pour cela dans mon cas, je dois utiliser différentes stratégies et faire un balisage pour chacune - c'est une autre chanson, mais je compte l'utiliser aussi.

Mais pour trouver des stratégies similaires afin de les sélectionner dans un groupe ou de diviser leur risque (lot), nous devons considérer non seulement les heures d'entrée et de sortie, mais aussi la direction d'entrée. Je dois réfléchir à la manière de mieux le faire.

Je vais amener l'idée à sa conclusion logique. Supposons que nous ayons un ensemble de systèmes sur un même bien. Chaque système conserve la position de volume fixe lorsqu'il est sur le marché, mais la direction peut varier. Les rendements et les volatilités de la stratégie sont connus. Définissons la corrélation entre les stratégies à l'aide de la formule (t1-t2)/sqrt(T1*T2) où T1 et T2 sont la durée de leur présence sur le marché, t1 et t2 sont la durée pendant laquelle ces stratégies sont simultanément sur le marché et dirigées respectivement dans la même direction et dans la direction opposée. Il s'agit d'une formule simplifiée dérivée de l'hypothèse de la proximité des prix par rapport à l'OS. Nous disposons maintenant de toutes les données nécessaires pour appliquer la théorie de Markowitz afin de trouver le portefeuille optimal.

De toute évidence, nous n'obtiendrons pas de portefeuilles significatifs de cette manière (au moins parce qu'un seul actif est utilisé). Nous avons besoin de quelques modifications.

1) Modifier l'algorithme d'optimisation (limites des paramètres, pénalités). Clarifier la définition de la corrélation entre les stratégies.

2) Optimiser le portefeuille dès le moment de la création de la stratégie. En d'autres termes, recherchez les stratégies en fonction de la condition d'optimalité du portefeuille qui leur est imposée. La manière dont cela peut être formalisé de manière pratique n'est pas très claire, mais cette approche semble plus logique en général. Bien que, comme vous l'avez déjà écrit, cela nécessiterait de réécrire les algorithmes, etc. etc. Pas sûr que ça en vaille la peine.