错误、漏洞、问题 - 页 1699 1...169216931694169516961697169816991700170117021703170417051706...3184 新评论 fxsaber 2016.09.23 09:35 #16981 Karputov Vladimir: 你不能把每一个错误的编程风格都归咎于bug。这算哪门子的惊喜啊?我指出了一个明显的错误,而我得到了关于 "风格 "的废话。我离A100和Meat的距离就像月亮一样远。他们给你看虫子,尽管我不理解它们。但我不打算把我的 "风格 "带入其中。 Vladimir Karputov 2016.09.23 09:36 #16982 fxsaber: 它不起作用。以下是完整的代码。//+------------------------------------------------------------------+ //| 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) if(prev_calculated!=0) { 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:34:03.318 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:34:03.318 2 (SBRF-12.16,M1) BufferCopy[0] = 265.0 2016.09.23 12:34:03.319 2 (SBRF-12.16,M1) Buffer[rates_total-1] = 18992.0 2016.09.23 12:34:03.319 2 (SBRF-12.16,M1) 2016.09.23 12:34:03.502 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:34:03.502 2 (SBRF-12.16,M1) BufferCopy[0] = 265.0 2016.09.23 12:34:03.502 2 (SBRF-12.16,M1) Buffer[rates_total-1] = 12498.0 2016.09.23 12:34:03.502 2 (SBRF-12.16,M1) ... экономия бумаги :) 2016.09.23 12:34:31.804 2 (SBRF-12.16,M1) 2016.09.23 12:34:33.159 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:34:33.159 2 (SBRF-12.16,M1) BufferCopy[0] = 614.0 2016.09.23 12:34:33.159 2 (SBRF-12.16,M1) Buffer[rates_total-1] = 5343.0 2016.09.23 12:34:33.159 2 (SBRF-12.16,M1) 2016.09.23 12:34:36.870 2 (SBRF-12.16,M1) OnCalculate 2016.09.23 12:34:36.870 2 (SBRF-12.16,M1) BufferCopy[0] = 614.0 2016.09.23 12:34:36.870 2 (SBRF-12.16,M1) Buffer[rates_total-1] = 17815.0 2016.09.23 12:34:36.870 2 (SBRF-12.16,M1) 2016.09.23 12:34:38.445 2 (SBRF-12.16,M1) #1 OnDeinit 2016.09.23 12:34:38.445 2 (SBRF-12.16,M1) #2 OnDeinit 2016.09.23 12:34:38.445 2 (SBRF-12.16,M1) #3 OnDeinit 2016.09.23 12:34:38.445 2 (SBRF-12.16,M1) #4 OnDeinit 附加的文件: 2.mq5 3 kb fxsaber 2016.09.23 09:41 #16983 Karputov Vladimir:以下是完整的代码。和一份打印件。它对我不起作用--它甚至没有进入OnDeinit。并注意到我的数字在日志中是吻合的,但你的却不是。我的日志PP 0 12:41:08.169 Test3 (RTS-12.16,H1) OnCalculate FE 0 12:41:08.169 Test3 (RTS-12.16,H1) BufferCopy[0] = 13573.0 IQ 0 12:41:08.169 Test3 (RTS-12.16,H1) Buffer[rates_total-1] = 13573.0 CF 0 12:41:08.169 Test3 (RTS-12.16,H1) JO 0 12:41:08.169 Test3 (RTS-12.16,H1) OnCalculate QI 0 12:41:08.169 Test3 (RTS-12.16,H1) BufferCopy[0] = 25434.0 NM 0 12:41:08.169 Test3 (RTS-12.16,H1) Buffer[rates_total-1] = 25434.0 MJ 0 12:41:08.169 Test3 (RTS-12.16,H1) DJ 0 12:41:08.187 Test3 (RTS-12.16,H1) OnCalculate QO 0 12:41:08.187 Test3 (RTS-12.16,H1) BufferCopy[0] = 9469.0 HK 0 12:41:08.187 Test3 (RTS-12.16,H1) Buffer[rates_total-1] = 9469.0 CM 0 12:41:08.187 Test3 (RTS-12.16,H1) JF 0 12:41:08.187 Test3 (RTS-12.16,H1) OnCalculate OS 0 12:41:08.187 Test3 (RTS-12.16,H1) BufferCopy[0] = 1887.0 NG 0 12:41:08.187 Test3 (RTS-12.16,H1) Buffer[rates_total-1] = 1887.0 我的终端中没有任何一个指标或EA在运行。 Vladimir Karputov 2016.09.23 09:46 #16984 fxsaber:它对我不起作用--它甚至没有进入OnDeinit。并注意到我的数字在日志中是吻合的,但你的却不是。我的日志 我的终端中没有运行任何指标或专家顾问。我有这样的配置。2016.09.23 12:25:34.874 Terminal MetaTrader 5 x64 build 1430 started (MetaQuotes Software Corp.) 2016.09.23 12:25:34.876 Terminal Windows 10 Pro (x64 based PC), IE 11.00, UAC, Intel Core i3-3120 M @ 2.50 GHz, RAM: 2446 / 8077 Mb, HDD: 40118 / 233310 Mb, GMT+02:00 2016.09.23 12:25:34.876 Terminal C:\Users\KVN\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075 (重新启动热机后,日志标签,前三行) fxsaber 2016.09.23 10:09 #16985 Karputov Vladimir:我有这样的配置。(重新启动热机后,日志标签,前三行)2016.09.23 12:42:22.405 Terminal C:\Program Files\BCS Broker MetaTrader 5 Terminal 2016.09.23 12:42:22.405 Terminal Windows 7 Ultimate (x64 based PC), IE 09.00, Intel Core i7-2700 K @ 3.50 GHz, RAM: 8098 / 16301 Mb, HDD: 6387 / 30000 Mb, GMT+02:00 2016.09.23 12:42:22.405 Terminal BCS Broker MetaTrader 5 Terminal x64 build 1430 started (BCS Broker) Vladimir Karputov 2016.09.23 10:29 #16986 fxsaber: 含糊不清。在X32机器上。2016.09.23 13:23:55.052 Terminal C:\Users\barab\AppData\Roaming\MetaQuotes\Terminal\D0E8209F77C8CF37AD8BF550E51FF075 2016.09.23 13:23:55.052 Terminal Windows 10 Home (X86 based PC), IE 11.00, UAC, Intel Atom Z3740 @ 1.33 GHz, RAM: 607 / 1931 Mb, HDD: 20500 / 49784 Mb, GMT+02:00 2016.09.23 13:23:55.049 Terminal MetaTrader 5 build 1430 started (MetaQuotes Software Corp.) 不起作用。 Vladimir Pastushak 2016.09.23 10:32 #16987 Andrey Barinov: 他们 "退出 "了,但在试图调用他们时,会出现编译错误。我不需要这样,我想做很多工作,使我今后的生活更轻松。我已经用这种方式解决了我的问题,在父类中,所有的protec和继承都在protec之下,然后是override。 fxsaber 2016.09.23 10:34 #16988 Karputov Vladimir:含糊不清。在X32机器上。 不起作用。 已经提出了申请,尽管我已经厌倦了经常这样做。 Anton 2016.09.23 11:04 #16989 fxsaber:如何在一个指标中知道我在图表上的手柄?ChartIndicatorName不合适,因为它返回的是一个短名称。而同名的指标可能已经在运行,输入参数不同。我需要它能够从图表和计算中删除指标。你可能已经想明白了,但我还是要澄清一下,以防万一。指标的句柄实际上只是对创建该指标的程序(即专家顾问、指标、脚本)内的描述的引用,我们可以把它看作是一种 "数字"。这意味着这个 "数字 "在创建指标的程序(获得其句柄)之外没有任何意义。即使是调用ChartIndicatorGet()函数的 程序也没有得到一些全局性的指标句柄,它只是创建了这个指标的描述,并分配了它的 "编号 "供寻址。 没有全局性的指标手柄,在整个终端内是唯一的。在例子中可以看到短名称的使用。你可以这样做。 string short_name="unknown ma"; switch(InpMAMethod) { case MODE_EMA : short_name="EMA"; break; case MODE_LWMA : short_name="LWMA"; break; case MODE_SMA : short_name="SMA"; break; case MODE_SMMA : short_name="SMMA"; break; } IndicatorSetString(INDICATOR_SHORTNAME,short_name+"("+string(InpMAPeriod)+")");这就解决了" 同一个指标已经用不同的输入参数运行过了 "的问题。而且从视觉上看,哪个指标起作用更清楚。 fxsaber 2016.09.23 11:53 #16990 Anton:你可能已经想明白了,但我还是要澄清一下,以防万一。指标句柄实际上只是创建该指标的程序(即专家顾问、指标、脚本)中对该指标描述的一个地址,我们可以把它看作是一种 "数字"。这意味着这个 "数字 "在创建指标的程序(获得其句柄)之外没有任何意义。即使是调用ChartIndicatorGet()函数的 程序也没有得到一些全局性的指标句柄,它只是创建了这个指标的描述,并分配了它的 "编号 "供寻址。 没有全局性的指标手柄,在整个终端内是唯一的。你可以在例子中看到ShortName的使用。你可以这样做。这就解决了" 同一个指标已经用不同的输入参数运行过了 "的问题。而且从视觉上看,更容易理解哪个指标的作用。谢谢,这就是前段时间stringo向我解释的情况。我找到了几种方法来确定这个手柄属于 "我"。我改变了指标缓冲区的极端值,并与相应的CopyBuffer值进行比较。如果匹配,就是 "我"。这就是不可删除指标背后的想法。我改变ShortName并与ChartIndicatorName进行比较。 1...169216931694169516961697169816991700170117021703170417051706...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
你不能把每一个错误的编程风格都归咎于bug。
这算哪门子的惊喜啊?我指出了一个明显的错误,而我得到了关于 "风格 "的废话。
我离A100和Meat的距离就像月亮一样远。他们给你看虫子,尽管我不理解它们。但我不打算把我的 "风格 "带入其中。
它不起作用。
以下是完整的代码。
和一份打印件。
以下是完整的代码。
和一份打印件。
它对我不起作用--它甚至没有进入OnDeinit。
并注意到我的数字在日志中是吻合的,但你的却不是。我的日志
我的终端中没有任何一个指标或EA在运行。它对我不起作用--它甚至没有进入OnDeinit。
并注意到我的数字在日志中是吻合的,但你的却不是。我的日志
我的终端中没有运行任何指标或专家顾问。我有这样的配置。
(重新启动热机后,日志标签,前三行)
我有这样的配置。
(重新启动热机后,日志标签,前三行)
含糊不清。在X32机器上。
不起作用。
他们 "退出 "了,但在试图调用他们时,会出现编译错误。
我不需要这样,我想做很多工作,使我今后的生活更轻松。
我已经用这种方式解决了我的问题,在父类中,所有的protec和继承都在protec之下,然后是override。
含糊不清。在X32机器上。
不起作用。
如何在一个指标中知道我在图表上的手柄?ChartIndicatorName不合适,因为它返回的是一个短名称。而同名的指标可能已经在运行,输入参数不同。
我需要它能够从图表和计算中删除指标。
你可能已经想明白了,但我还是要澄清一下,以防万一。指标的句柄实际上只是对创建该指标的程序(即专家顾问、指标、脚本)内的描述的引用,我们可以把它看作是一种 "数字"。这意味着这个 "数字 "在创建指标的程序(获得其句柄)之外没有任何意义。即使是调用ChartIndicatorGet()函数的 程序也没有得到一些全局性的指标句柄,它只是创建了这个指标的描述,并分配了它的 "编号 "供寻址。 没有全局性的指标手柄,在整个终端内是唯一的。
在例子中可以看到短名称的使用。你可以这样做。
这就解决了" 同一个指标已经用不同的输入参数运行过了 "的问题。
而且从视觉上看,哪个指标起作用更清楚。
你可能已经想明白了,但我还是要澄清一下,以防万一。指标句柄实际上只是创建该指标的程序(即专家顾问、指标、脚本)中对该指标描述的一个地址,我们可以把它看作是一种 "数字"。这意味着这个 "数字 "在创建指标的程序(获得其句柄)之外没有任何意义。即使是调用ChartIndicatorGet()函数的 程序也没有得到一些全局性的指标句柄,它只是创建了这个指标的描述,并分配了它的 "编号 "供寻址。 没有全局性的指标手柄,在整个终端内是唯一的。
你可以在例子中看到ShortName的使用。你可以这样做。
这就解决了" 同一个指标已经用不同的输入参数运行过了 "的问题。
而且从视觉上看,更容易理解哪个指标的作用。
谢谢,这就是前段时间stringo向我解释的情况。我找到了几种方法来确定这个手柄属于 "我"。