错误、漏洞、问题 - 页 2930 1...292329242925292629272928292929302931293229332934293529362937...3184 新评论 Vitaly Muzichenko 2020.12.26 05:34 #29291 将指标从mt4翻译成mt5 问题出在DRAW_HISTOGRAM 尺寸上 当我设置 "1 "或 "2 "时,尺寸会改变,但 "3 "或 "4"=尺寸仍为 "2"。 为什么在MT4中一切正常,而在MT5中却出现了这样的问题? #property indicator_separate_window #property indicator_plots 4 #property indicator_buffers 4 #property indicator_color1 clrDodgerBlue #property indicator_color2 clrDodgerBlue #property indicator_color3 clrLimeGreen #property indicator_color4 clrFireBrick #property indicator_width1 3 #property indicator_width2 3 #property indicator_width3 3 #property indicator_width4 3 结果在mt4 在mt5中的结果,只显示 "2 "的厚度,尽管我在设置中是 "3 "的。 在OnInit()中设置属性也没有帮助 PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3)。 Aliaksandr Hryshyn 2020.12.27 14:04 #29292 调试期间出现严重错误。struct sA { int i; string s; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ class cA { public: sA my_array[]; }; //+------------------------------------------------------------------+ //| | //+------------------------------------------------------------------+ void OnStart() { cA *ca; ca=new cA(); ArrayResize(ca.my_array,1); ZeroMemory(ca.my_array); ArrayPrint(ca.my_array); }结果。2020.12.27 17:04:26.966 1 (EURUSD,M1) Access violation at 0x000001FE5AF10199 read to 0xFFFFFFFFFFFFFFFF in 'D:\Alpari MT5\MQL5\Scripts\Test\1.ex5' 2020.12.27 17:04:26.967 1 (EURUSD,M1) crash --> 000001FE5AF10199 8B4318 mov eax, [rbx+0x18] 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF1019C 4089442420 mov [rsp+0x20], eax 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101A1 41B910000000 mov r9d, 0x10 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101A7 49B8B807F15AFE01 mov r8, 0x1fe5af107b8 2020.12.27 17:04:26.967 1 (EURUSD,M1) 0000 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101B1 488D17 lea rdx, [rdi] 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101B4 48B998D45F5FFE01 mov rcx, 0x1fe5f5fd498 2020.12.27 17:04:26.967 1 (EURUSD,M1) 0000 2020.12.27 17:04:26.967 1 (EURUSD,M1) 000001FE5AF101BE 49FF96A8120000 call qword near [r14+0x12a8] ; #11378 (terminal64.exe) 2020.12.27 17:04:26.967 1 (EURUSD,M1) 2020.12.27 17:04:26.967 1 (EURUSD,M1) 00: 0x000001FE5AF10199 2020.12.27 17:04:26.967 1 (EURUSD,M1) 01: 0x000001FE633F0010 2020.12.27 17:04:26.967 1 (EURUSD,M1) 目前最新的测试版本 Документация по MQL5: Программы MQL5 / Ошибки выполнения www.mql5.com Ошибки выполнения - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5 Stanislav Korotky 2020.12.27 15:06 #29293 有没有人想出一个办法,让指标句柄在主窗口或子窗口中显示一个属性?我说的是任意的第三方指标,这些指标是用IndicatorCreate创建的,然后可以根据用户的要求用ChartIndicatorAdd添加 到图表中。 fxsaber 2020.12.27 17:40 #29294 Stanislav Korotky: 有没有人想出一个办法,让指标手柄在主窗口或子窗口中显示属性?我说的是使用IndicatorCreate创建的自定义指标,然后可以使用ChartIndicatorAdd将它们添加到图表中。 你也许可以把指标塞进OBJ_CHART,看看它的位置。 Nikolai Semko 2020.12.27 22:34 #29295 Stanislav Korotky: 有没有人想出一个办法,从主窗口或子窗口的指标句柄中获取显示属性?我说的是使用IndicatorCreate创建的自定义指标,然后它们可以根据用户的要求通过ChartIndicatorAdd添加到图表中。 做了类似的事情。 这是我找到的一个。不记得它是否有效。请看一下。bool FindIndicatorByHandle(long handle, string &symbol, ENUM_TIMEFRAMES &timeframe, long &ChartId, int &sub_win, string &Name) { long chart_id =ChartFirst(); while (chart_id!=-1) { int total_sub = (int)ChartGetInteger(chart_id,CHART_WINDOWS_TOTAL); int total_ind; for(int i=0; i<total_sub; i++) { total_ind = ChartIndicatorsTotal(chart_id,i); for (int j=0; j<total_ind; j++) { string name = ChartIndicatorName(chart_id,i,j); if (ChartIndicatorGet(chart_id,i,name)== handle) { ChartId=chart_id; symbol= ChartSymbol(chart_id); timeframe=ChartPeriod(chart_id); sub_win=i; Name=name; return true; } } } chart_id=ChartNext(chart_id); } return false; } 该代码通过一个指标的手柄搜索所有打开的图表。返回符号、时间框架、图表ID、子窗口和指标名称。 Stanislav Korotky 2020.12.28 11:46 #29296 fxsaber:我想你可以把指标放在OBJ_CHART 中,看看它的位置。 我会试一试的,现在我不得不做一个选项,由用户指定。 Stanislav Korotky 2020.12.28 11:51 #29297 Nikolai Semko:做了类似的事情。 这是我找到的一个。不记得它是否有效。请看一下。 从代码上看,它通过手柄搜索所有打开的图表,寻找一个指标。返回符号、时间框架、图表ID、子窗口和指标名称。 这不符合你的问题:由IndicatorCreate创建的指标并不放在任何窗口中--它们 "坐在 "里面,而任务是将这样的指标通过其手柄放在窗口中。现在,MQL5允许你使用ChartIndicatorAdd函数 向主窗口或子窗口添加一个任意的句柄,而不考虑指标的 "属性"(没有错误!),当添加时没有按照预期进行,结果看起来非常奇怪。 Stanislav Korotky 2020.12.28 14:13 #29298 指标方面有一个更大的问题。 他们中的一些人根据简化版本实现了OnCalculate处理程序,有一个输入数组,你可以为他们的计算选择价格类型。你如何从第三方MQL5程序中知道该指标期待这种价格类型,在创建指标时必须在所有参数之后传递?看来没有办法了。而如果你不这样做,指标是由#属性 indicator_applied_price 绘制的,不能从外部访问。这里有一个简单的专家顾问,以编程方式将指标/AMA添加到图表中。 int OnInit() { const int h = iCustom(NULL, 0, "Examples/AMA"); if(h == INVALID_HANDLE) { Print("iCustom failed: ", _LastError); return INIT_FAILED; } if(!ChartIndicatorAdd(0, 0, h)) { Print("ChartIndicatorAdd failed: ", _LastError); return INIT_FAILED; } ChartRedraw(); return INIT_SUCCEEDED; } 如果之后我们切换图表时间框架,我们将得到2个指标AMA:一个是收盘价(程序化创建的),一个是开盘价(由于时间框架变化和#属性 indicator_applied_price PRICE_OPEN而产生的;不清楚为什么这个属性也没有被iCustom捕捉到)。 Stanislav Korotky 2020.12.28 18:44 #29299 为了继续指标的主题,我附上了我用来发现和避免MqlParam参数问题的专家顾问。 专家顾问的任务是将指标 "Examples/Price_Channel "添加到图表中,如果它还没有,则使用相同的参数。 要做到这一点,我们使用iCustom/IndicatorCreate创建一个实例,通过IndicatorParameters获得其参数数组,然后在循环中对图表中已经存在的指标调用IndicatorParameters:如果没有匹配的数组参数,该指标将被添加到图表中,如果有匹配的,新句柄将被简单销毁。 问题是,参数相等并不总是像预期的那样工作。特别是,有这样一个故障安全测试案例。我们把专家顾问放在任何一个空图表上,然后点击 - 它创建了指标的第一个实例。然后我们切换到任何其他图表时间框架(旧的指标仍然存在)并再次点击。奇怪的是,该指标的第二个实例被创建。 从执行和日志的分析中可以看出,这是由于参数中指标名称的字符串错误地均衡化造成的。那里的字符串有260个字符,但终端0的位置更早。在它之后,要么是一些服务信息,要么是垃圾。因此,字符串比较"=="或StringCompare考虑到了这些 "垃圾",我们得到了字符串的不平等。 如果我们把字符串转换成char数组,数组就会得到完全的匹配。如果你转换为短数组,你会得到垃圾。总而言之,一些不一致的行为在文档中没有描述。 Window N: 1 0, Price Channel(22), 12 [type] [integer_value] [double_value] [string_value] [0] 14 0 0.000 "Indicators\Examples/Price_Channel" [1] 7 22 0.000 null ind1: 'Indicators\Examples/Price_Channel ind2: 'Indicators\Examples/Price_Channel 260 0 / 260 0 Char arrays 34 34 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 101 95 67 104 97 110 110 101 108 0 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 101 95 67 104 97 110 110 101 108 0 Short arrays 260 260 [ 0] 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 [ 24] 101 95 67 104 97 110 110 101 108 0 103 110 97 108 0 0 0 0 0 0 0 0 0 0 [ 48] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [ 72] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [ 96] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [120] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [144] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [168] 0 0 0 0 0 0 0 0 0 0 0 0 13 3328 58074 86 13696 54 0 0 35120 3210 0 0 [192] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [216] 0 0 0 0 61841 38184 17648 16370 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [240] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [ 0] 73 110 100 105 99 97 116 111 114 115 92 69 120 97 109 112 108 101 115 47 80 114 105 99 [ 24] 101 95 67 104 97 110 110 101 108 0 103 110 97 108 0 32 32 77 32 65 32 82 32 75 [ 48] 32 83 0 32 99 111 109 109 97 32 115 101 112 97 114 97 116 101 100 32 108 105 115 116 [ 72] 41 0 32 112 114 111 116 111 116 121 112 101 115 41 0 0 115 0 0 0 0 0 0 0 [ 96] 528 0 0 0 0 45 0 0 3 0 0 0 512 0 0 0 1160 45 0 0 7256 30655 0 0 [120] 0 0 0 0 512 0 0 0 0 65535 2272 0 29648 45 0 0 0 0 0 0 0 0 0 0 [144] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [168] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [192] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 [216] 3 0 0 0 26341 16284 1 0 1308 16 0 0 49814 30635 0 0 0 0 0 0 32016 37 0 0 [240] 2 0 0 0 50336 16481 1 0 2 0 0 0 3 0 0 0 45520 37 0 0 1 0 我不确定这个错误到底是什么,是在MQL中的字符串处理原理还是其他方面。 如果有人知道其中的细微差别,请给我一个提示。 附加的文件: Indicator1.mq5 4 kb fxsaber 2020.12.28 19:17 #29300 Stanislav Korotky:如果有人知道其中的细微差别,请给我一个提示。 这种功能,即使你知道,你也要在脑子里把整层的内容重新提出来。 这里 做了自我可用性的定义。在切换TF的时候,它似乎是有效的。 Init_Sync www.mql5.com Библиотека делает синхронизированными Init/Deinit индикаторов 1...292329242925292629272928292929302931293229332934293529362937...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
将指标从mt4翻译成mt5
问题出在DRAW_HISTOGRAM 尺寸上
当我设置 "1 "或 "2 "时,尺寸会改变,但 "3 "或 "4"=尺寸仍为 "2"。
为什么在MT4中一切正常,而在MT5中却出现了这样的问题?
结果在mt4
在mt5中的结果,只显示 "2 "的厚度,尽管我在设置中是 "3 "的。
在OnInit()中设置属性也没有帮助
PlotIndexSetInteger(0,PLOT_LINE_WIDTH, 3)。
调试期间出现严重错误。
结果。
目前最新的测试版本有没有人想出一个办法,让指标手柄在主窗口或子窗口中显示属性?我说的是使用IndicatorCreate创建的自定义指标,然后可以使用ChartIndicatorAdd将它们添加到图表中。
你也许可以把指标塞进OBJ_CHART,看看它的位置。
有没有人想出一个办法,从主窗口或子窗口的指标句柄中获取显示属性?我说的是使用IndicatorCreate创建的自定义指标,然后它们可以根据用户的要求通过ChartIndicatorAdd添加到图表中。
做了类似的事情。
该代码通过一个指标的手柄搜索所有打开的图表。返回符号、时间框架、图表ID、子窗口和指标名称。这是我找到的一个。不记得它是否有效。请看一下。
我想你可以把指标放在OBJ_CHART 中,看看它的位置。
我会试一试的,现在我不得不做一个选项,由用户指定。
做了类似的事情。
从代码上看,它通过手柄搜索所有打开的图表,寻找一个指标。返回符号、时间框架、图表ID、子窗口和指标名称。这是我找到的一个。不记得它是否有效。请看一下。
这不符合你的问题:由IndicatorCreate创建的指标并不放在任何窗口中--它们 "坐在 "里面,而任务是将这样的指标通过其手柄放在窗口中。现在,MQL5允许你使用ChartIndicatorAdd函数 向主窗口或子窗口添加一个任意的句柄,而不考虑指标的 "属性"(没有错误!),当添加时没有按照预期进行,结果看起来非常奇怪。
指标方面有一个更大的问题。
他们中的一些人根据简化版本实现了OnCalculate处理程序,有一个输入数组,你可以为他们的计算选择价格类型。你如何从第三方MQL5程序中知道该指标期待这种价格类型,在创建指标时必须在所有参数之后传递?看来没有办法了。而如果你不这样做,指标是由#属性 indicator_applied_price 绘制的,不能从外部访问。这里有一个简单的专家顾问,以编程方式将指标/AMA添加到图表中。
如果之后我们切换图表时间框架,我们将得到2个指标AMA:一个是收盘价(程序化创建的),一个是开盘价(由于时间框架变化和#属性 indicator_applied_price PRICE_OPEN而产生的;不清楚为什么这个属性也没有被iCustom捕捉到)。
为了继续指标的主题,我附上了我用来发现和避免MqlParam参数问题的专家顾问。
专家顾问的任务是将指标 "Examples/Price_Channel "添加到图表中,如果它还没有,则使用相同的参数。
要做到这一点,我们使用iCustom/IndicatorCreate创建一个实例,通过IndicatorParameters获得其参数数组,然后在循环中对图表中已经存在的指标调用IndicatorParameters:如果没有匹配的数组参数,该指标将被添加到图表中,如果有匹配的,新句柄将被简单销毁。
问题是,参数相等并不总是像预期的那样工作。特别是,有这样一个故障安全测试案例。我们把专家顾问放在任何一个空图表上,然后点击 - 它创建了指标的第一个实例。然后我们切换到任何其他图表时间框架(旧的指标仍然存在)并再次点击。奇怪的是,该指标的第二个实例被创建。
从执行和日志的分析中可以看出,这是由于参数中指标名称的字符串错误地均衡化造成的。那里的字符串有260个字符,但终端0的位置更早。在它之后,要么是一些服务信息,要么是垃圾。因此,字符串比较"=="或StringCompare考虑到了这些 "垃圾",我们得到了字符串的不平等。
如果我们把字符串转换成char数组,数组就会得到完全的匹配。如果你转换为短数组,你会得到垃圾。总而言之,一些不一致的行为在文档中没有描述。
我不确定这个错误到底是什么,是在MQL中的字符串处理原理还是其他方面。
如果有人知道其中的细微差别,请给我一个提示。
如果有人知道其中的细微差别,请给我一个提示。
这种功能,即使你知道,你也要在脑子里把整层的内容重新提出来。
这里 做了自我可用性的定义。在切换TF的时候,它似乎是有效的。