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

 
fxsaber #:

C'est le cœur du calcul ligne par ligne de la matrice.

Je me demande ce qui se passerait si l'on calculait une matrice et la même matrice à l'aide de l'algorithme rapide d'Algibov PearsonCorrM. Qui sera le plus rapide ?
PearsonCorrM est 40 à 50 fois plus rapide que l'algorithme ligne par ligne d'Algibov, et il est probable que même un outil maison rapide ne parviendra pas à combler un tel écart de vitesse.
 
Forester #:
Je me demande si une matrice est calculée et si la même matrice est calculée par l'algorithme rapide d'Algibov PearsonCorrM. Qui serait le plus rapide ?
PearsonCorrM est 40 à 50 fois plus rapide que l'algorithme ligne par ligne d'Algibov, et il est probable que même un algorithme maison rapide ne pourra pas surmonter un tel écart de vitesse.

Voici deux fois le retard de l'algorithme maison par rapport à PearsonCorrM.

 

J'ai comparé la vitesse d'apprentissage de CatBoost en python et en ligne de commande :

- 20% plus rapide du démarrage à l'enregistrement des modèles, y compris la lecture des échantillons

- 12% plus rapide pour le processus d'apprentissage lui-même

Testé sur le même modèle - le résultat de l'apprentissage est identique.

Bien sûr, la ligne de commande est plus rapide.

 
Aleksey Vyazmikin CatBoost en python et via la ligne de commande :

- 20% plus rapide du démarrage à l'enregistrement des modèles, y compris la lecture des échantillons

- 12% plus rapide pour le processus d'apprentissage lui-même

Testé sur le même modèle - le résultat de l'apprentissage est identique.

Bien sûr, la ligne de commande est plus rapide.

Utilisez-vous toujours la ligne de commande pour exécuter les EXE ?
Vous pouvez les exécuter via WinExec et même les optimiser dans le testeur.

#import "kernel32.dll"
   int WinExec(uchar &Path[],int Flag);
   int SleepEx(int msec, bool Alertable=false);//SleepEx(1000,false); - для простого таймера
#import 
...
string CommonPath = TerminalInfoString(TERMINAL_COMMONDATA_PATH)+ "\\Files\\";
string RAM_dir="RAM\\";//использую диск в памяти для скорости
string agent_dir=RAM_dir+"0000";//при запуске в терминале
string p=MQLInfoString(MQL_PROGRAM_PATH);// C:\Users\User\AppData\Roaming\MetaQuotes\Tester\ххххххххххххххххххххххх\Agent-127.0.0.1-3000\MQL5\Experts\testEXE.ex5
int agent_pos=StringFind(p,"Agent-");// при оптимизации запустится в папке с номером агента
if(agent_pos!=-1){agent_pos=StringFind(p,"-",agent_pos+6);agent_dir = RAM_dir+StringSubstr(p,agent_pos+1,4);}//выдаст 3001, 3002... по номеру папки в котором тестер запустился
FolderCreate(agent_dir,FILE_COMMON);
...
sinput string PathExe="С:\\your.exe";//path to exe file
uchar ucha[];
StringToCharArray(PathExe_+" --dir "+CommonPath+agent_dir+"\\",ucha);//string to train
int visible=0;
FileDelete(agent_dir+"\\model.bin",FILE_COMMON); //сначала удалить старый
int x=WinExec(ucha,visible); //visible=0 - work in hidden window, 1 - work in opened exe window - can be closed by user. Better to use 0, to run proces up to finish.
while(true){if(FileIsExist(agent_dir+"\\model.bin",FILE_COMMON)){break;}SleepEx(1000);}// используем SleepEx из DLL (Sleep() от MQL не работает в оптимизаторе, будет грузить проц на 100% проверками файла. Через DLL 1%.). Файл с моделью появился - расчет закончен.
//модель обучена, читаем файл модели и используем

Je n'ai pas essayé Catboost, mais je pense que vous pouvez faire quelque chose.
Le plus difficile est de déterminer le moment où l'entraînement est terminé. Je le fais en vérifiant l'apparition du fichier de modèle dans le dossier agent_dir+"\model.bin" 1 fois par seconde. Je ne sais pas où Catboost place le fichier modèle, il faudra peut-être que je le cherche ailleurs.

Autre problème possible, si le fichier de modèle est énorme, l'écriture peut prendre beaucoup de temps, c'est-à-dire que le fichier existe déjà, mais qu'il n'a pas été écrit jusqu'au bout. Il peut être nécessaire de mettre le fichier en pause ou de vérifier que le fichier n'est pas fermé à la lecture par le processus d'écriture....
 
Forester #:

Utilisez-vous toujours la ligne de commande pour exécuter les EXE ?
Vous pouvez les exécuter via WinExec et même les optimiser dans le testeur.

J'utilise des fichiers bat - jusqu'à présent, c'est l'option la plus pratique pour les tâches actuelles.

Jusqu'à présent, il n'y a qu'une seule tâche pour le lancement automatique de la formation après l'obtention d'un échantillon - la recherche de reconnaissance. Je prévois de créer un fichier bat automatique pour cela plus tard.

Forestier #:

Je n'ai pas essayé Catboost, mais je pense que nous pouvons trouver quelque chose.

Le plus difficile est de déterminer le moment de la fin de l'entraînement. Je le fais en vérifiant l'apparition du fichier modèle dans le dossier agent_dir+"\model.bin" 1 fois par seconde. Je ne sais pas où Catboost place le fichier modèle, il faudra peut-être que je le cherche ailleurs.

Un autre problème possible, si le fichier de modèle est énorme, il peut prendre beaucoup de temps à écrire, c'est-à-dire que le fichier existe déjà, mais qu'il n'a pas été écrit à la fin. Il se peut que vous deviez mettre le fichier en pause ou vérifier qu'il n'est pas fermé à la lecture par le processus d'écriture....

Votre solution est intéressante - je vais regarder, peut-être la prendre pour l'appliquer.

Mais je pense qu'il est possible d'obtenir une réponse finale du programme exécutable - je voulais utiliser cette approche.

Option avec les fichiers - si vous exécutez un bootnik, alors encore une fois - vous pouvez simplement créer un nouveau fichier à la fin de la tâche.

 
Aleksey Vyazmikin #:

Peut-être que le taux de réussite relatif des variantes -1 et 0 dépend de la taille de l'échantillon du train et qu'il devrait être réduit ? En général, il semble que Recall réagisse à cela.

À votre avis, les résultats de ces combinaisons devraient-ils être comparables entre eux dans notre cas ? Ou bien les données sont-elles irrémédiablement obsolètes ?

J'ai divisé l'échantillon de train en 3 parties, j'ai formé 3 ensembles pour la variante -1 et la variante 0, et j'ai également formé uniquement le train original sous forme de trois échantillons.

Voici ce que j'ai obtenu.

J'ai fait cette généralisation PR=(Precision-0.5)*Recall

Il semble que l'apprentissage se fasse aux dépens des 2ème et 3ème parties de l'échantillon de train - maintenant que je les ai combinées et que j'ai lancé l'apprentissage - voyons ce qui se passe.

Néanmoins, il semble que ce ne soit pas une mauvaise méthode pour estimer le caractère aléatoire de la formation. Idéalement, la formation devrait être relativement réussie à chaque segment, sinon il n'y a aucune garantie que le modèle s'arrêtera simplement de fonctionner demain.

 
Aleksey Vyazmikin #:

Il semble que la formation se fasse au détriment des deuxième et troisième parties du train d'échantillons - je les ai maintenant combinées et j'ai lancé la formation - nous verrons ce qui se passera.

Néanmoins, il semble que ce ne soit pas une mauvaise méthode pour évaluer le caractère aléatoire de la formation. Idéalement, la formation devrait être relativement réussie à chaque segment, sinon il n'y a aucune garantie que le modèle s'arrêtera simplement de fonctionner demain.

Et voici les résultats - les deux dernières colonnes

En effet, les résultats se sont améliorés. Nous pouvons supposer que plus l'échantillon est grand, meilleurs seront les résultats de l'entraînement.

Nous devrions essayer de nous entraîner sur les 1ère et 2ème parties de l'échantillon d'entraînement - et si les résultats ne sont pas beaucoup plus mauvais que sur les 2ème et 3ème parties, alors le facteur de la fraîcheur de l'échantillon peut être considéré comme moins important que le volume.

 

J'ai écrit à plusieurs reprises sur le "pouvoir prédictif des prédicteurs". qui est calculée comme la distance entre deux vecteurs.

Je suis tombé sur une liste d'outils permettant de calculer la distance :

library(proxy)
pr_DB$get_entry_names()
##  [1] "Jaccard"         "Kulczynski1"    
##  [3] "Kulczynski2"     "Mountford"      
##  [5] "Fager"           "Russel"         
##  [7] "simple matching" "Hamman"         
##  [9] "Faith"           "Tanimoto"       
## [11] "Dice"            "Phi"            
## [13] "Stiles"          "Michael"        
## [15] "Mozley"          "Yule"           
## [17] "Yule2"           "Ochiai"         
## [19] "Simpson"         "Braun-Blanquet" 
## [21] "cosine"          "angular"        
## [23] "eJaccard"        "eDice"          
## [25] "correlation"     "Chi-squared"    
## [27] "Phi-squared"     "Tschuprow"      
## [29] "Cramer"          "Pearson"        
## [31] "Gower"           "Euclidean"      
## [33] "Mahalanobis"     "Bhjattacharyya" 
## [35] "Manhattan"       "supremum"       
## [37] "Minkowski"       "Canberra"       
## [39] "Wave"            "divergence"     
## [41] "Kullback"        "Bray"           
## [43] "Soergel"         "Levenshtein"    
## [45] "Podani"          "Chord"          
## [47] "Geodesic"        "Whittaker"      
## [49] "Hellinger"       "fJaccard"

Il ne s'agit pas de l'outil standard, qui possède son propre ensemble de distances.

stats::dist() 
 
Aleksey Vyazmikin #:

Et voici le résultat - les deux dernières colonnes

En effet, les résultats se sont améliorés. Nous pouvons faire l'hypothèse que plus l'échantillon est grand, plus le résultat de l'entraînement sera bon.

Il est nécessaire d'essayer de s'entraîner sur 1 et 2 parties de l'échantillon d'entraînement - et si les résultats ne sont pas beaucoup plus mauvais que sur 2 et 3 parties, alors le facteur de la fraîcheur de l'échantillon peut être considéré comme moins important que le volume.

Cuto, une fois de plus, nous sommes coincés dans l'ignorance de la stat mat.
J'ai une idée pour montercarliser le matstat en le frappant de différents côtés.
 
СанСаныч Фоменко #:

J'ai écrit à de nombreuses reprises sur le "pouvoir prédictif des prédicteurs". qui est calculé comme la distance entre deux vecteurs.

Je suis tombé sur une liste d'outils permettant de calculer la distance :

Il ne s'agit pas de l'outil standard, qui possède son propre ensemble de distances.

Pouvez-vous me montrer un exemple d'utilisation ?