Errores, fallos, preguntas - página 1978

 
fxsaber:

Cromado.

FireFox sigue teniendo temas actualizados en la parte superior

y azul a la izquierda. Prueba el navegador que había en tu smartphone

 
STARIJ:
en FireFox todavía se actualizan los temas en la parte superior

Y los azules de la izquierda

Es lo mismo en Chrome. No consigo ver automáticamente estos iconos azules/grises. Y la negrita de los temas no leídos es tan impresionante que hasta escribí sobre ella.

 
¿Alguien ha escrito ya al servicio de atención al cliente o está al tanto de los planes de MQ para añadir a MQL la posibilidad de hacer amigos? Es una gran carencia.
 

Un caso interesante en las cuentas de AcePrime-Demo.

Iniciamos el Asesor Experto

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

Y tratamos de abrir una posición en cualquier símbolo bo (opciones binarias). En el registro de la terminal obtenemos

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

En el registro del Asesor Experto obtenemos

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

Lo he comprobado y OrderCheck devuelve true. La sesión comercial está abierta, etc. Pero MT5 advierte de la misma manera sobre las solicitudes manuales y automáticas, dándome retcode = 4. ¿Por qué se da esta situación, cuando el terminal dice que todo está bien, pero lo intentas y no pasa nada? ¿Cómo puedo entender sin peticiones que no se abra? ¿Y qué es este cuarto código de retorno?

GetLastError() devuelve

ERR_TRADE_SEND_FAILED

4756

Fallo en el envío de la solicitud de comercio


Reproduce todo sin problemas.
 

Buenas tardes.

¿Soy el único que piensa que un código como este no debería compilar (debería haber un error de acceso a miembro privado)?

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 dice que está bien, que puede hacer eso...

 
Andrey Barinov:

Buenas tardes.

¿Soy el único que piensa que un código como este no debería compilar (debería haber un error de acceso a miembro privado)?

Los SD dicen que está bien, que puede hacer eso...

Según las reglas de MQL, una instancia de una clase puede acceder libremente a los campos y métodos privados de otra instancia si pertenece a la misma clase que la primera. Dado que cB hereda de cA, cB es cA y, por tanto, cA puede acceder a cualquier método y campo privado de la instancia cB, independientemente de dónde se declare.

 
Vasiliy Sokolov:

Según las reglas de MQL, una instancia de una clase puede acceder libremente a los campos y métodos privados de otra instancia si pertenece a la misma clase que la primera. Dado que cB hereda de cA, cB es cA y, por lo tanto, cA puede acceder a cualquier método y campo privado de la instancia cB, independientemente de dónde se declare.

Gracias. No he visto esto en la documentación. ¿Puede señalarlo?
 
Andrey Barinov:
Gracias. No he visto esto en la documentación. ¿Puede señalarlo?
No está en la documentación, porque es una peculiar "característica" no documentada del lenguaje. Es una característica muy extraña y controvertida, pero sin embargo resultó así.
 
Andrey Barinov:
Gracias. No he encontrado esta función en la documentación. ¿Puede señalarlo?

Esto también ocurre en C++(y MQL está construido a imagen y semejanza de C++). Como dicen, la privacidad en C++ es a nivel de clase, no a nivel de objeto. De lo contrario, no podrías hacer, por ejemplo, un constructor de copias sin métodos getter especiales para todos los campos privados.

 
Stanislav Korotky:

Es lo mismo en C++

¿Has probado a compilar este ejemplo en C++, o es sólo un razonamiento teórico general?