Fragen von Anfängern MQL5 MT5 MetaTrader 5 - Seite 681

 
post_ek:
Also ist es möglich, MT5 Aktien in Otkritie zu handeln oder nicht?
Sie können! Es wird nur entweder Aktien oder Futures geben (nur eine MT5-Plattform wird kostenlos zur Verfügung gestellt). Für die zweite Variante müssen Sie eine monatliche Gebühr entrichten. Soweit ich mich erinnere, ist es so. Einzelheiten finden Sie in meinem persönlichen Konto bei Otkritie.
 
Alexey Kozitsyn:

Vladimir, verwirren Sie den Mann nicht!

Aus der Dokumentation:

https://www.mql5.com/ru/docs/basis/variables/global
Die Gewohnheit, Variablen nicht zu initialisieren, ist nachteilig, da dieses Verhalten häufig zu einem "schwarzen Schwan" führt. Deshalb sollten Sie es zu einer Regel machen - erstellen Sie eine Variable und initialisieren Sie sie sofort.
 
Vladimir Karputov:
Die 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.
Halt, halt, halt. Verwechseln wir nicht "um eine Regel zu erstellen" und"es ist notwendig, diese Variablenin OnInit() explizit zu initialisieren (ihnen Werte zuzuweisen)" - was offen gesagt nicht stimmt!
 
Alexey Kozitsyn:
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 Karputov:
Sie brauchen die Variablen nicht zu initialisieren - das Geld gehört Ihnen.
Noch einmal. Verwechseln Sie nicht Chancen mit Pflichten!
 

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:

void OnTick ()

{

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).

 
Vladislav Andruschenko:

Vladimir hat teilweise Recht.

Ich rufe keineswegs dazu auf, Variablen uninitialisiert zu lassen. Aber wenn Sie einem Neuling einen Ratschlag geben, sagen Sie nicht, dass Ihr Ratschlag die einzig richtige Lösung ist, zumal er es nicht ist.
 
Vladimir Karputov:
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
         );
  }
//+------------------------------------------------------------------+
 
Artyom Trishkin:

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.

 
Vladimir Karputov:

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?