Hatalar, hatalar, sorular - sayfa 1978

 
fxsaber :

Krom.

firefox'ta hala en üstte güncellenen temalar

ve soldaki mavi. akıllı telefondaki tarayıcıyı deneyin

 
STARIJ :
firefox'ta hala en üstte güncellenen temalar

ve soldaki mavi

Chrome'da da aynı. Bu mavi/gri simgeleri otomatik olarak göremiyorum. Ve kalın okunmamış konular beni o kadar etkiledi ki, bunun hakkında yazdım bile.

 
Hizmet masasına daha önce bir istek gönderen var mı veya MQ'nun MQL'ye arkadaş ekleme planlarından haberi var mı? Kesinlikle eksik.
 

AcePrime-Demo hesaplarıyla ilgili ilginç bir vaka.

Danışmanı başlatmak

 // Советник возвращает полностью сформированные торговые запросы (включая ручные)
#define TOSTRING(A)   #A + " = " + ( string )(A) + "\n"
#define TOSTRING2(A) #A + " = " + EnumToString (A) + " (" + ( string )(A) + ")\n"

string ToString( const MqlTradeRequest &Request )
{
   return (TOSTRING2(Request.action) + TOSTRING(Request.magic) + TOSTRING(Request.order) +
         TOSTRING(Request.symbol) + TOSTRING(Request.volume) + TOSTRING(Request.price) + 
         TOSTRING(Request.stoplimit) + TOSTRING(Request.sl) +  TOSTRING(Request.tp) + 
         TOSTRING(Request.deviation) + TOSTRING2(Request.type) + TOSTRING2(Request.type_filling) +
         TOSTRING2(Request.type_time) + TOSTRING(Request.expiration) + TOSTRING(Request.comment) +
         TOSTRING(Request.position) + TOSTRING(Request.position_by));
}

string ToString( const MqlTradeResult &Result )
{
   return (TOSTRING(Result.retcode) + TOSTRING(Result.deal) + TOSTRING(Result.order) +
         TOSTRING(Result.volume) + TOSTRING(Result.price) + TOSTRING(Result.bid) +
         TOSTRING(Result.ask) + TOSTRING(Result.comment) + TOSTRING(Result.request_id) +
         TOSTRING(Result.retcode_external));
}

void OnTradeTransaction (   const MqlTradeTransaction &, const MqlTradeRequest & Request, const MqlTradeResult & Result )
{
   if (Request.action)
  {
     Print (ToString(Request));
     Print (ToString(Result));    
  }
}

Ve ellerimizle herhangi bir bo-sembolde (ikili opsiyonlar) bir pozisyon açmaya çalışıyoruz. Terminal günlüğünde alıyoruz

'3182780': market sell 1.00 XAUUSDbo
'3182780': failed market sell 1.00 XAUUSDbo [Invalid data]

Uzmanın günlüğünde

Request.action = TRADE_ACTION_DEAL ( 1 )
Request.magic = 0
Request.order = 0
Request.symbol = XAUUSDbo
Request.volume = 1.0
Request.price = 0.0
Request.stoplimit = 0.0
Request.sl = 0.0
Request.tp = 0.0
Request.deviation = 0
Request.type = ORDER_TYPE_SELL ( 1 )
Request.type_filling = ORDER_FILLING_FOK ( 0 )
Request.type_time = ORDER_TIME_GTC ( 0 )
Request.expiration = 1970.01 . 01 00 : 00 : 00
Request.comment = 
Request.position = 0
Request.position_by = 0

Result.retcode = 4
Result.deal = 0
Result.order = 0
Result.volume = 0.0
Result.price = 0.0
Result.bid = 0.0
Result.ask = 0.0
Result.comment = 
Result.request_id = 9
Result.retcode_external = 0

Kontrol edildi, OrderCheck true değerini döndürür. İşlem seansı açık, vb. Ancak MT5, hem manuel hem de otomatik isteklere aynı şekilde yemin eder, retcode = 4 verir. Terminal her şeyin yolunda olduğunu söylediğinde ve siz denediğinizde ve hiçbir şey çıkmadığında neden böyle bir durum ortaya çıkıyor? Açmak için çalışmayacağını talep etmeden nasıl anlaşılır? Ve bu dördüncü dönüş kodu nedir?

GetLastError() döndürür

ERR_TRADE_SEND_FAILED

4756

Ticaret isteği gönderilemedi


Her şey sorunsuz oynuyor.
 

Tünaydın.

Bana öyle geliyor ki, böyle bir kod derlenmemeli (özel üye erişim hatası olmalı)?

 class cA;
class cB;
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cA
  {
   //====================
private :
   //====================
   //===============
   //===============
   cB               *B;
   //===============
   //===============
   void               testfunc( void ){:: Print ( __FUNCSIG__ );}
   //====================
public :
   //====================
   //===============
   //===============
   void               test( void )
     {
      :: Print ( __FUNCSIG__ );

       if (:: CheckPointer (:: GetPointer ( this .B))== POINTER_INVALID ) return ;

       this .B.testfunc();    // Здесь идет вызов private метода объекта B, что вроде как не должно быть возможным
     }
   //===============
   //===============
   void               SetB(cB * const b){ this .B=b;}
   //===============
   //===============
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class cB  : public cA
  {

  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit ()
  {
//---
   cA A;
   cB B;

   A.SetB(&B);
   A.test();

//---
   return ( INIT_SUCCEEDED );
  }

SD'de her şeyin yolunda olduğunu söylüyorlar ve bu yüzden mümkün ...

 
Andrey Barinov :

Tünaydın.

Bana öyle geliyor ki, böyle bir kod derlenmemeli (özel üye erişim hatası olmalı)?

SD'de her şeyin yolunda olduğunu söylüyorlar ve bu yüzden mümkün ...

MQL kurallarına göre, bir sınıfın bir örneği, ilkiyle aynı sınıfa aitse, başka bir örneğin özel alanlarına ve yöntemlerine serbestçe erişebilir. cB, cA'dan miras aldığı için, cB, cA'dır ve bu nedenle cA, nerede bildirilirse bildirilsin, cB'nin herhangi bir özel yöntemine ve örnek alanlarına erişebilir.

 
Vasiliy Sokolov :

MQL kurallarına göre, bir sınıfın bir örneği, ilkiyle aynı sınıfa aitse, başka bir örneğin özel alanlarına ve yöntemlerine serbestçe erişebilir. cB, cA'dan miras aldığı için, cB, cA'dır ve bu nedenle cA, nerede bildirilirse bildirilsin, cB'nin herhangi bir özel yöntemine ve örnek alanlarına erişebilir.

Teşekkür ederim. Belgelerde göremedim. burnunu sokabilir misin?
 
Andrey Barinov :
Teşekkür ederim. Belgelerde göremedim. burnunu sokabilir misin?
Bu belgelerde yok, çünkü dilin bir tür belgesiz "özelliği"dir. Bu özellik çok garip ve tartışmalı, ancak yine de oldu.
 
Andrey Barinov :
Teşekkür ederim. Belgelerde göremedim. burnunu sokabilir misin?

Bu, C++'da da geçerlidir (ve MQL, C++'ın görüntüsünde ve benzerliğinde oluşturulmuştur). Dedikleri gibi, C++ gizliliği nesne düzeyinde değil, sınıf düzeyindedir. Aksi takdirde, örneğin tüm özel alanlar için özel alıcı yöntemleri olmadan bir kopya oluşturucu yapmak imkansız olurdu.

 
Stanislav Korotky :

C++ 'da da aynı

Bu örneği C++ ile derlemeyi denediniz mi - yoksa genel teorik akıl yürütme mi?