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

 
Alexey Burnakov:

Attendez. Je vais aussi analyser vos données pour les dépendances.

Une question avant de commencer. Vos données comprennent-elles toutes les barres d'une rangée, ou bien les barres ont-elles été éclaircies avant l'échantillonnage ?

R1, R2, R3 en ligne et à l'intérieur de ceux-ci également en ligne sont des séries temporelles sur H1.
 
SanSanych Fomenko:
R1, R2, R3 dans une rangée et à l'intérieur de ceux-ci également dans une rangée est une série temporelle sur H1.

Je vois. Eh bien, avec vos données, je comprends à peu près comment travailler.

Je veux aussi comprendre le Dr. Trader.

 

Je dispose également de H1, l'échantillon comprend les données des 4 dernières barres. open[1]-high[1]-close[1]-...-open[2]-high[2]-close[2]-... etc., les données proviennent des structures MqlRates et MqlDateTime, ainsi que de quelques indicateurs et de prix de clôture provenant d'horizons temporels plus élevés, tout est normalisé dans l'intervalle [0..1]. Le résultat de 1 ou 0 est une augmentation ou une diminution du prix sur la barre suivante. Mais tout cela n'est manifestement pas suffisant.

Le problème est que nous ne savons pas de combien de barres nous avons besoin. Le Neuronka n'a besoin que de 3 barres pour se recycler jusqu'à une erreur de 0% (et donc 50% de celle-ci sera dans le fronttest). Ou, si vous l'entraînez avec contrôle et l'arrêtez à temps, l'erreur frontale sera inférieure de quelques pour cent. Mais il est possible de prendre des centaines de barres et d'obtenir approximativement le même résultat, bien que chaque nouvelle barre de l'échantillon représente une énorme quantité de déchets et diminue par conséquent la qualité du modèle.

 
Dr. Trader:
J'ai aussi H1, l'échantillon inclut les données des 4 dernières barres. open1-high1-close1-...-open2-high2-close2-... etc. Les données des structures MqlRates et MqlDateTime. Le résultat de 1 ou 0 est une augmentation ou une diminution du prix sur la barre suivante.
Super. Y a-t-il quelque chose comme open1 - open2 ? Renvoie à
 

Un petit complément au post précédent. Non, il n'y a pas de deltas. Je vais devoir l'essayer.

 
Dr. Trader:

Je dispose également de H1, l'échantillon comprend les données des 4 dernières barres. open[1]-high[1]-close[1]-...-open[2]-high[2]-close[2]-... etc., les données proviennent des structures MqlRates et MqlDateTime, ainsi que de quelques indicateurs et de prix de clôture provenant d'horizons temporels plus élevés, tout est normalisé dans l'intervalle [0..1]. Le résultat de 1 ou 0 est une augmentation ou une diminution du prix sur la barre suivante. Mais tout cela n'est manifestement pas suffisant.

Le problème est que nous ne savons pas de combien de barres nous avons besoin. Le Neuronka n'a besoin que de 3 barres pour se recycler jusqu'à une erreur de 0% (et donc 50% de celle-ci sera dans le fronttest). Ou, si vous l'entraînez avec un contrôle et l'arrêtez à temps, l'erreur frontale sera inférieure de quelques pour cent. Mais il est possible de prendre des centaines de barres et d'obtenir le même résultat, bien que chaque nouvelle barre de l'échantillon représente une énorme quantité de déchets et une diminution correspondante de la qualité du modèle.

Eh bien, vous devez faire de l'ingénierie de fonctionnalité. Il ne s'agit pas nécessairement de l'utilisation d'indicateurs standard. Vous devez faire preuve d'imagination et comprendre le processus. Le simple fait de donner à la boîte noire des données sur les barres peut vraiment ne pas être suffisant. Et la profondeur à partir de laquelle les informations sont prises est importante. Par exemple, j'ai constaté dans mes recherches que vous devez alimenter une profondeur symétrique à l'entrée par rapport à la profondeur à la sortie. Prédire pour 3 heures à l'avance - donner des données pour 3 heures en arrière et plus tard.

Voici un exemple de schéma de développement de prédicteurs qui se retrouve en partie dans mes recherches également. Ces données donnent déjà à la machine beaucoup d'informations sur ce qui était :

http://blog.kaggle.com/2016/02/12/winton-stock-market-challenge-winners-interview-3rd-place-mendrika-ramarlina/comment-page-1/

Winton Stock Market Challenge, Winner's Interview: 3rd place, Mendrika Ramarlina
Winton Stock Market Challenge, Winner's Interview: 3rd place, Mendrika Ramarlina
  • 2016.12.02
  • blog.kaggle.com
The Stock Market Challenge, Winton's second recruiting competition on Kaggle, asked participants to predict intra and end of day stock returns. The competition was crafted by research scientist at Winton to mimic the type of problem that they work on everyday. Mendrika Ramarlina finished third in the competition with a combination of simple...
 
Dr. Trader:

Un petit complément au post précédent. Non, il n'y a pas de deltas. Je vais devoir l'essayer.

C'est un must.

Tu sais ce qui marche bien ? La différence entre le dernier prix connu et la moyenne mobile. La fenêtre de la moyenne devrait être différente.

 
Je suis en train de lire, de lire.... et je n'arrive pas à comprendre quelle est la variable cible d'abord d'un point de vue formel : un nombre réel (régression) ou une valeur nominale (classification). De même, si nous discutons de la mesure dans laquelle les prédicteurs influencent la variable cible, il est bon de connaître la signification de la variable cible elle-même.
 

Je considère la variable cible comme un critère d'achat ou de vente, sans savoir combien de temps il faut garder la transaction ouverte ou quel niveau de prix il faut attendre. Le conseiller expert ouvre une transaction au début d'une barre, et attend la barre suivante pour prendre la décision suivante.

C'est plus difficile avec un sens logique :)

Je voulais entraîner la neuronique à trouver des motifs et des formes sur un tableau (tête et épaules, etc.). Et il a dû apprendre à trouver certaines figures par lui-même sans ma participation ; j'ai utilisé la direction du zigzag comme variable cible. La signification de la variable cible selon mon plan aurait dû être "motif trouvé, la tendance va aller vers le haut, je devrais acheter" (avec résultat=1). En même temps, le résultat=0 signifierait que la tendance va aller vers le haut et que je devrais vendre. J'ai essayé de prendre en compte la force du signal et de ne pas négocier lorsque le résultat est proche de 0,5.

Mes pensées à voix haute, je n'y avais pas pensé avant : il semble que mon modèle était erroné, j'ai dû enseigner 3 classes pour acheter/vendre/clôturer toutes les transactions_et_ne_pas_trader. Et faire soit 3 sorties d'un seul réseau, soit former 3 réseaux séparés. Pas un réseau avec une seule sortie.

Puis j'ai réalisé par l'expérimentation que je peux prendre seulement 5 barres au lieu de 200 et rien ne changera, le résultat restera le même. Je ne pense pas que le modèle apprenne à trouver des modèles dans une telle configuration, mais plutôt à trouver certaines régularités dans le temps. J'ai progressivement décidé d'enseigner le modèle non pas sur un zigzag mais simplement sur le prix de clôture de la barre suivante. Dans ce cas je n'ai pas besoin de filtrer le résultat de la neuronique, moins de problèmes avec le même résultat, ce n'est pas si mal. Ici, la signification logique est déjà plus simple - variable cible 0/1 - le prix baissera/augmentera en 1 barre.

J'ai étudié la forêt ces derniers jours, ainsi que les exemples de ce forum. Si vous prenez les mêmes 5 barres, la forêt n'apprendra pas des choses abstraites comme la neuronique, mais dérivera des règles bien spécifiques. Par exemple, la forêt pourrait dériver une règle "croisement de deux MA" ou quelque chose comme ça. Il me semble qu'avec un tel ensemble de données, la forêt est beaucoup plus prometteuse, je vais apprendre à l'utiliser. La signification de la variable cible est la même - 0/1 - le prix baissera/augmentera dans une barre.

Je n'en sais pas autant que je le voudrais sur l'impact des prédicteurs. L'heure doit absolument être utilisée, heure/minute/jour de la semaine, probablement l'une d'entre elles (heure ?). Vous ne pouvez pas utiliser les prédicteurs avec un petit ensemble de valeurs qui se suivent sans boucle. Par exemple, si l'échantillon de formation contient des données pour une année, vous ne pouvez pas utiliser un prédicteur "mois". Le modèle peut simplement diviser toutes les données en 12 morceaux selon les mois, et entraîner une logique différente pour chaque morceau. Et la logique de janvier 2015 ne tiendra certainement pas dans une année pour la logique de janvier 2016. Mais si les données de formation portent sur 5 ans, alors "mois" pourrait déjà convenir. De plus, je ne suis pas sûr que l'utilisation des indicateurs soit justifiée, les EAs sur les indicateurs standards perdent de l'argent, il serait étrange que le modèle entraîné extraie quelque chose d'utile de ces données. De plus, je comprends que la forêt elle-même fait également certains calculs et peut créer ses propres indicateurs internes pendant l'entraînement. Le prix devrait également être utilisé, bien que je ne fasse pas confiance aux prix d'ouverture et de fermeture, je préfère le haut et le bas.

Tous ces prédicteurs montrent une sorte de condition actuelle du marché et l'objectif du modèle est de définir ces mêmes conditions à l'aide de prédicteurs et de savoir où vont les prix dans de tels cas. Un modèle devrait utiliser aussi peu de données d'entrée que possible, comme le rasoir d'Occam, puis il y a une chance qu'il décrive une certaine dépendance et ne corresponde pas aux exemples.

 
Dr. Trader:

Je considère la variable cible comme un critère d'achat ou de vente, sans savoir combien de temps il faut garder la transaction ouverte ou quel niveau de prix il faut attendre. L'EA ouvre une transaction au début d'une barre, et attend la barre suivante pour prendre la décision suivante.

C'est plus difficile avec un sens logique :)

Je voulais entraîner la neuronique à trouver des motifs et des formes sur un tableau (tête et épaules, etc.). Et il a dû apprendre à trouver certaines figures par lui-même sans ma participation ; j'ai utilisé la direction du zigzag comme variable cible. La signification de la variable cible selon mon plan aurait dû être "motif trouvé, la tendance va aller vers le haut, je devrais acheter" (avec résultat=1). En même temps, le résultat=0 signifierait que la tendance va aller vers le haut et que je devrais vendre. J'ai essayé de prendre en compte la force du signal et de ne pas négocier lorsque le résultat est proche de 0,5.

Mes pensées à voix haute, je n'y avais pas pensé avant : il semble que mon modèle était erroné, j'ai dû enseigner 3 classes pour acheter/vendre/clôturer toutes les transactions_et_ne_pas_trader. Et faire soit 3 sorties d'un seul réseau, soit former 3 réseaux séparés. Pas un réseau avec une seule sortie.

Puis j'ai réalisé par l'expérimentation que je peux prendre seulement 5 barres au lieu de 200 et rien ne changera, le résultat restera le même. Je ne pense pas que le modèle apprenne à trouver des modèles dans une telle configuration, mais plutôt à trouver certaines régularités dans le temps. J'ai progressivement décidé d'enseigner le modèle non pas sur un zigzag mais simplement sur le prix de clôture de la barre suivante. Dans ce cas je n'ai pas besoin de filtrer le résultat de la neuronique, moins de problèmes avec le même résultat, ce n'est pas si mal. Ici, la signification logique est déjà plus simple - variable cible 0/1 - le prix baissera/augmentera en 1 barre.

J'ai étudié la forêt ces derniers jours, ainsi que les exemples de ce forum. Si vous prenez les mêmes 5 barres, la forêt n'apprendra pas des choses abstraites comme la neuronique, mais dérivera des règles bien spécifiques. Je pense que c'est beaucoup plus prometteur avec un tel ensemble de données et je vais apprendre à l'utiliser. La signification de la variable cible est la même - 0/1 - le prix montera ou descendra en 1 barre.

Je n'en sais pas autant que je le voudrais sur l'impact des prédicteurs. L'heure doit absolument être utilisée, heure/minute/jour de la semaine, probablement l'une d'entre elles (heure ?). Vous ne pouvez pas utiliser les prédicteurs avec un petit ensemble de valeurs qui se suivent sans boucle. Par exemple, si l'échantillon de formation contient des données pour une année, vous ne pouvez pas utiliser un prédicteur "mois". Le modèle peut simplement diviser toutes les données en 12 morceaux selon les mois, et entraîner une logique différente pour chaque morceau. Et la logique de janvier 2015 ne tiendra certainement pas dans une année pour la logique de janvier 2016. Mais si les données de formation portent sur 5 ans, alors "mois" pourrait déjà convenir. De plus, je ne suis pas sûr que l'utilisation des indicateurs soit justifiée, les EAs sur les indicateurs standards perdent de l'argent, il serait étrange que le modèle entraîné extraie quelque chose d'utile de ces données. De plus, je comprends que la forêt elle-même fait également certains calculs et peut créer ses propres indicateurs internes pendant l'entraînement. Le prix devrait également être utilisé, bien que je ne fasse pas confiance aux prix d'ouverture et de fermeture, je préfère le haut et le bas.

Tous ces prédicteurs montrent une sorte de condition actuelle du marché et l'objectif du modèle est de définir ces mêmes conditions à l'aide de prédicteurs et de savoir où vont les prix dans de tels cas. Un modèle devrait utiliser le moins de données d'entrée possible, selon le principe de la lame d'Occam, puis il y a une chance qu'il décrive une certaine dépendance et ne corresponde pas aux exemples.

A bien des égards, nos pensées se recoupent.

Mais au final, je suis coincé avec les prédicteurs de bruit. La présence de prédicteurs de bruit fait que le modèle sur-apprend et que tout autre raisonnement devient inutile.