错误、漏洞、问题 - 页 1697 1...169016911692169316941695169616971698169917001701170217031704...3184 新评论 fxsaber 2016.09.23 08:36 #16961 Karputov Vladimir: Print(MQLInfoString(MQL_PROGRAM_NAME)); 返回短的指标名称。如果没有指定短名称,将返回全名。 谢谢你。 Alexey Volchanskiy 2016.09.23 08:44 #16962 Vladimir Pastushak:谢谢你。Alexey,你的例子不起作用,父类的方法仍然被倾倒在继承者中,而继承者是不应该被倾倒的。它不应该是这样的,你能抛出代码吗?那些在 父代中 被 保护和 公开的数据 将 在被保护的继承中被保护。 fxsaber 2016.09.23 08:48 #16963 我们用手在NONE图表上设置指标#property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 double Buffer[]; int handle = INVALID_HANDLE; void OnInit() { ::SetIndexBuffer(0, Buffer, INDICATOR_DATA); handle = ChartIndicatorGet(0, 1, ChartIndicatorName(0, 1, 0)); } #define TOSTRING(A) #A + " = " + (string)A + "\n" 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[] ) { if (handle != INVALID_HANDLE) { Buffer[rates_total - 1] = MathRand(); double BufferCopy[]; if (CopyBuffer(handle, 0, 0, 1, BufferCopy) > 0) Print(TOSTRING(BufferCopy[0]) + TOSTRING(Buffer[rates_total - 1])); } return(rates_total); }用手将指标从图表中取出。在日志中,我们看到该指标继续运行。你可以关闭终端中的所有图表,但它仍然在执行。当然,这也无济于事。void OnDeinit( const int Reason ) { if (handle != INVALID_HANDLE) IndicatorRelease(handle); return; }重启终端会停止指标的执行。有多少指标可以闲置,而我们甚至不知道它们?根本就没有控制。 Vladimir Karputov 2016.09.23 08:51 #16964 fxsaber:在图表上手工设置NULL指标用手将指标从图表中取出。在日志中,我们看到该指标继续运行。你可以关闭终端中的所有图表,但它仍然会被执行。重新启动终端会停止执行该指标。有多少指标可以闲置,而我们甚至没有听到任何关于它们的消息?根本就没有控制。阅读和查看带有#define和带有: 的代码是不可能的。请按照普通MQL5的风格重写代码。 [删除] 2016.09.23 08:53 #16965 fxsaber:在图表上手工设置NULL指标用手将指标从图表中取出。在日志中,我们看到该指标继续运行。你可以关闭终端中的所有图表,但它仍然会被执行。重新启动终端会停止执行该指标。有多少指标可以在闲置模式下执行,而我们甚至没有听说过它们?根本就没有控制。 添加_StopFlag检查不会有帮助? fxsaber 2016.09.23 08:55 #16966 Karputov Vladimir:用#define和用: 来阅读和观察代码是不可能的。请以常见的MQL5风格重写代码。 这是MQL5风格。请研究什么是#define,什么是::。 fxsaber 2016.09.23 08:57 #16967 Alexey Kozitsyn: 增加一个_StopFlag检查不会有帮助? 在哪里添加,至少在理论上能有什么帮助。这是一个终端的错误。而且这是一个严重的错误。我很幸运--我在日志中看到,该指标是有效的。然而,有很多指标在终端工作,却没有任何相关信息。但话题来了,为什么我的CPU在一个空的终端上会有如此大的负荷? Vladimir Karputov 2016.09.23 08:57 #16968 fxsaber: 这就是MQL5的风格。请研究什么是#define,什么是::。 我不是这个意思。在你的例子中根本不需要"::"--也许这是你的习惯,但那里根本不需要。没有#defane,代码也可以正常编写。试着重写一下,看看是否有什么东西变得清晰。 fxsaber 2016.09.23 09:08 #16969 Karputov Vladimir: 我不是这个意思。":: "在你的例子中根本不需要--也许这是你的习惯,但那里根本不需要。没有#defane,代码也可以写得很好。试着重写一下,看看是否有什么东西变得清晰。我只在一个地方有"::"。而且我不会从头开始写代码。作为一项规则,我从我的代码中取出一些东西。这里有 :: 有一个通过复制粘贴的。我从来没有注意过它,但我已经把它删除了,因为它让你感觉好多了。但不删除#define并不是一个原则问题。99%的代码可以不用它来写。这不是一个可以拿走它的场合。而有1%(相对而言)的时候,你不能没有#define! Vladimir Karputov 2016.09.23 09:12 #16970 fxsaber:我只在一个地方有"::"。而且我不从头开始写代码。作为一项规则,我从我的代码中取出一些东西。这里是 :: 有一个通过复制粘贴的。我从来没有注意过它,但我已经把它删除了,因为它让你感觉好多了。但不删除#define并不是一个原则问题。99%的代码可以不用它来写。这不是一个可以拿走它的场合。而有1%(有条件的),当你不能没有#define的时候!如果你不复制缓冲区。//+------------------------------------------------------------------+ //| ProjectName | //| Copyright 2012, CompanyName | //| http://www.companyname.net | //+------------------------------------------------------------------+ #property indicator_separate_window #property indicator_buffers 1 #property indicator_plots 1 double Buffer[]; int handle=INVALID_HANDLE; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnInit() { SetIndexBuffer(0,Buffer,INDICATOR_DATA); handle=ChartIndicatorGet(0,1,ChartIndicatorName(0,1,0)); } #define TOSTRING(A) #A + " = " + (string)A + "\n" //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ 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[]) { if(handle!=INVALID_HANDLE) { Buffer[rates_total-1]=MathRand(); double BufferCopy[]; Print(__FUNCTION__); //if(CopyBuffer(handle,0,0,1,BufferCopy)>0) // Print(TOSTRING(BufferCopy[0])+TOSTRING(Buffer[rates_total-1])); } return(rates_total); } //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnDeinit(const int Reason) { Print("#1 OnDeinit"); if(handle!=INVALID_HANDLE) { Print("#2 OnDeinit"); IndicatorRelease(handle); Print("#3 OnDeinit"); } Print("#4 OnDeinit"); return; } //+------------------------------------------------------------------+ 则该指标成功完成其工作2016.09.23 12:11:12.655 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:12.737 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:12.737 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:12.737 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:12.747 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:13.406 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:13.406 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:13.406 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:14.794 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:15.747 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:16.936 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:11:19.339 2 (SBRF-12.16,M1) #1 OnDeinit 2016.09.23 12:11:19.339 2 (SBRF-12.16,M1) #2 OnDeinit 2016.09.23 12:11:19.339 2 (SBRF-12.16,M1) #3 OnDeinit 2016.09.23 12:11:19.339 2 (SBRF-12.16,M1) #4 OnDeinit 1...169016911692169316941695169616971698169917001701170217031704...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
Print(MQLInfoString(MQL_PROGRAM_NAME)); 返回短的指标名称。如果没有指定短名称,将返回全名。
谢谢你。
Alexey,你的例子不起作用,父类的方法仍然被倾倒在继承者中,而继承者是不应该被倾倒的。
它不应该是这样的,你能抛出代码吗?
那些在 父代中 被 保护和 公开的数据 将 在被保护的继承中被保护。阅读和查看带有#define和带有: 的代码是不可能的。
请按照普通MQL5的风格重写代码。
用#define和用: 来阅读和观察代码是不可能的。
请以常见的MQL5风格重写代码。
增加一个_StopFlag检查不会有帮助?
这就是MQL5的风格。请研究什么是#define,什么是::。
我不是这个意思。":: "在你的例子中根本不需要--也许这是你的习惯,但那里根本不需要。没有#defane,代码也可以写得很好。试着重写一下,看看是否有什么东西变得清晰。
我只在一个地方有"::"。而且我不会从头开始写代码。作为一项规则,我从我的代码中取出一些东西。这里有 :: 有一个通过复制粘贴的。我从来没有注意过它,但我已经把它删除了,因为它让你感觉好多了。
但不删除#define并不是一个原则问题。99%的代码可以不用它来写。这不是一个可以拿走它的场合。
而有1%(相对而言)的时候,你不能没有#define!
我只在一个地方有"::"。而且我不从头开始写代码。作为一项规则,我从我的代码中取出一些东西。这里是 :: 有一个通过复制粘贴的。我从来没有注意过它,但我已经把它删除了,因为它让你感觉好多了。
但不删除#define并不是一个原则问题。99%的代码可以不用它来写。这不是一个可以拿走它的场合。
而有1%(有条件的),当你不能没有#define的时候!
如果你不复制缓冲区。
则该指标成功完成其工作