Erros, bugs, perguntas - página 2470

 
Igor Zakharov:

Portanto, não é em segundos...

É sobre isso que a descrição linguística deve ser feita, em primeiro lugar.

Não em artigos que tenha de procurar. A última coisa que deve procurar no fórum é isto.

Caso contrário, acontece: olho num livro, mas vejo um figo...

 

Porque seria este o caso?

IM      0       17:19:04.403    Terminal        MetaTrader 5 x64 build 2056 started (MetaQuotes Software Corp.)
NG      0       17:19:04.403    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9408 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

Descobri hoje que o volume mínimo na especificação da ferramenta é 100 e o passo é também 100. No entanto, não abre posições com erro"Volume inválido". Se eu definir 0,01, os botões estão inactivos.

Alterou a versão para uma versão "mais jovem".

KK      0       17:35:14.046    Terminal        MetaTrader 5 x64 build 2025 started (MetaQuotes Software Corp.)
IE      0       17:35:14.046    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9182 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

sem alterações.

Em seguida, substituiu-a pela versão de lançamento.

FI      0       17:37:23.049    Terminal        MetaTrader 5 x64 build 2007 started (MetaQuotes Software Corp.)
RS      0       17:37:23.049    Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 11, AMD FX-4170 Quad-Core Processor , Memory: 9180 / 12255 Mb, Disk: 20 / 238 Gb, GMT+3

E aqui está o resultado.



Porque está a acontecer apenas a uma empresa? Se fosse generalizado, o problema já teria sido resolvido há muito tempo.

Que direcção devo enviar para o apoio da empresa?


Acrescentado: É muito estranho que a construção 2025 funcione bem numa conta de um cêntimo da mesma empresa. Todos os parâmetros das ferramentas são como devem ser.

Pode negociar em cêntimos. Eu próprio descobri... ...mas eu quero mais.

 
Ilyas:

Obrigado pela sua mensagem.
É um rudimento, nós arranjamo-lo.

@Ilyas, existe um problema semelhante com a estrutura NonPOD.

struct NonPod{
   uchar data[];
};   
   
void OnStart(){
   NonPod obj;
   
   obj = (NonPod)(obj);   // '(' - invalid cast operation	
}
 
Alguém sabe como, para além de esperar por uma nova construção com suporte de namespace para as aulas, contornar esta limitação:
template<typename T>
class TestTypedef{
public:
   typedef void (* callback)(T &);    // 'callback' - identifier already used
   callback eq;
};


void ff(int&) {Print(__FUNCSIG__);}

void OnStart(){  

   TestTypedef<int> int_value;
   int_value.eq = ff;
   
   int x = 5;
   int_value.eq(x);                 // Ok

   TestTypedef<string> int_value;   //Compile error 'callback' - identifier already used
}

Problema na área de declaração global do espaço de nomes dentro da funcionalidade dotypedef

 
MT5 (construir 2057)

Erro de compilação na utilização repetida da mesma assinatura de função dentro do typedef:
typedef void (* callback_0)();     // а без этой строки все ОК
typedef void (* callback)();

void test_func(){}

void OnStart(){
   callback func_ptr = test_func;  //'test_func' - type mismatch
   func_ptr();
}
 
Sergey Dzyublik:
MT5 (construir 2057)

Bug com "proibição" de reutilizar a mesma assinatura dentro do typedef:

E tenhoum guião essencialmente semelhante de há mais de 2 anos atrás dando um resultado 2056x32: o carregamento do EX5 falhou

 
Sergey Dzyublik:
Alguém sabe como, para além de esperar por uma nova construção com suporte de namespace para classes, contornar esta restrição:

Compilar

void f(int&) {}
void OnStart()
{
   TestTypedef<int> int_value;
   TestTypedef<string> string_value;

é possível (e funcionará mesmo), mas não mais do que isso: então, digamos, não se pode escrever

   int_value.eq = f;
}

por isso não escreva como

 
A100:

Compilar de modo a não escrever como

Não, dificilmente funciona, mas funciona.
O tipo de bool perdeu-se no exemplo do dactilografado.

#define PRINT(x) ; Print(#x, ":", string(x))

#define  CREATE_TestTypedef(type)                              \
class TestTypedef_##type{                                     \
public:                                                       \
   typedef bool (* callback_##type)(type &);                  \
   callback_##type  eq;                                        \
}
   
bool f(int&) {return true;}


void OnStart(){
   CREATE_TestTypedef(int) int_value;
   CREATE_TestTypedef(string) string_value;                     
   
   int data = 5;
   int_value.eq = f;
   PRINT(int_value.eq(data));                    // result: true
}
 
Até que as correcções datilografar e as actualizações do namespace, se existirem, sejam lançadas,
teremos de declarar o uso de cada tipo separadamente através de macros, e depois usar macros para obter o nome das classes geradas para criar um objecto de classe...
 

Explique porque é que quando crioo CChartObjectLabel não estou a apagar objectos em indicador quando desinicializo neste código:

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//|                        Copyright 2018, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2018, MetaQuotes Software Corp."
#property link      "https://www.mql5.com/ru/users/igorm"
#property version   "1.00"
#property strict
#property indicator_separate_window
#include <ChartObjects\ChartObjectsTxtControls.mqh>
CChartObjectLabel *LabelUP,*LabelDN;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   CreateLabel(LabelUP,"LabelUP",0);
   CreateLabel(LabelDN,"LabelDN",30);
/*   
   LabelUP=new CChartObjectLabel;
   LabelDN=new CChartObjectLabel;
   LabelUP.Create(0,"LabelUP",ChartWindowFind(),0,0);
   LabelUP.Color(clrYellow);
   LabelUP.FontSize(14);
   LabelUP.Description("LabelUP");
   
   LabelDN.Create(0,"LabelDN",ChartWindowFind(),0,10);
   LabelDN.Color(clrYellow);
   LabelDN.FontSize(14);
   LabelDN.Description("LabelDN");
*/
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator deinitialization function                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   delete LabelUP;
   delete LabelDN;
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);

  }
//+------------------------------------------------------------------+
void CreateLabel(CChartObjectLabel *l,string name,int y)
  {
   l=new CChartObjectLabel;
   l.Create(0,name,ChartWindowFind(),0,y);
   l.Color(clrYellow);
   l.FontSize(14);
   l.Description(name);
  }
//+------------------------------------------------------------------+

ao mudar de TF recebo entrada no diário: 2019.05.23 09:49:02.044 tstlabel EURUSD,M30: 2 objectos do tipo CChartObjectLabel à esquerda

se não for comentado no OnInit() a criação de etiquetas de texto (CChartObjectLabel), então tudo funcionará correctamente

Passo um ponteiro à funçãoCreateLabel(), masnãoopossoapagar mais tarde emOnDeinit()

Razão: