错误、漏洞、问题 - 页 2353

 
Alexey Navoykov:
你在哪里看到过文字把手?) 如果我们把事情复杂化,手柄也可以被指定为一个结构
是的...等等。
struct A { int i; };
bool SelectHandle( A& ) { return true; }
A GetHandle() { A a; return a; }
A NewHandle;
datetime time = MACRO100( NewHandle, TimeCurrent());

也适用

 
A100:
是的...等等。

也适用

还有一个数组 ) 而且必须先做成字节数组,然后用专有的TypeToBytes库将其转换为一个结构 )

 
Alexey Navoykov:

还剩下一个数组 ) 而且必须先把它做成一个字节数组,然后用专有的TypeToBytes 库把它转换成一个结构)

我无法测试它--我没有这样的 库文件(build 1961x32)。一周后,你就可以亲眼看到了

 
Alexey Navoykov:
你在哪里看到过文字把手?)而如果我们把条件复杂化,手柄也可以被指定为一个结构。

请给我一个关于该任务的链接。
谢谢你。

 
Sergey Dzyublik:

请给我一个关于该任务的链接。
谢谢你。

https://www.mql5.com/ru/forum/1111/page2350#comment_9974834

 

关于交易、自动交易系统和交易策略测试的论坛

虫子、虫子、问题

pavlick_, 2018.12.21 17:23

int MACROS_helper_PrevHandle;
datetime MACROS_helper_time;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?  \
                                     (MACROS_helper_time=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ? \
                                        SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? MACROS_helper_time : 0 : 0 : 0
不幸的是,这个变体指的是
Alexey Navoykov:
要使用的全局变量


我没有过多地考虑过这个问题。我没有马上找到解决办法,所以我决定在这个论坛上学习。我对阴谋不感兴趣,因为我想在实践中使用它--虚拟书目,没有它我就无法想象战斗的EA。

好吧,既然有两个人已经说过,有一个不需要额外变量的解决方案,我将在周末试试。

让我明确指出,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-хендла.
 

fxsaber:

NewHandle可以是一个常数。也就是说,像这样一个有效的调用

一切正常。

#include "Простейшее.mqh"
 int GetHandle() { return 0; }
bool SelectHandle( int ) { return true; }
#define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID)
void OnStart()
{
        datetime time = MACRO100(0, TimeCurrent());
                 time = MACRO100(1, TimeCurrent());
        MqlTick tick;
        MACRO100(0, SymbolInfoTick(_Symbol, tick));
        double price = MACRO100(3, Bid);
}

还有什么时候会有机会...以检查真实水平
从讨论的情况来看...在这里...严肃的proggers巧妙地玩弄听起来很高的词汇,包括关于OOP等。(我有时甚至不明白一半以上的说法)

那什么是真的呢? 婷婷? 还是不是所有人都已经加入了?
我必须再次强调:如果一些复杂的,......不寻常的或需要特殊知识的东西 - 将被立即写入,而这里 - 最简单的(!)。因此,打开你的大脑,写下选项...或者等待!

 
你能把它放在一个单独的主题里,从https://www.mql5.com/ru/forum/1111/page2350#comment_9974834? 它会在这里消失,我想看看A100是如何拉出液体的。
 
pavlick_:
我想看看A100如何拉出液体。

你为什么要大惊小怪?你为什么不创造一个 三位数的工作,让法庭来决定谁自己拉屎?

 
fxsaber:
不幸的是,这个选项指的是


我没有过多考虑这个问题。我没有在现场找到解决方案,所以我决定在论坛上学习。阴谋论并不有趣,因为我想在实践中使用--虚拟书库,没有它我就无法想象战斗的EA。

我已经以不同的方式思考过这个问题了。如果我理解正确的话,重要的是宏返回的类型的可变性。这可能是在C++中解决的问题。

//------------------------------------ 1 вариант
template <typename T>
T f(T(*fp)()) {...}
//------------------------------------ 2 вариант
template <typename T>
struct Store {
   static inline T val;
};
int MACROS_helper_PrevHandle;
#define  MACROS(NEW_HANDLE_, FN_)   (MACROS_helper_PrevHandle=GetHandle())*0 == 0 ?           \
      (Store<decltype(FN_)>::val=SelectHandle(NEW_HANDLE_) ? FN_ : 0)*0 == 0 ?               \
      SelectHandle(MACROS_helper_PrevHandle)*0 == 0 ? Store<decltype(FN_)>::val : 0 : 0 : 0

但gcc预处理程序可以做到这一点。

#define  M(FN_) ({int a=5; ; FN_;})
int ff() {return 50;}

int val = M(ff());

在µl中实现这一切的尝试以失败告终。也许最好的解决办法是修改SelectHandle(new, set_next=INT_MAX)。虽 然,也许有人会用一个棘手的微距给我带来惊喜。

原因: