Errori, bug, domande - pagina 1492

 
Maxim Khrolenko:
E globale (non esterno) non lo è, e questo non è buono.

Perché non è buono? Si dice esplicitamente che le variabili globali sono inizializzate una volta all'avvio del programma.

Se volete un comportamento diverso, inizializzate come volete in OnInit

 
Yuri Evseenkov:
Sarebbe bene rifletterlo nella documentazione.
Sì, lo faremo.
 
zaskok3:
In MQL4++ non posso fare a meno di extern quando ho bisogno di cambiare i parametri di input programmaticamente. Per esempio, quando converto un indicatore standard in uno interattivo devo sostituire input con extern. Il compilatore tratta le variabili di input come const e si lamenta al tentativo di cambiarle. Con extern non ci saranno questi problemi.

Usare "raddoppiatori" di parametri di input

Abbiamo un esempio in MQL5\Indicators\Examples\ADX.mq5.

//--- input parameters
input int InpPeriodADX=14; // Period
//---- buffers
double    ExtADXBuffer[];
double    ExtPDIBuffer[];
double    ExtNDIBuffer[];
double    ExtPDBuffer[];
double    ExtNDBuffer[];
double    ExtTmpBuffer[];
//--- global variables
int       ExtADXPeriod;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- check for input parameters
   if(InpPeriodADX>=100 || InpPeriodADX<=0)
     {
      ExtADXPeriod=14;
      printf("Incorrect value for input variable Period_ADX=%d. Indicator will use value=%d for calculations.",InpPeriodADX,ExtADXPeriod);
     }
   else ExtADXPeriod=InpPeriodADX;
 
Compagni, qualcuno ottiene regolarmente "Internal compiler error" durante la compilazione? Nessuna ragione apparente, nel caso della ricompilazione - si blocca, nel caso di chiudere l'editor, riaprirlo (con le stesse schede, con lo stesso codice) - la compilazione è solitamente normale. Non cambia nulla nel codice! Ma a volte questo errore si verifica più volte di seguito e il primo riavvio dell'editor non aiuta. Finora, come risultato di ricaricare tutto è riuscito a compilare. Ma ho paura che prima o poi smetterà di funzionare. Mi piacerebbe trovare qualcun altro che ha incontrato bug simili, in modo che insieme potremmo fornire a servicedesk dati sulle condizioni del loro verificarsi.
 
Slawa:

Usare i "doppiatori" per i parametri di ingresso

Abbiamo un esempio in MQL5\Indicators\Examples\ADX.mq5

Ora, per convertire un indicatore nella variante interattiva, è necessario aggiungere solo una linea al codice sorgente. Se fate i doppiatori, oltre alla stringa supplementare per la creazione del doppiatore, dovete fare delle sostituzioni per tutto il testo. Perché questo fastidio quando si può semplicemente cambiare una riga.

Cosa vi impedisce di rimuovere la const-awareness delle variabili di input in fase di compilazione?

 
zaskok3:

Per convertire l'indicatore in una variante interattiva è necessario aggiungere solo una riga al sorgente. Se fai un doppio, allora oltre alla linea extra per creare un doppio, dovrai sostituire l'intero testo. Perché questo fastidio, quando si può facilmente cambiare una linea.

Cosa vi impedisce di rimuovere la const-awareness delle variabili di input in fase di compilazione?

Modifica del testo. "Ctrl" + "H" - cerca e sostituisci. Niente di complicato. Basta non essere pigri.
 
zaskok3:

Cosa vi impedisce di rimuovere la const-awareness delle variabili di input in fase di compilazione?

Memorizzazione globale degli indicatori nella base storica di MT5. Per loro i parametri di ingresso sono fondamentali. Quando si cambiano i parametri di input, l'indicatore con i vecchi parametri viene distrutto, e lo stesso indicatore con i parametri modificati viene creato di nuovo.

Cioè, la restrizione è puramente architettonica

Nella quarta versione potremmo rimuovere la costanza dalle istanze, ma poi c'è un'incompatibilità del nuovo MQL4 e MQL5. Pertanto, non lo faremo. Si prega di continuare a usare extern

 

Slawa:

Cioè, la limitazione è puramente architettonica.

È un peccato che l'architettura sia così rigida che non c'è alcuna possibilità di flessibilità anche semplice. Si scopre che l'interattività in MQL5 richiederà una stampella. La domanda è: dov'è il vantaggio allora, se la lingua limita le possibilità...
 
pako:
Finestra per staccarsi dal terminale
Come?
 
Joo Zepper:
Come?
Era su un forum da qualche parte, una DLL