Машинное обучение в трейдинге: теория, модели, практика и алготорговля - страница 1340

 
Maxim Dmitrievsky:

т.е. внутри интерпретатора знак вопроса или как?

Я не знаю, что внутри интерпретатора - может Вы напишите и расскажите.покажите?

Я предлагаю прямой путь создания модели, без обертки в виде питона.

 
Maxim Dmitrievsky:

это медленный и тернистый путь, голая модель нужна только для использования

исследовать так не комильфо, только через питон

Как раз мой вариант, я думаю, будет быстрей питона, в том числе за счет параллельного применения моделей - хотите проверьте.

Это нужно для генерации моделей, для ковыряния отдельной модели можно использовать другие инструменты, в том числе питон, R или MT5.

 
Maxim Dmitrievsky:

Выкладывайте нормально исходники и принцип работы, с хорошим описанием

так может кто-то и заинтересуется, а не с черным ящиком взаимодействовать

Ну, я думаю не только программисты читают эту ветку, а и люди, кому хочется попробовать МО, но не знают, как к этому подступиться, этот скрипт им в помощь.

Программист, думаю, с кодом справится - вроде ничего умного там и нет, кроме работы с таблицами, что не моё.

 
Maxim Dmitrievsky:

ага, прям зачитались..

тут программисты в коде Решетова открытом разобраться не смогли, не то что в каких-то смутных неформализованных идеях копаться

фантазии не хватит

т.е. вы по сути ничего не сделали, и предлагаете нам заняться тем, что бы делать все с ноля, руководствуясь вашими фантазиями

Я Вам лично ничего не предлагаю, а предоставляю возможность для тех, кому это интересно.

Для Вас лично я этим действием ничего не сделал, спору нет.

Специально для тех, кому интересен код, спросил разрешения у автора класса на публикацию кода с функциями из класса, без самого класса, если он не будет против, то опубликую. Может кто переделает функции класса и скрипт будет общественно доступным.
 

Maxim Dmitrievsky:

 Верхом абстракционизма являются математические формулы и отвлеченные понятия, а не кашица в голове какого-то конкретного фантазера

Не совсем так. Верх это многомерные образы, а не формулки и тем более не отвлеченные и оторванные от мира сего понятия.

Но чтобы мозг мог оперировать такими мыслеобразами требуется светлая энергия, без нее будет вырождение и скатывание на формулки.

 
Добавил информацию по запуску и обновил файл в то сообщение.
 
Maxim Dmitrievsky:

ок, кэп

темную энергию знаю, про светлую не слышал

Строение окружающего мира по квантовым уровням. Для тех кто не в курсе куда попал.)

мир

 
Maxim Dmitrievsky:

ну е.. твою налево, началось

темную энергию всегда клинит от такого..
 

Код скрипта, если кому интересно - увы, без класса

CSV *csv_Write=new CSV();
int NomerStolbca=0;

input int Set_Total=10;//Количество сетов настроек 1к10
input string CB_Dir="Catboost_Tester";//Директория проекта

input string Version="catboost-0.11.1.exe";//Имя exe файла CatBoost
input int depth=6;//Глубина дерева
input int iterations=1000;//Максимальное число итераций (деревьев)
input double learning_rate=0.03;//Шаг обучения
input int od_wait=100;//Число деревьев без улучщения для остановки обучения


//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
      csv_Write.Add_column(dt_string,0);
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
      csv_Write.Add_column(dt_string,s());
NomerStolbca=0;

string Train_All[23];
Train_All[0]=Version+" fit";
Train_All[s()]=" --learn-set train.csv";
Train_All[s()]=" --test-set test.csv";
Train_All[s()]=" --column-description %%a";
Train_All[s()]=" --has-header";
Train_All[s()]=" --delimiter ;";
Train_All[s()]=" --model-format CatboostBinary,CPP";
Train_All[s()]=" --train-dir ..\Rezultat\RS_01/result_4_%%a";
Train_All[s()]=" --depth "+depth;
Train_All[s()]=" --iterations "+iterations; 
Train_All[s()]=" --nan-mode Forbidden ";
Train_All[s()]=" --learning-rate "+learning_rate; 
Train_All[s()]=" --rsm 1 ";
Train_All[s()]=" --fold-permutation-block 1";
Train_All[s()]=" --boosting-type Ordered";
Train_All[s()]=" --l2-leaf-reg 6";
Train_All[s()]=" --loss-function Logloss:border=0.5";
Train_All[s()]=" --use-best-model";
Train_All[s()]=" --eval-metric Precision";
Train_All[s()]=" --custom-metric Logloss:border=0.5";
Train_All[s()]=" --od-type Iter";
Train_All[s()]=" --od-wait "+od_wait;
Train_All[s()]=" --random-seed ";
NomerStolbca=0;
int Size_Arr=ArraySize(Train_All);
int Seed=0;
int line=0;

for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line();
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);
for(int Z=2;Z<22+1;Z++)csv_Write.Set_value(line,Z,"",false);

   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         Train_All[7]=" --train-dir ..\Rezultat\RS_"+Seed+"/result_4_%%a";

         line=csv_Write.Add_line();
         int x=0;         
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++],false);
         csv_Write.Set_value(line,s(),Train_All[x++]+Seed,false);
         NomerStolbca=0;
     }
         line=csv_Write.Add_line();
         csv_Write.Set_value(line,1,")",false);
         for(int Z=2;Z<22+1;Z++)csv_Write.Set_value(line,Z,"",false);
   }
   
   
     line=csv_Write.Add_line(1,false,true);
     csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_01_Train_All.txt",true,true,false,true,false);
      csv_Write.Clear_all();

//---------
string Rezultat_Exam[9];
Rezultat_Exam[0]=Version+" calc";
Rezultat_Exam[s()]=" --model-path ..\Rezultat\RS_"+"\result_4_%%a\model.bin";//Добавлять номер директории
Rezultat_Exam[s()]=" --input-path exam.csv"; 
Rezultat_Exam[s()]=" --column-description %%a";  
Rezultat_Exam[s()]=" --has-header"; 
Rezultat_Exam[s()]=" --delimiter ;"; 
Rezultat_Exam[s()]=" --output-path ..\Rezultat\RS_"+"\result_4_%%a\output";//Добавлять номер директории
Rezultat_Exam[s()]=" --has-header"; 
Rezultat_Exam[s()]=" --prediction-type Probability";
NomerStolbca=0;
Seed=0;
Size_Arr=ArraySize(Rezultat_Exam);

for(int Z=0;Z<Size_Arr+1;Z++)csv_Write.Add_column(dt_string,Z);
for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);

   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         Rezultat_Exam[1]=" --model-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\model.bin";
         Rezultat_Exam[6]=" --output-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\output";
         int line=csv_Write.Add_line(1,false,true);
         int x=0;  
         for(int S=1;S<Size_Arr+1;S++)csv_Write.Set_value(line,S,Rezultat_Exam[S-1],false);
     }
         line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,")",false);
   }
      
      line=csv_Write.Add_line(1,false,true);
      csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_02_Rezultat_Exam.txt",true,true,false,true,false);
      csv_Write.Clear_all();

//----------
string Rezultat_Test[9];
Rezultat_Test[0]=Version+" calc";
Rezultat_Test[s()]=" --model-path ..\Rezultat\RS_"+"\result_4_%%a\model.bin";//Добавлять номер директории
Rezultat_Test[s()]=" --input-path test.csv"; 
Rezultat_Test[s()]=" --column-description %%a";  
Rezultat_Test[s()]=" --has-header"; 
Rezultat_Test[s()]=" --delimiter ;"; 
Rezultat_Test[s()]=" --output-path ..\Rezultat\RS_"+"\result_4_%%a\output_test";//Добавлять номер директории
Rezultat_Test[s()]=" --has-header"; 
Rezultat_Test[s()]=" --prediction-type Probability";
NomerStolbca=0;
Seed=0;
Size_Arr=ArraySize(Rezultat_Test);

for(int Z=0;Z<Size_Arr+1;Z++)csv_Write.Add_column(dt_string,Z);
for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);
  
   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         //Train_All[7]=" --train-dir ..\Rezultat\RS_"+Seed+"/result_4_%%a";
         Rezultat_Test[1]=" --model-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\model.bin";
         Rezultat_Test[6]=" --output-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\output_test";
         int line=csv_Write.Add_line(1,false,true);
         int x=0;  
         for(int S=1;S<Size_Arr+1;S++)csv_Write.Set_value(line,S,Rezultat_Test[S-1],false);
     }
         line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,")",false);
   }
      line=csv_Write.Add_line(1,false,true);
      csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_02_Rezultat_Test.txt",true,true,false,true,false);
      csv_Write.Clear_all();

//-----------------
string Rezultat_Train[9];
Rezultat_Train[0]=Version+" calc";
Rezultat_Train[s()]=" --model-path ..\Rezultat\RS_"+"\\result_4_%%a\model.bin";//Добавлять номер директории
Rezultat_Train[s()]=" --input-path train.csv"; 
Rezultat_Train[s()]=" --column-description %%a";  
Rezultat_Train[s()]=" --has-header"; 
Rezultat_Train[s()]=" --delimiter ;"; 
Rezultat_Train[s()]=" --output-path ..\Rezultat\RS_"+"\\result_4_%%a\output_train";//Добавлять номер директории
Rezultat_Train[s()]=" --has-header"; 
Rezultat_Train[s()]=" --prediction-type Probability";
NomerStolbca=0;
Seed=0;
Size_Arr=ArraySize(Rezultat_Train);

for(int Z=0;Z<Size_Arr+1;Z++)csv_Write.Add_column(dt_string,Z);
for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);

   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         Rezultat_Train[1]=" --model-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\model.bin";
         Rezultat_Train[6]=" --output-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\output_train";
         int line=csv_Write.Add_line(1,false,true);
         int x=0;  
         for(int S=1;S<Size_Arr+1;S++)csv_Write.Set_value(line,S,Rezultat_Train[S-1],false);
     }
         line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,")",false);
   }
      line=csv_Write.Add_line(1,false,true);
      csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_02_Rezultat_Train.txt",true,true,false,true,false);
      csv_Write.Clear_all();


//-----------------
string Metrik_Exam[8];

Metrik_Exam[0]=Version+"  eval-metrics";
Metrik_Exam[s()]=" --metrics Logloss:border=0.5,Precision,Recall,Kappa,Accuracy,BalancedAccuracy,AUC,F1,MCC";
Metrik_Exam[s()]=" --model-path ..\Rezultat\RS_\result_4_%%a\model.bin";
Metrik_Exam[s()]=" --input-path exam.csv";
Metrik_Exam[s()]=" --column-description %%a"; 
Metrik_Exam[s()]=" --has-header";
Metrik_Exam[s()]=" --delimiter ;"; 
Metrik_Exam[s()]=" --result-dir ..\Rezultat\RS_\result_4_%%a\metr\Exam";
NomerStolbca=0;
Seed=0;
Size_Arr=ArraySize(Metrik_Exam);

for(int Z=0;Z<Size_Arr+1;Z++)csv_Write.Add_column(dt_string,Z);
for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);

   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         Metrik_Exam[2]=" --model-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\model.bin";
         Metrik_Exam[7]=" --result-dir ..\Rezultat\RS_"+Seed+"\\result_4_%%a\metr\Exam";
         int line=csv_Write.Add_line(1,false,true);
         int x=0;  
         for(int S=1;S<Size_Arr+1;S++)csv_Write.Set_value(line,S,Metrik_Exam[S-1],false);
     }
         line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,")",false);
   }
      line=csv_Write.Add_line(1,false,true);
      csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_03_Metrik_Exam.txt",true,true,false,true,false);
      csv_Write.Clear_all();


//-----------------
string Metrik_Test[8];

Metrik_Test[0]=Version+"  eval-metrics";
Metrik_Test[s()]=" --metrics Logloss:border=0.5,Precision,Recall,Kappa,Accuracy,BalancedAccuracy,AUC,F1,MCC";
Metrik_Test[s()]=" --model-path ..\Rezultat\RS_\result_4_%%a\model.bin";
Metrik_Test[s()]=" --input-path test.csv";
Metrik_Test[s()]=" --column-description %%a"; 
Metrik_Test[s()]=" --has-header";
Metrik_Test[s()]=" --delimiter ;"; 
Metrik_Test[s()]=" --result-dir ..\Rezultat\RS_\result_4_%%a\metr\Test";
NomerStolbca=0;
Seed=0;
Size_Arr=ArraySize(Metrik_Test);

for(int Z=0;Z<Size_Arr+1;Z++)csv_Write.Add_column(dt_string,Z);
for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);

   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         Metrik_Test[2]=" --model-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\model.bin";
         Metrik_Test[7]=" --result-dir ..\Rezultat\RS_"+Seed+"\\result_4_%%a\metr\Test";
         int line=csv_Write.Add_line(1,false,true);
         int x=0;  
         for(int S=1;S<Size_Arr+1;S++)csv_Write.Set_value(line,S,Metrik_Test[S-1],false);
     }
         line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,")",false);
   }
      line=csv_Write.Add_line(1,false,true);
      csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_03_Metrik_Test.txt",true,true,false,true,false);
      csv_Write.Clear_all();

//-----------------
string Metrik_Train[8];

Metrik_Train[0]=Version+"  eval-metrics";
Metrik_Train[s()]=" --metrics Logloss:border=0.5,Precision,Recall,Kappa,Accuracy,BalancedAccuracy,AUC,F1,MCC";
Metrik_Train[s()]=" --model-path ..\Rezultat\RS_\result_4_%%a\model.bin";
Metrik_Train[s()]=" --input-path test.csv";
Metrik_Train[s()]=" --column-description %%a"; 
Metrik_Train[s()]=" --has-header";
Metrik_Train[s()]=" --delimiter ;"; 
Metrik_Train[s()]=" --result-dir ..\Rezultat\RS_\result_4_%%a\metr\Train";
NomerStolbca=0;
Seed=0;
Size_Arr=ArraySize(Metrik_Train);

for(int Z=0;Z<Size_Arr+1;Z++)csv_Write.Add_column(dt_string,Z,100);
for(int N=0;N<Set_Total;N++)
{
         int line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,"FOR %%a IN (*.) DO (",false);
   
   for(int i=1;i<10+1;i++)
     {
         Seed=N*10+i;
         Metrik_Train[2]=" --model-path ..\Rezultat\RS_"+Seed+"\\result_4_%%a\model.bin";
         Metrik_Train[7]=" --result-dir ..\Rezultat\RS_"+Seed+"\\result_4_%%a\metr\Train";
         int line=csv_Write.Add_line(1,false,true);
         int x=0;  
         for(int S=1;S<Size_Arr+1;S++)csv_Write.Set_value(line,S,Metrik_Train[S-1],false);
     }
         line=csv_Write.Add_line(1,false,true);
         csv_Write.Set_value(line,1,")",false);
   }
      line=csv_Write.Add_line(1,false,true);
      csv_Write.Set_value(line,1,"Pause",false);

      csv_Write.data_separator='\t';
      csv_Write.Write_to_file(CB_Dir+"\\Setup\\_03_Metrik_Train.txt",true,true,false,true,false);
      csv_Write.Clear_all();

  }
  
//+------------------------------------------------------------------+
int s()
  {
   NomerStolbca++;
   return (NomerStolbca);
  }
 

Сделал анализ параллельности моделей, т.е. показывает точки активации порога (по умолчанию 0,5) на тестовой выборке.

Видно, что модели весьма похожи в целом, но удивляет другое - очень большие временные отрезки, где не происходила активация. Возможно причина в каком то предикторе, берущем информацию с месячного бара...

Причина обращения: