任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 131

 
Sepulca:

对大脑来说是个好任务。你可以这样试一试。

尺寸4的测试结果。 如果没有选择数组中的X元素,否则使用数组[数字]和片段的维数6。


我看了你的代码,但我不明白的是,你在任何阶段都没有读取原始数组的数据。 只有其中的元素数。
 
//chief2000:

我看了一下你的代码,但我不明白的是--你没有在任何一个步骤中读取原始数组的数据。你只读取了其中的元素数


为什么我需要原始阵列的数据?我只是根据你的想法对数组元素 进行采样。并由你决定如何处理取样的数据。I.e.如果N[0]=3,如果N[1]=2,如果N[2]=1,如果N[3]=0,我们使用数组[N[0]]、数组[N[1]]、数组[N[2]]、数组[N[3]]来进一步分析,如果N[0]=3,N[1]=2,N[2]<0,N[3]<0,那么为了进一步分析,我们只使用数组[N[0]],数组[N[1]],因为N[2]<0,N[3]<0。我们尝试了所有可能的组合,但根据你的帖子没有重复(考虑到数组的编号从0到ArraySize(array)-1开始)。

[4] <=> { 1 2 3 4 }

1, 12, 13, 14, 123, 124, 134, 1234, 
2, 23, 24, 234, 
3, 34,
4

然后按照你的算法行事。

if(NewComb){
// Получили новую комбинацию в массиве N размерностью k    
    
    for(i=0;i<k;i++){// Перебираем массив N. Если N[i]<0 то элемент array[N[i]] не участвует в выборке.
                     // Например, для размерности 4 если N[0]=3,N[1]=1,N[2}<0,N[3]<0 то это выборка array[3] и array[1]
                     //                             если N[0]=3,N[1]=2,N[2]=1,N[3]=0 то это выборка array[3] и array[2] array[1] и array[0]
     if(N[i]>=0){// использовать как-то array[N[i]]}
    }

   }
 
Sepulca:


为什么我需要原始阵列的数据?我只是根据你的想法对数组中的元素进行采样。并由你决定如何处理取样的数据。I.e.如果N[0]=3,如果N[1]=2,如果N[2]=1,如果N[3]=0,我们使用数组[N[0]]、数组[N[1]]、数组[N[2]]、数组[N[3]]进行进一步分析,如果N[0]=3,N[1]=2,N[2]<0,N[3]<0,那么为了进一步分析,我们只使用数组[N[0]],数组[N[1]],因为N[2]<0,N[3]<0。我们列举了所有可能的组合,根据你的帖子,这些组合没有重复(考虑到数组的编号从0开始到ArraySize(array)-1)。

然后按照你的算法进行。


现在清楚了(我在下一步已经读了数据,只是不习惯用不是自己的代码工作)。
非常感谢您!

 

帮助我找到函数中的一个错误。

问题是,如果你计算MA上面的条形图,该函数会返回正确的值。

但如果它低于MA,该函数总是返回1(1)。

int CheckFiltr ()
   {
   int i=1;
   for (;;)
      {
      if (NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)||NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm))
         {
         i++;
         Comment ("Фильтр = ", i);         
         }
      else break;
      }
   return (i);
   }
 
MarkTrade:

帮助我找到函数中的一个错误。

问题是,如果你计算MA上面的条形图,该函数返回正确的值。

但如果它低于MA,该函数总是返回1(1)。

乍一看,这更好,尽管代码可以大大优化,因为我只纠正了语法。

int CheckFiltr ()
   {
   int i=1;
   int Norm=Digits;
   for (;;)
      {
      if (
           (   NormalizeDouble(High[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
            && NormalizeDouble(Low[i] ,Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
           )
          ||
           (   NormalizeDouble(High[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm) 
            && NormalizeDouble(Low[i] ,Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
           )
         )

         {
         i++;
         Comment ("Фильтр = ",i);         
         }
      else break;
      }
   return (i);
   }
 
paladin80:

对于你的例子来说,这实际上并没有什么区别,但无论如何你必须指定数组的开始和结束。

如果数组很大,开头就会有区别。例如,如果条件是在数组的末端作为规则触发的,那么最好从末端开始。这个例子是典型的顺序/位置搜索。当然,如果你在这种情况下先进行搜索,程序无论如何都会到达这一点,但会占用更多的资源。


再次感谢!现在试图使 "可检查 "的条数得到优化,但窗口中的结果就是不存在。试图从头和尾开始数,但都是徒劳。

extern int number=3;
//------------------------------------+
for (int x=number; x>=1; x--)
{
 if(Open[x]==Open[x-1]) continue;
    if(Open[x]<Open[x-1])
   {
   //--- action
   }
 else{
    if(Open[x]>Open[x-1])
   {
   //--- action
  }
 }
}
 
Sepulca:
乍一看,这是更好的,尽管代码可以大大优化。


这很有效...谢谢你!

我只是需要了解为什么我的版本不愿意工作......

 
MarkTrade:


它是这样工作的...谢谢你!

我只是希望我明白为什么我的版本不想工作......


仔细看一下你的代码

 if (NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
||NormalizeDouble(High[i],Norm)&&NormalizeDouble(Low[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm))
     
你只是将第一项与零进行比较,即真或假。
 
MarkTrade:


它的作用...谢谢你!

我只是希望我明白为什么我的版本不想工作......

你的代码。

int CheckFiltr ()
   {
   int i=1;
   for (;;)
      {
      if (NormalizeDouble(High[i],Norm)&&
          NormalizeDouble(Low[i],Norm)<NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm)
            ||    
          NormalizeDouble(High[i],Norm)&&
          NormalizeDouble(Low[i],Norm)>NormalizeDouble(iMA(NULL,0,PerMa,0,MetMa,AplPr,i),Norm))
         {
         i++;
         Comment ("Фильтр = ",i);         
         }
      else break;
      }
   return (i);
   }

也许这更容易理解...

哎呀......已经告诉你了,你可以不通过正常化来做......

 
Roger:


仔细看一下你的代码

你只需将第一项比作零,即真或假。


所以 "如果a c 都大于c"的表达不正确,但 "如果a 大于cc 大于c"则正确?