Fehler, Irrtümer, Fragen - Seite 1978

 
fxsaber:

Chrom.

FireFox hat immer noch aktualisierte Themen an der Spitze

und blau auf der linken Seite. Versuchen Sie den Browser, der auf Ihrem Smartphone war

 
STARIJ:
in FireFox immer noch aktualisierte Themen an der Spitze

Und die blauen auf der linken Seite

In Chrome ist es dasselbe. Ich kann mich nicht dazu bringen, diese blauen/grauen Symbole automatisch zu sehen. Und die fette Schrift der ungelesenen Themen ist so beeindruckend, dass ich sogar darüber geschrieben habe.

 
Hat jemand bereits an den Servicedesk geschrieben oder weiß vielleicht von den Plänen von MQ, Friend-Overs zu MQL hinzuzufügen? Daran mangelt es gewaltig.
 

Ein interessanter Fall von AcePrime-Demokonten.

Wir starten den Expert Advisor

// Советник возвращает полностью сформированные торговые запросы (включая ручные)
#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));    
  }
}

Und wir versuchen, eine Position auf ein beliebiges Bo-Symbol (binäre Optionen) zu eröffnen. Im Protokoll des Terminals steht

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

Im Log des Expert Advisors erhalten wir

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

Ich habe es überprüft und OrderCheck liefert true. Die Handelssitzung ist eröffnet usw. Aber MT5 warnt sowohl bei manuellen als auch bei automatischen Aufträgen auf die gleiche Weise und gibt mir den Retcode = 4. Warum gibt es eine Situation, in der das Terminal sagt, dass alles in Ordnung ist, aber Sie versuchen es und nichts passiert? Wie kann ich sicher sein, dass sich die Datei nicht öffnen lässt? Und was ist dieser vierte Rückgabewert?

GetLastError() gibt zurück

ERR_TRADE_SEND_FAILED

4756

Handelsanfrage konnte nicht gesendet werden


Reproduziert alles ohne Probleme.
 

Guten Tag.

Bin ich der Einzige, der der Meinung ist, dass Code wie dieser nicht kompiliert werden sollte (es sollte ein Fehler beim Zugriff auf private Mitglieder auftreten)?

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 sagt, es ist OK, es kann das tun...

 
Andrey Barinov:

Guten Tag.

Bin ich der Einzige, der der Meinung ist, dass Code wie dieser nicht kompiliert werden sollte (es sollte ein Fehler beim Zugriff auf private Mitglieder auftreten)?

SD sagt, es ist ok, es kann das tun...

Nach den MQL-Regeln kann eine Instanz einer Klasse frei auf private Felder und Methoden einer anderen Instanz zugreifen, wenn sie der gleichen Klasse angehört wie die erste Instanz. Da cB von cA geerbt wird, ist cB gleich cA, und daher kann cA auf alle privaten Methoden und Felder der cB-Instanz zugreifen, unabhängig davon, wo sie deklariert ist.

 
Vasiliy Sokolov:

Nach den MQL-Regeln kann eine Instanz einer Klasse frei auf die privaten Felder und Methoden einer anderen Instanz zugreifen, wenn sie der gleichen Klasse angehört wie die erste Instanz. Da cB von cA geerbt wird, ist cB gleich cA, und daher kann cA auf alle privaten Methoden und Felder der cB-Instanz zugreifen, unabhängig davon, wo sie deklariert ist.

Danke. Ich habe dies in der Dokumentation nicht gesehen. Können Sie sie aufzeigen?
 
Andrey Barinov:
Ich danke Ihnen. Ich habe dies in der Dokumentation nicht gesehen. Können Sie sie aufzeigen?
Es steht nicht in der Dokumentation, weil es sich um eine besondere, nicht dokumentierte "Funktion" der Sprache handelt. Es ist sehr seltsam und umstritten, aber es ist trotzdem so passiert.
 
Andrey Barinov:
Ich danke Ihnen. Diese Funktion ist mir in der Dokumentation nicht begegnet. Können Sie sie aufzeigen?

Dies ist auch in C++ der Fall (und MQL ist nach dem Vorbild von C++ aufgebaut). Wie man so schön sagt, ist der Datenschutz in C++ auf Klassenebene angesiedelt, nicht auf Objektebene. Andernfalls könnte man z. B. keinen Copy-Constructor ohne spezielle Getter-Methoden für alle privaten Felder erstellen.

 
Stanislav Korotky:

In C++ ist es dasselbe

Haben Sie versucht, dieses Beispiel in C++ zu kompilieren, oder handelt es sich nur um allgemeine theoretische Überlegungen?