//+------------------------------------------------------------------+//| массив.mq4 |//| Copyright 2012, |//+------------------------------------------------------------------+#property copyright "Copyright 2012,"#property link "https://forum.mql4.com/ru/46980/page525"#property show_inputsexternstring s=" -----номер бара--------";
externint 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);}
#property show_inputsexternstring s=" -----номер бара--------";
externint 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);}
为了避免加剧混乱,我想纠正我在前一个答案中犯的错误:"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个被复制到第一个数组中,以此类推。另一个问题是,关于最后形成的小节的信息不是写在第一个数组的开头,而是写在最后,这是怎么回事呢?但显然,答案就在函数代码中,没有必要再深究了......。
亲爱的专家,教科书中不是有一个错误 吗?
以下是我的推理。
在代码的开头,调用了int ArrayCopyRates 函数,该函数 将当前图表中的条形数据复制到RateInfo[][6]类型的二维数组中,并根据该函数的例子,返回复制的条形数量,或者在失败的情况下返回-1。
当前 条形图是索引为0-0 的条形图,因此,回到原来的代码,我们将数组1中索引为0-0的元素(当前条形图)复制到 数组2的索引为0-0,我们得到了最后10个柱子(其中最后一个柱子是当前的柱子,即索引为[0]的柱子),这与我们在教程中写的相反...并分别将数组1中索引为Bars*6-60,60的元素复制到数组2中,元素的起始索引为0,我们就可以从历史中得到有关酒吧的信息。
不做大声的陈述,让我们在实践中检查一下。
在不做高调宣称的情况下,让我们来测试一下。
是的,在实践中,确实会发现索引为Bars*6-60,60的元素是当前的酒吧。那么你如何解释这个例子呢?
当前条形图是array1[0][0],复制 后变成array1[Bars*6-60,60][0]...。事实证明,在某处有重新编号的情况...当然,在实践中使用该函数后,其结果是显而易见的......。但在我看来,这个逻辑是混乱的))))。是的,在实践中,确实会发现索引为Bars*6-60,60的元素是当前的酒吧 。
这是你的结论。
在不做高调宣称的情况下,让我们来测试一下。
所以这里是TimeToStr(array2[a][0])数组的 一个具体元素。
输出是正确的,我同意。但Bars*6-60与此有什么关系?在计算过程中,用什么值来代替Bar?如果是条形,你如何获得最后10条?
你可能会注意到,我不是论坛上唯一不理解这一点的人,但很多人都是这样。
事实证明,所有酒吧的数量乘以6并减去60。我们从哪里得到6个?这根本没有任何意义。
所以这里是TimeToStr(array2[a][0])数组的一个特定元素。
输出是正确的,我同意。但是,Bars*6-60有什么关系呢?在计算过程中,用什么值来代替Bar?如果是条形,你如何获得最后10条?
你可能注意到,我不是论坛上唯一没有理解的人,很多人都没有。
int Bars -- 当前图表上的条数。
事实证明,所有酒吧的数量乘以6并减去60。我们从哪里得到6个?这根本没有任何意义。
int Bars -- 当前图表上的条数。
那么,最后的10个是怎么来的呢?
int Bars =10 000。
那么Bars*6-60=10 000*6-60=60 000-60=59 960。
59960 的数值大于Bars 的数值。而这已经意味着它是在阵列之外。而10号 则不知所踪......。
事实证明,所有酒吧的数量乘以6并减去60。我们从哪里得到6个?这根本没有任何意义。
那么,最后的10个是怎么来的呢?
int Bars =10,000。
那么Bars*6 - 60 = 10 000*6 - 60 = 60 000 - 60 = 59 960 -- 错误!!!
59960 的值大于Bars 的值。而这已经意味着它已经超越了阵列的极限。而10号 却不见踪影。
维克多,别担心,你会到达那里的。"经验是艰难的错误之子......"从简单到复杂,而不是反过来。
"进步"(来自拉丁文的 "progressus"--向前运动),是一种发展方向,其特点是由低级向高级过渡,由较不完善向较完善过渡。进展可以与整个系统、其个别元素、发展中的对象的结构联系起来谈论。进步的概念与退步的概念相反。
REGRESS(来自拉丁文regressus--反向运动),发展的类型,其特点是由高向低过渡。进步的反面"。
维克多,别担心,你已经走在了前面。"经验是错误之子......"从简单到复杂,而不是反过来。
"进步(来自拉丁语的progressus--向前运动),发展的方向,其特点是由低级向高级过渡,由不太完美向更完美过渡。进步可以指系统作为一个整体,其个别元素,发展中的对象的结构。进步的概念与退步的概念相反。
REGRESS(来自拉丁文regressus--反向运动),发展的类型,其特点是由高向低过渡。进步的反面"。
为什么不直接向对方解释呢? 帮助他们走上进步的道路? 而所有这些关于退步的说法更像是老师的书呆子......