//+------------------------------------------------------------------+//| Learning_MQL5.mq5 |//| Copyright 2020, MetaQuotes Software Corp. |//| https://www.mql5.com |//+------------------------------------------------------------------+#property copyright"Copyright 2020, MetaQuotes Software Corp."#property link"https://www.mql5.com"#property description"Скрипт подводит итог обучения языку программирования MQL5. В зависимости от"#property description"входных параметров печатает во вкладке \"Эксперт\" торгового терминала два"#property description"сообщения на русском языке: \"Я выучу язык MQL5!\" или \"Я не выучу язык MQL5!\""#property description"Код скрипта написан на основе примера, приведенного Valeriy Yastremskiy на сайте"#property description"MQL5, в теме \"Самообучение языку MQL5 с полного нуля\"."#property description"======================================================"#property description"Ссылка на пример https://www.mql5.com/ru/forum/352460/page30#comment_18646826"//---#property version"1.00"//версия скрипта 1.00//---#property script_show_inputs//выводить окно со свойствами перед запуском скрипта //--- Зададим входные параметры скрипта:inputushort Period_learning=500; //Полный период обучения (в днях)inputushort Days_passed=10; //Сколько дней прошло с начала обучения (в днях)inputbool Patience=true; //Терпение (true - достаточно; false - не достаточно)//--- Зададим глобальные переменные://переменная enough_time (достаточно времени), где bool - логическое значение: истина (true) или ложь (false)bool enough_time;
//переменная enough_patience (достаточно терпения), где bool - логическое значение: истина (true) или ложь (false)bool enough_patience;
//+------------------------------------------------------------------+//| Script program start function |//+------------------------------------------------------------------+voidOnStart() //старт работы скрипта
{
/* Зададим условие для работы скрипта. Если:
1. значение функции "имею время" будет равно значению истина (true)
2. и значение функции "имею терпение" будет равно значению истина (true)
*/if(have_time()==true && have_patience()==true)
{
Print("Я выучу язык MQL5!"); //выводим сообщение "Я выучу язык MQL5!"
}
else//в противном случае
{
Print("Я не выучу язык MQL5!"); //выводим сообщение "Я не выучу язык MQL5!"
}
}
//+------------------------------------------------------------------+//| |//+------------------------------------------------------------------+//--- Функция "имею_время"bool have_time() //создаём функцию "имею_время" и присвоим тип данных bool
{
/* Если:
1. значение входного параметра Period_learning больше нуля
2. и значение входного параметра Days_passed больше или равно значения входного параметра Period_learning
*/if(Period_learning>0 && Days_passed>=Period_learning)
enough_time=true; //то тогда значение enough_time (достаточно времени) будет равно истине (true)return(enough_time); //возвращаем значение "достаточно времени" в функцию "имею время"
}
//--- Функция "имею_терпение"bool have_patience() //создаём функцию "имею_терпение" и присвоим тип данных bool
{
enough_patience=Patience; //задаём для переменной enough_patience (достаточно терпения) значение равное //входному параметру "Терпение" (Patience): истина или ложьreturn(enough_patience); //возвращаем значение "достаточно терпения" в функцию "имею терпение"
}
//+------------------------------------------------------------------+
//--- Функция "имею_время"bool have_time() //создаём функцию "имею_время" и присвоим тип данных bool
{
/* Если:
1. значение входного параметра Period_learning больше нуля
2. и значение входного параметра Days_passed больше или равно значения входного параметра Period_learning
*/if(Period_learning>0 && Days_passed>=Period_learning)
{
enough_time=true; //то значение enough_time (достаточно времени) будет равно истине (true)
}
else //в противном случае
{
enough_time=false; //значение enough_time (достаточно времени) будет равно ложь (false)
}
return(enough_time); //возвращаем значение "достаточно времени" в функцию "имею время"
}
你肯定在主旨上迈出了一大步--你已经掌握并开始使用函数,当然,祝贺你!)
我正在巩固我迄今所学的材料,以及我已经开始学习和而循环。追踪,虽然是在遥远的未来,但这是我自我学习计划中的一个强制性部分。
问候,弗拉基米尔。
...
总的来说,剧本写得很正确。它没有考虑到Period_learning的空值,但除此之外,它很好。
好的,彼得,我会考虑如何使脚本复杂化,在函数中应用if-else条件语句。
问候,弗拉基米尔。
大家今天好,心情好
我继续学习MQL5编程语言。考虑到Peter Konov的提示,我粘贴了脚本的最终代码,它是这个主题的参与者的一项任务的延续。该脚本已在所有模式下进行了测试。没有发现问题。首先,我应用了最小数量的输入参数。脚本代码是用英语写的,代码的注释是用俄语写的,以方便学习。正如我先前所承诺的那样,我试图以一个编程学校一年级学生可以理解的方式来描述这个脚本。
最好的问候,弗拉基米尔。
大家今天好,心情好
我继续学习MQL5编程语言。考虑到Peter Konov的提示,我粘贴了脚本的最终代码,它是这个主题的参与者的一项任务的延续。该脚本已在所有模式下进行了测试。没有发现问题。首先,我应用了最小数量的输入参数。脚本代码是用英语写的,代码的注释是用俄语写的,以方便学习。正如我先前所承诺的那样,我试图以一个编程学校一年级学生可以理解的方式来描述这个脚本。
问候,弗拉基米尔。
修正一个错误,它就会变得完美。
关于这个函数,我想代码应该是这样写的。
真诚的,弗拉基米尔。关于这个函数,我想代码应该是这样写的。
真诚的,弗拉基米尔。只要直接修复一个错误,就会变得完美。
全局对象,默认是由构造函数初始化 的。对于原始类型(在我们的例子中,除了字符串以外的所有类型),它是0。 但对于在堆栈上分配的内存(读变量),它们是不初始化的。这就是为什么全局变量可能没有被初始化,记住在这种情况下它们将等于零。但是没有初始化(同时,要习惯于马上避免编译器产生的警告,除非你很清楚自己在做什么)是一个严重的问题,因为读取一个未初始化的变量会导致未定义行为。例如,这段代码在发布版和调试版中的行为是不同的,没有人能够保证当你改变编译器版本或优化设置时,它的行为也不会改变。
Peter,关于全局变量 的问题,我还没有在文献中发现全局变量需要被预定义的说法。你是否有一个来源的链接,以提高你在这个问题上的知识?MQL5参考文献不包含 对初始化的明确参考。
bool类型 被 设计用来存储布尔值 true 或 false ,其数字表示分别为1或0 。
例子。
bool a =true;
bool b =false;
bool c =1;
内部表示是一个1字节的整数。应该注意的是,在布尔表达式中,使用其他整数或实数类型或这些类型的表达式来代替布尔是可以接受的,而且编译器不会产生错误。在这种情况下,零将被解释为假,所有其他的值都是真。
全局对象,用默认的构造函数进行初始化。对于原始类型(在我们的例子中,除字符串外的所有类型),它是0。 但对于在堆栈上分配的内存(读变量),它们是不初始化的。这就是为什么全局变量可能没有被初始化,记住在这种情况下它们将等于零。但是没有初始化(同时,要习惯于马上避免编译器产生的警告,除非你很清楚自己在做什么)是一个严重的问题,因为读取一个未初始化的变量会导致未定义行为。例如,这段代码在发布版和调试版中的行为是不同的,没有人能够保证当你改变编译器版本或优化设置时,它的行为也不会改变。