mql5语言的特点、微妙之处以及技巧 - 页 112 1...105106107108109110111112113114115116117118119...247 新评论 fxsaber 2018.12.22 21:30 #1111 Alexey Navoykov: 顺便说一下,我得出的结论是,在一般情况下,如果函数的返回值类型绝对是任何类型,那么这个问题就不能通过MQL手段来解决。 需要decltype,这里没有。指针会返回,但结构--我不这么认为。毕竟,它应该是参考的。 Alexey Navoykov 2018.12.22 21:33 #1112 fxsaber:这也是一样的。现在,2个参数被传递给函数,而不是3个。 MacrosFunc(SelectHandle(Memory(A, false)), SelectHandle(Memory(A)) ? B : 0) fxsaber 2018.12.22 21:35 #1113 Alexey Navoykov:现在一般是向函数传递2个参数,而不是3个。 二是绝对的原始问题。而三是它的概括性。 关于交易、自动交易系统和交易策略测试的论坛 错误、漏洞、问题 fxsaber, 2018.12.21 22:15 让我澄清一下,NewHandle - 可以是一个常数。即有效调用 time = MACROS(0, TimeCurrent()); // TimeCurrent из 0-хендла. time = MACROS(1, TimeCurrent()); // TimeCurrent из 1-хендла. MACROS(0, SymbolInfoTick(_Symbol, Tick)); // SymbolInfoTick из 0-хендла. #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) Price = MACROS(3, Bid); // Bid из 3-хендла. 从这些例子中,似乎可以看出对宏的要求是什么。 Alexey Navoykov 2018.12.22 22:10 #1114 C++标准并没有定义这个顺序,而是由编译器决定。MQL开发人员必须确保这个顺序可以改变,或者将来是否有任何计划来改变它。 因此,这是最好的办法。 template <typename T1, typename T2> T2 MacrosFunc( const T1 handle, const T2 Value ) { SelectHandle(Memory(handle, false)); return(Value); } #define MACROS(A, B) MacrosFunc(A, SelectHandle(Memory(A)) ? (B) : NULL) fxsaber 2018.12.22 23:06 #1115 Alexey Navoykov:C++标准并没有定义这个顺序,而是由编译器决定。MQL开发人员必须确保这个顺序可以改变,或者将来是否有任何计划来改变它。 所以这种方式更好。 是的,它更可靠。 Алексей Тарабанов 2018.12.22 23:57 #1116 我被耍了,亲爱的编辑部。 在不了解解释器将如何解释代码的情况下,将代码交给解释器...高路。 pavlick_ 2018.12.23 01:07 #1117 关于交易、自动交易系统和交易策略测试的论坛 虫子,虫子,问题 fxsaber, 2018.12.21 10:23 我想不出来,请大家给个提示。有这样一个时间的收购 int GetHandle() { return(0); } bool SelectHandle( int ) { return(true); } int NewHandle = 0; int PrevHandle = GetHandle(); datetime time = SelectHandle(NewHandle) ? TimeCurrent() : 0; SelectHandle(PrevHandle); 如何编写一个做同样事情的宏 time = MACROS(NewHandle, TimeCurrent()); // Макрос 问题是PrevHandle没有在宏中创建。我不明白为什么我的解决方案更糟糕,我也把它粘贴在这里。//handle_t MACROS_helper_PrevHandle; int MACROS_helper_PrevHandle; template <typename T> T macros_helper_fn(T t) {SelectHandle(MACROS_helper_PrevHandle); return t;} #define MACROS(NEW_HANDLE_, FN_) ((MACROS_helper_PrevHandle=GetHandle())*0 == 0 ? \ SelectHandle(NEW_HANDLE_) ? macros_helper_fn(FN_) : 0 : 0) 值得注意的是--通过趋势运算符实现逗号运算符(好吧,没有什么高明之处,但这是我第一次遇到)。 这一点并不清楚--为什么要通过模板拉出一个手柄类型?会不会有不同类型的手柄,这不是一个大问题。而一般来说,句柄类型将通过typedef/define来指定。 Алексей Тарабанов 2018.12.23 01:59 #1118 pavlick_:我看不出我的解决方案有什么不好,我也把它放在这里吧。 值得注意的是--通过趋势运算符实现逗号运算符(好吧,没什么了不起的,但这是我第一次遇到)。 这一点并不清楚--我们为什么要通过模板来拉动一个手柄类型?会不会有不同类型的手柄,这不是一个大问题。而一般情况下,句柄类型将通过typedef/define来指定。 这一点也不好。什么是手柄? pavlick_ 2018.12.23 02:20 #1119 Алексей Тарабанов:这一点也不好。什么是手柄?任务条件是:有一些环境通过描述符(handle)改变,你需要在一个宏中实现。 1.记住当前的手柄 2.将环境切换到新的手柄 3.从环境中检索所需的参数 4.将环境切换到旧手柄 5.返回参数 Алексей Тарабанов 2018.12.23 04:10 #1120 pavlick_:任务条件是:有一些环境通过描述符(handle)改变,你需要在一个宏中实现。 1.记住当前的手柄 2.将环境切换到新的手柄 3.从环境中检索所需的参数 4.改变环境到旧的手柄 5.返回参数谢谢你的答复。 1...105106107108109110111112113114115116117118119...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
顺便说一下,我得出的结论是,在一般情况下,如果函数的返回值类型绝对是任何类型,那么这个问题就不能通过MQL手段来解决。 需要decltype,这里没有。
指针会返回,但结构--我不这么认为。毕竟,它应该是参考的。
这也是一样的。
现在,2个参数被传递给函数,而不是3个。
现在一般是向函数传递2个参数,而不是3个。
二是绝对的原始问题。而三是它的概括性。
关于交易、自动交易系统和交易策略测试的论坛
错误、漏洞、问题
fxsaber, 2018.12.21 22:15
C++标准并没有定义这个顺序,而是由编译器决定。MQL开发人员必须确保这个顺序可以改变,或者将来是否有任何计划来改变它。
因此,这是最好的办法。
C++标准并没有定义这个顺序,而是由编译器决定。MQL开发人员必须确保这个顺序可以改变,或者将来是否有任何计划来改变它。
所以这种方式更好。
是的,它更可靠。
我被耍了,亲爱的编辑部。
在不了解解释器将如何解释代码的情况下,将代码交给解释器...高路。
关于交易、自动交易系统和交易策略测试的论坛
虫子,虫子,问题
fxsaber, 2018.12.21 10:23
我想不出来,请大家给个提示。有这样一个时间的收购
如何编写一个做同样事情的宏
问题是PrevHandle没有在宏中创建。
我不明白为什么我的解决方案更糟糕,我也把它粘贴在这里。
值得注意的是--通过趋势运算符实现逗号运算符(好吧,没有什么高明之处,但这是我第一次遇到)。
这一点并不清楚--为什么要通过模板拉出一个手柄类型?会不会有不同类型的手柄,这不是一个大问题。而一般来说,句柄类型将通过typedef/define来指定。
我看不出我的解决方案有什么不好,我也把它放在这里吧。
值得注意的是--通过趋势运算符实现逗号运算符(好吧,没什么了不起的,但这是我第一次遇到)。
这一点并不清楚--我们为什么要通过模板来拉动一个手柄类型?会不会有不同类型的手柄,这不是一个大问题。而一般情况下,句柄类型将通过typedef/define来指定。
这一点也不好。什么是手柄?
这一点也不好。什么是手柄?
任务条件是:有一些环境通过描述符(handle)改变,你需要在一个宏中实现。
1.记住当前的手柄
2.将环境切换到新的手柄
3.从环境中检索所需的参数
4.将环境切换到旧手柄
5.返回参数
任务条件是:有一些环境通过描述符(handle)改变,你需要在一个宏中实现。
1.记住当前的手柄
2.将环境切换到新的手柄
3.从环境中检索所需的参数
4.改变环境到旧的手柄
5.返回参数
谢谢你的答复。