Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 681

 
post_ek:
Quindi è possibile scambiare azioni MT5 in Otkritie o no?
Si può! Solo sarà o azioni o futures (solo una piattaforma MT5 è data gratuitamente). Per il secondo, dovrete pagare un canone mensile. Per quanto mi ricordo, è così. Cercate i dettagli nel mio account personale su Otkritie.
 
Alexey Kozitsyn:

Vladimir, non confondere l'uomo!

Dalla documentazione:

https://www.mql5.com/ru/docs/basis/variables/global
L'abitudine di non inizializzare le variabili è dannosa, poiché questo comportamento porta spesso a un "cigno nero". Ecco perché dovreste farne una regola: creare una variabile, inizializzarla subito.
 
Vladimir Karputov:
L'abitudine di non inizializzare le variabili è dannosa, perché questo comportamento si traduce spesso in un "cigno nero". Pertanto, la regola generale è quella di creare una variabile e inizializzarla immediatamente.
Stop, stop, stop. Non confondiamo "per fare una regola" e"è necessario inizializzare esplicitamente (assegnare valori a) queste variabiliin OnInit()" - che è francamente falso!
 
Alexey Kozitsyn:
Ehi, ehi, ehi. Non confondiamo "prendetelo come una regola" e"dovete inizializzare esplicitamente (assegnare valori a) queste variabiliin OnInit()" - che è palesemente falso!
Non dovete inizializzare le variabili - il denaro è vostro.
 
Vladimir Karputov:
Non dovete inizializzare le variabili - il denaro è vostro.
Ancora una volta. Non confondere le opportunità con le responsabilità!
 

Vladimir ha in parte ragione.

Ecco un esempio,

Una volta, non ricordo quando, ho dichiarato una variabile

bool STOP;

e usarlo effettivamente in OnTick .

Per impostazione predefinita, il bool dovrebbe essere false

L'ho fatto:

void OnTick ()

{

if(!STOP) {Print("STOP");return;}

}

Il codice non ha funzionato perché non avevo specificato boolSTOP=false;

Questa situazione si è verificata una volta, su qualche build, e non l'ho riprodotta in seguito (c'era qualche bug con la build o qualcos'altro - non lo so).

 
Vladislav Andruschenko:

Vladimir ha in parte ragione.

Non sto affatto invitando a lasciare le variabili non inizializzate. Ma, quando dai un consiglio a un principiante, non dire che il tuo consiglio è l'unica soluzione giusta, soprattutto perché non lo è.
 
Vladimir Karputov:
L'abitudine alla disinizializzazione delle variabili è dannosa, perché questo comportamento porta spesso a un "cigno nero". Pertanto, dovreste farne una regola - creare una variabile, inizializzarla immediatamente.

Si possono perdere i valori delle variabili quando si cambia il timeframe durante la loro inizializzazione in OnInit() - quindi possibili errori nella logica del programma.

//+------------------------------------------------------------------+
//|                                    exTextInitGlobalVariables.mq5 |
//|              Copyright 2015, Artem A. Trishkin, Skype artmedia70 |
//|                       https://login.mql5.com/ru/users/artmedia70 |
//+------------------------------------------------------------------+
#property copyright "Copyright 2015, Artem A. Trishkin, Skype artmedia70"
#property link      "https://login.mql5.com/ru/users/artmedia70"
#property version   "1.00"
//--- input parameters
input int      TestInput=0;            // Внешняя переменная
int testInputGlobal=TestInput;         // Значение внешней переменной, присвоенное на глобальном уровне
int testInputInit;                     // Значение внешней переменной, присвоенное в OnInit()

//--- global variables
int   TestValueGlobalNoInitNo;         // Не инициализирована значением нигде
int   TestValueGlobalYesInitNo=0;      // Инициализирована значением 0 при объявлении, не инициализирована в OnInit()
//---
int   TestValueGlobalNoInitYes;        // Не инициализирована значением при объявлении, инициализирована в OnInit() нулём
int   TestValueGlobalYesInitYes=0;     // Инициализирована нулём и при объявлении, и в OnInit()
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   testInputInit=TestInput;
   TestValueGlobalNoInitYes=0;
   TestValueGlobalYesInitYes=0;
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
  
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   testInputInit++;
   testInputGlobal++;
   TestValueGlobalNoInitNo++;
   TestValueGlobalNoInitYes++;
   TestValueGlobalYesInitNo++;
   TestValueGlobalYesInitYes++;
   Comment
         (
         "\n"+"============================================="+
         "\n"+"Значение внешней переменной TestInput(",TestInput,"), присвоенное в OnInit(): ",(string)testInputGlobal+
         "\n"+"Значение внешней переменной TestInput(",TestInput,"), присвоенное на глобальном уровне: ",(string)testInputGlobal+
         //---
         "\n"+"============================================="+
         "\n"+"Не инициализирована значением нигде: ",(string)TestValueGlobalNoInitNo+
         "\n"+"Инициализирована значением 0 при объявлении, не инициализирована в OnInit(): "+(string)TestValueGlobalYesInitNo+
         //---
         "\n"+"============================================="+
        "\n"+"Не инициализирована значением при объявлении, инициализирована в OnInit() нулём: "+(string)TestValueGlobalNoInitYes+
         "\n"+"Инициализирована нулём и при объявлении, и в OnInit(): "+(string)TestValueGlobalYesInitYes
         );
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

Si possono perdere i valori delle variabili quando si cambia il timeframe durante la loro inizializzazione in OnInit() - quindi possibili errori nella logica del programma.

Se non si prende in considerazione:

Init

Subito dopo che il terminale client carica il programma (Expert Advisor o indicatore personalizzato) e inizia l'inizializzazione delle variabili globali, viene inviato l'evento Init, che viene gestito dalla funzioneOnInit(), se ne ha una. Questo evento viene generato anche dopo un cambio di titolo e/o periodo del grafico, dopo aver ricompilato il programma in MetaEditor, dopo un cambio di parametri di input da un Expert Advisor o da una finestra di impostazione dell'indicatore personalizzato. Anche l'Expert Advisor viene inizializzato dopo il cambio del conto. L'evento Init non viene generato per gli script.

allora si può fare tutto quello che si vuole.

 
Vladimir Karputov:

Se non si prende in considerazione:

Init

Subito dopo che il terminale client carica un programma (un Expert Advisor o un indicatore personalizzato) e inizia l'inizializzazione delle variabili globali, viene inviato l'evento Init, che viene gestito daOnInit(), se ne ha uno. Questo evento viene generato anche dopo un cambio di titolo e/o periodo del grafico, dopo aver ricompilato il programma in MetaEditor, dopo un cambio di parametri di input da un Expert Advisor o da una finestra di impostazione dell'indicatore personalizzato. Anche l'Expert Advisor viene inizializzato dopo il cambio del conto. L'evento Init non viene generato per gli script.

Puoi fare tutto quello che vuoi.

Io parlo di Tommaso, lui parla del tuo...

Come si comunica in una situazione del genere?

Parlo di una perniciosa abitudine di inizializzare sconsideratamente le variabili globali in OnInit().

Allo stesso tempo imponete la vostra abitudine dannosa a tutti i nuovi arrivati in forma indiscutibile. State allevando una generazione di E.S.T.? Cloni di coloro che non pensano, ma seguono ciecamente il loro sensei?