错误、漏洞、问题 - 页 2460 1...245324542455245624572458245924602461246224632464246524662467...3184 新评论 fxsaber 2019.05.14 14:19 #24591 请ME开发人员按CTRL+SHIFT+F键,输入 "MQL5Info"。纠正在产生的SB文件中发现的粗制滥造。 Sergey Dzyublik 2019.05.14 14:28 #24592 我花了2个小时才从项目 代码中分离出问题。#define PRINT(x) Print(#x, ":", string(x)) template<typename DATA_TYPE> struct Wrapper{ uchar type; DATA_TYPE data; template<typename T> void operator=(T value){ // при замене данной строки на "void operator=(T &value){" происходит перезапись оператора присвоения в классе наследнике B (код не компилируется). this.data = value; }; void operator=(DATA_TYPE &_data){ this.data = _data; }; }; struct A{ string data; void operator=(string value){ data = value; }; }; struct B : Wrapper<A>{}; void OnStart(){ B b; string str_value; b = str_value; A a; b = a; B b1; b = b1; } 使用上述代码,一切都按预期进行,,但是如果我们试图扩展功能,不仅支持简单的类型,如A类的(字符串),还支持结构,,结果发现基类的模板赋值运算符覆盖了子类的默认赋值运算符,扼杀了整个功能。 其他运算符可以作为变通方法,如 "运算符*=",但这是个麻烦事。 致开发者: 请增加为默认赋值运算符(复制构造器)指定强制代码生成的可能性。class_name & class_name :: operator= ( const class_name & ) = default; class_name & class_name :: operator= ( const class_name & ) = delete; Игорь Евдокимов 2019.05.14 16:13 #24593 你能告诉我,如果我在我的EA中使用标准指标,例如iMA。 如何设置它们的绘图样式,以便在可视化窗口中正确显示它们? Vladimir Karputov 2019.05.14 16:14 #24594 Игорь Евдокимов:你能告诉我,如果我在我的EA中使用标准指标,例如iMA。 我如何设置绘图样式,使其在可视化窗口中正确显示?像这样:自定义移动平均线输入颜色 rsrozhkov 2019.05.14 16:18 #24595 有知识的人,给个提示!我有一个 基于真实符号的自定义符号。我怎样才能使交易从这个符号的图表中获得?还是MT5中没有这样的功能? Игорь Евдокимов 2019.05.14 17:38 #24596 Vladimir Karputov:像这样:自定义移动平均线输入颜色事实上,你必须编写自己的指标。重写标准指标并不是解决办法。 问题是究竟如何为标准指标设置样式。 还有别的办法吗? Sergey Dzyublik 2019.05.14 22:24 #24597 在最近的MT版本中,作为字符串处理范式转变的一部分,它被认为是放弃了对以NULL为结尾的字符串的使用。 然而,StringSetLength函数的操作引发了一些问题。 使用StringSetLength,你只能截断一个字符串的长度,而不能增加它,这多少有点说不通。 这是有意的行为吗?#define PRINT(x) Print(#x, ":", string(x)) void OnStart(){ string str = "123456789"; PRINT(str); PRINT(StringLen(str)); PRINT(StringSetLength(str, StringLen(str)-1)); PRINT(str); PRINT(StringLen(str)); PRINT(StringSetLength(str, StringLen(str)+2)); PRINT(str); PRINT(StringLen(str)); } 结果。2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) str:123456789 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) StringLen(str):9 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) StringSetLength(str,StringLen(str)-1):true 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) str:12345678 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) StringLen(str):8 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) StringSetLength(str,StringLen(str)+2):false 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) str:12345678 2019.05.15 01:22:08.208 StringFormat_1 (EURUSD,H1) StringLen(str):8 Sergey Dzyublik 2019.05.14 23:55 #24598 用户宁可射杀自己也不愿意实现一个 "成熟的 "StringSetLength,"新 "字符初始化为0x0000。#define PRINT(x) Print(#x, ":", string(x)) void OnStart(){ string str = "123\x0000\x0000\x0000\x0000456789"; PRINT(str); PRINT(StringLen(str)); // StringLen(str):13 StringLen поддерживает работу с 0х0000 short value PRINT(StringSetLength_using_StringInit(str, 100)); // false StringInit не поддерживает работу с 0х0000 short value PRINT(StringSetLength_using_ShortArrayToString(str, 100)); // false ShortArrayToString не поддерживает работу с 0х0000 short value PRINT(StringSetLength_using_StringInit_with_StringFill(str, 100)); // false StringFill не поддерживает работу с 0х0000 short value } bool StringSetLength_using_StringInit(string &string_var, int new_length){ bool result = false; int prev_length = StringLen(string_var); if(new_length == prev_length){ result = true; return result; } string data = string_var; if(new_length < prev_length){ StringSetLength(data, new_length); }else{ string string_tail; StringInit(string_tail, new_length - prev_length, 0x0000); data += string_tail; } if(StringLen(data) == new_length){ string_var = data; result = true; } return result; } bool StringSetLength_using_ShortArrayToString(string &string_var, int new_length){ bool result = false; int prev_length = StringLen(string_var); if(new_length == prev_length){ result = true; return result; } string data = string_var; if(new_length < prev_length){ StringSetLength(data, new_length); }else{ short data_array[]; StringToShortArray(data, data_array); ArrayResize(data_array, new_length); ArrayFill(data_array, prev_length, new_length - prev_length, 0x0000); data = ShortArrayToString(data_array, 0, new_length); } if(StringLen(data) == new_length){ string_var = data; result = true; } return result; } bool StringSetLength_using_StringInit_with_StringFill(string &string_var, int new_length){ bool result = false; int prev_length = StringLen(string_var); if(new_length == prev_length){ result = true; return result; } string data = string_var; if(new_length < prev_length){ StringSetLength(data, new_length); }else{ string string_tail; StringInit(string_tail, new_length - prev_length, 0x1111); StringFill(string_tail, 0x0000); data += string_tail; } if(StringLen(data) == new_length){ string_var = data; result = true; } return result; } fxsaber 2019.05.15 04:26 #24599 Sergey Dzyublik: 在最近的MT版本中,作为字符串处理模式转变的一部分,我们看到有人拒绝使用以NULL为结尾的字符串。你能详细说明一下这个想法吗? Игорь Евдокимов 2019.05.15 09:58 #24600 rsrozhkov: 有知识的人,你能给我一个提示吗!?我有一个基于真实符号而创建的自定义符号。我怎样才能使交易从这个符号的图表中获得?还是MT5中没有这样的功能?答案是不言而喻的。一个自定义的符号 是通过某种转换从真实的符号中得到的。有人(EA、脚本或手动)必须做反向转换,为真实的符号发送订单。 1...245324542455245624572458245924602461246224632464246524662467...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
使用上述代码,一切都按预期进行,
,但是如果我们试图扩展功能,不仅支持简单的类型,如A类的(字符串),还支持结构,
,结果发现基类的模板赋值运算符覆盖了子类的默认赋值运算符,扼杀了整个功能。
其他运算符可以作为变通方法,如 "运算符*=",但这是个麻烦事。
致开发者:
请增加为默认赋值运算符(复制构造器)指定强制代码生成的可能性。
你能告诉我,如果我在我的EA中使用标准指标,例如iMA。
如何设置它们的绘图样式,以便在可视化窗口中正确显示它们?
你能告诉我,如果我在我的EA中使用标准指标,例如iMA。
我如何设置绘图样式,使其在可视化窗口中正确显示?
像这样:自定义移动平均线输入颜色
像这样:自定义移动平均线输入颜色
事实上,你必须编写自己的指标。重写标准指标并不是解决办法。
问题是究竟如何为标准指标设置样式。
还有别的办法吗?
然而,StringSetLength函数的操作引发了一些问题。
使用StringSetLength,你只能截断一个字符串的长度,而不能增加它,这多少有点说不通。
这是有意的行为吗?
结果。
在最近的MT版本中,作为字符串处理模式转变的一部分,我们看到有人拒绝使用以NULL为结尾的字符串。
你能详细说明一下这个想法吗?
有知识的人,你能给我一个提示吗!?我有一个基于真实符号而创建的自定义符号。我怎样才能使交易从这个符号的图表中获得?还是MT5中没有这样的功能?
答案是不言而喻的。一个自定义的符号 是通过某种转换从真实的符号中得到的。有人(EA、脚本或手动)必须做反向转换,为真实的符号发送订单。