新人对MQL4和MQL5的任何问题,对算法和代码的帮助和讨论 - 页 682 1...675676677678679680681682683684685686687688689...1953 新评论 mbjen 2018.10.31 21:37 #6811 我有一个大型的程序,有相同类型的对象。我是说很多类型。但它们在该计划的不同模块中被重复使用。而在日志中,在测试完成 后,例如,我得到xxx个未删除的对象。等等几种类型。 我怎样才能找出我没有删除对象的地方?是否有一些工具箱用于此目的? Artyom Trishkin 2018.11.01 03:31 #6812 mbjen:我有一个大型的程序,有相同类型的对象。我是说很多类型。但它们在该计划的不同模块中被重复使用。而在日志中,在测试完成后,比如说,我得到了xxx个未删除的对象。等等几种类型。 我怎样才能找出我没有删除对象的地方?有没有这方面的工具箱?1930年建造的错误。 Dmitrii Krasnykh 2018.11.01 07:25 #6813 测试的EA莫名其妙地在价格下方打开了BUYSTOP!现在我甚至不能手动关闭订单。这怎么可能呢? 附加的文件: Screenshot_3.png 280 kb Screenshot_4.png 299 kb Roman Sharanov 2018.11.01 09:19 #6814 我惊讶地发现,MQl5支持OpenCL 难道这段时间没有人给机器人写一个优化器,使数百万次的运行不至于持续几个世纪,而至少是几年?:) Dmitry Belov 2018.11.01 13:59 #6815 Igor Makanu:这意味着你在计算你提交的代码中的每一个刻度,而不是初始化SredRazmax和SredRazmin 变量。 在使用变量之前对其进行初始化是一个很好的习惯--大学里都是这么教的,这样可以减少发现bug的时间;)我在一开始就初始化了它们,在注释中你可以看到另一个数组的元素(检查一下,0没有变化,所以公式应该可以工作,)以下是完整的代码。 //+------------------------------------------------------------------+ //| 01.mq4 | //| Copyright 2018, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2018, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" #property strict #property indicator_chart_window #property indicator_buffers 1 //#property indicator_color1 Red //#property indicator_width1 1 //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ extern int ExtDepth=12; extern int ExtDeviation=5; extern int ExtBackstep=3; extern int nn=30; int shift, ww=0; double zz, SredRazmax, SredRazmin, Sredn; double HZZ[]; int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0, HZZ); // SetIndexStyle(0, DRAW_SECTION); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- for(shift = 0; shift <= Bars-1; shift++) { zz = iCustom(NULL, 0, "ZigZag", ExtDepth, ExtDeviation, ExtBackstep, 0, shift); if(zz > 0.0) { HZZ[ww]=zz; ww++; } } for(ww=0;ww<=nn;ww++) { if(HZZ[ww]>HZZ[ww+1]){SredRazmax += HZZ[ww];} if(HZZ[ww]<HZZ[ww+1]){SredRazmin += HZZ[ww+1];} Comment("Средний размах = ", (SredRazmax-SredRazmin)/nn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); } //---------------------------------------------+ //расчет среднего значения //---------------------------------------------+ // for(ww=0;ww<=nn;ww++){ // if(HZZ[ww]>HZZ[ww+1]){Sredn += HZZ[ww]-HZZ[ww+1];} // if(HZZ[ww]<HZZ[ww+1]){Sredn += HZZ[ww+1]-HZZ[ww];} // Comment("Средний размах = ", Sredn,",",HZZ[0],",",HZZ[1],",",HZZ[2],",",HZZ[3],",",HZZ[4]); //--- return value of prev_calculated for next call return(0); } mbjen 2018.11.01 15:06 #6816 Artyom Trishkin:来自1930版的错误。它是什么?我有MT4。建1090。 Artyom Trishkin 2018.11.01 15:25 #6817 mbjen:它是什么?我有MT4。建1090。 通过new创建的对象必须被附加到一个对象数组中,或者在OnDeinit()中被自己删除。 Igor Makanu 2018.11.01 15:41 #6818 Dmitry Belov:我在一开始就对它们进行了初始化,注释中逐一输出了另一个数组元素(检查一下,0没有变化,所以公式应该是有效的,)以下是完整的代码。 你没有在开头或其他地方初始化它们,你只是声明了它们 我在使用前写道,即如果你有变量SredRazmax、SredRazmin、Sredn是数组值的总和,那么为了正确计算总和,你需要将变量归零,然后将数组值相加并保存在这个变量中 即 int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- SredRazmax = 0.0; SredRazmin = 0.0; Sredn = 0.0; ..... 第二,你有一个问题,在指标中,每一个tick 都会调用OnCalculate() ,这意味着你将在每一个tick不断地计算ZigZag的顶部,即大约每秒40-60次。 mbjen 2018.11.01 15:58 #6819 Artyom Trishkin: 由new创建的对象必须被附加到一个对象数组上,或者在OnDeinit()中被自己删除。谢谢你的启迪。但你至少应该阅读我的问题。 Artyom Trishkin 2018.11.01 16:45 #6820 mbjen:谢谢你的启迪。但你至少应该阅读我的问题。 我做了,我回答了。 1...675676677678679680681682683684685686687688689...1953 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我有一个大型的程序,有相同类型的对象。我是说很多类型。但它们在该计划的不同模块中被重复使用。而在日志中,在测试完成 后,例如,我得到xxx个未删除的对象。等等几种类型。
我怎样才能找出我没有删除对象的地方?是否有一些工具箱用于此目的?
我有一个大型的程序,有相同类型的对象。我是说很多类型。但它们在该计划的不同模块中被重复使用。而在日志中,在测试完成后,比如说,我得到了xxx个未删除的对象。等等几种类型。
我怎样才能找出我没有删除对象的地方?有没有这方面的工具箱?
1930年建造的错误。
我惊讶地发现,MQl5支持OpenCL
难道这段时间没有人给机器人写一个优化器,使数百万次的运行不至于持续几个世纪,而至少是几年?:)
这意味着你在计算你提交的代码中的每一个刻度,而不是初始化SredRazmax和SredRazmin 变量。
在使用变量之前对其进行初始化是一个很好的习惯--大学里都是这么教的,这样可以减少发现bug的时间;)
我在一开始就初始化了它们,在注释中你可以看到另一个数组的元素(检查一下,0没有变化,所以公式应该可以工作,)以下是完整的代码。
来自1930版的错误。
它是什么?我有MT4。建1090。
它是什么?我有MT4。建1090。
我在一开始就对它们进行了初始化,注释中逐一输出了另一个数组元素(检查一下,0没有变化,所以公式应该是有效的,)以下是完整的代码。
你没有在开头或其他地方初始化它们,你只是声明了它们
我在使用前写道,即如果你有变量SredRazmax、SredRazmin、Sredn是数组值的总和,那么为了正确计算总和,你需要将变量归零,然后将数组值相加并保存在这个变量中
即
第二,你有一个问题,在指标中,每一个tick 都会调用OnCalculate() ,这意味着你将在每一个tick不断地计算ZigZag的顶部,即大约每秒40-60次。
由new创建的对象必须被附加到一个对象数组上,或者在OnDeinit()中被自己删除。
谢谢你的启迪。但你至少应该阅读我的问题。
谢谢你的启迪。但你至少应该阅读我的问题。