MetaTrader 4 Build 529 beta rilasciato con un nuovo compilatore - pagina 125

 
stringo:

Non si possono cambiare le variabili di ingresso!

Usa la parola chiave input invece di extern, allora il compilatore non ti lascerà fare questo

Vedremo cosa possiamo fare per mantenere la vecchia funzionalità del quadruplo.

PS: grazie mille per averne parlato


Quindi non c'era l'obiettivo di cambiarli!

Sono solo usati per ulteriori calcoli. Niente di più!

Bene, in linea di principio vedo, abbiamo risolto questo problema introducendo una variabile extra.

extern int TakeProfit_= 10;
int TakeProfit;
......  
   int dig = (int)MarketInfo(Symbol(), MODE_DIGITS);
   if (dig == 5 || dig == 3)
   {
      TakeProfit  = TakeProfit_* 10;
.....
 
Night63:


Quindi non c'era motivo di cambiarli!

Sono semplicemente utilizzati per ulteriori calcoli. Non più di questo!

Bene, in linea di principio, abbiamo risolto questo problema introducendo una variabile aggiuntiva.


Questo è vero... Ma perché preoccuparsi di controllare una costante immutabile ad ogni tick? È sufficiente definirlo una volta in init()
 
stringo:

Non si possono cambiare le variabili di ingresso!

Uso il valore delle variabili esterne (per alcune variabili) come valore predefinito, e leggo il resto dei dati per lo stesso parametro dal file ini.

Gli Expert Advisor lavorano simultaneamente con diverse strategie che hanno i loro parametri di input. Esempio:

extern int TF = 15;
int gia_TF[5];
void start()
{
    for (int li_TF = 0; li_TF < ArraySize (gia_TF); li_TF++)
    {
        TF = gia_TF[li_TF];
    }
}

Sì - il problema può essere risolto inserendo variabili aggiuntive, ma perché? Chiarire, questa funzionalità sarà privata dal nuovo MT?

 
TarasBY:
Uso il valore delle variabili esterne (per alcune variabili) come valore predefinito, e leggo altri dati per lo stesso parametro da ini-file.

I consulenti lavorano simultaneamente con diverse strategie che hanno i loro parametri di input. Esempio:

Sì - la questione può essere risolta inserendo variabili aggiuntive, ma perché? Chiarire, questa funzionalità sarà privata dal nuovo MT?

Te l'avevo detto. :-))

Questo è ridondante. Questo significa che un inline con variabili esterne come variabili esterne non è necessario. Potete rimuovere extern. Non noterete nemmeno la differenza. Si inizializza comunque dal file INI.

 
TarasBY:
Uso il valore delle variabili esterne (per alcune variabili) come valore predefinito, e leggo i dati rimanenti per lo stesso parametro dal file ini.

I consulenti lavorano simultaneamente con diverse strategie che hanno i loro parametri di input. Esempio:

Sì - il problema può essere risolto introducendo variabili aggiuntive, ma perché?! Chiarire, questa funzionalità sarà privata dal nuovo MT?


No, non sarà privato.

Tutto sarà come nei vecchi quattro. I codici scritti a lungo (anche ricompilati con il nuovo compilatore) funzioneranno come prima.

 
Zhunko:

Te l'avevo detto... :-))

È ridondante. Significa che l'inclusione con variabili esterne come variabili esterne non è necessaria. Potete omettere extern. Non noterete nemmeno la differenza. Si inizializza comunque dal file INI.

Vadim! Chi è un combattente per l'universalità e la multivarianza?! :)
 
stringo:

No, non lo farà.

Tutto sarà come nel vecchio quadrante. Il codice scritto da tempo (anche ricompilato con il nuovo compilatore) funzionerà come prima.

Grazie. OK.
 
avtomat:

Questo è vero... Ma perché preoccuparsi di controllare una costante immutabile ad ogni tick? È sufficiente definirlo una volta in init()


Hai ragione, è così che è stato inizialmente, abbiamo provato ogni sorta di cose nella fase di risoluzione del problema.

Ora torniamo all'init, grazie per aver evidenziato il difetto!

 
stringo:

Puoi spiegare il significato fisico del tuo codice?

Il simbolo è già selezionato, se il suo grafico è aperto, su cui lavora questo Expert Advisor.

Il simbolo già selezionato non può essere riselezionato. Impossibile nascondere un simbolo il cui grafico è aperto.


Il significato fisico è quello di controllare che il simbolo il cui nome è inserito come stringa nei parametri di input dell'EA sia disponibile per il trading. Il codice identico in MT5 funziona.

Il codice che ho citato è solo un esempio. Lì è un po' diverso, ma il significato rimane lo stesso.

P.S. E l'errore 138 nel tester?

Codice:

void OnTick()
  {
   if(OrdersTotal()==0)
     {
      string SYMBOL=Symbol();
      int digits=(int)SymbolInfoInteger(SYMBOL,SYMBOL_DIGITS);
      MqlTick lasttick={0};
      if(!SymbolInfoTick(SYMBOL,lasttick))
         return;
      double ask=lasttick.ask;
      double bid=lasttick.bid;

      OrderSend(SYMBOL,OP_BUY,0.1,NormalizeDouble(ask,digits),1000,0,0,"Test",0,0,CLR_NONE);
     }
  }

Risultato:

 
Alcune curiosità con oggetti grafici.

Questa volta OBJ_EDIT.

1) impossibile inserire i dati, quando si clicca all'interno di OBJ_EDIT non succede nulla, i dati nel campo non vengono evidenziati (prima era impossibile uscire dal campo se non con il tasto "ENTER", ora è impossibile inserire);

2) OBJPROP_ANCHOR non funziona;

3) Quando OBJ_EDIT è selezionato, un punto per spostare l'oggetto appare nell'angolo in alto a sinistra, ma con un certo, anche se molto piccolo, offset a seconda di quale angolo del grafico (OBJPROP_CORNER) si contano le coordinate.

Nessun altro problema con il rendering o lo spostamento di oggetti grafici. Grazie per la correzione.
Motivazione: