任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 264

 
但似乎就是这样的。如果数组的大小 没有预先设定,那么肯定需要ArrayResize。而在ArrayResize(array,0)的最后;是的,这很正确,从未想过...........Uchtu.......。谢谢))))
 
你不能在每个tick!!!!!!!,做ArrayResize。否则,你会在计算中陷入困境...................。而且没有多核处理器可以拯救你........
 
发表于11.11.2013 07:54的文章 "ShowCandleSize "不能正确显示,也不能被编辑,原因不明。
11月15日就这个问题联系了支持部门,网址是noreply@metaquotes.net,但没有收到答复。
你能告诉我这种问题的正确地址吗?
注意到。
--
弗拉迪斯拉夫-舒尔金。
在2013年11月20日。
 
artmedia70:
所有关闭的交易结果都可以在账户历史中查看。通过软件。有必要一直用它们塞满一个阵列吗?可能有很多人。最好是限制必要的历史深度,如果你真的离不开它,就把它填进阵列。

谢谢你的澄清!

"所有关闭的交易结果都可以在账户历史中查看。通过软件。" - 如何?
 
VladislavVG:


在程序终止时,动态分配的内存必须被释放,以避免内存泄漏。我不知道MKL的开发者是否遵循这一点



它们是这样的,这就是为什么数组是静态的,把它们收集在一个地方,以后再释放。如果只是为了自我保证的话,在程序的最后ArrayResize(a,0)并没有什么意义。
 
Leo59:
谢谢你的澄清!"所有关闭的交易结果都可以在账户历史中查看。程序化。" - 如何?



OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)


OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)

 
alsu:

OrderSelect(ticket,SELECT_BY_TICKET,MODE_HISTORY)


OrderSelect(i,SELECT_BY_POS,MODE_HISTORY)




谢谢你!


科瓦列夫的教程有什么好处?我认为这很好,因为你学会了如何用简单的程序代码例子来解决简单的问题。

实际上,我是从Vladislav Goshkov的指标代码开始学习编程的。我用De-Mark的支持和阻力线画了那个指标。有以下几行:
ObjectMove(buff_str, 1, UpBT[0], UpP[0]);
ObjectMove(buff_str, 0, UpBT[1], UpP[1]);
我把它放在了。在测试器中看了一下,看到它是如何工作的。它通过分形画出射线,但它看的是过去而不是未来......))))。我开始问问题,结果成功了!尊重Vladislav!!!!
我后来看到了科瓦列夫的教科书。我希望有更多的问题能以这种形式回答。

还有一件事。
"你想写你自己的专家,但你不知道从哪里开始?随着Rosh的文章出现在Alpari网站上,创建专家的第一步可以变得简单和无痛。
Rosh以简单易懂的方式描述了每个EA作家所经历的步骤。编程的许多细微差别,其知识来源于长期的经验,现在每个人都可以获得。
一步一步地,从最基本的开始,你将学习错综复杂的外汇编程。"

也许你知道在哪个链接可以读到这篇文章的概述?
 
VladislavVG:


因为准确地说,它不是一个数组。如果你想了解更多的细节--请看对C的描述。我指的是它,因为开发人员从一开始就说,对一切不清楚或不完整的内容--请看标准C。

当你声明变量double buffer[] 时,你为一个变量分配了内存,这个变量在C语言中被称为 "指针",具有整数类型,并存储内存单元的地址,阵列将从这里开始。如果你在MCL中检查变量的维度,你会得到0的值。这意味着数组本身没有被分配内存,当你试图分配一个值时,没有地方可以写:在MCL中没有地址运算,也不能处理指针。在C语言中,你可以写,但用 "未分配 "的内存,通常会导致系统崩溃。当你应用AreiResize(array,N),(N>0)时,这将为数组分配内存(至少一个元素)并为写值创造空间。然后,当检查时,数组的尺寸将与0不同。

就C语言而言,静态数组的概念有几种含义。

1.静态数组(以及静态变量/类型)是这样的变量/数组,其尺寸在编译阶段(MKL4的预编译)就已经知道。例如,当描述double buff[10000];时,编译器被告知变量的大小,并可以立即分配内存。与这个概念相比,还有一个 "动态数组 "的概念,即这样的数组,其大小在编译时是未知的,只有在运行时才会知道;这些都是可变大小的数组。当访问这种数组时,必须事先分配内存。内存是在静态程序内存之外分配的。

在C/C++中,如果一个数组被描述在一个块中,那么它的可见性就会受到该块的限制--无论是静态数组还是动态数组。程序中的错误如 "内存泄漏 "与本地定义的动态数组有关,即当一个内存指针因为离开可见区而被破坏,但分配给它的内存仍然被占用。

2 "静态 "数组的概念是用静态修饰符描述的变量--这种变量在离开块的范围时不会被销毁--它们位于一个单独的内存区域--因此它们的值被保留下来。内存泄漏的风险降低了。在p.1的意义上声明为动态的数组(即在编译阶段不知道数组的大小),在p.2的意义上也可以是静态的,即用修饰词 "static "声明。

当终止程序时,动态分配的内存必须被释放,以避免内存泄漏。我不知道MKL的开发者是否遵循这一点,但在我的程序中,我总是释放内存--来自C语言的习惯--ArreyResize(array,0)。

在MKL中,所有的数组在第2点的意义上是静态的。

现在关于你的问题。"为什么静态数组double buffer[]; 不能被赋值?"。因为没有为它分配内存(事实上,它是一个带有静态修改器的动态数组)。在赋值之前,应该分配内存,也就是说,应该对这个数组应用大小大于0的ArrayResize。对于数组,你需要控制内存超限(在数组之外)。

SZ 我希望我已经说得很清楚了。我试图让它尽可能地简单。

"你不能失去你的工匠精神"!
谢谢你!!!!!!!!
 
VladislavVG:

因为准确地说,它不是一个数组。如果你想了解更多的细节,请看C语言的描述。 我之所以提到它,是因为开发人员从一开始就说,有什么不清楚或不完整的地方,请看C标准。
........

非常感谢你。醒来时眼睛卡住了,但很高兴读完了,再次感谢。
 
Leo59:


你是否知道可以在哪里读到这篇评论文章的链接?


https://www.mql5.com/ru/articles/mt4


啊,不,它再也打不开了(((。