//+------------------------------------------------------------------+//| 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のNULL値が考慮されていませんが、それ以外は良好です。
。
OK、Peter、スクリプトを複雑にして、関数の中にif-else条件文を適用する方法を考えてみるよ。
ウラジミールさん、ありがとうございます。
皆さん、ご機嫌いかがでしょうか?
プログラミング言語「MQL5」の勉強を続けています。Peter Konov氏のヒントを参考に、このスレッドの参加者のタスクの1つを継続したスクリプトの最終的なコードを貼り付けます。スクリプトはすべてのモードでテストされています。問題なく検出されました。まず最初に、最小限の入力パラメータを適用しました。スクリプトのコードは英語で書かれていますが、コードへのコメントはロシア語で書かれており、学習しやすいように配慮されています。先に約束したように、このスクリプトはプログラミングスクールの1stフォームの生徒にも理解できるように記述したつもりです。
ウラジミールさん、よろしくお願いします。
皆さん、ご機嫌いかがでしょうか?
プログラミング言語「MQL5」の勉強を続けています。Peter Konov氏のヒントを参考に、このスレッドの参加者のタスクの1つを継続したスクリプトの最終的なコードを貼り付けます。スクリプトはすべてのモードでテストされています。問題なく検出されました。まず最初に、最小限の入力パラメータを適用しました。スクリプトのコードは英語で書かれていますが、コードへのコメントはロシア語で書かれており、学習しやすいように配慮されています。先に約束したように、このスクリプトはプログラミングスクールの1stフォームの生徒にも理解できるように記述したつもりです。
ウラジミールさん、ありがとうございます。
1つのエラーを修正すれば、完璧になります。
関数については、このようにコードを書くべきだったのではと推測しています。
敬具 ウラジミール関数についてですが、このようにコードを書くべきだったのではと推測しています。
敬具 ウラジミールただ、1つのエラーをまっすぐに修正すれば、完璧になります。
グローバルオブジェクトは、コンストラクタによってデフォルトで初期化さ れます。ただし、スタック上に確保されたメモリ(変数)は初期化されない。そのため、グローバル変数は初期化されないことがありますが、この場合、ゼロになることを覚えておいてください。しかし、初期化されていない(同時に、自分が何をしているのかを正確に把握していない限り、コンパイラが生成する警告を すぐに避けることに慣れる)ことは、初期化されていない変数を読むと未定義の動作につながるため、深刻な問題である。例えば、このコードはリリースビルドとデバッグビルドで挙動が異なりますし、コンパイラのバージョンや最適化の設定を変更したときに、その挙動も変わらないという保証は誰もしてくれません。
Peterグローバル変数について ですが、グローバル変数が事前に定義されている必要があるという文献はまだ見当たりませんね。この件に関する知識を深めるために、ソースへのリンクをお持ちですか?MQL5リファレンスには、初期化に関する明示的な言及は ありません。
bool型は 、 論理値 true または false を 格納するために設計されて おり、 その数値表現はそれぞれ 1 または 0 である。
例
bool a =true;
bool b =false;
bool c =1;
内部表現は1バイトの整数値である。なお、boolean式では、boolの代わりに他の整数型や実数型、またはそれらの式を用いても、コンパイラはエラーを発生させない。この場合、0はfalse、それ以外はtrueと解釈される。
グローバルオブジェクトは、デフォルトのコンストラクタで初期化さ れます。ただし、スタック上に確保されたメモリ(読み出し変数)については、初期化されない。そのため、グローバル変数は初期化されないことがありますが、この場合、ゼロになることを覚えておいてください。しかし、初期化されていない(同時に、自分が何をしているのか正確に分かっていない限り、コンパイラが生成する警告を すぐに避けることに慣れる)ことは、初期化されていない変数を読むと未定義の動作につながるため、深刻な問題である。例えば、このコードはリリースビルドとデバッグビルドで挙動が異なりますし、コンパイラのバージョンや最適化の設定を変更したときに、その挙動も変わらないという保証は誰もしてくれません。