Mql5 dilinin özellikleri, incelikleri ve çalışma yöntemleri - sayfa 6

 
fxsaber :
Önerilen çözüm şimdiye kadar başka bir şeye rastlamadı. Bu yüzden daha iyisini sunamazdım.
Paylaşım için teşekkürler.
 
fxsaber :
Şimdi SB'den önce bir çözüm eklerseniz, senkronize hale gelecektir.
Küçük bir örnek alabilir miyim? Sınıfları bağlarken - sizinki ve SB:
#include <Ваш_класс.mqh>
#include <Trade\Trade.mqh>
Derleme çökmeye başlar
 
Artyom Trishkin :
Küçük bir örnek alabilir miyim? Sınıfları bağlarken - sizinki ve SB:
#include <Ваш_класс.mqh>
#include <Trade\Trade.mqh>
Derleme çökmeye başlar

konuya giriyorum)

buradan alındı

 
Vitaly Muzichenko :

konuya giriyorum)

buradan alındı

Çoktan.

Sadece hatları değiştirdim...
 
Artyom Trishkin :
Küçük bir örnek alabilir miyim? Sınıfları bağlarken - sizinki ve SB:
#include <Ваш_класс.mqh>
#include <Trade\Trade.mqh>
Derleme çökmeye başlar
Suçlu, aşırı kendinden emin bir şekilde ifade etti, kontrol etmedi.
Vitaly Muzichenko :

konuya giriyorum)

Evet, bu nüansı unutmuşum. Doğru, böyle bir kısıtlama yok ...

Kapanmaları yeniden düzenlerseniz, elbette küfür olmaz. Ancak etki sıfır olacak - SB senkronize edilmeyecek.

Ne yazık ki, iyi bir çözüm görmüyorum. şimdilik olsun

// Вместо #include <Trade\Trade.mqh> использовать этот код
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.

#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
 
fxsaber :
Suçlu, aşırı kendinden emin bir şekilde ifade etti, kontrol etmedi.

Evet, bu nüansı unutmuşum. Doğru, böyle bir kısıtlama yok ...

Kapanmaları yeniden düzenlerseniz, elbette küfür olmaz. Ancak etki sıfır olacak - SB senkronize edilmeyecek.

Ne yazık ki, iyi bir çözüm görmüyorum. şimdilik olsun

// Вместо #include <Trade\Trade.mqh> использовать этот код
// Это сделает СБ синхронизированным и не потребует каких-либо изменений в экспертах.

...
Ya Trade\Trade.mqh'den miras almak istiyorsanız? Nasıl?

Yani, sınıfınızı bağlamak için, Trade\Trade.mqh bir römork tarafından çekilecektir.
 
Artyom Trishkin :
Ya Trade\Trade.mqh'den miras almak istiyorsanız? Nasıl?

Yani, sınıfınızı bağlamak için, Trade\Trade.mqh bir römork tarafından çekilecektir.
Kalıtım eskisi gibi çalışacaktır. Ama sorunuzu daha iyi netleştirin.
 
fxsaber :
Kalıtım eskisi gibi çalışacaktır. Ama sorunuzu daha iyi netleştirin.
İşte CTrade'den miras alınacak kod .

Yani, kodunuzdaki ilk satırda CTrade'i temel sınıf yapın:

class ORDERSEND  : public CTrade
Buna göre, programınıza Trade\Trade.mqh değil, örneğin sınıfınızı içeren bir içerme, örneğin #include <aTradeSync.mqh> ve orada, en başında #include <Trade\Trade bağlanın. mqh > .

Bu durumda nasıl olunur? #include <Trade\Trade.mqh> yerine önerilen kod eklensin mi?
 
Artyom Trishkin :
İşte CTrade'den miras alınacak kod .

Yani, kodunuzdaki ilk satırda CTrade'i temel sınıf yapın:

class ORDERSEND  : public CTrade

Buna göre, programınıza Trade\Trade.mqh değil, örneğin sınıfınızı içeren bir içerme, örneğin #include <aTradeSync.mqh> ve orada, en başında #include <Trade\Trade bağlanın. mqh > .

Bunu yapmazdım çünkü bu, önceden yazılmış Uzman Danışmanların değiştirilmesini gerektirecektir. Ve saf OrderSend senkronize edilmeyecek, sadece Sat-OrderSend senkronize edilecek. Yine de herkes SB kullanmaz. Bazıları da saf MQL5'i küçümsemiyor.

Bu nedenle, aşağıdaki çözüm şimdiye kadar optimal görünüyor. Tüm uzmanlar değişiklik yapmadan çalışacaktır.

#include <OrderSendSync.mqh> // Если хочется, чтобы OrderSend был синхронизированным.
#include <TradeSync.mqh>     // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.
Dosyalar:
 
fxsaber :

Bunu yapmazdım çünkü bu, önceden yazılmış Uzman Danışmanların değiştirilmesini gerektirecektir. Ve saf OrderSend senkronize edilmeyecek, sadece Sat-OrderSend senkronize edilecek. Yine de herkes sadece SB kullanmaz. Bazıları da saf MQL5'i küçümsemiyor.

Bu nedenle, aşağıdaki çözüm şimdiye kadar optimal görünüyor. Tüm uzmanlar değişiklik yapmadan çalışacaktır.

#include <OrderSendSync.mqh> // Если хочется, чтобы OrderSend был синхронизированным.
#include <TradeSync.mqh>     // Если подключен OrderSendSync.mqh - СБ станет синхронизированной, иначе - стандартной.
Apaçık. Sayesinde.