关于MQL4编程的在线书籍的测试版 - 由Sergey Kovalev (SK.)撰写。 - 页 10 1...3456789101112 新评论 A_K_M 2008.01.29 07:50 #91 对不起,找到了! 是的,手册确实很酷,但回到我之前的要求--它需要在手边,能够及时查询。 理想情况下--它应该取代MT新版本中的标准帮助。 Aleksandr Pak 2008.01.29 08:57 #92 到SK double my_search_and_etc() { double summ[]; //函数中的数组。 //......... i=ArrayMinimum(summ,iter,0); // 追踪器: <ArrayMinimum函数 的起始位置0>。 //第二个错误变量 静态双数summ[]; // //......... i=ArrayMinimum(summ,iter,0); // 追踪器: <ArrayMinimum函数的起始位置0>。 /i.e. 在第二个勾中动态寻址数组的初始元素的错误 //....................... //........................ //正确的时间 double summ[1000]; //指定明确的大小意味着静态类型。 //......... i=ArrayMinimum(summ,iter,0); // O.k. //右二 static double summ[1000]; //reinsurance to explicit size //......... i=ArrayMinimum(summ,iter,0); // O.k. } Sceptic Philozoff 2008.01.29 09:00 #93 不,你不需要取代标准帮助。保留它。正常的语言软件开发者将语言描述与它的各种教程分开。 Сергей Ковалев 2008.01.29 09:43 #94 Korey: 到SK 我不太清楚你的问题是什么。你提供的这组字符串是完整的代码(那为什么要重复初始化?)还是潦草的字符串(那为什么有大括号?)提交完成的代码并制定问题。使用MQL按钮(在编辑窗口的顶行)来发布代码。 Сергей Ковалев 2008.01.29 10:03 #95 Renat: 祝贺谢尔盖-科瓦列夫! MQL4教程 的发布定于2月1日,它已经被整合到MQL4.community网站中。翻译成英文的工作正在顺利进行中。 谢谢你的祝贺,雷纳特。 我想借此机会再次告诉大家,能够在MetaQuotes软件公司 网站上发布MQL4教程,我感到非常荣幸。我真诚地感谢你们的信任、支持和鼓励。我还感谢MetaQuotes软件公司的Stanislav Starikov和Rashid Umarov在编写本书时提供的宝贵意见和帮助。 Aleksandr Pak 2008.01.29 12:19 #96 到SK 这篇文章展示了4种数组初始化的变体,其中有一个相同的ArrayMinimum()的调用。 事实表明,在子程序中初始化一个数组而不指定数组的大小[],会导致 "RunTime "错误 - 在前两个变体中,错误被引用,翻译为:"数组开头的ADDRESS不正确"。 -第二种变体是工作的,它表明指定[1000]的维度会自动使数组静态化。 结论。 1)MQL4数组并不总是静态的。 2)静态a[]的定义,即没有明确的维度,将无法工作,但不会有错误信息。该错误在运行时显示在专家顾问窗口的第二个和随后的刻度上。 3) 如果在子/函数中定义了数组,就会出现描述的静态/动态错误,而且只有在 "专家顾问 "窗口中才会发现。 而且只有在第二次打勾时才会出现。例如,在周末不使用策略测试器调试指标时,没有发现该错误。 4)教科书上的那句 "MQL4数组总是静态的 "可能与早期的构建有关。 Prival 2008.01.29 12:27 #97 我希望除了文字教程之外,还能有一套视频教程。有一套视频教程。尤其缺乏的是第一课--如何下载、安装软件并进行第一次买入或卖出交易。 Сергей Ковалев 2008.01.29 12:42 #98 Korey: 到SK 这篇文章展示了4个版本的数组初始化,都是对ArrayMinimum()的一个相同调用。 事实表明,在子程序中初始化一个数组而不指定数组的大小[],会导致 "RunTime "错误 - 在前两个变体中,错误被引用,翻译为:"数组开头的ADDRESS不正确"。 -第二种变体是工作的,它表明指定[1000]的维度会自动使数组静态化。 结论。 1)MQL4数组并不总是静态的。 2)静态a[]的定义,即没有明确的维度,将无法工作,但不会有错误信息。该错误在运行时显示在专家顾问窗口的第二个和随后的刻度上。 3) 如果在子/函数中定义了数组,就会出现静态/动态的描述性错误,而且只有在 "专家顾问 "窗口中才会发现。 而且只有在第二次打勾时才会出现。例如,在周末不使用策略测试器调试指标时,没有发现该错误。 4)教科书上的那句 "MQL4数组总是静态的 "可能与早期的构建有关。 你的推理不是很清楚。你声明了一个无尺寸的数组(事实上,程序只有数组的名称,其中的元素没有定义,也没有分配内存),并尝试使用ArrayMinimum()函数,在不存在的元素中找到最小值。当然,无论数组是否被声明为静态,错误都会发生,你应该把执行错误当作数组的属性是否为静态的指示。 根据定义,MQL4中的数组是静态的。这意味着(当然,除非数组中至少有一个元素),数组元素从函数(声明数组的)最后一次被终止时开始存储,直到下一次被调用,不管数组标识符前面是否有static关键字。 Aleksandr Pak 2008.01.29 13:00 #99 to SK 我关心的是,我们已经使用这些内存分配技巧很长时间了。 我写的不是数组的内容,而是它的寻址问题,没有编译错误,没有链接错误,但有一个ADDRESS PRINTY ERROR。 也就是说,编译器允许我在子程序中定义一个数组[],以便以后增长,--这很好(!), ,它是按数组动态分配内存。 然而,这个数组的所有指针都被链接为直接指针(但不是指向指针的指针), ,这导致在随后的动态内存分配中,链接的静态地址和新分配的数组地址之间不匹配。 也就是说,MQL4中的数组(指针)引用现在是静态的,只有当数组真的是静态的时候,它才能正确工作。 编译器不理解子程序内部没有明确大小的数组将来会被移动。 程序员把静态的,认为一切都很正确,但是如果他不指定一个明确的大小--没有静态数组,数组实际上会变成动态的(没有编译/加载错误)。 这个问题不大,通常大家都把数组放在全局层面。 但在教程中最好不要写所谓的所有数组都已经是静态的,而是应该用明确的大小来写局部数组的静态。 Сергей Ковалев 2008.01.29 13:33 #100 Korey: 到SK 程序员把静态的,并认为一切都很正确,但如果他不指定一个明确的大小--没有静态数组,数组实际上会变成动态的(没有编译/加载错误)。 一个知道MQL4中所有数组都是静态的程序员不会放静态,只是因为没有必要。 但在教程中最好不要写成所谓的所有数组都已经是静态的,而是写成局部数组应该被指定为具有明确大小的静态。 也许你混淆了这些概念。在这种情况下,"静态 "是指在声明函数的执行间隔内存储数组元素的值的属性。在这段时间内,数组总是保留它们的值,不管它们的名字前面是否有static(不过对于局部变量来说不是这样,它们需要明确声明为static)。 然而,可以用ArrayResize()来调整数组第一维的大小。 1...3456789101112 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
是的,手册确实很酷,但回到我之前的要求--它需要在手边,能够及时查询。
理想情况下--它应该取代MT新版本中的标准帮助。
到SK
double my_search_and_etc()
{ double summ[]; //函数中的数组。
//.........
i=ArrayMinimum(summ,iter,0); // 追踪器: <ArrayMinimum函数 的起始位置0>。
//第二个错误变量
静态双数summ[]; //
//.........
i=ArrayMinimum(summ,iter,0); // 追踪器: <ArrayMinimum函数的起始位置0>。
/i.e. 在第二个勾中动态寻址数组的初始元素的错误
//.......................
//........................
//正确的时间
double summ[1000]; //指定明确的大小意味着静态类型。
//.........
i=ArrayMinimum(summ,iter,0); // O.k.
//右二
static double summ[1000]; //reinsurance to explicit size
//.........
i=ArrayMinimum(summ,iter,0); // O.k.
}
到SK
我不太清楚你的问题是什么。你提供的这组字符串是完整的代码(那为什么要重复初始化?)还是潦草的字符串(那为什么有大括号?)提交完成的代码并制定问题。使用MQL按钮(在编辑窗口的顶行)来发布代码。
祝贺谢尔盖-科瓦列夫!
MQL4教程 的发布定于2月1日,它已经被整合到MQL4.community网站中。翻译成英文的工作正在顺利进行中。
谢谢你的祝贺,雷纳特。
我想借此机会再次告诉大家,能够在MetaQuotes软件公司 网站上发布MQL4教程,我感到非常荣幸。我真诚地感谢你们的信任、支持和鼓励。我还感谢MetaQuotes软件公司的Stanislav Starikov和Rashid Umarov在编写本书时提供的宝贵意见和帮助。
这篇文章展示了4种数组初始化的变体,其中有一个相同的ArrayMinimum()的调用。
事实表明,在子程序中初始化一个数组而不指定数组的大小[],会导致 "RunTime "错误
- 在前两个变体中,错误被引用,翻译为:"数组开头的ADDRESS不正确"。
-第二种变体是工作的,它表明指定[1000]的维度会自动使数组静态化。
结论。
1)MQL4数组并不总是静态的。
2)静态a[]的定义,即没有明确的维度,将无法工作,但不会有错误信息。该错误在运行时显示在专家顾问窗口的第二个和随后的刻度上。
3) 如果在子/函数中定义了数组,就会出现描述的静态/动态错误,而且只有在 "专家顾问 "窗口中才会发现。
而且只有在第二次打勾时才会出现。例如,在周末不使用策略测试器调试指标时,没有发现该错误。
4)教科书上的那句 "MQL4数组总是静态的 "可能与早期的构建有关。
我希望除了文字教程之外,还能有一套视频教程。有一套视频教程。尤其缺乏的是第一课--如何下载、安装软件并进行第一次买入或卖出交易。
到SK
这篇文章展示了4个版本的数组初始化,都是对ArrayMinimum()的一个相同调用。
事实表明,在子程序中初始化一个数组而不指定数组的大小[],会导致 "RunTime "错误
- 在前两个变体中,错误被引用,翻译为:"数组开头的ADDRESS不正确"。
-第二种变体是工作的,它表明指定[1000]的维度会自动使数组静态化。
结论。
1)MQL4数组并不总是静态的。
2)静态a[]的定义,即没有明确的维度,将无法工作,但不会有错误信息。该错误在运行时显示在专家顾问窗口的第二个和随后的刻度上。
3) 如果在子/函数中定义了数组,就会出现静态/动态的描述性错误,而且只有在 "专家顾问 "窗口中才会发现。
而且只有在第二次打勾时才会出现。例如,在周末不使用策略测试器调试指标时,没有发现该错误。
4)教科书上的那句 "MQL4数组总是静态的 "可能与早期的构建有关。
你的推理不是很清楚。你声明了一个无尺寸的数组(事实上,程序只有数组的名称,其中的元素没有定义,也没有分配内存),并尝试使用ArrayMinimum()函数,在不存在的元素中找到最小值。当然,无论数组是否被声明为静态,错误都会发生,你应该把执行错误当作数组的属性是否为静态的指示。
根据定义,MQL4中的数组是静态的。这意味着(当然,除非数组中至少有一个元素),数组元素从函数(声明数组的)最后一次被终止时开始存储,直到下一次被调用,不管数组标识符前面是否有static关键字。
我关心的是,我们已经使用这些内存分配技巧很长时间了。
我写的不是数组的内容,而是它的寻址问题,没有编译错误,没有链接错误,但有一个ADDRESS PRINTY ERROR。
也就是说,编译器允许我在子程序中定义一个数组[],以便以后增长,--这很好(!),
,它是按数组动态分配内存。
然而,这个数组的所有指针都被链接为直接指针(但不是指向指针的指针),
,这导致在随后的动态内存分配中,链接的静态地址和新分配的数组地址之间不匹配。
也就是说,MQL4中的数组(指针)引用现在是静态的,只有当数组真的是静态的时候,它才能正确工作。
编译器不理解子程序内部没有明确大小的数组将来会被移动。
程序员把静态的,认为一切都很正确,但是如果他不指定一个明确的大小--没有静态数组,数组实际上会变成动态的(没有编译/加载错误)。
这个问题不大,通常大家都把数组放在全局层面。
但在教程中最好不要写所谓的所有数组都已经是静态的,而是应该用明确的大小来写局部数组的静态。
到SK
程序员把静态的,并认为一切都很正确,但如果他不指定一个明确的大小--没有静态数组,数组实际上会变成动态的(没有编译/加载错误)。
一个知道MQL4中所有数组都是静态的程序员不会放静态,只是因为没有必要。
也许你混淆了这些概念。在这种情况下,"静态 "是指在声明函数的执行间隔内存储数组元素的值的属性。在这段时间内,数组总是保留它们的值,不管它们的名字前面是否有static(不过对于局部变量来说不是这样,它们需要明确声明为static)。
然而,可以用ArrayResize()来调整数组第一维的大小。