Domande dai principianti MQL5 MT5 MetaTrader 5 - pagina 681
Ti stai perdendo delle opportunità di trading:
- App di trading gratuite
- Oltre 8.000 segnali per il copy trading
- Notizie economiche per esplorare i mercati finanziari
Registrazione
Accedi
Accetti la politica del sito e le condizioni d’uso
Se non hai un account, registrati
Quindi è possibile scambiare azioni MT5 in Otkritie o no?
Vladimir, non confondere l'uomo!
Dalla documentazione:
https://www.mql5.com/ru/docs/basis/variables/globalL'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.
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 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:
{
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).
Vladimir ha in parte ragione.
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
);
}
//+------------------------------------------------------------------+
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.
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?