Tutte le domande dei nuovi arrivati su MQL4 e MQL5, aiuto e discussione su algoritmi e codici - pagina 667

 
Roman Sharanov:

di seguito nel file di classe

Questo metodo restituisce un errore? Se sì, definiscilo nella sezione privata. Puoi farlo nella sua interezza:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class newC
  {
private:
   int      m_var;
   double   varSqrt(void)           const { return ::MathSqrt(this.m_var); }
public:
                     newC(int var);
                    ~newC();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::newC(int var)
  {
      this.m_var = var;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::~newC()
  {
  }
//+------------------------------------------------------------------+

Oppure puoi toglierlo:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
class newC
  {
private:
   int      m_var;
   double   varSqrt(void) const;
public:
                     newC(int var);
                    ~newC();
  };
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::newC(int var)
  {
      this.m_var = var;
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
newC::~newC()
  {
  }
//+------------------------------------------------------------------+
double newC::varSqrt(void) const
  {
   return ::MathSqrt(this.m_var);
  }
//+------------------------------------------------------------------+
 
neverness:

Beh, se è una sciocchezza, è provata dall'esperienza.

Non solo "sciocchezze teoriche"!!!

Esattamente.

Uso tutti i tipi di array negli indicatori in modo sicuro. E come buffer, e dinamico, e statico.

Ma non tutto funziona per voi e l'esperienza vi dice, scusate, delle sciocchezze.

 
Artyom Trishkin:

Questo metodo restituisce un errore? Se sì, definiscilo nella sezione privata. Si può definire come un insieme:

E si può togliere:

Oppure potete semplicemente fare riferimento al membro privato della classe come this.m_var all'interno della classe.
 
neverness:

Beh, se è una sciocchezza, è provata dall'esperienza.

Non solo "sciocchezze teoriche"!!!

Nessuno vi impedisce di usare un array dinamico nei vostri calcoli.

Ma!!! Il processore è occupato durante i calcoli e non ci sarà alcuna scrittura nell'array dinamico.

Quindi qualsiasi dato che entra in una matrice dinamica durante i calcoli viene automaticamente ignorato. (A volte mettono la protezione, e li scrivono in un buffer).

Spero che questo sia chiaro?

Ecco perché tutti i dati sugli array dinamici sono distribuiti su array statici, in modo che nessun dato venga perso mentre il processore lavora.

Ed è per questo che tutti i calcoli dovrebbero essere eseguiti in array statici!!!

Questa è una feroce sciocchezza, degna di entrare negli annali del forum.

 
Artyom Trishkin:

Questo è quello.

Uso facilmente qualsiasi tipo di array negli indicatori. E come buffer, e dinamico, e statico.

Ma non funziona per voi e l'esperienza vi dice, scusate, delle sciocchezze.

Ok.

Facciamo un esperimento.

Prendiamo un array dinamico collegato con dati di tick e usiamo il processore su questo array per un paio d'ore.

E vedere cosa scriviamo a quella matrice durante quel tempo!

Ti piace questa formulazione della domanda? (Senza un buffer, ovviamente).

 
neverness:

Tutto a posto.

Facciamo un esperimento.

Prendiamo un array dinamico associato a dati di tick, e impegniamo il processore su quell'array per un paio d'ore.

E vedere cosa scriviamo a quella matrice durante quel tempo!

Ti piace questa formulazione della domanda? (Senza il buffer, ovviamente).

Fallo. Poi mettete il codice qui.

 
Artyom Trishkin:

Questo metodo restituisce un errore? Se sì, definiscilo nella sezione privata. Si può definire come un insieme:

E si può togliere:

Sì, è così che dovrebbe essere, grazie.

 
Artyom Trishkin:

Fallo. Poi mettete il codice qui.

Naturalmente.

Lo vedremo più tardi.

 

Un'altra domanda.

Ho una struttura in una classe.

Come posso restituirlo per richiesta al codice esterno che lavora con questa classe?

 
Roman Sharanov:

Un'altra domanda.

Ho una struttura in una classe.

Come posso restituirlo su richiesta al codice esterno che lavora con questa classe?

solo descrivendo la struttura stessa al livello di visibilità della variabile globale

poi dichiarare la variabile struttura nella classe

e nel vostro codice esterno, potete dichiarare la stessa variabile, ma tenete presente che se dichiarate tale variabile dentro OnTick(), ogni chiamata a OnTick() avvierà un costruttore di struttura, anche se non l'avete creata - in MQL, non c'è differenza tra classi e strutture, l'unica cosa che ricordo, il costruttore con il parametro delle strutture create tramite new non sarà passato dal compilatore

quindi... Nell'OOP classica di solito non si va oltre la classe passando gli elementi interni (campi della classe), tutto è di solito realizzato per mezzo di query alla classe Get() ... Set()... beh, è una questione di gusti

SZ: .... usare l'ereditarietà, gli eredi hanno classi comuni, guardare il codice sorgente delle classi dalla consegna MT (cartella include)