优化过程中的单一阵列计算 - 页 6 12345678 新评论 forexman77 2016.09.16 22:33 #51 Alexey Viktorov:下面是一个写和读数组的例子在调试模式下运行两次,看看写和读数组需要多长时间。第一次运行将把数组写入文件,第二次将读取数组并开始打印数组中的日期。然后找出高亮部分,如果IS_DEBUG_MODE 应该被删除,如果IsOptimization()应该被插入到条件中。 谢谢! forexman77 2016.09.16 22:37 #52 Dmitry Fedoseev:有一个函数,类似FileWriteInteger()。通过位置识别,变量必须在文件的开头,读完后指针会移到它的末端,即移到数组的开头,读完数组后指针会在下一个变量之前......一篇关于使用文件的文章将很快发表。我想写信给你,没有关于文件操作的文章。你让他们的信息量很大,也很清晰。 当他们出现时,我一定会阅读他们。 forexman77 2016.09.17 12:35 #53 尝试在全局层面声明一个数组(mql4代码)。datetime T[];填写ArrayResize(T,40); datetime T[40]= { 1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500, 1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360, 1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100, 1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920 };当开始时未设置,它打印出1971年的日期,即数组是空的。for (int x=0;x<=39;x++) { Print("T[x]=",T[x],"x=",x); }如果我在开始时填充数组,就会出现这些值。可能的原因是,数组被重新初始化的时间,但没有它,代码就无法编译?阵列消失了。我做错了什么? Maxim Kuznetsov 2016.09.17 13:04 #54 forexman77:尝试在全局层面声明一个数组(mql4代码)。填写当开始时未设置,它打印出1971年的日期,即数组是空的。如果我在开始时填充数组,就会出现这些值。可能是由于数组被重新初始化的原因,但没有它,代码就无法编译?阵列消失了。我做错了什么?看看编译器怎么说。 ArrayResize(T,40); datetime T[40]=通过这样一个简单的动作,你已经定义了一个局部数组T,它将在OnInit的退出时消失。 forexman77 2016.09.17 13:13 #55 Maxim Kuznetsov:检查编译器产生的警告。 通过这样一个简单的动作,你定义了一个本地数组T,当你退出OnInit时,这个数组就会丢失。它说已经有一个全局声明)第40行的 "T "声明隐藏了全局声明但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。'{' - 预期的表达方式 '=' - 非法操作使用 Maxim Kuznetsov 2016.09.17 13:18 #56 forexman77:它说已经有一个全局声明)第40行的 "T "声明隐藏了全局声明但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。'{' - 预期的表达方式 '=' - 非法操作使用 数组声明和常量初始化可以(也应该)在全局层面完成。 datetime T[40]= { 1262731020,1262735700,1262821920,1262903400,1262989740,1263247200,1263339060,1263420000,1263507480,1263595500, 1265324700,1265407200,1265752980,1265926500,1265930820,1267657200,1267740300,1267826460,1268175840,1268346360, 1270504920,1270684140,1270768500,1272924180,1273011720,1273097100,1273272240,1273528800,1273617180,1275344100, 1275516000,1275602400,1275689160,1276034400,1276124580,1276208700,1276211640,1278027960,1278369780,1278373920 }; void OnInit() { .... } Maxim Kuznetsov 2016.09.17 13:21 #57 forexman77:它说已经有一个全局声明)第40行的 "T "声明隐藏了全局声明但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。'{' - 预期的表达方式 '=' - 非法操作使用 使用'=',你可以只在声明数组时初始化它们。这似乎是C语言的残余,但这里就是这样做的 :-) forexman77 2016.09.17 13:28 #58 Maxim Kuznetsov:数组声明和常量初始化可以(也应该)在全局层面完成。 是的,我试过了,它是有效的。而且没有全局水平你是做不到的,我只是为了减少计算成本,在init中填充 一次数组,然后使用数组的值?虽然从逻辑上讲,全局层面的变量始终是恒定的,所以在程序开始时就进行一次计算? Maxim Kuznetsov 2016.09.17 13:38 #59 forexman77:是的,我试过了,它是有效的。而且没有全局水平你是做不到的,我只是为了减少计算成本,在init中填充 一次数组,然后使用数组的值?虽然从逻辑上讲,全局层面的变量总是恒定的,所以在程序开始时就进行一次计算? 是的,当准备一个ex4 ex5二进制文件供终端执行时。你可以认为,它只是链接到所描述的数据阵列(并在编译时保存在ex4/5里面),这非常快... Alexey Viktorov 2016.09.17 13:42 #60 forexman77:它说已经有一个全局声明)第40行的 "T "声明隐藏了全局声明但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。'{' - 预期的表达方式 '=' - 非法操作使用 阵列如何填充其实并不重要。你只需要设置一个条件,如果数组的大小为零,它就应该被评估、填充并写入一个文件中。而在OnInit()中,尝试用我的例子读入已声明的数组。相应地,如果有一个文件数组,它被读取,并且数组被填充,数组将不会被重新计算和填充。 12345678 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
下面是一个写和读数组的例子
在调试模式下运行两次,看看写和读数组需要多长时间。第一次运行将把数组写入文件,第二次将读取数组并开始打印数组中的日期。然后找出高亮部分,如果IS_DEBUG_MODE 应该被删除,如果IsOptimization()应该被插入到条件中。
有一个函数,类似FileWriteInteger()。通过位置识别,变量必须在文件的开头,读完后指针会移到它的末端,即移到数组的开头,读完数组后指针会在下一个变量之前......
一篇关于使用文件的文章将很快发表。
我想写信给你,没有关于文件操作的文章。你让他们的信息量很大,也很清晰。 当他们出现时,我一定会阅读他们。
尝试在全局层面声明一个数组(mql4代码)。
datetime T[];
填写
当开始时未设置,它打印出1971年的日期,即数组是空的。
如果我在开始时填充数组,就会出现这些值。可能的原因是,数组被重新初始化的时间,但没有它,代码就无法编译?
阵列消失了。我做错了什么?
尝试在全局层面声明一个数组(mql4代码)。
填写
当开始时未设置,它打印出1971年的日期,即数组是空的。
如果我在开始时填充数组,就会出现这些值。可能是由于数组被重新初始化的原因,但没有它,代码就无法编译?
阵列消失了。我做错了什么?
看看编译器怎么说。
通过这样一个简单的动作,你已经定义了一个局部数组T,它将在OnInit的退出时消失。
检查编译器产生的警告。
通过这样一个简单的动作,你定义了一个本地数组T,当你退出OnInit时,这个数组就会丢失。
它说已经有一个全局声明)
第40行的 "T "声明隐藏了全局声明
但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?
如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。
'{' - 预期的表达方式
'=' - 非法操作使用
它说已经有一个全局声明)
第40行的 "T "声明隐藏了全局声明
但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?
如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。
'{' - 预期的表达方式
'=' - 非法操作使用
数组声明和常量初始化可以(也应该)在全局层面完成。
它说已经有一个全局声明)
第40行的 "T "声明隐藏了全局声明
但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?
如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。
'{' - 预期的表达方式
'=' - 非法操作使用
数组声明和常量初始化可以(也应该)在全局层面完成。
是的,我试过了,它是有效的。而且没有全局水平你是做不到的,我只是为了减少计算成本,在init中填充 一次数组,然后使用数组的值?
虽然从逻辑上讲,全局层面的变量始终是恒定的,所以在程序开始时就进行一次计算?
是的,我试过了,它是有效的。而且没有全局水平你是做不到的,我只是为了减少计算成本,在init中填充 一次数组,然后使用数组的值?
虽然从逻辑上讲,全局层面的变量总是恒定的,所以在程序开始时就进行一次计算?
它说已经有一个全局声明)
第40行的 "T "声明隐藏了全局声明
但是,如何做好它。我 以前从来没有用大括号声明过一个数组。我把它初始化为零,并设置了它的大小,然后用循环填充它。是否有其他的方法?
如果我清除了inite中的日期时间,代码就不能编译,而是写出两个错误。
'{' - 预期的表达方式
'=' - 非法操作使用