MQL5入門(第2部):定義済み変数、共通関数、制御フロー文の操作
はじめに
MQL5の旅へお帰りなさい。第1部では、プログラミング経験のない初心者のためにMQL5の複雑さを分解し、アルゴリズム取引の冒険に乗り出しました。第2部に入ると、MQL5の本質的な構成要素をさらに深く掘り下げるため、興奮は続きます。 私たちの目標はシンプルでありながら奥深いものです。プログラミングのバックグラウンドに関係なく、誰もが理解することの抱擁を感じられるようにすることです。お気軽にご質問ください。MQL5の複雑な世界を一緒に紐解いていきましょう。 すべての声に耳を傾け、アルゴリズム取引の旅路を分かち合うコミュニティを築きましょう。
これらの記事は、シンプルさの道標として際立っています。ユニークなアプローチで、MQL5の基礎の複雑さをわかりやすさに重点を置いて解き明かし、バックグラウンドに関係なく、誰もがアルゴリズム取引の魅惑的な旅に出ることができるようにします。 これは単なる記事ではなく、非日常への旅なのです。独特の没入感と魅惑的な方法でMQL5の世界を探検しましょう。各記事がただ読まれるだけでなく、体験される新しい理解の時代へようこそ。
定義済み変数、一般的な関数、制御フロー文、算術演算、論理演算、関係演算の謎を解き明かしていきます。この記事を読み進めていくうちに、自動売買の大本であるエキスパートアドバイザー(EA)の作成にスポットライトが当たるようになります。読者の取引戦略に生命を吹き込み、スクリプトに代わりに意思決定をさせる方法を学びます。
そしてもちろん、その真価を試すことなくして、戦略に何の意味があるのでしょうか。ストラテジーテスターが主役となり、過去のデータからアルゴリズムの堅牢性を評価することができます。理論が現実と出会う場所であり、アルゴリズム取引の重要な側面であるこの複雑さについて、私がご案内します。みなさん、シートベルトを御忘れずに。第2部は、MQL5の核心への旅です。MQL5を使用したアルゴリズムトレードの魅力的な世界を自信を持ってナビゲートするスキルを身につけるためにデザインされた、没頭型の学習体験に向けてご準備ください。
この記事では、以下のトピックを取り上げます。
- 定義済み変数
- 共通関数
- 算術演算、関係演算、論理演算
-
制御フロー文
第2部の深みに踏み込む前に、最初の記事で取り上げた重要な概念を簡潔にまとめたビデオをお届けするので、お楽しみください。このビデオは、より高度なMQL5のトピックを掘り下げていく際に、私たち全員が認識を共有していることを確認する、簡単な復習の役割を果たします。洞察に満ちた復習をご覧ください。
1.定義済み変数
定義済み変数について
プログラミングにおいて、変数は情報を入れる容器のようなものです。定義済み変数は、その名前が示すように、プログラミング言語自体によってすでに定義されている特別なコンテナです。これらのコンテナには、プログラムの現状、取引環境、あるいは市場環境に関する具体的な情報が詰め込まれています。
なぜ「定義済み」なのか
定義済みと呼ばれるのは、プログラミング言語(この場合はMQL5)がすでにそれらを設定し、特定の意味を与えているからです。これらの変数を作成したり宣言したりする必要はなく、必要なときにいつでも使用できるようになっています。MQL5プログラム(EA、スクリプト、カスタム指標など)を開始すると、定義済みの変数の特別なセットが使用されます。これらの変数には、市場がその瞬間にどのように見えるかという情報がすでに含まれています。価格、銘柄、時間などの詳細です。これらは、プログラム実施開始時の市場状況のスナップショットとして機能し、プログラム内での意思決定に不可欠なデータを提供します。
たとえ
定義済みの変数を、魔法使いの工房にある魔法の箱だと想像してみましょう。これらの魔法の箱はすでに特別な力を持っており、魔法使いはそれぞれの箱が何をするのかを簡単に理解できるように名前をつけています。さて、_Symbolという特別なボックスがあるとしましょう。 この魔法の箱は、金融銘柄(EURUSD、GBPUSD)の名前を魔法の生物の名前のように知っています。
Periodと呼ばれるもう1つのボックスは、期間(時間枠)を知るもので、ほとんど特別な時計のようなものです。これらの箱は、あなたが魔法の旅を始める前にベテラン魔法使いがすでにこれらのパワーを設定しているため、あらかじめ定義されています。若い魔法使いのあなたが呪文(魔法の世界ではプログラム)を作りたいとき、これらの定義済みボックスを使用して、生物の名前や時刻などの重要な情報を素早く得ることができます。
このような箱を自分で作るのに時間を費やす必要はありません。彼らはすでにそこにいて、あなたが魔術をおこなうのを助ける準備ができています。コーディングという魔法の国では、定義済み変数は重要な情報を保持する魔法の箱のようなもので、魔法使い(プログラマー)がゼロから始めることなく簡単に呪文(プログラム)を作ることができます。
1.1.MQL5における定義済み変数の例
1.1.1. _Symbol
金融のコーディングの世界では、_Symbolはプログラムがどの金融商品を扱っているかを正確に知るための魔法の杖のようなものです。取引銘柄にGPSが内蔵されているようなものです。EURUSDやGBPJPYのように、各アイテムには名前がついています。_Symbolは、どのアイテム(銘柄)を見ているのか、常にリマインダを必要とせずに、プログラムに静かに教えてくれる親切なアシスタントのようなものです。
売買の判断をするコードを書いている人々にとって、取引されている特定のアイテムを知ることは非常に重要です。_Symbolを使用するとこれが簡単になります。つまり、取引テーブルにどのアイテムがあるかを常に知っているヘルパーがいるようなものです。このヘルパーは、コードが常に手動で調整することなく、異なる項目にスムーズに適応できることを保証します。つまり、簡単に言えば、_Symbolは、コードが常にどの金融項目で作業しているかを把握できるようにする、役に立つ仲間なのです。これは、刻々と変化する取引銘柄の世界に難なく対応できる、スマートで柔軟なコードを作成するための便利なツールです。
例:
void OnStart() { Alert(_Symbol); }
この例では、Alert関数は_Symbol定義済み変数を使用して現在の取引銘柄を取得し、チャートにアラートを送信します。このコードをMetaTraderプラットフォーム上で実行すると、現在の取引銘柄が表示されます。
1.1.2. 期間
MQL5の定義済み変数_Periodは、現在検討中のチャートの時間枠または期間に関する情報を提供するもう1つの強力なツールです。これは、取引アルゴリズムが動作している時間枠の組み込みリファレンスとして機能します。
例:
void OnStart() { // a sample Script that prints the current timeframe to the user Print(_Period); }
Symbolと同様に、_Periodは、取引アルゴリズムが展開される時間枠を認識し、それに対応できるようにすることで、取引アルゴリズムの適応性に貢献します。プログラムに常に時間枠を知らせる時計があるようなものです。
注:Symbolは現在の取引アイテムのガイドであり、_Periodは時間枠を示す時計であると考えてください。この2つは魔法の始まりに過ぎません。まだまだ発見することはありますが、今はコーディングの冒険をシンプルに楽しんでください。
1.1.3. _Digits
MQL5の文脈では、定義済み変数_Digitsは、現在の取引商品に関連する小数点以下の桁数に関する実用的な情報を提供します。為替取引の世界でピップという概念を扱う場合、この詳細は特に重要です。ピップ、(パーセントインポイント)は、通貨ペアの為替レートの最小の値動きを表します。小数点以下の桁数は値動きの精度に影響し、_Digitsはトレーダーがそれに応じて計算を適応させるためのクイックリファレンスを提供します。
_Digits変数の各桁が小数点以下の桁に対応する、各測定値の精度を指定する定規を持つことに似ていると考えてください。例えば、_Digitsが4に設定されている場合、多くの通貨ペアで一般的な小数点以下4桁の精度を示しています。
例:
void OnStart() { // Use the "_Digits" predefined variable to get the number of decimal places int decimalPlaces = _Digits; // Print the result to the console Print("Number of Decimal Places: ", decimalPlaces, " (Each movement is a pip!)") }
1.1.4. _Point
MQL5の魅力的な領域では、_Pointが重要な定義済み変数として存在し、現在の取引商品の最小値動きに関する洞察を提供します。これは、基本的に価格の測定可能な最小の増分であり、通貨取引の世界ではしばしばピップと呼ばれます。この概念を理解するには、_Pointを金融の定規に見立て、価格が変動する最小単位を示すと考えてください。_Pointの値は金融商品によって異なるため、トレーダーは価格が動くたびにどの程度変化するかを正確に把握することができます。これは、プログラムにおけるSLとTPの設定にとって重要です。今のところは概念に慣れてください。後により詳しく説明します。
例:
void OnStart() { // setting sl by subtracting 15 pips from a ask price of 1.2222 double Ask = 1.2222; // current market price double sl = Ask - (_Point * 15); Alert(sl); // Result will be 1.2207 }
この記事では、MQL5の基本的な定義済み変数のサブセット、すなわち_Symbol、_Digits、_Point、_Periodについて掘り下げてみました。 これらの変数は基礎的な柱として機能し、現在の取引項目、その精度、最小値動き、検討中の時間枠に関する洞察を提供します。 私たちのアプローチの意図的なシンプルさを強調することは極めて重要です。MQL5の複雑さは、あらかじめ定義された変数の多さを包含しているが、私たちは厳選されたいくつかの変数に焦点を当て、明確で消化しやすい入門書を提供することを目的としています。物事をシンプルにすることで、今後の記事でアルゴリズム取引の複雑な状況について、より段階的でニュアンスに富んだ探求をする道を開きます。旅の展開とともに、さらなる洞察をご期待ください。
2.共通関数
共通関数について
MQL5では、共通関数はトレーダーや開発者がアルゴリズム取引のさまざまな側面を自動化するために使用する重要なツールです。これらの関数は、デバッグのためのアラート表示やメッセージの出力から、注文の管理、ポジションの決済、口座情報の取得まで、特定の目的を果たすものです。これらの機能は、トレーダーが効率的に戦略を実行し、十分な情報に基づいた意思決定をおこなうためのビルディングブロックであると考えてください。コーディングプロセスを合理化し、ストラテジーの実行を強化し、よりダイナミックで応答性の高い取引経験に貢献します。
たとえ
あなたが魔法の船の船長で、取引の冒険の海を航海していると想像してみましょう。この旅には、「共通関数」と呼ばれる特別なツールがあります。 これらのツールは、地図が航海の道しるべとなるように、さまざまな作業を助けてくれます。これはMQL5で使用できる、プログラムに指示を出すための魔法の言葉のようなものです。
2.1.MQL5共通関数の例
2.1.1.Alert
旅先で何かエキサイティングなことや重要なことが起こったときに教えてくれる魔法のアラームのようなものです。あなたの注意を引くために鳴く、友好的なオウムを想像してみてください。何か重要なことを知らせたいときは、Alert関数を使用して、プログラムが作動したときや特定の条件が満たされたときに、チャートにアラートを送信します。
例:
void OnStart() { Alert("Discoveries Await!"); }
MQL5の魅惑的な世界では、コーディングは人間の表現に驚くほど近い言語を話しているような気分になります。例えば、Alert関数です。MQL5の魔法のスクリプトでは、Alert関数を使用することは、何か面白いことが起きたらアラームを送るようにプログラムに指示するようなものです。 直感的でなじみのある言語で取引アシスタントと会話しているような感覚で、コーディングの旅を身近で魅惑的なものにしてくれます。
2.1.2.Print
Print関数は魔法使いの羽ペンのようなもので、私たちの考えを簡単に台本に変換してくれます。Printの呪文を唱えると、まるで、取引の冒険のエッセンスを魔法の日記に書き留めるかのようです。コードの1行1行が魔法使いの日記の1章となり、取引世界の魅惑的な発見や不思議を記録していくのです。Printでは、魔法の言葉が命を吹き込まれ、神秘的な取引のたびに展開される物語が生まれます。
例:
void OnStart() { Print("Discoveries Await!"); }
2.1.3.Comment
Comment関数は、取引キャンバスに鮮やかな注釈を加える魔法の筆です。Commentの呪文を唱えると、まるで、自分自身や仲間の魔法使いに秘密のメッセージを残すかのようです。この呪文によって、チャートに直接メモや銘柄を刻むことができ、チャートは取引戦略を物語る神秘的な巻物に変わります。Commentによって、チャートは生きた原稿となり、金融界を旅する私たちの知恵と洞察で飾られます。Commentは、チャート上にメッセージを表示するときに使用する魔法の言葉のようなものです。
例:
{ Comment("I love MQL5!"); }
2.1.4.PlaySound
MQL5のPlaySound関数は、トレーダーが聴覚的なシグナルをスクリプトやEAに組み込むことを可能にする強力なツールです。この関数は、様々な状況下でサウンドファイルを再生し、トレーダーに視覚的要素以外の追加的な合図や警告を提供するために使用することができます。例えば、Soundsディレクトリにalert.wavというサウンドファイルがあり、取引スクリプトで特定の条件が満たされた時にこのサウンドを再生したいとします。
例:
void OnStart() { // Check a condition if(5>4) { // Play the sound PlaySound("alert.wav"); } }
alert.wav:再生するサウンドファイルの名前。このファイルは端末のSoundsディレクトリにあるはずです。
MQL5における一般的な関数の探索を終えるにあたり、ここで紹介したものは、アルゴリズム取引の領域で利用可能なツールの幅広いレパートリを垣間見たに過ぎないことを認識することが極めて重要です。Alert、Print、Comment、PlaySoundは、多様な機能のほんの一部です。
3.算術演算、論理演算、関係演算
3.1.算術演算
算術演算は、アルゴリズム取引用のMQL5を含むプログラミングにおいて重要な役割を果たす基本的な数学演算です。これらの演算には、加算(+)、減算(-)、乗算(*)、除算(/)、モジュラス(%)、インクリメント演算子(++)、デクリメント演算子(--)が含まれます。これにより、開発者はコード内で数学的計算をおこなうことができます。
足し算(+)と引き算(-)
足し算と引き算は、量を組み合わせたり分けたりする基本的な算術演算です。
例:
void OnStart() { int num1 = 8; int num2 = 5; //addition of values int sum = num1 + num2; //subtraction of values int minus = num1 - num2; Alert("Sum = ",sum,", minus = ",minus); }
掛け算(*)と割り算(/)
例:
void OnStart() { double price = 50.25; int quantity = 10; double totalCost = price * quantity; // Multiplication double averagePrice = totalCost / quantity; // Division Alert("totalCost = ",totalCost,", averagePrice = ",averagePrice); }
モジュラス
%記号で表されるモジュラス演算子は、ある数を別の数で割った余りを返す数学演算です。モジュラス演算子は、特定の数の要素を繰り返し処理したり、偶数か奇数かを確認したり、値が定義された範囲内に収まっていることを確認したりするようなタスクのプログラミングで特に役立ちます。
例:
void OnStart() { int num1 = 10; int num2 = 3; int remainder = num1 % num2; // The variable 'remainder' now holds the value 1 }
インクリメントおよびデクリメント演算子
演算子「++」と「--」は、それぞれインクリメント演算子とデクリメント演算子として知られています。これらは単項演算子で、単一のオペランドを操作します。
例:
void OnStart() { int x = 5; int y = 8; x++; // After this line, the value of 'x' is 6 y--; // After this line, the value of 'y' is 7 }
注: これらの演算子は、ループやカウンタなど、一定量ずつ値を増減させたい場面で、変数の値を簡便に更新するためによく使用されます。
3.2.論理演算
プログラミングにおける論理演算は、ブール値(真または偽)になる条件や式を評価します。これらの操作は、決断を下し、プログラムの流れをコントロールするための基本です。論理演算子は、条件文(if、else、switch)やループなど、特定の条件に基づいて判断を下す必要がある場面でよく使用されます。これらは、プログラミングの中で表現力豊かで柔軟なロジックを作るために不可欠なものです。
MQL5を含む多くのプログラミング言語では、ブール論理の文脈では、1は通常「真」を表し、0は「偽」を表すという慣例があります。
一般的な論理演算子には次のようなものがあります。
記号 | 操作 | 例 | 説明 |
---|---|---|---|
|| | 論理和 | y > 2 || y < 7 | yの値が2より大きいまたは7より小さい |
! | 論理的否定 | !y | オペランドが真の場合、NOT演算子はそれを偽にする |
&& | 論理積 | y > 2 && y < 7 | yの値は2より大きく7より小さい。 |
3.3.関係演算
プログラミングにおける関係演算は、値を比較してそれらの関係を決定します。これらの操作は通常、ブール値(真または偽)を返します。
一般的な関係演算子には次のようなものがあります。
記号 | 操作 | 例 |
---|---|---|
> | 左側の値が右側の値より大きいかどうかを確認する | x > y |
< | 左の値が右の値より小さいかどうかを確認する | x < y |
!= | 2つの値が等しくないかどうかを確認する | x != y |
== | 2つの値が等しいかどうかを確認する | x == y |
>= | 左側の値が右側の値以上かどうかを確認する | x >= y |
<= | 左側の値が右側の値以下かどうかを確認する | x <= y |
注: 等号(=)と二重等号(==)は、プログラミングにおいて異なる役割を果たし、異なる文脈で使用されます。
等号(=)は、変数に値を代入するための代入演算子です。
例:
int x = 10; // Assigns the value 10 to the variable x
二重等号(==)は、2つの値が等しいかどうかを確認する比較に使われる関係演算子です。
例:
int a = 5; int b = 7; bool isEqual = (a == b); // Checks if 'a' is equal to 'b'; 'isEqual' is false
4.制御フロー文
プログラミングの広大な風景の中で、制御フロー文は、プログラムの実行コースを示す航海の羅針盤として登場します。コードが、コマンドとロジックの入り組んだ海を航海する船であると想像してみてください。このダイナミックな旅では、制御フロー文が船長のコンパスの役割を果たし、意思決定ポイントやループ、さまざまな条件を通して船を操縦します。
船の船長が乱気流の海を航海するように、プログラマーは制御フロー文を使用してコードの進むべき方向を指示します。特定の条件に基づいて決断を下すにしても、データを反復処理するにしても、特定のアクションを繰り返し実行するにしても、これらの文は、複雑なアルゴリズムロジックの中を目的を持って航海するためのストラテジストの道具です。
機能の仕組み
あなたが魔法のペットドラゴンCodeyを飼っているとしましょう。 Codeyはあなたの指示に従うのが大好きですが、あなたはCodeyに様々な状況で何をすべきかを指示する方法が必要です。ここで魔法の杖(コード)と特別な言葉(制御フロー文)が活躍します。
4.1.If/Else文
Codeyに「太陽が照っていれば空高く飛び、そうでなければ地上に留まって昼寝をしなさい」と言うとします。 つまり「何か起こったらこうしろ、そうでなければああしろ」と言っているようなものです。
例:
if(sun_is_shining) { Codey_fly_high_in_the_sky() } else { Codey_take_a_nap_on_the_ground() }
4.2.Whileループ
whileループは、反復タスクを実行し、シーケンスを反復し、ダイナミックな反復の魔法でコードを魅了する強力なツールです。これにより、MQL5プログラムは変化する状況に適応し、動的に対応することができるようになり、刻々と変化する市場環境において、取引戦略を柔軟で弾力的なものにすることができます。これは、ある条件が真である間コマンドを実行し続けるようにコンピュータに言っているようなものです。
構文
while (condition) { // 条件が真のときに実行されるコード}
例:
void OnTick() { // Initialization int numberOfTrades = 0; // While loop condition while(numberOfTrades < 5) { // Magic within the loop Print("You can take a trade ", numberOfTrades + 1); // Counter increment numberOfTrades ++; } // Magical finale Print("Trade complete!"); }
注:OnTick関数については後ほど詳しく説明します。
whileループは、指定された条件が真である限り、コードのブロックを繰り返す魔法のような構造です。特定の条件が満たされなくなるまで、反復タスクを実行する方法を提供します。
例の要素を分解してみましょう。
初期化: int numberOfTrades = 0;
- カウンタ変数を初期化して、魔法の反復を追跡します。
Whileループ条件: while (numberOfTrades < 5)
- このループでは、numberOfTradesが5未満かどうかを確認します。trueの場合、ループ内のコードが実行されます。この条件は魔法のゲートキーパーとして機能し、numberOfTradesが5未満である限りループを継続させます。
ループ内の魔法: Print("You can take a trade ", numberOfTrades + 1);
- ループの中で、魔法のようなアクションを実行します。この場合、numberOfTrades<5の間、メッセージを表示します。
カウンターの増分:numberOfTrades++
- numberOfTradesは反復するたびに増加し、魔法のゴールである5に近づいていきます。
ループの終わり: Print("Trade complete!");
- ループが反復を終えると、メッセージが出力されます。
4.3.Forループ
forループは、反復タスクを簡潔に実行する強力な魔法です。whileループを使用することができるほとんどのことにforループを使用することができますが、forループにはいくつかの利点があります。
長所
- 簡潔さ:forループは、初期化、条件確認、反復ステートメントを1行に凝縮し、コードをよりエレガントにします。
- 読みやすさ:コードの明快さを高め、一目で理解しやすくします。
- 制御された反復:ループ変数を明示的に制御することで、反復回数を正確に定義することができます。
構文
for (initialization; condition; iteration) { // 各繰り返しで実行されるコード}
例:
void OnTick() { // For loop to iterate from 1 to 5 for(int i = 1; i <= 5; i++) { // Magic within the loop //i represents number of trades Print("You can take a trade ", i); } // Magical finale Print("Trade complete!"); }
説明
初期化(inti=1;)
- ループ変数iを初期化し、魔法の反復を1から始めます。
条件(i<=5;)
- ループは、条件(iが5以下)が真である限り続きます。
反復(i++)
- 各反復の後、ループ変数iは1ずつインクリメントされます。
ループ内の魔法: Print("You can take a trade ", i);
- ループの中で、魔法のようなアクションを実行します。この場合、numberOfTrades < 5である限りメッセージを表示します。
ループのフィナーレ: Print("Trade complete!");
- ループが反復を終えると、メッセージが出力されます。
結論
連載第2部を締めくくるにあたり、必要不可欠なものをナビゲートしてきました。定義済み変数、共通関数、算術演算、関係演算、論理演算の複雑な構成と、制御フロー文について説明しました。この旅を特別なものにしているのは、そのシンプルさと交流への誘いです。 お気軽にご質問ください。質問は、学びをダイナミックな交流に変えます。この章を閉じるにあたり、エキサイティングな次のステップをご期待ください。すぐに、自分自身の取引ボットを開発する道に乗り出します。MQL5をマスターし、アルゴリズム取引で成功するためのインタラクティブな旅を続けましょう。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/13997
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索