// Вместо #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は同期されません。
残念ながら、美しい解決策は見当たりません。これまでのところ
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.
...
まあ、つまり、自分のクラスを入れると、TradeTrade.mqhがすでに出てくるということです。
TradeTrade.mqhを継承する必要がある場合はどうすればよいですか?どうやって?
まあ、つまり、自分のクラスを接続すると、TradeTrade.mqhが引き出されるわけです。
継承は従来通り機能します。でも、質問ははっきりさせたほうがいいですよ。
すなわち、コードの最初の行でCTradeをベースクラスとする。
この場合、どうあるべきなのでしょうか?<TradeTrade.mqh> の代わりに、推奨されるコードを挿入する必要がありますか?
このコードは CTradeから継承してください。
すなわち、コードの最初の行でCTradeをベースクラスとする。
したがって、TradeTrade.mqh をプログラムに接続するのではなく、例えば、クラスを含む #include <aTradeSync.mqh> とそこに書かれた #include <TradeTrade.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 - СБ станет синхронизированной, иначе - стандартной.