Errori, bug, domande - pagina 2648

 
Vladimir Karputov:

Clicca sull'intestazione di una delle colonne: Symbol, Ticket, Time.

Clicca con il TASTO SINISTRO.

Ha funzionato, grazie, ho chiuso la coppia sbagliata diverse volte prima.
 
Сергей Проценко:
A seconda del profitto, se il profitto è più alto, scendi, l'altro ordine ha un profitto più alto, scambiati i posti. Se il profitto dell'euro diventa più alto di quello dell'oro, l'ordine per l'euro sarà in basso e l'ordine per l'oro sarà sopra.

Hai ordinato per profitto. Seleziona un criterio di ordinamento diverso.

 
fxsaber :
Puoi dirmi come aggirare un errore di compilazione?

Non è così complicato come sembra:

 #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:

Non è così complicato come sembra:

Grazie, non sono arrivato a quello di base.

 
Non posso controllare il codebase,file principale non trovato, ma è lì. Per favore, scoprite il motivo (se i moderatori possono). Sto pensando di tornare a pubblicare sui blog - lì non ci sono questi problemi.
 
Stanislav Korotky:
Non posso controllare il codebase, dicefile principale non trovato, ma è lì. Si prega di scoprire il motivo (se i moderatori possono). Sto pensando di tornare a pubblicare sui blog - non ci sono questi problemi.

mettere il mq5 nella cartella "default".

 

Due domande immediatamente per il compilatore 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. Le priorità di esecuzione delle funzioni template in MQL non corrispondono a quelle delle funzioni template in C++ (online: https://onlinegdb.com/Hkvz8Hu7L).
Così in C++, quando tutte e tre le funzioni template sono presenti, viene eseguita la funzione template con il risultato "C++:1", se viene rimossa allora viene eseguita "C++:2", e se viene rimossa allora viene eseguita "C++:3".
Le priorità in MQL sono abbastanza diverse: "C++:2" seguito da "C++:1" e "C++:3".


Non è chiaro perché la prima delle funzioni sia vietata in MQL, mentre la funzione identica con un parametro fittizio è già consentita:

//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");                              
}
 

Ciao a tutti.

Qualcuno ha incontrato il problema di testare i robot multi-valuta?

Sono state scaricate tutte le coppie di valute necessarie per l'EA?

Sto cercando di testare due coppie, ad esempio EURUSD GBPUSD:

Se faccio il test su EURUSD (test EURUSD GBPUSD)- il risultato è 1,

Se testiamo su GBPUSD (test EURUSD GBPUSD), il risultato è 2, cioè diverso

Se testiamo USDCHF (testando EURUSD GBPUSD) - il risultato è 3, cioè diverso



I risultati non sono molto diversi, alcune decine di operazioni (durante 2 mesi), ma il risultato è diverso per ogni coppia (anche se testiamo alcune coppie EURUSD GBPUSD)

Immediatamente assumerò: tutto il codice funziona con la variabile Symb, che prende Symbol() dal ciclo. Cioè codice singolo, ma all'interno del codice alla variabile Symb viene assegnato il suo proprio valore.


Può essere così, che a causa delle diverse quotazioni, tick, qualità della storia per le diverse coppie (a che EURUSD e GBPUSD sono sempre testati), i risultati del test sono diversi per le diverse coppie?

Cioè

Può essere che il test sia stato effettuato per EURUSD, e che siano necessarie meno quotazioni per GBPUSD?

и

È possibile che il test sia stato impostato per GBPUSD e che vengano scaricate meno quotazioni per EURUSD?

 
fxsaber:

Mettete il mq5 nella cartella "default".

So molto bene che il modulo principale dovrebbe essere senza cartelle - è, la cartella predefinita che loro stessi "finiscono" facendo cadere le opzioni a destra dei pulsanti di download.

Non funziona.

 
In C++ si compila e funziona (online: https://onlinegdb.com/Syn90dd7I), ma in MQL l'errore: "'func' - ambiguous call to overloaded function"

#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;
}