[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 523

 
Lisi4ka330:

亲爱的专家,教科书中不是有一个错误 吗?

以下是我的推理。

在代码的开头,调用了int ArrayCopyRates 函数,该函数 将当前图表中的条形数据复制到RateInfo[][6]类型的二维数组中,并根据该函数的例子,返回复制的条形数量,或者在失败的情况下返回-1。

当前 条形图是索引为0-0 的条形图,因此,回到原来的代码,我们将数组1中索引为0-0的元素(当前条形图)复制到 数组2的索引为0-0,我们得到了最后10个柱子(其中最后一个柱子是当前的柱子,即索引为[0]的柱子),这与我们在教程中写的相反...并分别将数组1中索引为Bars*6-60,60的元素复制到数组2中,元素的起始索引为0,我们就可以从历史中得到有关酒吧的信息。


不做大声的陈述,让我们在实践中检查一下。

//+------------------------------------------------------------------+
//|                                                       массив.mq4 |
//|                                                  Copyright 2012, |
//+------------------------------------------------------------------+
#property copyright "Copyright 2012,"
#property link      "https://forum.mql4.com/ru/46980/page525"
#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}
 
Roll:


在不做高调宣称的情况下,让我们来测试一下。

是的,在实践中,确实会发现索引为Bars*6-60,60的元素是当前的酒吧。那么你如何解释这个例子呢?

double array1[][6];
ArrayCopyRates(array1,"EURUSD", PERIOD_H1);
Print("Текущий бар ",TimeToStr(array1[0][0]),"цена открытия ", array1[0][1]);
当前条形图是array1[0][0],复制 后变成array1[Bars*6-60,60][0]...。事实证明,在某处有重新编号的情况...当然,在实践中使用该函数后,其结果是显而易见的......。但在我看来,这个逻辑是混乱的))))。
 
Lisi4ka330:

是的,在实践中,确实会发现索引为Bars*6-60,60的元素是当前的酒吧


这是你的结论。
 
Roll:


在不做高调宣称的情况下,让我们来测试一下。

#property show_inputs
extern string s=" -----номер бара--------";
extern int a=9;//номер 10 последних баров 
//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{if(a<10)
{double array1[][6];double array2[10][6];
  ArrayCopyRates(array1);
  ArrayCopy(array2,array1,0,Bars*6-60,60);
// теперь array2 содержит 10 последних баров из истории(имеется в виду,что последний бар-это текущий бар,бар с индексом [0])
Alert("Контрольный бар - ",a," время - ",TimeToStr(array2[a][0]),"  цена открытия - ",array2[a][1]);}return(0);}

所以这里是TimeToStr(array2[a][0])数组的 一个具体元素

输出是正确的,我同意。但Bars*6-60与此有什么关系?在计算过程中,用什么值来代替Bar?如果是条形,你如何获得最后10条?

你可能会注意到,我不是论坛上唯一不理解这一点的人,但很多人都是这样。

事实证明,所有酒吧的数量乘以6并减去60。我们从哪里得到6个?这根本没有任何意义。

 
hoz:

所以这里是TimeToStr(array2[a][0])数组的一个特定元素。

输出是正确的,我同意。但是,Bars*6-60有什么关系呢?在计算过程中,用什么值来代替Bar?如果是条形,你如何获得最后10条?

你可能注意到,我不是论坛上唯一没有理解的人,很多人都没有。



int Bars -- 当前图表上的条数

 
hoz:

事实证明,所有酒吧的数量乘以6并减去60。我们从哪里得到6个?这根本没有任何意义。

MQL4参考 - 阵列操作 -ArrayCopyRates
 
Roll:



int Bars -- 当前图表上的条数。


那么,最后的10个是怎么来的呢?

int Bars =10 000

那么Bars*6-60=10 000*6-60=60 000-60=59 960

59960 的数值大于Bars 的数值。而这已经意味着它是在阵列之外。而10号 则不知所踪......。

 
hoz:

事实证明,所有酒吧的数量乘以6并减去60。我们从哪里得到6个?这根本没有任何意义。

为了避免加剧混乱,我想纠正我在前一个答案中犯的错误:"array1[Bars*6-60,60][0]"这个符号不正确,因为Bars*6是array1中元素的总数。每个条形有6个属性,让我们假设我们有30个条形,乘以6我们得到第一个数组的元素数--180。第二个数组只有60个空闲的 "单元"(即10 x 6的属性),所以我们必须从第一个数组中只选择60个元素进行复制。通过使用表达式[Bars*6-60,60],我们从总数中减去60,即180-60=120,也就是说,第一个数组的120个元素将被复制到第二个数组的0个元素中,121个被复制到第一个数组中,以此类推。另一个问题是,关于最后形成的小节的信息不是写在第一个数组的开头,而是写在最后,这是怎么回事呢?但显然,答案就在函数代码中,没有必要再深究了......。
 
hoz:


那么,最后的10个是怎么来的呢?

int Bars =10,000

那么Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960 -- 错误!!!

59960 的值大于Bars 的值。而这已经意味着它已经超越了阵列的极限。而10号 却不见踪影。


维克多,别担心,你会到达那里的。"经验是艰难的错误之子......"从简单到复杂,而不是反过来。

"进步"(来自拉丁文的 "progressus"--向前运动),是一种发展方向,其特点是由低级向高级过渡,由较不完善向较完善过渡。进展可以与整个系统、其个别元素、发展中的对象的结构联系起来谈论。进步的概念与退步的概念相反。

REGRESS(来自拉丁文regressus--反向运动),发展的类型,其特点是由高向低过渡。进步的反面"。

 
Roll:


维克多,别担心,你已经走在了前面。"经验是错误之子......"从简单到复杂,而不是反过来。

"进步(来自拉丁语的progressus--向前运动),发展的方向,其特点是由低级向高级过渡,由不太完美向更完美过渡。进步可以指系统作为一个整体,其个别元素,发展中的对象的结构。进步的概念与退步的概念相反。

REGRESS(来自拉丁文regressus--反向运动),发展的类型,其特点是由高向低过渡。进步的反面"。


为什么不直接向对方解释呢? 帮助他们走上进步的道路? 而所有这些关于退步的说法更像是老师的书呆子......