交易中的机器学习:理论、模型、实践和算法交易 - 页 1341

 

脚本代码,如果有人感兴趣的话--唉,没课了

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)。

可以看出,这些模型在总体上是非常相似的,但另一个令人惊讶的地方是,没有发生激活的时间间隔非常大。也许原因是一些预测器从月球棒中获取信息...

 
阿列克谢-维亚兹米 金。

做了一个平行模型分析,即在测试样本上显示阈值激活点(默认为0.5)。

可以看出,这些模型在总体上是非常相似的,但另一个令人惊讶的地方是,没有发生激活的时间间隔非常大。也许原因是在一些预测器中,该预测器从月线中获取信息...

然后在每个柱子上连续进行许多次交易?我和NS有类似的问题。结论是类似的--大的TF影响,而小的则是补充。
 
elibrarius
然后在每个柱子上连续做了一堆交易?我有一个类似的,与NS。结论是类似的--大型TF在影响,小型TF在补充。

并非如此,只是这些交易比屏幕的宽度要大--我没有发布大的交易。但是,事实上,它是以分组的形式出现的--是的。是否值得扔掉那些把进入的可能性削减得如此之多的上层TF是个问题......

 
Alexander_K:

+++

无意冒犯阿列克谢--如果我理解他所写的一个字的话,请把我打死。无论是目标还是实现目标的方法都不明确,也没有得到证实。老师的精神,他花了15年时间研究神经网络,现在在一家洗车行工作,所以在他身上盘旋。

是的,我们都在上帝手下行走,在洗车场没有什么特别的区别,或者一些经理,"长大了 "的伪伙伴,然而,他也可以在退休前轻易地被踢掉屁股,把他留在破碎的低谷。现在在一些西式的公司里,100个员工有30个 "副总",中层经理现在是副总,月薪5万)))。这很有趣,也很有罪恶感......

要么是有意识的冒险,在洗车店工作的真正威胁,但在路上有更多的热情、兴趣和冒险,要么是更大的风险,但隐藏在 "地毯下 "的 "职业成长",过程和结果都令人失望。如果你生来就是平民,你最好马上放弃希望,但你可以尝试 "成功",反正你也没什么损失,至少在你死之前,你可以说你已经尽力了,不必卑躬屈膝地当一辈子的婊子)))。

 
阿列克谢-维亚兹米 金。

是否值得扔掉上面的TFs,因为它把进入的可能性削减了很多,或者不值得,这是一个问题......

那么,要么手动测试并决定,要么优化它。

 
elibrarius

好吧,要么手动出汗并决定,要么做一些优化。

我需要翻阅床单,找到原因,我将在接下来的几天里找到它--我需要为此得到一些休息。

到目前为止,有几个模型被标记所动摇--它们似乎有更多的变化,这在配对方面可能是有趣的


 

恭喜你。

终端: 增加了API,用于通过使用R语言应用程序从MetaTrader 5终端请求数据

我们准备了一个特别的软件包MetaTraderR。它包含用于R和MetaTrader 5终端之间互动的DLL,文档和辅助R文件。现在,该软件包正在CRAN资源库中注册,很快就可以下载和安装 了。

让我们等待续集的到来。

祝好运

 
弗拉基米尔-佩雷文科

恭喜你。

终端: 增加了API,用于通过使用R语言应用程序从MetaTrader 5终端请求数据

我们准备了一个特别的软件包MetaTraderR。它包含用于R和MetaTrader 5终端之间互动的DLL、文档和辅助R文件。该软件包正在CRAN资源库中注册,并将 在最近的将来可供下载和安装

让我们等待续集的到来。

祝好运

开发者忽略了反馈问题,所以概率不是很高,会被...

 

这里有另一种表示样本中模型行为的方法--这里是通过颜色来表示。

TP - 正确的分类 "1" - 绿色

FP - 错误分类 "1" - 红色

FN--错误分类 "0"(实际缺失 "1")--蓝色

屏幕尺寸很大--通过点击观看更有意思。

而按下两个变体的GIF,为了清晰起见,将进行切换

可以看出,我的模型在市场上的浸润非常少,因为有很多蓝色的东西--我们需要研究不活跃的原因。也许我应该寻找其他停止学习的方法,而不仅仅是通过准确性。我当然会把完整性和准确性都设置到一定的限度,但不知什么原因,开发商没有提供这种停止训练的选项,但这是很遗憾的。