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

 
mytarmailS:
Merci pour la clarification, je vous comprends parfaitement maintenant, les algorithmes génétiques peuvent-ils aider ici ? Au lieu de RF, j'ai quelques idées intéressantes pour mettre en œuvre une cible, j'aimerais les essayer...
OK, on peut y réfléchir. Imaginez, par exemple, qu'à chaque itération, le réseau neuronal n'effectue pas une rétropropagation de l'erreur standard basée sur l'écart cible par rapport à la prédiction, mais qu'il reçoit des données qui, sur la version précédente de la balance, diffèrent de l'idéal par tant de points. Et met à jour les pondérations en fonction de ces informations. Autrement dit, l'information doit être un flux parallèle à la machine. Peut-être, c'est possible.
 

Est-il possible de faire cela en R ?

Un peu sur moi : je ne suis pas un programmeur, R est mon premier langage que j'apprends depuis un mois et demi.

 
mytarmailS:

Est-il possible de faire cela en R ?

Un peu sur moi : je ne suis pas un programmeur, R est mon premier langage que j'apprends depuis un mois et demi.

Voici un processus approximatif d'apprentissage de la NS en lui fournissant des informations sur les résultats des échanges. Vous pouvez essayer d'écrire votre propre fonction et l'introduire comme une fonction de fitness personnalisée dans un paquet R. Mais d'abord, nous devons trouver quel paquetage R le permet. Il faudrait probablement écrire la NS elle-même et la faire sur les points positifs dans un paquet séparé. ( R lui-même est lent.

Le fait est que c'est un cas très inhabituel. En général, les fonctions de mise en forme ne sont pas personnalisables, à une exception près, à ma connaissance. Tout au plus, j'ai écrit ma propre fonction dans le paquet caret, dont la valeur maximale est utilisée pour sélectionner un ensemble de paramètres de formation pendant la validation croisée. Mais en même temps, la machine elle-même est formée de manière standard. C'est-à-dire que ma solution n'est pas tout à fait celle dont j'ai besoin. Vous voyez ?

 
Googlé... Ouais, tu dois l'écrire toi-même, mais mec, ce ciblage standard est une approche tellement limitée, c'est ennuyeux...
 
mytarmailS:
Googlé... ouais, tu dois l'écrire toi-même, mais mec, cette cible standard est une approche tellement limitée, c'est ennuyeux...

Nous devrons continuer à chercher :

http://stackoverflow.com/questions/25510960/how-to-implement-own-error-function-while-using-neuralnet-package-in-r

/go?link=https://stackoverflow.com/questions/36425505/own-error-function-including-weights-for-neuralnet-in-r

Il semble que le package neuralnet vous permette de créer votre propre fonction de fitness, qui doit être différentiable. Je vais devoir y réfléchir... Qu'en pensez-vous ?

how to implement own error function while using neuralnet package in R?
how to implement own error function while using neuralnet package in R?
  • stackoverflow.com
I am trying to implement a customized error function in package neuralnet in R. Normally ’sse’ and ’ce’ which stand for the sum of squared errors and the cross-entropy are used to calculate...
 

Le deuxième lien indique que vous devez réécrire le code du paquet.

Vous pouvez utiliser le premier lien pour écrire votre propre erreur, mais nous devons connaître les poids précédents pour l'implémenter dans le concept que vous suggérez, ou j'ai raté quelque chose ? Pour être honnête, j'ai une idée très vague de la façon dont un réseau neuronal fonctionne.

 

L'apprentissage d'un réseau neuronal (propagation à rebours) se déroule généralement de la manière suivante : un exemple d'apprentissage est introduit dans le réseau, un résultat est déterminé pour celui-ci, vérifié par rapport au résultat souhaité, et une erreur est calculée. La tâche consiste alors à réduire cette erreur. Étant donné que tous les calculs du réseau neuronal ne sont que des ordres d'addition et de multiplication de données d'entrée avec des coefficients, vous pouvez calculer avec précision dans quelle mesure vous devez modifier les coefficients afin de réduire l'erreur. En général, vous pouvez trouver des coefficients qui réduisent l'erreur à zéro à la première étape, mais personne ne le fait, car cela réduit l'erreur d'un exemple concret, mais l'augmente sciemment pour tous les autres exemples.

Cette réduction progressive des erreurs se fait une à une en utilisant tous les exemples d'entraînement en les repassant encore et encore. En d'autres termes, vous ne pouvez pas utiliser un certain ratio de Sharpe comme résultat de transaction obligatoire. L'erreur peut être calculée séparément pour chaque exemple d'entraînement. Vous pouvez utiliser votre propre fonction pour calculer l'erreur, mais elle sera également calculée séparément pour chaque exemple d'apprentissage et non pour tous les exemples à la fois. Je n'arrive pas à trouver comment diviser l'ensemble de l'estimation commerciale en tous les exemples individuels.

Je suis d'accord pour dire que le trading en zigzag ou en prix de clôture de barre n'est pas le plus optimal. Il serait préférable d'ouvrir et de fermer les transactions en tenant compte également du spread, du drawdown, de la période pendant laquelle la transaction est ouverte. Nous pourrions créer un conseiller expert qui utilise des moyennes mobiles ou d'autres indicateurs, l'optimiser pour obtenir un ratio de sharpe maximal et utiliser ces transactions dans les données d'entraînement comme résultat requis. Mais je ferai quelque chose de ce genre après avoir obtenu des résultats stables, au moins sur le zigzag.

 
Dr. Trader:

L'apprentissage d'un réseau neuronal (propagation à rebours) se déroule généralement de la manière suivante : un exemple d'apprentissage est introduit dans le réseau, un résultat est déterminé pour celui-ci, vérifié par rapport au résultat souhaité, et une erreur est calculée. La tâche consiste alors à réduire cette erreur. Étant donné que tous les calculs du réseau neuronal ne sont que des ordres d'addition et de multiplication de données d'entrée avec des coefficients, vous pouvez calculer avec précision dans quelle mesure vous devez modifier les coefficients afin de réduire l'erreur. En général, vous pouvez trouver des coefficients qui réduisent l'erreur à zéro à la première étape, mais personne ne le fait, car cela réduit l'erreur d'un exemple concret, mais l'augmente sciemment pour tous les autres exemples.

Cette réduction progressive des erreurs se fait une à une en utilisant tous les exemples d'entraînement en les repassant encore et encore. En d'autres termes, vous ne pouvez pas utiliser un certain ratio de Sharpe comme résultat de transaction obligatoire. L'erreur peut être calculée séparément pour chaque exemple d'entraînement. Vous pouvez utiliser votre propre fonction pour calculer l'erreur, mais elle sera également calculée séparément pour chaque exemple d'apprentissage et non pour tous les exemples à la fois. Je n'arrive pas à trouver comment diviser l'ensemble de l'estimation commerciale en tous les exemples individuels.

Je suis d'accord pour dire que le trading en zigzag ou en prix de clôture de barre n'est pas le plus optimal. Il serait préférable d'ouvrir et de fermer les transactions en tenant compte également du spread, du drawdown, de la période pendant laquelle la transaction est ouverte. Nous pourrions créer un conseiller expert qui utilise des moyennes mobiles ou d'autres indicateurs, l'optimiser pour obtenir un ratio de partage maximal et utiliser ces transactions dans les données d'entraînement comme résultat requis. Mais je ferai quelque chose de ce genre après avoir obtenu des résultats stables, au moins sur les zigzags.

Oui, le NS fonctionne de la manière que vous avez décrite. Pour chaque exemple, l'erreur est calculée, puis, après avoir parcouru l'ensemble, on obtient la valeur de la fonction de fitness : erreur quadratique moyenne, ou erreur médiane, ou erreur absolue moyenne. Sur la base de cette valeur, les poids sont mis à jour en fonction du gradient calculé dans l'algorithme de rétropropagation.

Nous discutons ici du fait que nous devrions mettre notre propre fonction de fitness au lieu de celle mentionnée, en nous basant sur le trading de signaux de machine simulée. Ainsi, pour chaque exemple traité par NS, vous pouvez créer une transaction virtuelle (si le signal de sortie franchit un seuil prédéfini). Et à la fin de tous les exemples, nous pouvons calculer certaines statistiques intégrées, par exemple la statistique de Sharpe. Et déjà à partir de là, les poids seront traités par distribution inverse.

 

Merci pour la clarification détailléeDr.Trader!

Vous savez, le mieux et le plus correct serait probablement d'enseigner les renversements eux-mêmes, même le même zigzag, c'est-à-dire de donner trois états 1) demi-tour vers le haut

2) inversion à la baisse

3) pas un demi-tour

Mais que ce soit pour l'enseigner, il est assez difficile d'attraper les inversions, plus le biais dans le nombre d'observations, les classes "pas d'inversion" seront des dizaines ou peut-être des centaines de fois plus.

Quels prédicteurs utilisez-vous et quels sont les résultats ?

Je viens de commencer à utiliser l'analyse spectrale, les premiers tests se sont révélés bien meilleurs qu'avec les indicateurs, je l'ai fait passer par rattle, l'erreur de formation et de test était d'environ 6%, mais lorsque j'ai commencé à utiliser R, l'erreur est passée à 30% si je ne me trompe pas, San Sanich dit qu'il s'agit d'un recyclage, donc je ne comprends toujours pas grand chose

Il existe également un moyen de découvrir quelles périodes dominent sur le marché grâce à l'analyse spectrale. Vous pouvez ensuite utiliser ces périodes dans les indicateurs, car il s 'agira d'indicateurs adaptatifs, mais non adaptés à l'historique.

 
mytarmailS:

Le deuxième lien indique que vous devez réécrire le code du paquet.

Sur le premier lien, vous pouvez écrire votre propre erreur, mais nous avons encore besoin de connaître les poids précédents pour mettre en œuvre le concept que vous proposez, ou ai-je manqué quelque chose ? Honnêtement, je comprends très mal le fonctionnement d'un réseau neuronal.

Eh bien, tout d'abord, je ne le suggère pas. Je traduis votre intuition en une forme qui peut être encodée. Vous avez suggéré que la machine devrait être chargée de maintenir la courbe de négociation dans des limites raisonnables. ) C'est l'option pour le faire.

Deuxièmement, le premier lien montre exactement la façon de procéder. La seule limitation, qui est également mentionnée dans la documentation. De plus, nous n'avons pas besoin de poids, nous en avons eu besoin spécifiquement pour la personne qui a posé la question. Vous ne pouvez pas simplement obtenir des poids dans une fonction. Pourquoi avez-vous besoin de poids ? Pourquoi tu en parles en premier lieu ?

Vous pouvez utiliser pratiquement toutes les fonctions d'erreur qui peuvent être différenciées.