错误、漏洞、问题 - 页 1871

 
Slava:
而且应该不可能


1.计划何时引入工会?

2.类型化的定义也会被输入吗?

3.是否计划引入基本类型的指针?
 
Konstantin:


1.联盟计划何时引入?

2.typedef也将与union一起引入吗?

3.是否计划引入基本类型的指针?

1.很快。编译器中的一切都准备好了,我们现在正在测试它。我们将在测试后发布。

2.目前还不知道何时

3.不,没有计划。

 

由于某些原因,CopyTime(或任何类似的)会调整 接收数组的大小,即使接收数组的大小比要复制的大小大

先生们,这正常吗?它一直是这样的吗?还是一个错误?

比如说。

static datetime TimeBuf[]; 

if (ArraySize(TimeBuf) == 0) ArrayResize(TimeBuf, 10);

CopyTime(_Symbol, _Period, 0, 1, TimeBuf);

CopyTime函数 将TimeBuf数组的大小调整为1。

这在原则上是错误的。

这不是问题,但有一个重要的细微差别:数据被复制到数组的开头,因此,整个优化的要点在根部丢失。

 
Marat Sultanov:

由于某些原因,CopyTime(或任何类似的)会调整 接收数组的大小,即使接收数组的大小大于要复制的大小

先生们,这正常吗?它一直是这样的吗?还是一个错误?

比如说。

CopyTime函数 将TimeBuf数组的大小调整为1。

这在原则上是错误的。

如果不是因为一个重要的细微差别,这并不糟糕:数据是在数组的开头被复制的,因此,整个优化的重点就在根部失去了。

你的阵列是动态的!就是说,有一个可变的尺寸。由于你没有在方括号中指定其尺寸。

static这个词意味着这个数组的对象是在Expert Advisor加载时构建的,并在卸载时被销毁。

 
Slava:

你的阵列是动态的!就是说,有一个可变的尺寸。因为你没有在方括号中指定其尺寸。

静态一词意味着这个数组的对象在加载EA时被构建,在卸载时被销毁。

我很抱歉,但你忽略了这一点。

让数组在全局范围内声明

datetime _TimeBuf[]; 

void OnTick()
{}

然后。

1)第一次我们把(CopyTime)复制到数组中有多少条。

datetime _TimeBuf[];
int      _BarsCountReserveSize;

void OnTick()
{
   int BarsCount = Bars(_Symbol, _Period);
   
   if (ArraySize(_TimeBuf) == 0)
   { 
      if (_BarsCountReserveSize <= BarsCount) _BarsCountReserveSize = (int)ceil(BarsCount*1.3);

      ArrayResize(_TimeBuf, BarsCount, _BarsCountReserveSize);

      CopyTime(_Symbol, _Period, 0, BarsCount, _TimeBuf);
   }
}

2)根据最佳设计,当一个新的条形图 出现时,我们不希望复制所有的条形图,对吗?因此,我们决定只复制最后两个修改过的小节。

datetime _TimeBuf[];
int      _BarsCountReserveSize;

void OnTick()
{
   int BarsCount = Bars(_Symbol, _Period);
   
   if (ArraySize(_TimeBuf) == 0)
   { 
      _BarsCountReserveSize = (int)ceil(BarsCount*1.3);

      ArrayResize(_TimeBuf, BarsCount, _BarsCountReserveSize);

      CopyTime(_Symbol, _Period, 0, BarsCount, _TimeBuf);
   }
   else
   {
      int RequiredCount = BarsCount - ArraySize(_TimeBuf) + 1;
      
      ArrayResize(_TimeBuf, RequiredCount, _BarsCountReserveSize);

      CopyTime(_Symbol, _Period, 0, RequiredCount, _TimeBuf);
   }
}

3)最后我们的优化没有成功,因为CopyTime 调整了数组的大小,并把大小=RequiredCount,另外我们失去了保留的大小(CopyTime 不知道它)。

 

如果CopyTime 直接从数组的末端复制到起点,就不会出现这种情况。

在该地点。

_TimeBuf[0] = D'2017.01.01';
_TimeBuf[1] = D'2017.01.02';
_TimeBuf[2] = D'2017.01.03';

它。

const int ArrSize = ArraySize(_TimeBuf);

_TimeBuf[ArrSize-3] = D'2017.01.01';
_TimeBuf[ArrSize-2] = D'2017.01.02';
_TimeBuf[ArrSize-1] = D'2017.01.03';
 

复制函数一直在改变动态数组的 大小。到一个更大或更小的尺寸。但与查询结果所给出的记录数量总是有明显的对应关系。

在你的案例中,原始查询到的是一个具有动态可调整大小的数组。所有其他一次请求一个元素的请求,都是在一个预定义大小的数组中进行的(datetime _TimeBuf1[1]),所以不存在重新分配的问题。自我重新分配接收到的元素到一个大的动态阵列中

 

所以它一直都是这样,很正常。我明白了。谢谢你的答复

我知道放大,但不知道缩减到所要求的数据大小。现在我知道了,谢谢你!

 

MT4构建1065

测试USDJPY TF M15

从结果日志中。

406 2014.11.28 20:30 出售 18 5.50 118.641 0.000 117.015 0.00
521 2014.12.09 17:15 T/P 18 5.50 118.386 0.000 118.386-148.95

损失是如何产生的?
 
-Aleks-:

损失是如何产生的?

调换。