mql5语言的特点、微妙之处以及技巧 - 页 111 1...104105106107108109110111112113114115116117118...247 新评论 Artyom Trishkin 2018.12.15 06:11 #1101 pavlick_:...请使用内置的文本格式--在信息输入栏上方有一个菜单--一切都在那里。而热键在那里也有描述。 我已经修复了你的 "引用"。 Alexey Navoykov 2018.12.15 06:13 #1102 pavlick_:怎么会一样呢?有一个自动复制构造器,所有的操作都会有一个视图。 ... ar.Add(new(q));按照我的理解,我指的是new Q(q)。 现在很清楚了,我们说的是MQL中没有自动复制构造函数的问题。 fxsaber 2018.12.22 19:53 #1103 问题 关于交易、自动交易系统和交易策略测试的论坛 虫子、虫子、问题 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不能被创建。 关于交易、自动交易系统和策略测试的论坛 虫子、虫子、问题 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-хендла. 解决方案 template <typename T> T Memory( const T NewValue, const bool SetFlag = true ) { static T PrevValue; if (SetFlag) PrevValue = NewValue; return(PrevValue); } template <typename T1, typename T2> T2 MacrosFunc( const T1, const T2 Value, const T1 ) { return(Value); } #define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false)), B, SelectHandle(Memory(A))) Alexey Navoykov 2018.12.22 20:37 #1104 fxsaber: 解决方案... template <typename T1, typename T2> T2 MacrosFunc( const T1, const T2 Value, const T1 ) { return(Value); } #define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false)), B, SelectHandle(Memory(A)))你将永远有表达式B 的计算和返回,而不考虑其他。 fxsaber 2018.12.22 20:53 #1105 Alexey Navoykov:你的B 表达式将始终被计算并返回,而不考虑其他。有一个辅助函数的输入参数的顺序(从右到左)计算。 Alexey Navoykov 2018.12.22 21:07 #1106 fxsaber:对辅助函数的输入参数有一个顺序的(从右到左)计算。 这个宏总是返回B的值。 fxsaber 2018.12.22 21:10 #1107 Alexey Navoykov: 这个宏总是返回B的值,这改变了什么?尝试反驳该决定。我没有看到任何错误。 首先,它切换到NewHandle,然后采取B,然后它切换到前一个手柄。 Alexey Navoykov 2018.12.22 21:18 #1108 fxsaber:首先,它切换到NewHandle,然后采取B,然后它切换到前一个手柄。而最初的任务是这样的。 SelectHandle(NewHandle) ? TimeCurrent() : 0; SelectHandle(PrevHandle); 即条件必须得到满足 fxsaber 2018.12.22 21:25 #1109 Alexey Navoykov:而最初的问题是这样的。这也是一样的。 template <typename T1, typename T2> T2 MacrosFunc( const T1 NewHandle, const T2 Value ) { return(Value); } #define MACROS(A, B) MacrosFunc(SelectHandle(Memory(A, false)), SelectHandle(Memory(A)) ? B : 0) 在给出评论后,多少总结了一下问题--SymbolInfoTick和SymbolInfoDouble,等等。 Alexey Navoykov 2018.12.22 21:28 #1110 顺便说一下,我得出的结论是,在一般情况下,如果函数的返回值类型绝对是任何类型,那么这个问题是无法通过MQL手段解决的。 需要一个decltype,这里没有。 1...104105106107108109110111112113114115116117118...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
请使用内置的文本格式--在信息输入栏上方有一个菜单--一切都在那里。而热键在那里也有描述。
我已经修复了你的 "引用"。
怎么会一样呢?有一个自动复制构造器,所有的操作都会有一个视图。
... ar.Add(new(q));
按照我的理解,我指的是new Q(q)。 现在很清楚了,我们说的是MQL中没有自动复制构造函数的问题。
关于交易、自动交易系统和交易策略测试的论坛
虫子、虫子、问题
fxsaber, 2018.12.21 10:23
我想不出来,请大家给个提示。有这样一个时间的收购
如何编写一个做同样事情的宏
问题是,宏中的PrevHandle不能被创建。
关于交易、自动交易系统和策略测试的论坛
虫子、虫子、问题
fxsaber, 2018.12.21 22:15
解决方案
解决方案
你将永远有表达式B 的计算和返回,而不考虑其他。
你的B 表达式将始终被计算并返回,而不考虑其他。
有一个辅助函数的输入参数的顺序(从右到左)计算。
对辅助函数的输入参数有一个顺序的(从右到左)计算。
这个宏总是返回B的值,这改变了什么?
尝试反驳该决定。我没有看到任何错误。
首先,它切换到NewHandle,然后采取B,然后它切换到前一个手柄。
首先,它切换到NewHandle,然后采取B,然后它切换到前一个手柄。
而最初的任务是这样的。
即条件必须得到满足而最初的问题是这样的。
这也是一样的。
在给出评论后,多少总结了一下问题--SymbolInfoTick和SymbolInfoDouble,等等。
顺便说一下,我得出的结论是,在一般情况下,如果函数的返回值类型绝对是任何类型,那么这个问题是无法通过MQL手段解决的。 需要一个decltype,这里没有。