L'apprendimento automatico nel trading: teoria, modelli, pratica e algo-trading - pagina 3283

 
fxsaber #:

Questo è il cuore del calcolo riga per riga della matrice.

Mi chiedo cosa succederebbe se calcolassimo una matrice e la stessa matrice con l'algoritmo veloce di Algibov PearsonCorrM. Chi sarà più veloce?
PearsonCorrM è 40-50 volte più veloce dell'algoritmo riga per riga di Algibov, probabilmente anche uno strumento casalingo veloce non supererà questo divario di velocità.
 
Forester #:
Mi chiedo cosa succederebbe se una matrice venisse calcolata e la stessa matrice venisse calcolata con l'algoritmo veloce di Algibov PearsonCorrM. Chi sarebbe più veloce?
PearsonCorrM è 40-50 volte più veloce dell'algoritmo riga per riga di Algibov, probabilmente anche un algoritmo veloce fatto in casa non supererà questo divario di velocità.

Ecco il doppio del ritardo dell'algoritmo fatto in casa da PearsonCorrM.

 

Ho confrontato la velocità di formazione di CatBoost in python e attraverso la riga di comando:

- 20% più veloce dall'avvio al salvataggio dei modelli, compresa la lettura dei campioni

- 12% più veloce del processo di apprendimento stesso

Testato sullo stesso modello, il risultato dell'addestramento è identico.

Naturalmente, la linea di comando è più veloce.

 
Aleksey Vyazmikin CatBoost in python e tramite la riga di comando:

- 20% più veloce dall'avvio al salvataggio dei modelli, compresa la lettura dei campioni.

- 12% più veloce del processo di apprendimento stesso

Testato sullo stesso modello: il risultato dell'addestramento è identico.

Naturalmente, la linea di comando è più veloce.

Utilizzate ancora la riga di comando per eseguire gli EXE?
È possibile eseguirli tramite WinExec e ottimizzarli nel tester.

#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%.). Файл с моделью появился - расчет закончен.
//модель обучена, читаем файл модели и используем

Non ho provato Catboost, ma credo che si possa fare qualcosa.
La cosa più difficile è determinare il momento in cui l'allenamento è finito. Io lo faccio controllando l'aspetto del file del modello nella cartella agent_dir+"\model.bin" una volta al secondo. Non so dove Catboost metta il file del modello, forse dovrò cercarlo altrove.

Un altro possibile problema, se il file del modello è enorme, potrebbe richiedere molto tempo per essere scritto, cioè il file esiste già, ma non è stato scritto fino alla fine. Potrebbe essere necessario mettere in pausa il file o controllare che il file non sia chiuso in lettura dal processo di scrittura....
 
Forester #:

Utilizzate ancora la riga di comando per eseguire gli EXE?
È possibile eseguirli tramite WinExec e ottimizzarli nel tester.

Io eseguo i file bat: finora è l'opzione più comoda per le attività correnti.

Finora c'è solo un compito per il lancio automatico dell'addestramento dopo aver ottenuto un campione: la ricerca di ricognizione. Ho intenzione di creare un file bat automatico per questo più tardi.

Forester #:

Non ho provato Catboost, ma credo che si possa pensare a qualcosa.

La cosa più difficile è determinare il momento della fine dell'allenamento. Lo faccio controllando l'aspetto del file del modello nella cartella agent_dir+"\model.bin" 1 volta al secondo. Non so dove Catboost metta il file del modello, forse dovrò cercarlo altrove.

Un altro possibile problema, se il file del modello è enorme, potrebbe richiedere molto tempo per essere scritto, cioè il file esiste già, ma non è stato scritto fino alla fine. Potrebbe essere necessario mettere in pausa il file o controllare che non sia chiuso alla lettura dal processo di scrittura....

La tua soluzione è interessante: la guarderò e forse la adotterò per l'applicazione.

Ma penso che ci sia la possibilità di ottenere una risposta finale dal programma eseguibile - volevo usare questo approccio.

Opzione con i file - se si esegue un bootnik, allora di nuovo - si può semplicemente creare un nuovo file alla fine dell'attività.

 
Aleksey Vyazmikin #:

Forse il tasso di successo relativo delle varianti -1 e 0 è legato alla dimensione del campione del treno e dovrebbe essere ridotto? In generale, sembra che Recall reagisca a questo.

Secondo voi, i risultati di queste combinazioni dovrebbero essere comparabili tra loro nel nostro caso? Oppure i dati sono irrimediabilmente obsoleti?

Ho diviso il campione del treno in 3 parti, ho addestrato 3 set per la variante -1 e la variante 0, e ho anche addestrato solo il treno originale come tre campioni.

Ecco cosa ho ottenuto.

Ho fatto questa generalizzazione PR=(Precisione-0,5)*Recall

Sembra che l'addestramento avvenga a spese della seconda e terza parte del campione del treno - ora li ho combinati e ho eseguito l'addestramento - vediamo cosa succede.

Tuttavia, sembra che questo non sia un cattivo metodo per stimare la casualità dell'allenamento. Idealmente, l'addestramento dovrebbe avere un successo relativo in ogni segmento, altrimenti non è garantito che il modello smetta di funzionare domani.

 
Aleksey Vyazmikin #:

Sembra che l'allenamento avvenga a scapito della seconda e della terza parte del treno campione: ora le ho unite e ho eseguito l'allenamento, vedremo cosa succederà.

Tuttavia, sembra che questo non sia un metodo sbagliato per valutare la casualità dell'allenamento. Idealmente, l'addestramento dovrebbe avere un successo relativo in ogni segmento, altrimenti non c'è garanzia che il modello smetta di funzionare domani.

Ecco i risultati - le ultime due colonne

In effetti, i risultati sono migliorati. Possiamo ipotizzare che più grande è il campione, migliore sarà il risultato dell'addestramento.

Dovremmo provare ad allenarci sulla prima e sulla seconda parte del campione di allenamento e se i risultati non sono molto peggiori rispetto alla seconda e alla terza parte, allora il fattore della freschezza del campione può essere considerato meno significativo del volume.

 

Ho scritto molte volte sul "potere predittivo dei predittori". che viene calcolato come la distanza tra due vettori.

Mi sono imbattuto in un elenco di strumenti per il calcolo della distanza:

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"

Oltre a quello standard, che ha un proprio insieme di distanze, c'è un elenco di strumenti per il calcolo della distanza.

stats::dist() 
 
Aleksey Vyazmikin #:

Ecco il risultato - le ultime due colonne

In effetti, i risultati sono migliorati. Possiamo ipotizzare che più grande è il campione, migliore sarà il risultato della formazione.

È necessario provare ad allenarsi su 1 e 2 parti del campione di allenamento - e se i risultati non sono molto peggiori rispetto a 2 e 3 parti, allora il fattore della freschezza del campione può essere considerato meno significativo del volume.

Cuto, ancora una volta siamo bloccati nell'ignoranza della statistica mat.
Ho un'idea per monetizzare il matstat colpendolo da diversi lati.
 
СанСаныч Фоменко #:

Ho scritto molte volte sul "potere predittivo dei predittori", che viene calcolato come la distanza tra due vettori.

Mi sono imbattuto in un elenco di strumenti per il calcolo della distanza:

Oltre a quello standard, che ha un proprio insieme di distanze, c'è un elenco di strumenti per il calcolo della distanza.

Potete mostrarmi un esempio di utilizzo?