L'Apprentissage Automatique dans le trading : théorie, modèles, pratique et trading algo - page 1884

 
Evgeny Dyuka:
1. C'est vrai, vous devez passer par toutes les options. Le problème est que cela prend trop de temps.
2. J'ai essayé, ça a empiré.
3. Comment savez-vous lesquels elle utilise ? C'est une boîte noire, donc je nourris tout.

Il existe des optimiseurs d'hyperparamètres, comme l'optimiseur du testeur MT. Vous le réglez pour 24 heures et il le récupère.

Je m'ennuie en attendant que ça marche, mais c'est une particularité de la SN, il n'y a pas de science exacte, seulement l'expérience (la mienne et celle des autres) et l'intuition. Je peux partager mes résultats ici ou en privé.

J'ai posté un exemple de formation plus tôt. L'idée est d'apprendre au réseau à acheter des signaux. Ensuite, inversez l'entrée et le réseau devrait produire des signaux de vente. Il s'agit d'une classification binaire, qu'il y ait ou non un signal. On pourrait apprendre au réseau à reconnaître les achats et les ventes, mais c'est pire. La plage de sortie est limitée à 0-1 ; si nous recherchons uniquement l'achat, la plage est divisée en 2 classes (il y a un achat et il n'y a pas d'achat) et le seuil peut être déplacé de 0,8. Si nous recherchons l'achat ou la vente, 0-1 est divisé en 3 secteurs : achat, vente et quelque chose entre les deux. Je pense que la recherche d'un signal d'achat est la suivante : 2 fois plus d'exemples d'entraînement (flip input), une taille de réseau plus petite (la tâche est plus facile, moins de neurones sont nécessaires), moins de temps d'entraînement, une solution plus facile (pensez à une seule classe), mais ce n'est que de la théorie.

J'ai une idée, que le réseau chercherait les caractéristiques par lui-même, vous donnez un prix, les signaux désirés, et il fait tout par lui-même. J'ai commencé avec lstm, il semble être parfait, mais jusqu'à présent pas vraiment. Je veux essayer les filets réguliers, et si ce n'est pas le cas, je réfléchirai à ce qui se passera ensuite. Les CNN sont un peu désordonnés, je suis fatigué d'ajuster les configurations des couches et des noyaux. Il serait probablement plus facile d'introduire des ondelettes dans un réseau ordinaire. Et si cela ne me convient pas, je devrai perdre plus de temps à sélectionner les signaux d'entrée, mais dans ce cas j'ai une question : est-ce vraiment nécessaire, il serait plus facile d'utiliser le système "classique", il serait plus compréhensible, fiable, économique et plus facile à tester.

Et comment analysez-vous les résultats, en regardant simplement les chiffres ? Est-ce le code que vous utilisez ?

plt.plot(history.history['loss'])
plt.plot(history.history['val_loss'])

Vous construisez 2 graphiques, erreur sur plateau et test, vous pouvez les utiliser pour comprendre ce qui manque au réseau et dans quelle direction aller.

 
Rorschach:

J'ai aussi hésité à attendre qu'il compte, mais c'est une particularité de la SN, il n'y a pas de science exacte, seulement l'expérience (celle des autres et la mienne) et l'intuition. Vous pouvez partager vos résultats ici ou en privé.

Parlons-nous de photos ou s'agit-il déjà du marché ?

Et comment analysez-vous les résultats, ne regardez-vous que les chiffres ? Est-ce le code que vous utilisez ?

Vous construisez deux graphiques, un pour le plateau et un pour le test. En les utilisant, vous pouvez comprendre ce qui manque au réseau et dans quelle direction il faut aller.

Je peux facilement voir que je suis dans le processus ;))

Au début, je l'ai dessiné en utilisant l'algorithme standard

import matplotlib.pyplot as plt

Mais cela n'a servi à rien : à cause du grand bruit, le tracé se trouvait déjà sur la ligne horizontale après 10 époques.
J'ai la classification binaire et j'analyse le niveau de certitude du filet dans chaque réponse, c'est-à-dire par exemple la bonne réponse est 0 1 et le filet donne 0,4 0,6 - c'est une bonne réponse, et plus souvent la bonne réponse est 0 1 et le filet donne 0,49 0,51
Lorsque les réponses sont des milliers je peux les regrouper par certitude et faire l'analyse.


 
Rorschach:

En conséquence, dans la pratique, c'est l'euro du jour sur M2, quelque chose que le réseau neuronal commence à comprendre, mais faiblement jusqu'à présent.
Le bleu prévoit une hausse, le jaune une baisse.


 
Evgeny Dyuka:

Il est facile de voir qu'une personne se trouve dans le processus réel ;))

Au début, j'ai dessiné en utilisant le standard

Mais cela ne sert pas à grand chose, à cause du grand bruit, le graphique se trouve sur la ligne horizontale après 10 époques.
J'ai la classification binaire et j'analyse le niveau de certitude du filet dans chaque réponse, c'est-à-dire par exemple la bonne réponse est 0 1 et le filet donne 0,4 0,6 - c'est une bonne réponse, et plus souvent la bonne réponse est 0 1 et le filet donne 0,49 0,51
Lorsque les réponses sont des milliers je peux les regrouper par certitude et faire l'analyse.


Pouvez-vous afficher les graphiques ? Plus il y a d'époques et plus la taille de la latte est petite, plus les poids changent de fois. Il est également utile de modifier le taux d'apprentissage dans l'optimiseur d'un ordre de grandeur. Quel optimiseur utilisez-vous ?

 
Rorschach:

Pouvez-vous afficher les graphiques ? En plus des époques, la taille du lot doit être modifiée ; plus il y a d'époques et plus la taille du lot est petite, plus les poids sont modifiés. De plus, il est logique de modifier le taux d'apprentissage dans l'optimiseur d'un ordre de grandeur. Quel optimiseur utilisez-vous ?

Pour le graphique, je dois exécuter le tutoriel, puis... mais rien d'intéressant - verticalement vers le bas puis horizontalement, pas de déclin en douceur comme dans les didacticiels ))
Bach 128, si nous parlons de la même chose. Il devrait toujours être 128 est quelque chose à faire avec TPU, une telle exigence.
J'ai arrêté de changer les époques aussi, après 150 habituellement rien ne change.
Je n'arrive pas à le faire fonctionner avec SGD.
 
Rorschach:

Voici ma grille, je change dynamiquement le nombre de couches ici

def make_model(arr_size, lays):
  sgd = SGD(lr=0.01, decay=1 e-6, momentum=0.9, nesterov=True)

  #res = 2 # количество ответов
  act = "softmax"
  #act = "sigmoid"
  #opt = sgd
  opt = 'adam'

  model = Sequential()

  if lays == 1:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 2:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 3:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  if lays == 4:
    model.add(Dense(int((arr_size-res)*k), input_dim=(arr_size-res), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.7*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.5*k), activation='relu'))
    model.add(Dropout(dropout))
    model.add(Dense(int((arr_size-res)*0.3*k), activation='relu'))
    model.add(Dropout(dropout))

  #model.add(Dense(int((arr_size-res)*0.1*k), activation='relu'))
  #model.add(Dropout(dropout))

  model.add(Dense(res, activation=act))

  if res==1:
    ls="binary_crossentropy"
  else:
    ls="categorical_crossentropy"
  model.compile(loss=ls, optimizer=opt, metrics=['accuracy'])
  return model
 
Evgeny Dyuka:

Voici ma grille, je change dynamiquement le nombre de couches ici

Vous pourriez essayer autre chose à la place de Dropout, réduire le nombre de neurones. Ajout de l'initialisation et de la normalisation des poids. Les données d'entrée sont-elles traitées d'une manière ou d'une autre ? Mes résultats sont devenus meilleurs après la multiplication des données d'entrée par un ordre de grandeur. Il semble que je doive me débarrasser de la non-stationnarité après tout.

 
Rorschach:

Vous pourriez essayer autre chose à la place de Dropout, réduire le nombre de neurones. Ajout de l'initialisation et de la normalisation des poids. Les données d'entrée sont-elles traitées d'une manière ou d'une autre ? J'ai obtenu de meilleurs résultats après avoir multiplié les données d'entrée par un ordre de grandeur, il semble que nous devions nous débarrasser de la non-stationnarité.

Aucun paquet ne donnera un résultat précis. Tout SN ne peut donner qu'une prédiction probabiliste à la hausse, à la baisse ou inconnue. Le prix n'obéit pas aux réseaux neuronaux et peut facilement aller à leur encontre. Une option de 65% est déjà acceptable.

 
Uladzimir Izerski:

Aucun paquet ne donnera un résultat précis. Tout SN ne peut donner qu'une prédiction probabiliste à la hausse, à la baisse ou inconnue. Le prix n'obéit pas aux réseaux neuronaux et peut facilement aller à leur encontre. Une option de 65% est déjà acceptable.

Voici 56%. Le bleu est ce qu'il devrait être, le rouge est la réponse du réseau. Les pourcentages ne veulent rien dire.

Ici, c'est 48%, le chiffre est encore plus bas, mais au moins il a un certain effet.


 
Rorschach:

Vous pourriez essayer autre chose à la place de Dropout, réduire le nombre de neurones. Ajout de l'initialisation et de la normalisation des poids. Les données d'entrée sont-elles traitées d'une manière ou d'une autre ? J'ai obtenu un meilleur résultat après avoir multiplié les données d'entrée par un ordre de grandeur. Il semble que je doive me débarrasser de la non-stationnarité après tout.

Oui, vous devez les passer tous en revue, sinon vous ne le ferez pas.
Essayez d 'y jouer, c'est un bon moyen de comprendre comment les paramètres influencent les résultats.
Tensorflow — Neural Network Playground
Tensorflow — Neural Network Playground
  • Daniel Smilkov and Shan Carter
  • playground.tensorflow.org
It’s a technique for building a computer program that learns from data. It is based very loosely on how we think the human brain works. First, a collection of software “neurons” are created and connected together, allowing them to send messages to each other. Next, the network is asked to solve a problem, which it attempts to do over and over...