Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 681
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Так можно торговать акциями МТ5 в Открытии или нет?
Владимир, не путайте человека!
Из документации:
https://www.mql5.com/ru/docs/basis/variables/globalПривычка неинициализировать переменные - пагубна, так как такое поведение часто приводит к появлению "черного лебедя". Поэтому нужно брать за правило - создал переменную, сразу инициализируй.
Стоп, стоп, стоп. Давайте Вы не будете путать "брать за правило" и "обязательно в OnInit() нужно явно проинициализировать (присвоить значения) этим переменным" - что является откровенной неправдой!
Вы можете не инициализировать переменные - деньги Ваши.
отчасти Владимир прав.
приведу пример,
когда-то, не помню когда, я объявил переменную
bool STOP;
и собственно в OnTick ее отрабатывал.
по умолчанию, bool должен быть false
я делал так:
{
if(!STOP) {Print("STOP");return;}
}
Но данный код не срабатывал, потому, что я явно не указал что bool STOP=false;
Эта ситуация у меня возникла единожды, на каком -то билде, потом я ее не воспроизводил (был какой-то глюк с билдом, или чего еще, - непонятно). но попался на такой ошибке.
отчасти Владимир прав.
Привычка неинициализировать переменные - пагубна, так как такое поведение часто приводит к появлению "черного лебедя". Поэтому нужно брать за правило - создал переменную, сразу инициализируй.
Можно терять значения переменных при переключении таймфрейма при их инициализации в OnInit() - отсюда возможные косяки в логике работы программы.
//| 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
);
}
//+------------------------------------------------------------------+
Можно терять значения переменных при переключении таймфрейма при их инициализации в OnInit() - отсюда возможные косяки в логике работы программы.
Если не учитывать:
Init
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.
то можно накрутить что угодно.
Если не учитывать:
Init
Сразу же после того, как клиентский терминал загрузит программу (эксперт или пользовательский индикатор) и запустит процесс инициализации глобальных переменных, будет послано событие Init, которое обрабатывается функцией OnInit(), если она есть. Это событие также генерируется после смены финансового инструмента и/или периода графика, после перекомпиляции программы в редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или пользовательского индикатора. Советник также инициализируется после смены счета. Для скриптов событие Init не генерируется.
то можно накрутить что угодно.
Я про Фому, он про Ерёму...
Вот как тут общаться в такой ситуации?
Я говорю о пагубной привычке бездумно инициализировать глобальные переменные в OnInit(), Вы же мне справку пхаете, которую я знаю.
При этом вы в безапелляционной форме навязываете свою пагубную привычку всем новичкам. Поколение ЕГЭ плодите? Клоны не думающих, но слепо движущихся за своим сенсеем?