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

 
Anton Zverev:
Je lis toujours ce genre de sujets (pas seulement sur ce forum) où l'on essaie de construire des théories de trading complexes.
Algorithmes génétiques, réseaux neuronaux, formules alambiquées que seul l'auteur comprend, etc.

Et je constate toujours que de tels systèmes ne fonctionnent pas sur le marché. Le contrôle va soit à zéro, soit à moins.
Mais dans le fil suivant, quelqu'un gagne de l'argent en utilisant un conseiller expert sur deux slips. Et ils gagnent bien leur vie.

La question est de savoir si tout cela a un sens.
Car d'après mon expérience, plus le système est simple et clair, plus il est rentable.

Seriez-vous par hasard un employé d'une maison de courtage à l'ancienne ?

Je pense que votre "méthode secrète" consiste à échanger des mashki (aléatoires) et à doubler les gains lorsque vous perdez, n'est-ce pas ?)

Messieurs, vous allez devoir vivre sur commission...

 
Dr. Trader:

Créer un comité, et tester :

Il y a un problème dans la mesure où les classes d'origine sont de type factoriel, et le résultat dans la matrice est converti en numéros ordinaux factoriels correspondants. Ainsi, à la fin, la comparaison passe par as.numberic().

Pour que tout fonctionne correctement avec les facteurs, nous devons créer predictionMatrix en tant que data.frame, mais après cela, ma fonction rbind a donné des résultats erronés, je dois changer quelque chose d'autre, je n'ai pas compris ce qui ne va pas.

Quelques réflexions sur le code :

1. Vous ne devez pas utiliser la construction for(), sauf si c'est absolument nécessaire. Il existe une merveilleuse alternative à foreach() qui, outre une grande vitesse d'exécution, permet de paralléliser les calculs entre les cœurs accessibles.

2) L'ensemble des modèles a un sens et ne donne des résultats que si les modèles présentent des différences significatives. Deux variantes : un jeu de données - différents modèles (RF, DT, SVM) ; un modèle - différents jeux de données. Voici un exemple de ce dernier cas

#----------------------------------------------------------------------
require(ranger)
require(foreach)
require(magrittr)
data("iris")
totalModels = 50
res <- list()
Acc <- c()
res <- foreach(i = seq_len(totalModels),
               .packages = c("ranger", "magrittr")) %do% {
          id <- rminer::holdout(y = iris$Species, ratio = 2/3)
          x.test <- iris[id$ts, -ncol(iris)]
          y.test <- iris[id$ts, ncol(iris)]
          model <- ranger(Species~., data = iris[id$tr, ], 
                          write.forest = TRUE)
          pred <- predict(model, x.test)$predictions
          acc <- sum(pred == y.test) / length(y.test)
          list(Acc = acc, mod = model) 
        }
for (i in 1:totalModels) {Acc[i] <- res[[i]]$Acc}
Acc
 [1] 0.9803922 0.9607843 0.9803922 0.9607843
 [5] 0.9607843 0.9215686 1.0000000 0.9411765
 [9] 0.9019608 0.9607843 0.9803922 0.9607843
[13] 0.9803922 0.9215686 0.9607843 0.9215686
[17] 0.9803922 0.8823529 0.9411765 0.9803922
[21] 0.9607843 0.9215686 0.9607843 0.9411765
[25] 0.9411765 0.9607843 0.9411765 0.9607843
[29] 0.8823529 0.9019608 1.0000000 0.9411765
[33] 0.9215686 0.9803922 1.0000000 0.9607843
[37] 0.9411765 0.9803922 0.9607843 0.9215686
[41] 0.9411765 0.9607843 0.9411765 1.0000000
[45] 0.9607843 0.9411765 0.9215686 0.9411765
[49] 0.9803922 0.9607843

Choisissez les modèles les plus performants et travaillez avec eux à partir de là.

Bonne chance

 
Vladimir Perervenko:

Quelques réflexions sur le code :

1. Vous n'avez pas besoin d'utiliser for() sauf si c'est absolument nécessaire. Il existe une merveilleuse alternative à foreach() qui, outre une grande vitesse d'exécution, permet de paralléliser les calculs entre les cœurs disponibles.

2) L'ensemble des modèles a un sens et ne donne des résultats que si les modèles présentent des différences significatives. Deux variantes : un jeu de données - différents modèles (RF, DT, SVM) ; un modèle - différents jeux de données. Voici un exemple de cette dernière option

Choisissez des modèles plus performants et travaillez avec eux.

Bonne chance

J'aimerais vous voir plus souvent. Ne disparaissez pas.
 
Vladimir Perervenko:


Ensuite, nous choisissons le modèle qui présente les meilleurs indicateurs et nous travaillons avec lui.


C'est là que le bât blesse.

Quelle est la meilleure performance en fonction de quelles données ?

Pourquoi je demande cela, parce que Vkontas essaie de comprendre comment choisir un modèle (parmi de nombreux modèles) en utilisant des données de formation et de test. Mais ici, c'est très simple : nous prenons les meilleurs indicateurs et nous travaillons avec eux.

 
Alexey Burnakov:

C'est là que le bât blesse.

Quelle est la meilleure performance en fonction de quelles données ?

Pourquoi je demande cela, parce que Vkontas essaie de comprendre comment choisir un modèle (parmi de nombreux modèles) en utilisant des données de formation et de test. Mais ici, c'est très simple : nous prenons les meilleurs indicateurs et nous travaillons avec eux.

L'ensemble initial est divisé en stratifié train/test. Lors de la formation, nous nous entraînons et lors du test, nous testons. Le code n'est-il pas clair ?

Bonne chance

 
SanSanych Fomenko:
J'aimerais vous voir plus souvent. Ne disparaissez pas.
Malheureusement, je n'ai le temps de parcourir le site que de temps en temps. J'ai beaucoup de travail à faire.
 
Vladimir Perervenko:

L'ensemble initial est divisé en stratifié train/test. On train we train on test respectivement on test. Le code n'est-il vraiment pas clair ?

Bonne chance,

Je vais essayer rminer::holdout, merci pour l'exemple. D'après mon expérience, si vous choisissez un modèle et ses paramètres pour obtenir le meilleur résultat sur un échantillon test, alors le modèle vous donnera finalement un très bon résultat sur l'échantillon test. Mais le résultat est généralement très faible sur les nouvelles données. Je parle spécifiquement des données forex, dans d'autres domaines, cette approche est tout à fait normale. Je n'espère pas que rminer::holdout pour le forex changera quoi que ce soit de façon spectaculaire.
 
Dr. Trader:
Je vais essayer rminer::holdout, merci pour l'exemple. En général, par expérience, si nous choisissons un modèle et ses paramètres de manière à obtenir le meilleur résultat sur un échantillon test - alors le modèle donnera finalement un très bon résultat sur l'échantillon test. Mais le résultat est généralement très faible sur les nouvelles données. Je parle spécifiquement des données forex, dans d'autres domaines, cette approche est tout à fait normale. Je n'espère pas que rminer::holdout pour le forex changera quelque chose de façon spectaculaire.
C'est ce que je dis. Et il n'a pas compris.

En forex, un bon test ne signifie pas une bonne performance en dehors de l'échantillon. C'est pourquoi les gens se battent. Et ici, c'est exactement comme ça - nous prenons les meilleurs résultats (et l'ajustement du maître). De bonne manière )
 
Dr. Trader:
alors le modèle finira par montrer un très bon résultat sur l'échantillon test. Mais le résultat est généralement très faible sur les nouvelles données. Je parle spécifiquement des données forex,
Alexey Burnakov:
En forex, un bon test ne signifie pas une bonne performance en dehors de l'échantillon. C'est pourquoi les gens se battent.

Le marché va à l'encontre de ses propres statistiques, c'est une théorie que j'ai confirmée par la pratique, c'est la seule théorie que je connaisse qui répond à tout, de la raison pour laquelle le modèle ne fonctionne pas sur les nouvelles données à la raison pour laquelle tout le monde perd de l'argent sur le marché en premier lieu...

pourquoi est-ce si difficile pour toi d'accepter ça ?

les anciennes connaissances et habitudes sont-elles si amortissantes pour les nouvelles informations ?

pourquoi se concentrer autant sur le modèle alors que la différence de performance entre les modèles se situe entre 0,5 et 5 % ?

aucun modèle ne peut aider car tout dépend des données.

1

J'ai posté cette photo plus d'une fois mais néanmoins.....

Regardez bien ! C'est la différence entre les prévisions cumulées d'achat et de vente de deux réseaux cum(buy.signal) - cum(sell.signal), idéalement si notre modèle est bon alors le graphique bleu devrait être en corrélation avec le prix, cela signifie que le réseau comprend bien les données et y réagit de manière adéquate, en fait ce que nous voyons ????????.

Vous ne pouvez pas dire que le modèle ne comprend pas les données, bien que la corrélation soit inverse mais que la structure soit identique, mais que le marché évolue à l'encontre des prévisions, à l'encontre des statistiques dont le réseau avait tiré des enseignements dans le passé...

Maintenant, dites-moi, quel modèle peut le gérer ? Quelle validation croisée peut aider ici ? toute formation de modèle suivie par des données hors échantillon (nouvelles données) ne serait rien de plus qu'un ajustement d'un modèle qui fonctionne bien sur les données hors échantillon et rien de plus... Et vous le voyez tout le temps lorsque vous formez vous-même des modèles, que sur des données toutes neuves, le modèle échoue toujours, vous ne voyez pas ? ! ? Je vous donne la réponse à cette question !

 

S'agit-il du graphique avec les données sur lesquelles la formation elle-même a eu lieu, ou s'agit-il simplement d'un test sur les nouvelles données ? Si vous dessinez un graphique pour les deux périodes à la fois, à la fois pour la formation et le test, alors sur la première partie (formation) des données, il y aura un chevauchement complet des graphiques bleu et gris, et lorsque les nouvelles données commencent, il y aura un changement brusque vers une corrélation inverse ?

Si c'était aussi simple, il suffirait d'entraîner n'importe quel modèle et d'inverser ses prédictions. Cela ne fonctionne pas, malheureusement.
Il est tout aussi difficile d'enseigner un modèle qui donne 0% de précision sur de nouvelles données que d'atteindre 100% de précision. Le tirage au sort d'une pièce de monnaie, par exemple, est précis à 50 %, et il est tout aussi difficile de faire un écart de quelques dizaines de pour cent. Le problème n'est pas que les modèles donnent des résultats opposés, mais que certaines barres donneront des résultats corrects, d'autres des résultats erronés, et tout cela est aléatoire et il n'y a aucun moyen de filtrer uniquement les résultats corrects.

Et pourquoi soustraire la prévision S de la prévision B ? Peut-être que tu devrais faire le contraire, S-B ? Alors la corrélation deviendrait soudainement correcte aussi.