Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 681
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Also ist es möglich, MT5 Aktien in Otkritie zu handeln oder nicht?
Vladimir, verwirren Sie den Mann nicht!
Aus der Dokumentation:
https://www.mql5.com/ru/docs/basis/variables/globalDie Angewohnheit, Variablen nicht zu initialisieren, ist nachteilig, da dieses Verhalten häufig zu einem "schwarzen Schwan" führt. Daher gilt die Faustregel, eine Variable zu erstellen und sie sofort zu initialisieren.
Wow, wow, wow. Verwechseln Sie nicht "nehmen Sie es als Regel" und"Sie müssen diese Variablenin OnInit() explizit initialisieren (Werte zuweisen)" - was eindeutig unwahr ist!
Sie brauchen die Variablen nicht zu initialisieren - das Geld gehört Ihnen.
Vladimir hat teilweise Recht.
Hier ist ein Beispiel,
Vor einiger Zeit, ich weiß nicht mehr, wann, habe ich eine Variable deklariert
bool STOP;
und sie tatsächlich in OnTick verwenden.
Standardmäßig sollte das bool false sein
Das habe ich getan:
{
if(!STOP) {Print("STOP");return;}
}
Der Code funktionierte nicht, weil ich nicht boolSTOP=false angegeben hatte;
Diese Situation trat einmal auf, bei einem Build, und ich konnte sie später nicht reproduzieren (es gab einen Fehler im Build oder etwas anderes - ich weiß es nicht).
Vladimir hat teilweise Recht.
Die Gewohnheit, Variablen nicht zu initialisieren, ist nachteilig, da dieses Verhalten häufig zu einem "schwarzen Schwan" führt. Deshalb sollten Sie es zur Regel machen, eine Variable zu erstellen und sie sofort zu initialisieren.
Sie können Variablenwerte verlieren, wenn Sie die Zeitrahmen während ihrer Initialisierung in OnInit() umschalten - daher sind Fehler in der Programmlogik möglich.
//| 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
);
}
//+------------------------------------------------------------------+
Sie können Variablenwerte verlieren, wenn Sie die Zeitrahmen während ihrer Initialisierung in OnInit() umschalten - daher sind Fehler in der Programmlogik möglich.
Wenn Sie das nicht berücksichtigen:
Init
Unmittelbar nachdem das Client-Terminal das Programm (Expert Advisor oder benutzerdefinierter Indikator) geladen und mit der Initialisierung der globalen Variablen begonnen hat, wird das Init-Ereignis gesendet, das von der FunktionOnInit() verarbeitet wird, sofern sie eine solche hat. Dieses Ereignis wird auch nach einem Wechsel des Wertpapiers und/oder der Chartperiode, nach einer Neukompilierung des Programms in MetaEditor, nach einer Änderung der Eingabeparameter eines Expert Advisors oder eines benutzerdefinierten Indikatoreinstellungsfensters erzeugt. Der Expert Advisor wird auch initialisiert, nachdem das Konto geändert wurde. Das Ereignis Init wird nicht für Skripte erzeugt.
dann können Sie alles machen, was Sie wollen.
Wenn Sie das nicht berücksichtigen:
Init
Unmittelbar nachdem das Client-Terminal ein Programm (einen Expert Advisor oder einen benutzerdefinierten Indikator) geladen und mit der Initialisierung der globalen Variablen begonnen hat, wird das Init-Ereignis gesendet, das vonOnInit() behandelt wird, sofern es ein solches gibt. Dieses Ereignis wird auch nach einem Wechsel des Wertpapiers und/oder der Chartperiode, nach einer Neukompilierung des Programms in MetaEditor, nach einer Änderung der Eingabeparameter eines Expert Advisors oder eines benutzerdefinierten Indikatoreinstellungsfensters erzeugt. Der Expert Advisor wird auch initialisiert, nachdem das Konto geändert wurde. Das Ereignis Init wird nicht für Skripte erzeugt.
Sie können tun, was Sie wollen.
Ich spreche von Thomas, er spricht von dir...
Wie kann man in einer solchen Situation kommunizieren?
Ich spreche von einer verhängnisvollen Gewohnheit, globale Variablen in OnInit() gedankenlos zu initialisieren.
Gleichzeitig zwingen Sie allen Neuankömmlingen Ihre schädliche Gewohnheit in einer unhinterfragten Form auf. Sie züchten eine Generation von E.S.T.'s? Klone derer, die nicht denken, sondern ihrem Sensei blindlings folgen?