错误、漏洞、问题 - 页 1126

 

我正在为一个MT4的EA编写一个ToR,优先考虑加速数据处理。

请告知计算或抽样的顺序(正确的名称是什么--代表?)对加速是否重要。

我以图片的形式附上两种变体,显示方框图。

如果可以的话,请写出如果选择性地执行区块将是-个纯粹的原始布局,那么代码应该是怎样的,这是否会带来明显的速度提升!?

附加的文件:
Logic_V_01.png  26 kb
Logic_V_02.png  30 kb
 
void OnStart()
{
        uchar max=0;
        for(int t=0;t<LONG_MAX;t++)   {max++;}    //так получаем предупреждение expression is always true, цикл работает
        for(int t=0;t<LONG_MAX+1;t++) {max++;}    //так предупреждение есть, но цикл не работает
        for(int t=0;t<ULONG_MAX;t++)  {max++;}    //так нет предупреждения и цикл не пашет
        Print("Done!");
}
 

如何解释这种关闭 测试员职位 的做法?是由于价差扩大造成的吗?

来自MetaTrader交易平台的截图

EurusD, M20, 2014.04.12

Alfa-Forex, MetaTrader 5, 真实

temp_file_screenshot_63279.png

EURUSD, M20, 2014.04.12, Alfa-Forex, MetaTrader 5, Real


 
Crucian:

如何解释这种关闭 测试员职位 的做法?是价差的扩大吗?

[img]https://charts.mql5.com/4/434/eurusd-m20-alfa-foreks-temp-file-screenshot-63279-png.png[/img]

如果价差扩大了(从截图来看--扩大了720点!在五位数上),那么一切都正确了。

卖出头寸已在问价处关闭。这是在放置了止损的情况下。

顺便说一下,你的经纪人Alfa-Forex在周末和开始时 都有巨大的点差

可能它们被记录在报价历史中,测试者在它们上面模拟交易。

周末的止损是很危险的--反正他们不会从缺口处救出来,摊开加宽很容易抓住你。

 
Fleder:
for(int t=0;t<LONG_MAX+1;t++) {max++;}    //так предупреждение есть, но цикл не работает

这里没有错误,因为LONG_MAX+1< 0

for(int t=0;t<LONG_MAX;t++)   {max++;}    //так получаем предупреждение expression is always true, цикл работает
这里的警告是有效的(t<LONG_MAX 总是 true if t int ) 无限循环。
 
void OnStart()
{
  uchar max=0;
  for(int t=0;t<ULONG_MAX-1 e0;t++)  {max++;}      //так цикл работает, предупреждения нет так как ULONG_MAX-1e0 имеет тип double
  for(int t=0;t<ULONG_MAX-1;t++)    {max++;}      //а так нет и предупреждения тоже нет
  Print("Done!");
}
 
Fleder:
for(int t=0;t<ULONG_MAX-1;t++)    {max++;}      //а так нет и предупреждения тоже нет
这里没有错误,因为ULONG_MAX-1< 0,也就是说,比较操作被转换为int或long--更确切地说,是位数比较
 
A100:
因为ULONG_MAX-1< 0, 所以没有错误,因为比较操作被简化为int

那么如何解释呢。

void OnStart()
{
  long t=0;
  bool comp=(ULONG_MAX-1>t);
  Print("comp = ",comp);   //comp = true
  Print(ULONG_MAX-1);      //18446744073709551614
  Print(ULONG_MAX);        //18446744073709551615
}
 
A100:
这里没有错误,因为ULONG_MAX-1< 0,也就是说,比较操作是投向int或long的

你是指循环中被测试表达式中的比较吗?

因为在简单的比较中似乎不是这样的。

 
A100:

只要把它们调换一下就可以了 :)

这个重排的作用是什么?t低于ULONG_MAX-1,现在仍然如此。

void OnStart()
{
  long t=0;
  Print( (t < ULONG_MAX-1) == (ULONG_MAX-1 < t)); //false
}