Aprendizado de máquina no trading: teoria, prática, negociação e não só - página 3283

 
fxsaber #:

Esse é o núcleo do cálculo linha por linha da matriz.

Gostaria de saber se calcularmos uma matriz e a mesma matriz pelo algoritmo rápido Algibov PearsonCorrM. Quem será mais rápido?
O PearsonCorrM é 40 a 50 vezes mais rápido do que o algoritmo linha a linha de Algibov. Provavelmente, nem mesmo uma ferramenta caseira rápida conseguirá superar essa diferença de velocidade.
 
Forester #:
Gostaria de saber se uma matriz é computada e a mesma matriz é computada pelo algoritmo rápido Algibov PearsonCorrM. Quem seria mais rápido?
O PearsonCorrM é 40 a 50 vezes mais rápido do que o algoritmo linha por linha de Algibov, provavelmente nem mesmo um algoritmo caseiro rápido superará essa diferença de velocidade.

Aqui está o dobro da defasagem do algoritmo caseiro do PearsonCorrM.

 

Comparei a velocidade do treinamento do CatBoost em python e por meio da linha de comando:

- 20% mais rápido desde a inicialização até o salvamento dos modelos, incluindo a leitura das amostras

- 12% mais rápido o próprio processo de aprendizado

Testado no mesmo modelo - o resultado do treinamento é idêntico.

É claro que a linha de comando é mais rápida.

 
Aleksey Vyazmikin do CatBoost em python e por meio da linha de comando:

- 20% mais rápido desde a inicialização até o salvamento dos modelos, incluindo a leitura de amostras

- 12% mais rápido o próprio processo de aprendizado

Testado no mesmo modelo - o resultado do treinamento é idêntico.

É claro que a linha de comando é mais rápida.

Você ainda usa a linha de comando para executar EXEs?
Você pode executá-los por meio do WinExec e até mesmo otimizá-los no testador.

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

Não experimentei o Catboost, mas acho que você pode fazer alguma coisa.
O mais difícil é determinar o momento em que o treinamento termina. Eu faço isso verificando a aparência do arquivo de modelo na pasta agent_dir+"\model.bin" uma vez por segundo. Não sei onde o Catboost coloca o arquivo de modelo, talvez eu tenha que procurá-lo em outro lugar.

Outro possível problema é que, se o arquivo de modelo for enorme, pode levar muito tempo para ser gravado, ou seja, o arquivo já existe, mas não foi gravado até o fim. Pode ser necessário pausar o arquivo ou verificar se o arquivo não está fechado para leitura pelo processo de gravação....
 
Forester #:

Você ainda usa a linha de comando para executar EXEs?
Você pode executá-los por meio do WinExec e até mesmo otimizá-los no testador.

Eu executo arquivos bat - até o momento, é a opção mais conveniente para as tarefas atuais.

Até o momento, há apenas uma tarefa para o lançamento automático do treinamento após a obtenção de uma amostra: a pesquisa de reconhecimento. Planejo criar um arquivo bat automático para isso mais tarde.

Forester #:

Não experimentei o Catboost, mas acho que podemos pensar em algo.

O mais difícil é determinar o momento do fim do treinamento. Eu faço isso verificando a aparência do arquivo de modelo na pasta agent_dir+"\model.bin" uma vez por segundo. Não sei onde o Catboost coloca o arquivo de modelo, talvez eu tenha que procurá-lo em outro lugar.

Outro possível problema, se o arquivo de modelo for enorme, pode levar muito tempo para ser gravado, ou seja, o arquivo já existe, mas não foi gravado até o final. Talvez seja necessário pausar o arquivo ou verificar se ele não está fechado para leitura pelo processo de gravação....

Sua solução é interessante - vou dar uma olhada, talvez eu a use para aplicação.

Mas acho que há uma possibilidade de obter uma resposta final do programa executável - eu queria usar essa abordagem.

Opção com arquivos - se você executar um bootnik, então novamente - você pode simplesmente criar um novo arquivo no final da tarefa.

 
Aleksey Vyazmikin #:

Talvez a taxa de sucesso relativa das variantes -1 e 0 esteja no tamanho da amostra do trem e deva ser reduzida? Em geral, parece que o Recall reage a isso.

Em sua opinião, os resultados de tais combinações devem ser comparáveis entre si em nosso caso? Ou os dados estão irremediavelmente desatualizados?

Dividi a amostra do trem em três partes, treinei três conjuntos para a variante -1 e a variante 0, e também treinei apenas o trem original como três amostras.

Foi isso que obtive.

Fiz essa generalização PR=(Precisão-0,5)*Recall

Parece que o treinamento ocorre às custas da segunda e da terceira partes da amostra do trem - agora que as combinei e executei o treinamento, vamos ver o que acontece.

Ainda assim, parece que esse pode não ser um método ruim para estimar a aleatoriedade do treinamento. Idealmente, o treinamento deve ser relativamente bem-sucedido em cada segmento, caso contrário, não há garantia de que o modelo simplesmente deixará de funcionar amanhã.

 
Aleksey Vyazmikin #:

Parece que o treinamento está ocorrendo às custas da segunda e terceira partes do trem de amostra - agora eu as combinei e executei o treinamento - veremos o que acontece.

Ainda assim, parece que esse pode não ser um método ruim para avaliar a aleatoriedade do treinamento. O ideal é que o treinamento seja relativamente bem-sucedido em cada segmento, caso contrário, não há garantia de que o modelo simplesmente deixará de funcionar amanhã.

E aqui estão os resultados - as duas últimas colunas

De fato, os resultados melhoraram. Podemos supor que, quanto maior a amostra, melhor será o resultado do treinamento.

Devemos tentar treinar na 1ª e 2ª partes da amostra de treinamento e, se os resultados não forem muito piores do que na 2ª e 3ª partes, o fator de frescor da amostra poderá ser considerado menos significativo do que o volume.

 

Já escrevi muitas vezes sobre o "poder preditivo dos preditores", que é calculado como a distância entre dois vetores.

Encontrei uma lista de ferramentas para calcular a distância:

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"

Isso além da ferramenta padrão, que tem seu próprio conjunto de distâncias

stats::dist() 
 
Aleksey Vyazmikin #:

E aqui está o resultado - as duas últimas colunas

De fato, os resultados melhoraram. Podemos supor que, quanto maior a amostra, melhor será o resultado do treinamento.

É necessário tentar treinar em 1 e 2 partes da amostra de treinamento e, se os resultados não forem muito piores do que em 2 e 3 partes, então o fator de frescor da amostra pode ser considerado menos significativo do que o volume.

Cuto, mais uma vez estamos presos à ignorância da estatística da esteira.
Tenho uma ideia para montar o matstat batendo nele de lados diferentes.
 
СанСаныч Фоменко #:

Já escrevi muitas vezes sobre o "poder preditivo dos preditores", que é calculado como a distância entre dois vetores.

Encontrei uma lista de ferramentas para calcular a distância:

Isso além da ferramenta padrão, que tem seu próprio conjunto de distâncias

Você pode me mostrar um exemplo de como usá-la?