新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 568

 
PolarSeaman:

有3个这样的周期。更换了它们,终端冻结了。

我数了一下,有四个。

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=limit; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=limit; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[limit];
      for(i=limit; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=limit; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

没有任何东西挂起。阵列 不应该有任何超限的情况。除了在我看来,零条上的数值计算不正确。

 
Ihor Herasko:

我数了一下,有四个。

没有任何东西挂起。阵列外 不应该有任何超限的情况。除了我认为零条上的数值计算不正确。

谢谢,可以了。我不需要在零杠上得到它。 我想从第一个杠上得到它,但仓位开得很乱。

sell_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,1),Digits);
sell_1_1_B=NormalizeDouble(iCustom(Symbol(),0,"HiLo",1,2),Digits);

if(sell_1_1_B==0.0&&sell_1_B!=0.0)
{открываю sell}
if(sell_1_1_B!=0.0&&sell_1_B==0.0)
{открываю buy}

为什么?

 
Ihor Herasko:

在测试器中,在视觉上是这样的

ooppe

在测试开始时的第一个转折点,有错误的指标,当我在测试开始后把它扔在图表上时,建立了一条直线。

我们打破了一些东西)

 

你能告诉我如何把图形工具的"选择 "放在专家顾问的按钮上,这样通过点击按钮,工具图标就会出现在光标下,并且可以拉伸它?

而且它应该已经有了指定的属性

 
PolarSeaman:

在测试器中,在视觉上是这样的

在测试开始时的第一个转折点,有错误的指标,在测试开始后,当我把它扔在图表上时,建立了一条直线。

我们打破了一些东西)

对,它是一个重绘指标,在每个tick的指定条数 上重新计算整个历史。非常糟糕的解决方案。那么你必须这样做。

   int i;

   SetIndexDrawBegin(0,Bars-cb);
   SetIndexDrawBegin(1,Bars-cb);

   double avg;

   ki=2.0/(p+1);

   int total;
   int limit = GetRecalcIndex(total,rates_total,prev_calculated);

   for(i=total; i>=0; i--) 
      fx1[i]=Close[i];

   for(int m=0; m<=s; m++)
     {
      z1=fx1[0];
      for(i=0; i<=total; i++) {z1=z1+(fx1[i]-z1)*ki; hp[i]=z1;}

      z2=fx1[total];
      for(i=total; i>=0; i--) {z2=z2+(fx1[i]-z2)*ki; fx1[i]=(hp[i]+z2)/2;}
     }

   fs=0;
   for(i=total; i>=0; i--)
     {
      if(fx1[i]>fx1[i+1]) fs=1;
      if(fx1[i]<fx1[i+1]) {if(fs==1) fx2[i+1]=fx1[i+1]; fs=2;}
      if(fs==2) fx2[i]=fx1[i]; else fx2[i]=0.0;

      avg=iATR(NULL,0,ATR,i+10);
      upper[i] = hp[i] + distance*avg;
      lower[i] = hp[i] - distance*avg;

      if(Close[i+1+barsig]<upper[i+1+barsig] && Close[i+barsig]>upper[i+barsig])
         dnar[i]=High[i]+arrots*Point; else dnar[i]=EMPTY_VALUE;

      if(Close[i+1+barsig]>lower[i+1+barsig] && Close[i+barsig]<lower[i+barsig])
         upar[i]=Low[i]-arrots*Point; else upar[i]=EMPTY_VALUE;
     }

当然是不愉快的,但它是有效的。

 
为什么这种结构在变量 声明中不起作用?
int K=20;
int TIKET[K];
 
igrok333:
为什么这个结构在变量声明 中不起作用?

因为K是一个变量。它在编纂时的价值不明。为了使其发挥作用,我们必须使K成为一个常数。

#define  K 20
int TIKET[K];
 
Ihor Herasko:

对,因为它是一个重新绘制的指标,在每一个刻度上重新计算指定数量的条形 的所有历史。这是一个非常糟糕的解决方案。那么你必须这样做。

当然是不愉快的,但它是有效的。

谢谢你。我花了这么多时间和你在一起,它仍然吸引了20(!)条,甚至更多。

我们要不要创建一个请愿书?

制定法律,禁止 分发重绘超过三条的指标!

为了得到议会的考虑,我们需要在一年内收集总共10万个签名。

 
PolarSeaman:

谢谢你。你我浪费了这么多时间,他却画了20(!)条,也许更多,我没有再看下去。

设置一个较小的cb值,将有较少的条形图被重新绘制。

我们要不要创建一个请愿书?

制定法律,禁止 分发重绘超过三条的指标!

在一年内只需要10万个签名就可以得到大会的审议。

)))

 

你能告诉我如何排除/添加一个特定的日期到EA吗?

例如,不要在2018年3月2日进行交易。尝试了不同的选项,对日期感到困惑。

TimeDayOfYear (TimeCurrent()) != StrToTime("2018.03.02")