Erros, bugs, perguntas - página 1978

 
fxsaber:

Crómio.

O FireFox ainda tem temas actualizados no topo

e azul à esquerda. experimente o browser que estava no seu smartphone

 
STARIJ:
em FireFox temas ainda actualizados no topo

E os azuis da esquerda

É o mesmo no cromado. Não consigo ver automaticamente estes ícones azuis/cinzentos. E a fonte ousada de tópicos não lidos é tão impressionante que até escrevi sobre ela.

 
Alguém já escreveu ao Service-desk ou talvez conheça os planos da MQ para adicionar amigos à MQL? Falta muito.
 

Um caso interessante sobre as contas AcePrime-Demo.

Iniciamos o Consultor Especialista

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

E tentamos abrir uma posição em qualquer símbolo bo-símbolo (opções binárias). No registo do terminal obtemos

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

No diário de bordo do Expert Advisor recebemos

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

Verifiquei-o e OrderCheck retorna verdadeiro. A sessão de comércio está aberta, etc. Mas o MT5 avisa da mesma forma sobre pedidos manuais e automáticos, dando-me um retcode = 4. Porque é que existe tal situação, quando o terminal diz que está tudo bem, mas você tenta e nada acontece? Como é que sei, sem qualquer pedido, que não vai abrir? E qual é este quarto código de retorno?

GetLastError() devolve

ERR_TRADE_SEND_FAILED

4756

Falha no envio do pedido comercial


Reproduz tudo sem qualquer problema.
 

Boa tarde.

Serei eu o único que pensa que um código como este não deveria ser compilado (deveria haver um erro de acesso de um membro 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);
  }

A SD diz que não há problema, pode fazer isso...

 
Andrey Barinov:

Boa tarde.

Serei eu o único que pensa que um código como este não deveria ser compilado (deveria haver um erro de acesso de um membro privado)?

Os SD dizem que está tudo bem, pode fazer isso...

De acordo com as regras MQL, uma instância de uma classe pode aceder livremente aos campos e métodos privados de outra instância se pertencer à mesma classe que a primeira. Uma vez que cB é herdado de cA, cB é cA e, portanto, cA pode aceder a qualquer método e campos privados da instância cB, independentemente do local onde é declarado.

 
Vasiliy Sokolov:

De acordo com as regras MQL, uma instância de uma classe pode aceder livremente aos campos e métodos privados de outra instância se pertencer à mesma classe que a primeira. Uma vez que cB é herdado de cA, cB é cA e por conseguinte cA pode aceder a qualquer método e campos privados da instância cB, independentemente do local onde é declarado.

Obrigado. Ainda não vi isto na documentação. Pode apontar?
 
Andrey Barinov:
Obrigado. Não vi isto na documentação. Pode apontar?
Não está na documentação, porque é uma "característica" peculiar não documentada da língua. É muito estranho e controverso, mas aconteceu assim mesmo.
 
Andrey Barinov:
Obrigado. Ainda não encontrei esta característica na documentação. Pode apontar?

Este é também o caso em C++(e MQL é construído na imagem e semelhança de C++). Como se costuma dizer, a privacidade C++ é a nível de classe, não a nível de objecto. Caso contrário, não seria possível fazer, por exemplo, um construtor de cópias sem métodos especiais de obtenção para todos os campos privados.

 
Stanislav Korotky:

É o mesmo em C++

Já tentou compilar este exemplo em C++, ou é apenas um raciocínio teórico geral?