// Вместо #include <Trade\Trade.mqh> использовать этот код // Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах. #ifdef OrderSend #undef OrderSend
#include <OrderSendSync.mqh> // Если хочется, чтобы OrderSend был синхронизированным. #include <TradeSync.mqh> // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.
#include <OrderSendSync.mqh> // Если хочется, чтобы OrderSend был синхронизированным. #include <TradeSync.mqh> // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.
到目前为止,提议的解决方案还没有击中其他东西。因此,我不能再建议它更好了。
如果你现在把解决方案放在SB前面,它就会变成同步的。
#include <Trade\Trade.mqh>
我可以举个小例子吗?连接班级时--你的和SB的。
#include <Trade\Trade.mqh>
进入主题)
摘自这里
进入主题)
摘自这里
刚刚调换了线路...
我可以给你一个小例子吗?插班时--你的和SB的。
#include <Trade\Trade.mqh>
我正在进入这个主题)。
是的,我忘了这个细微差别。然而,这种限制在那里不存在了......
如果你重新安排嵌套,当然就不会发誓了。但效果将是无效的--SB将不会被同步。
不幸的是,我没有看到一个漂亮的解决方案。到目前为止
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.
#ifdef OrderSend
#undef OrderSend
#define CTrade CTradeBase
#include <Trade\Trade.mqh>
#undef CTrade
class CTrade : public CTradeBase
{
virtual bool OrderSend(const MqlTradeRequest &request,MqlTradeResult &result)
{
bool res;
string action="";
string fmt ="";
//--- action
if(m_async_mode)
res=::OrderSendAsync(request,result);
else
res=ORDERSEND::OrderSendSync(request,result); // единственное отличие от стандарта
//--- check
if(res)
{
if(m_log_level>LOG_LEVEL_ERRORS)
PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
}
else
{
if(m_log_level>LOG_LEVEL_NO)
PrintFormat(__FUNCTION__+": %s [%s]",FormatRequest(action,request),FormatRequestResult(fmt,request,result));
}
//--- return the result
return(res);
}
};
// Эта строчка позволяет сделать все OrderSend корректными.
#define OrderSend ORDERSEND::OrderSendSync
#else
#include <Trade\Trade.mqh>
#endif
我的错,过于自信的说法,没有检查。
是的,我忘了这一点。然而,这种限制在那里不存在了......
当然,如果你重新安排嵌套,它就不会发誓。但效果将是无效的--SB将不会被同步。
不幸的是,我没有看到一个漂亮的解决方案。到目前为止,所以
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.
...
那么,也就是说,要插入你的类,Trade\Trade.mqh就已经拉出来了。
如果需要从Trade\Trade.mqh继承呢?如何?
嗯,也就是连接你的班级,Trade\Trade.mqh会被拉出来。
继承权将像以前一样工作。但你最好澄清一下你的问题。
也就是说,在你的代码的第一行中,使CTADR成为基类。
在这种情况下应该如何?你应该插入建议的代码,而不是#include <Trade\Trade.mqh>?
从CTrade继承这段代码。
也就是说,在你的代码的第一行中,使CTADR成为基类。
因此,你不应该再把Trade\Trade.mqh连接到你的程序中,而应该是一个inluder,例如#include <TradeSync.mqh>,它包含你的类,并且#include <Trade\Trade.mqh>写在最开始。
我不会这样做,因为这需要改变以前编写的EA。而纯粹的OrderSend不会被同步,只有SB-OrderSend。不是每个人都只使用SB。有些人甚至使用纯MQL5。
因此,下面的解决方案目前看来是最佳的。所有的EA都能正常工作,不需要改变。
#include <TradeSync.mqh> // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.
不会这样做,因为这需要改变以前写的EA。纯粹的OrderSend将不会被同步,只有SB-OrderSend。不是每个人都只使用SB。有些人甚至使用纯MQL5。
因此,下面的解决方案目前看来是最佳的。所有的EA都能正常工作,不需要改变。
#include <TradeSync.mqh> // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.