Erros, bugs, perguntas - página 2648

 
Vladimir Karputov:

Clique no cabeçalho de uma das colunas: Símbolo, Bilhete, Hora.

Clique com a sua CHAVE ESQUERDA.

Funcionou, obrigado, já fechei o par errado várias vezes.
 
Сергей Проценко:
Dependendo do lucro, se o lucro for mais elevado, desce, a outra ordem tem um lucro mais elevado, troca de lugares. Se o lucro do euro se tornar superior ao do ouro, a ordem para o euro estará no fundo e a ordem para o ouro estará acima dele.

Classificou por lucro. Seleccionar um critério de ordenação diferente.

 
fxsaber :
Pode dizer-me como contornar um erro de compilação?

Não é tão complicado como parece:

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

struct STRUCT_BASE
{
   static const int Array[];
};
static const int STRUCT_BASE::Array[] = { 1 , 2 };

struct STRUCT : STRUCT_BASE
{
   int Array2[ sizeof (Array)];
};


void OnStart ()
{
   static const int Array[] = { 1 , 2 };
   int Array2[ sizeof (Array)];
  
  PRINT( ArraySize (Array));             //2 
  PRINT( ArraySize (Array2));           //8
  
  
  STRUCT s;
  PRINT( ArraySize (s.Array));           //2
  PRINT( ArraySize (s.Array2));         //8
}
 
Sergey Dzyublik:

Não é tão complicado como parece:

Obrigado, não cheguei ao básico.

 
Não é possível verificar a base de códigos, oficheiro principal não foi encontrado, mas está lá. Por favor descubra a razão (se os moderadores puderem). Estou a pensar em voltar a publicar em blogs - não há aí problemas deste tipo.
 
Stanislav Korotky:
Não posso verificar a base de códigos, diz que oficheiro principal não foi encontrado, mas está lá. Por favor descubra a razão (se os moderadores puderem). Estou a pensar em voltar a publicar em blogs - não há aí nenhum incómodo desse tipo.

colocar o mq5 na pasta "por defeito".

 

Duas perguntas imediatas para o compilador MT5 (build 2321):

#define  PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      //MQL:2         
}

////ERRROR: 'func' - template functions overloading is not supported yet
//template<typename T>     
//void func(T &it1){ 
//  printf("C++:2");                               
//}
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                       //MQL:1        
}

template<typename T>
void func(A<T> &it1){
   printf("C++:3");                       //MQL:3
}


void OnStart(){
   B<int> b;
   func(b);
}

int main(){
   OnStart();
   return 0;
}

1. As prioridades de execução das funções do modelo em MQL não correspondem às das funções do modelo em C++ (online: https://onlinegdb.com/Hkvz8Hu7L).
Assim em C++, quando as três funções do modelo estão presentes, a função do modelo com o resultado "C++:1" é executada, se for removida então "C++:2" é executada, e se for removida então "C++:3" é executada.
As prioridades em MQL são bastante diferentes: "C+++:2" seguido de "C+++:1" e "C+++:3".


Não é claro porque é que a primeira das funções é proibida no MQL, enquanto que a função idêntica com um parâmetro fictício já é permitida:

//ERRROR: 'func' - template functions overloading is not supported yet
template<typename T>     
void func(T &it1){ 
  printf("C++:2");                               
}

// OK
template<typename T>         
void func(T &it1, T* = NULL){
   printf("C++:2");                              
}
 

Olá a todos.

Alguém se deparou com o problema de testar robôs multi-divisas?

Todos os pares de moedas que são necessários para a EA estão a ser descarregados?

Estou a tentar testar dois pares, por exemplo EURUSD GBPUSD:

Se eu testar em EURUSD (testando EURUSD GBPUSD)- o resultado é 1,

Se testarmos em GBPUSD (testando EURUSD GBPUSD), o resultado é 2, ou seja, diferente

Se testarmos USDCHF (testando EURUSD GBPUSD) - o resultado é 3, i.e. diferente



Os resultados não são muito diferentes, algumas dezenas de negócios (durante 2 meses), mas o resultado é diferente para cada par (apesar de testarmos certos pares EURUSD GBPUSD)

Imediatamente assumirei: Todo o código funciona com a variável, Symb , que retira Symbol() do laço. Isto é, código único, mas dentro do código da variável Symb é atribuído o seu próprio valor.


Será possível que, devido a diferentes citações, carrapatos, qualidade histórica para diferentes pares (em que EURUSD e GBPUSD são sempre testados), os resultados dos testes sejam diferentes para diferentes pares?

Isto é

Será que o teste foi realizado para EURUSD, e são necessárias menos citações para GBPUSD?

и

É possível que o teste tenha sido estabelecido para GBPUSD e menos citações sejam descarregadas para EURUSD?

 
fxsaber:

Colocar o mq5 na pasta "por defeito".

Sei muito bem que o módulo principal deve ser sem pastas - é, a pasta por defeito que eles próprios "terminam", deixando cair as opções à direita dos botões de descarga.

Não funciona.

 
Em C++ compila e funciona (online: https://onlinegdb.com/Syn90dd7I), mas em MQL o erro: "'func' - ambiguous call to overloaded function" (func - chamada ambígua para função sobrecarregada)

#define  PRINT(x) ; Print(#x, ":", string(x))
#ifdef __cplusplus
    #include<iostream>
#endif


template<typename T>
class A{
};

template<typename T>
class B : public A<T>{
};

template<typename T>
class C : public B<T>{
};


template<typename T>
void func(B<T> &it1){
   printf("C++:1");                      
}

template<typename T>
void func(A<T> &it1){
   printf("C++:2");                      
}


void OnStart(){
   C<int> c;
   func(c);            //ERROR: 'func' - ambiguous call to overloaded function
}

int main(){
   OnStart();
   return 0;
}
Razão: