prev_calculated - 页 10

 
Dmitry Fedoseev:
它没有。将会有几条连接中断,有几条会有未初始化的垃圾。
阿列克谢-科齐岑
要么,就像上面Dmitry说的那样,有几个小节的连接中断......。顺便问一下,在连接失败的情况下,prev_calculated是否也会返回0?

显然,此时确实出现了通讯中断的情况。

2016.10.19 04:46:13.770 Network '4092672': scanning network finished
2016.10.19 04:45:37.260 Network '4092672': scanning network for access points
2016.10.19 04:45:36.630 Network '4092672': trading has been enabled - hedging mode
2016.10.19 04:45:36.630 Network '4092672': terminal synchronized with MetaQuotes Software Corp.
2016.10.19 04:45:36.000 Network '4092672': previous successful authorization performed from 31.173.80.3 on 2016.10.18 17:51:14
2016.10.19 04:45:36.000 Network '4092672': authorized on MetaQuotes-Demo through Access Point SG Singapore (ping: 583.86 ms)
2016.10.19 04:42:57.680 Network '4092672': connection to MetaQuotes-Demo lost

而最有可能的是,当出现中断时,prev_calculated返回0。

好吧,这是一个很长的休息时间,但什么导致了其他prev_calculated的空值?

从这几句话来看。

2016.10.18 23:51:34.895 Network '4092672': scanning network finished
2016.10.18 23:51:20.865 Network '4092672': scanning network for access points

除了上述这些记录外,没有其他记录,只有像这样的贸易记录。

2016.10.19 00:00:36.066 Trades  '4092672': cancel order #103987819 buy stop 0.10 USDJPY at 103.977 sl: 103.377 tp: 104.077

而且你可以看到在我之前的帖子中,prev_calculated有多少次归零。

 
Alexey Kozitsyn:

有可能,错误可能在这里。

if(rates_total > prev_calculated)
   {
    minEquity = 0;
    maxEquity = 0;
   }
   minEquity = NormalizeDouble(fmin((minEquity == 0 ? bal : minEquity), equity), 2);
    maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);

一个新的条形图 到来时,你把数值重置为0--很好。但这样一来,你就会检查minEquity和0是否相等,这并不推荐。

为了证明我的话,这里有你的图像。你可以看到,如你所说,"垃圾 "值大约为零。

当然,你最好在图片中添加一个带有 "垃圾 "值的数据窗口。

你能详细说明为什么不推荐这种方法吗?

这段(minEquity ==0? bal : minEquity)的代码,如果minEquity ==0,将返回之前得到的bal的值; minEquity的值 不会改变,直到函数fmin()终止。

虽然我同意这样的写作有点冒险......但这不是问题所在。

 
Alexey Viktorov:

你能更详细地解释为什么不推荐这种方法吗?

这(minEquity ==0? bal : minEquity)部分的代码,如果minEquity ==0,将返回先前获得的bal值; minEquity的值 不会改变,直到函数fmin()终止。

虽然我同意这种编写代码的方式有点冒险...但这不是问题所在。

我是专门针对这一点说的:minEquity ==0.你是在与相等数量的双胞胎 进行比较。这可能解释了数值下降到0的原因。
 
Alexey Kozitsyn:
我特别谈到了这一点:minEquity ==0.你在比较的是dabble数字的相等这可能解释了数值下降到0的原因。

我明白了,正确答案是minEquity ==0.0 ...我无法习惯它。

而最后一句话我完全不明白。什么值为0?

 
Alexey Viktorov:

我明白了,正确答案是minEquity ==0.0 ...我无法习惯它。

而最后一句话我完全不明白。什么值为0?

但我不知道隐式类型转换是否会导致错误。 我是指真实类型的 比较。即在这里,为了安全起见,我会这样写。

CompareDoubles( minEquity, 0.0 );

bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false);
  }
 
Alexey Kozitsyn:

然而,我不知道隐式类型转换是否会导致错误,我原则上说的是比较真实类型。也就是说,在这里,为了可靠性,我会这样写。

CompareDoubles( minEquity, 0.0 );

bool CompareDoubles(double number1,double number2)
  {
   if(NormalizeDouble(number1-number2,8)==0) return(true);
   else return(false);
  }


是的,我的版本是用两位小数来计算钱。这不是一个引子,不需要如此细致地对待它。
 
Alexey Viktorov:
是的,我的版本是用两位小数来计算钱。这不是一个引文,所以你不能这么精确地描述它。

这不是一个细致的问题,而是一个准确的问题。在你的案例中,它可能导致零值被写入缓冲区。如果你不想要这样的精度,就这样做。

if(rates_total > prev_calculated)
   {
    minEquity = -1.0;
    maxEquity = 0.0;
   }
   minEquity = NormalizeDouble(fmin((minEquity < 0 ? bal : minEquity), equity), 2);
    maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);

那么就不会有错误。

 
Alexey Kozitsyn:

这不是一个细致的问题,而是一个准确的问题。在你的案例中,它可能导致零值被写入缓冲区。如果你不想要那么精确,就这样做。

if(rates_total > prev_calculated)
   {
    minEquity = -1.0;
    maxEquity = 0.0;
   }
   minEquity = NormalizeDouble(fmin((minEquity < 0 ? bal : minEquity), equity), 2);
    maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);

在这种情况下,不会有错误。

为什么我这么傻?我怎么会没有猜到,用非零值初始化minEquity会更好?然后一切都会变得更容易...

if(rates_total > prev_calculated)
   {
    minEquity = DBL_MAX;
    maxEquity = 0.0;
   }
   minEquity = NormalizeDouble(fmin(minEquity, equity), 2);
    maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);

你也可以使用maxEquity =DBL_MIN

 
Alexey Viktorov:

为什么我这么傻?我怎么会没有猜到,用非零值初始化minEquity会更好?那么一切都会变得更容易...

if(rates_total > prev_calculated)
   {
    minEquity = DBL_MAX;
    maxEquity = 0.0;
   }
   minEquity = NormalizeDouble(fmin(minEquity, equity), 2);
    maxEquity = NormalizeDouble(fmax(maxEquity, equity), 2);


嗯...或者说......。
 
Alexey Kozitsyn:
嗯...或者是这样...
这并不是真正的问题。虽然它以某种方式被规避了,但当指标启动时,指标缓冲区 里的垃圾是不对的。