Errori, bug, domande - pagina 1637

 
Slawa:

1. Cinque o quattro? Immagino un quattro. Basta allargare la finestra del tester.

2. Prendilo e testalo

Haha, grazie mille (mt4)
1366 x 768 (( un terzo dello schermo deve essere allungato.
La tua abilità di chiaroveggenza è al livello.

 
A100:

Facciamo un esempio più semplice

Per dirla formalmente, quante chiamate del tipo A( A& ) ci sono? Uno. Almeno il C++ non crea alcun oggetto intermedio

Forse RVO (return value optimization) è impostato di default in C++?
 
A100:

1. Doppia chiamata del costruttore di copie

2. Nessun messaggio di "memoria persa" (nuovo senza cancellazione)

  1. Correttamente detto circa l'ottimizzazione RVO (c'è anche NRVO), è attualmente mancante nel compilatore MQL, ma sarà aggiunto in futuro (per ora consideriamo questa ottimizzazione come un compito non prioritario).
  2. non si riproduce, per favore ricontrolla, potresti non aver specificato dettagli importanti per la riproduzione.
 
Ilyas: 2. non si riproduce, per favore ricontrolla, potresti non aver specificato dettagli importanti per la riproduzione.

Esempio semplificato

class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    new A();
}

Risultato:

2016.08.15 14:17:39.093 Script1 (GBPUSD,M15) A::A

Conclusione: nessun distruttore viene chiamato e nessun messaggio di perdita di memoria allo stesso tempo (come nel seguente esempio)

//Script2.mq5
class A { public:
    A()          { Print( __FUNCTION__ ); }
    virtual ~A() { Print( __FUNCTION__ ); }
};
void OnStart()
{
    A *a = new A();
}

Risultato:

2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 16 byte di memoria persa
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 oggetto di tipo A a sinistra
2016.08.15 14:26:27.993 Script2 (GBPUSD,M15) 1 oggetti non cancellati rimasti
2016.08.15 14:26:27.992 Script2 (GBPUSD,M15) A::A

 
Grazie per il chiarimento. Riprodotto - nessun messaggio di perdita ed ecco perché:

L'ottimizzatore è sovra-ottimizzato qui, poiché non ci sono operazioni sulla memoria o sul puntatore che sono stati creati nel nuovo operatore, l'allocazione di questa memoria è stata rimossa.

Valuteremo se correggere questo "bug" nell'ottimizzatore o se migliorarlo in modo che il salvataggio di un puntatore in una variabile inutilizzata non blocchi la cancellazione della nuova operazione.

 
Buon pomeriggio.
Si prega di avvisare gli sviluppatori del perché MQL4 e MQL5 hanno la funzione di rimuovere una sottofinestra indicatore da un Expert Advisor, mentre non hanno la funzione di creare una finestra indicatore.
Devo usare dei modelli o avviare manualmente l'indicatore della finestra, il che non è conveniente perché le informazioni sul grafico si perdono.
Vorrei anche essere in grado di avviare e visualizzare gli indicatori da un file di risorse.
O consigliare come farlo.
 
Slawa:

Non sei stato tu a organizzare il "consiglio di visualizzazione"?

Cosa vi fa pensare che sia un bug? Il nome della cartella corrisponde al numero di porta su cui è stata effettuata la connessione

Era me..... Grazie, ho capito.
 
Fare una macro
#define  MACROS(A) "##A##"
Voglio che MACROS(Num) sia sostituito da "Num", ma il risultato è sempre "##A####". È possibile definire una macro per ottenere ciò che voglio?

 

Ho fatto una piccola scoperta per me stesso

void OnStart()
{  
  double dPrice = 1.08249;
  int iPrice = (int)((dPrice / _Point) + 0.1);
  double dNewPrice = iPrice * _Point; // При этом нормализации это значение не требует в OrderSend
  
  if (dPrice != dNewPrice)
    Print((string)(dPrice - dNewPrice)); 
}

Se si apre un ordine a Integer * Point (senza normalizzazione) e poi si richiede il prezzo di apertura, questo sarà diverso dall'Integer * Point non normalizzato.

Perché OrderSEnd usa SEMPRE prezzi Integer * Point non normalizzati?

 
fxsaber:
Sto facendo una macro, voglio che MACROS(Num) sia sostituito da "Num", ma risulta sempre "##A####". È possibile definire una macro per ottenere ciò che voglio?

Rimuovere le virgolette dal corpo della macro

Per convertire un parametro macro in una stringa, usate #:

#define  MACROS(A) #A
## è usato per concatenare i token