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

 
forexman77:

我如何识别 "噪音预测器"?我试着按相关性选择并以这种方式删除,结果变得更糟。

这里已经有很多人推荐。

我使用一个非常简单的方案,我不追求准确,但它非常清晰。

我把一个预测器--一个向量--分成两部分:一部分指目标的一个类别,另一部分指目标的另一个类别。然后我建立每个部分的直方图并进行比较:如果它们重合,它们就是噪音,如果它们分歧,它们就有一些预测能力。如果它们完全背离,那么它们就有100%的预测能力(没有见过)。直方图的相交是一个分类错误,原则上是无法克服的。

我把图表贴在这里,有rsi作为预测指标。可以对直方图的分歧进行衡量。


这就是拨浪鼓--以零成本,你可以针对大量的目标变量检查任意数量的预测器,我有时会这样做,作为对特别懒惰的人的一种礼貌。

 
阿列克谢-维亚兹米 金。

不清楚如何阅读你的指标。

这不是一个指标,它是一个随机森林...

你可以通过OOB、RMS等评估模型,但你不能理解模型的结果。

只有在将随机森林的结果与价格图表相结合后,才能发现模型行为的特殊性。

使用https://github.com/Roffild/RoffildLibrary/blob/master/Include/Roffild/ToIndicator.mqh 生成的图表

 
交易员博士

过滤器_02 2016 arr_Buy

在数量上,"1 "类甚至超过了 "0 "类,因此与以前相比,错误的输入较少。请在EA中试试这棵树?我自己也很好奇,利润图会显示什么。


y_pred
y_true01
0
1


第一列有数字的是未过滤的,第二列是过滤的

也许我弄乱了树的逻辑?


void FilterTree()
{
int arr_DonProc=DonProcf();
int arr_DonProcVisota=DonProcVisotaf();
int arr_DonProc_M15=DonProc_M15f();
int Level_Support_D1=LevlSupportf(PERIOD_D1);
int Level_Support_W1=LevlSupportf(PERIOD_W1);
int arr_Regressor=RegressorP();
bool BlockBuy=false;

if (arr_DonProc>=2.5)
   {
   if (arr_DonProcVisota>=7.5)
      {
         BlockBuy=true;      
      }
   else
      {
       if (arr_DonProc>=6.5)
          { 
            if (Level_Support_D1>=-2.5)
            {
               if (Level_Support_W1<=1.5)BlockBuy=true;                  
            }          
          }
       else
          {
            if (arr_Regressor>=2.5)
               {
                  if(arr_DonProc_M15>=4.5)BlockBuy=true;
               
               }
            else
               {
                  if(Level_Support_D1<1.5)
                  {
                     if(Level_Support_W1<-1.5)BlockBuy=true;
                  }
               }
          }         
      }   
   
   }

if (BlockBuy==true)BuyNow=false;
SellNow=false;
}
 
罗费尔德

这不是一个指标,而是一个随机森林...

你可以通过OOB、RMS等评估模型,但你不能理解模型的结果。

只有在将随机森林的结果叠加到价格图表上之后,模型行为的特殊性才会显现。

使用https://github.com/Roffild/RoffildLibrary/blob/master/Include/Roffild/ToIndicator.mqh 生成的图表

这并不清楚,你所拥有的显然不是森林,而是指标--也许事实上它已经处理了 "森林 "的一些逻辑并将其输出,但它并没有成为不是一个指标。

那么,你想展示什么,如何阅读读物,它们给出了什么?

 
阿列克谢-维亚兹米 金。


第一列数字是未经过滤的,第二列是有过滤的

也许我弄乱了树的逻辑?


有一个错误。

if (BlockBuy==false)BuyNow=false;


 
阿列克谢-维亚兹米 金。

这并不清楚,你那里显然不是森林,而是一个指标--也许重点是它处理了一些 "森林 "的逻辑并推导出来,但这并不意味着它不是一个指标。

那么,你想展示什么,如何阅读读物,它们给出了什么?

CDForest::DFProcess(forest1, netinputs, netoutputs);
indicSymbol.buffer(netoutputs[1] * 100.0, 0);

CDForest::DFProcess(forest2, netinputs, netoutputs);
indicSymbol.buffer(netoutputs[1] * 100.0, 1);
如果你不相信这个图是一个真正的森林,那么森林的概念显然是错误的...
 
罗费尔德
如果你不相信这个图是一个真正的森林,那么森林的概念显然是错误的...

这与信仰的问题有什么关系呢?我看到图表中的方块字--我不明白如何解释它们--一切。

 

操盘手医生, 一般来说,你必须在树上再做分支,很少有信息可以做出决定。

 
阿列克谢-维亚兹米 金。

第一列的数字是没有过滤器的,第二列是有过滤器的。

我明白了。这棵树无法学会如何正确地过滤,所以过滤后的结果并没有多好,只是少了一些交易。基本上是随机过滤掉了一些好的交易和一些坏的交易。

我在2015年只为Malovhodov训练了树。
Filter_02和mnogovhodov_02是为2016年训练的,最好在测试器中比较2016年和2017年(2017年--新的数据,根本不在档案中,这是最值得看的)。

 
阿列克谢-维亚兹米 金。

操盘手博士,一般来说,你需要把树进一步分支,没有什么信息可以做决定。

我发现,进一步的分支会导致过度拟合。为了获得更好的准确性,我们应该转向更复杂的模型--森林或神经元。

你仍然可以在训练数据上达到100%的准确率,但如果这样的树在新的数据上只会失败,那还有什么意义。我想教这样一个模型,它能够在新数据上显示出与训练数据几乎相同的结果。