Errori, bug, domande - pagina 2206

 
Alexander Nikolaev:
Chi sa perché non posso accedere ai conti demo creati di recente, che sono stati creati direttamente nel terminale MT4, sul server Metaquotes Demo? Ne ho creato uno una settimana fa. I primi 2 giorni funziona, ma dopo un po' di tempo l'account scompare, come se la password diventasse errata (anche se è stata copiata, non ho potuto inserirla in modo errato) e devo riaprire l'account per testare l'Expert Advisor. È davvero necessario creare un nuovo account ogni settimana?
È stato così per molto tempo, se non c'è attività sull'account, viene chiuso. creane uno nuovo e non preoccuparti.
 
Denis Sartakov:

Di recente ho scritto una funzione come questa, quindi provate a capirlo da soli,

Se non funziona, vi spiegherò.

grazie

 

un'altra domanda:

la descrizione diCHART_IS_MAXIMIZED eCHART_IS_MINIMIZED non dice che queste proprietà sono di sola lettura, ma ChartSetInteger(ChartID(),CHART_IS_MAXIMIZED,true); non funziona, quale potrebbe essere il problema?

 

Perché non compila?

template <typename T>
void f(T &t)
{
   t.f();
}

void OnStart()
{
   class Q
   {
   public:
      void f() {}
   }q;
   
   f(q);
}

Le vecchie versioni del compilatore mangiavano bene tali costrutti, prendevano per ricompilare codice valido precedente ed errore. È un incidente o si è rotto intenzionalmente?

 
pavlick_:

Perché non compila?

Le vecchie versioni del compilatore andavano bene con tali costrutti, ho ricompilato del codice precedentemente valido e c'è un errore. È un incidente o si è rotto intenzionalmente?

ma possiamo creare classi all'interno di funzioni secondo le specifiche del linguaggio?

 
Konstantin:

ma si possono creare classi all'interno di funzioni secondo le specifiche del linguaggio?

Quale specifica del linguaggio? Mcl non è affatto ben documentato, mentre in c++ è una pratica normale, dal riferimento:

Classi locali

Una dichiarazione di classe può apparire nello spazio dei nomi (nel qual caso definisce una classe ordinaria), all'interno di un'altra definizione di classe (nel qual caso definisce una classe annidata), e nel corpo di una funzione, nel qual caso definisce una classe locale. Il nome di una tale classe esiste solo nell'ambito della funzione e non è accessibile all'esterno.

http://en.cppreference.com/w/cpp/language/class

 

La risposta è il silenzio, come al solito. In realtà è facile aggirare il problema - invece dell'elegante posizionamento all'interno della funzione, l'ho messo fuori con il nome intimidatorio internal__Chart_bar_shift_Comp. Ma il fatto è che hanno appena tagliato un tale costrutto. Cioè non c'è garanzia che il mio codice venga compilato domani. Potete in qualche modo con le chiavi selezionare il dialetto -std=mql18, per esempio. Ma no, non mi interessa la retrocompatibilità. Trovo difficile immaginare che questo sia possibile su alcuni gcc.

Immagino che un semplice scripting mql4 sia abbastanza sufficiente per una piattaforma di trading. O meglio ancora, importare plugin (in librerie dinamiche) con script/esperti. Ma no, avete bisogno di una vostra, come si dice spesso qui, "infrastruttura" dove siete grandi e importanti.

 
pavlick_:

Secondo quale specifica del linguaggio? Mcl non è affatto ben documentato, ma in c++ è una pratica normale, dal libro di riferimento:

Classi locali

Una dichiarazione di classe può apparire nello spazio dei nomi (nel qual caso definisce una classe ordinaria), all'interno di un'altra definizione di classe (nel qual caso definisce una classe annidata), e nel corpo di una funzione, nel qual caso definisce una classe locale. Il nome di una tale classe esiste solo nell'ambito della funzione e non è accessibile all'esterno.

http://en.cppreference.com/w/cpp/language/class

Ho incontrato una discussione da qualche parte che non è nella specifica mql5, controlla sul forum, c'era una discussione sui lambas, che non sono nella specifica

 
pavlick_:

La risposta è il silenzio, come al solito. In realtà è facile aggirare il problema - invece dell'elegante posizionamento all'interno della funzione, l'ho messo fuori con il nome intimidatorio internal__Chart_bar_shift_Comp. Ma il punto è diverso - hanno appena tagliato un tale costrutto. Cioè non c'è garanzia che il mio codice venga compilato domani. Potete in qualche modo con le chiavi selezionare il dialetto -std=mql18, per esempio. Ma no, non mi interessa la retrocompatibilità. Non posso immaginare che sia possibile in qualche gcc.

Probabilmente, un semplice script mql4 era abbastanza sufficiente per una piattaforma di trading. O meglio - importare plugin (in librerie dinamiche) con script/esperti. Ma no, avete bisogno della vostra, come si dice spesso qui, "infrastruttura", dove siete grandi e importanti.

Ad essere onesti, non capisco perché lo fanno. È più facile mettere tutte le entità ausiliarie in un elenco separato del codice sorgente, per esempio util.mqh

 
Konstantin:

Ad essere onesti, non capisco perché, è più facile mettere tutte le entità ausiliarie in un elenco separato del codice sorgente, per esempio util.mqh

Questo è un predicato per la ricerca binaria, che non è universale ed è usato solo una volta in una funzione, perché dovrei metterlo da qualche parte? Per esempio, abbiamo un array di strutture (nessun operatore di confronto, non possono essere confrontate maldestramente con <, o la condizione di confronto è molto complicata), e vogliamo trovare un elemento attraverso la ricerca binaria. Nella libreria plus, le funzioni di algoritmo prendono un funtore (convenientemente passato come lambda), all'interno del quale si confrontano gli elementi dell'array. Una soluzione molto elegante secondo me.

int main()
{
    typedef pair<int, double> myPair; // typedef to shorten the type name
    vector <myPair> vec(5);

    myPair low_val; // reference value (set this up as you want)
    auto it = lower_bound(vec.begin(), vec.end(), low_val, 
        [](myPair lhs, myPair rhs) -> bool { return lhs.second < rhs.second; });
}

Ma a causa delle limitazioni di µl, ha creato un'istanza della classe dei predicati.

Motivazione: