Caratteristiche del linguaggio mql5, sottigliezze e tecniche - pagina 129

 
fxsaber:

ME ha una combinazione ALT+V dove si possono vedere i valori precedenti degli appunti di sistema. Anche se avete copiato qualcosa dal browser e ME stava lavorando in background, ME lo vedrà e lo ricorderà.

Approssimativamente, ME vede molto di quello che fate al computer. Per esempio, se si incolla la password di un account tramite il buffer, questa va nella cronologia di ME.

Copio molto in questo megabuffer, devo riavviare ME per cancellare questo buffer, ma quando ME si avvia prende ancora i dati correnti dal buffer, è fastidioso, ho suggerito di aggiungere un pulsante per cancellare il buffer in basso e numerare le posizioni, quando si incolla è più facile navigare per numeri di posizione e non per contenuto

 
Vitaly Muzichenko:

Wow, sto copiando le password delle criptovalute. Quanto è dannoso per me?

Per esempio, se date accesso al vostro computer dall'esterno (TeamViewer, ecc.), è consigliabile disconnettersi da tutti i ME e pulire il buffer (copiare la spazzatura lì) prima di farlo.

 
fxsaber:

ME ha una combinazione ALT+V dove si possono vedere i valori precedenti degli appunti di sistema. Anche se avete copiato qualcosa dal browser e ME stava lavorando in background, ME lo vedrà e lo ricorderà.

Approssimativamente, ME vede molto di quello che fate al computer.

Grazie. Interessante. Vale la pena aggiungere che non viene salvato solo ciò che è stato copiato in ME, ma tutto in tutte le applicazioni. In particolare bisogna controllare a quale profondità viene salvato, stavo controllando ora e ho visto tre testi copiati, due da ME e uno dal testo nel post su questo forum.

ps; Anche due dal testo del forum


 
E per sicurezza, assicuratevi che nulla venga cercato o sostituito. In metaeditor.ini questo
FindWhatX=text
ReplaceWithX=text
 
fxsaber:

ME ha una combinazione ALT+V dove si possono vedere i valori precedenti degli appunti di sistema. Anche se avete copiato qualcosa dal browser e ME stava lavorando in background, ME lo vedrà e lo ricorderà.

Approssimativamente, ME vede molto di quello che fate al computer. Per esempio, se si incolla la password di un account o di un conto personale da un'altra risorsa attraverso il buffer, questa andrà nella storia della sessione ME corrente.

Questa è una caratteristica interessante. Meno male che il buffer è memorizzato nella memoria e non in un file.

 

Ecco un'altra sottigliezza.

Il compilatore non si lamenta delle funzioni con lo stesso nome e diversi parametri di input, anche se non appartengono a una classe.

void OnStart()
{
 f1("28-70 ОГО");
 f1(1.01);
}

void f1(string s)
{
 Print(__FUNCSIG__, " ", s);
}

void f1(double s)
{
 Print(__FUNCSIG__, " ", s);
}

Risultato dell'esecuzione

2019.03.10 10:34:45.566 !00 (EURUSD,H4) void f1(string) 28-70 ОГО
2019.03.10 10:34:45.566 !00 (EURUSD,H4) void f1(double) 1.01
 

Il multi-buffer è ottimo per velocizzare l'editor ed è sicuro.

Non scrive nulla sul disco e mantiene solo i dati in memoria.

 
Alexey Viktorov:

Ecco un'altra sottigliezza.

Il compilatore non si lamenta delle funzioni con lo stesso nome e diversi parametri di input, anche se non appartengono a una classe.

Risultato del runtime

Questo è un normale sovraccarico di funzioni. Tutto è standard.

 
Artyom Trishkin:

È un normale sovraccarico di funzioni. Tutto è standard.

Per qualche ragione, pensavo che l'overloading funzionasse solo nelle classi. Mi piace pensare di non essere l'unico. Forse questo aiuterà qualcuno. ))))

 
La cache dell'ottimizzatore può essere disabilitata con la seguente tecnica
// Способ выключить кеш оптимизатора
sinput bool inCache = true; // Выключить кеш оптимизатора

input int Range = 0; // 0..10

void OnTesterInit( void )
{  
  if (inCache)
  {
    MathSrand((int)TimeLocal());
    
    ParameterSetRange("inCache", false, MathRand(), 0, 0, 0);    
  }
}

void OnTesterDeinit( void ) {}

void OnTesterPass( void )
{
  static int i = 0;
  
  Print(i++); // Признак того, что кеш выключен.
}

double OnTester( void )
{
  if (MQLInfoInteger(MQL_OPTIMIZATION))
  {
    uchar Data[];

    FrameAdd(NULL, 0, 0, Data);
  }

  return(0);
}


Naturalmente, una soluzione migliore sarebbe se gli sviluppatori desseroOptimizationCacheOff().

Notate che il parametro di input bool è in realtà un long. Quindi bool inCache = 1 e bool inCache = 2 sono parametri di input diversi, anche se sono veri in entrambi i casi.

Motivazione: