MQL5の基本 P3
MQL5 プログラム P3
MQL5で作成できるプログラムには3つのタイプがあります。
EAは、注文をオープン、変更、クローズできる自動取引プログラムです。一度に1つのEAのみをチャートに添付できます。本書の大部分は、MQL5でのEAの作成をカバーします。
インジケータは、ライン、ヒストグラム、矢印、バー/ローソク、またはチャートオブジェクトを使用して、テクニカル分析テータをチャートまたは別のウィンドウに表示します。複数のインジケーターをチャートに添付できます。第21章では、MQL5での指標の作成について説明します。
スクリプトは特定のタスクを実行する特殊なプログラムです。スクリプトがチャートに添付されると、スクリプトは1回だけ実行されます。一度に1つのスクリプトのみをグラフに添付できます。スクリプトの作成については第21章。
ファイル拡張子 P3
ファイル(.mq5)にはEA、インジケータ、スクリプト、またはライブラリーなどのMQL5プログラムのソースコードが含まれています。これは、メタエディターでMQL5プログラムを作成するときに作成されるファイルです。このファイルはメタエディターまたは任意のテキストエディターで開いて編集できます。
EX5ファイル(.ex5)は、コンパイルされた実行可能プログラムです。MQL5ファイルがメタエディターでコンパイルされると、EX5ファイルが同じファイル名で生成されます。これは、MQL5プログラムをチャートに添付するときに実行されるファイルです。EX5ファイルはバイナリファイルであり、開いたり編集したりすることはできません。
MQHファイル(.mqh)は、MQL5プログラムで使用するソースコードを含むインクルードファイルです。MQ5ファイルと同様にMQHファイルはメタエディターで開いて編集できます。
その他のファイルの種類 P3
インクルードファイル(.mqh)はMQL5プログラムで使用するためのクラス、関数、および変数を含むソースコードファイルです。インクルードファイルには、何度も利用できる便利なコードが含まれています。プログラムがコンパイルされると、プログラムで使用されるインクルードファイルの内容はコンパイルされたプログラムに「インクルード」されます。本書では、多くのインクルードファイルを作成します。
ライブラリはインクルードファイルに似た、再利用可能な関数を含む実行可能ファイルです。ライブラリはEX5またはWindowsDLL形式です。ライブラリは、MQL5プログラムとともに別のプログラムとしてメモリ内で実行されます。
ライブラリは、ソースコードを公開せずに関数をほかのユーザーが利用できるようにする場合に便利です。ライブラリについては、第21章で詳しく説明します。
エキスパート設定ファイルまたはプリセットファイル(.set)には、EAの取引パラメータが含まれています。設定ファイルは、入力タブの下のEAのプロパティダイアログでロードまたは保存されます。ロードボタンは.setファイルからパラメータをロードし、saveボタンは現在のパラメータを.setファイルに保存します。ストラテジーテスターの[入力]タブで、右クリックポップアップメニューを使用してパラメータをロードまたは保存することもできます。
ファイルの場所 P4
メタトレーダ5データフォルダ―には、すべてのMQL5プログラムとファイルが含まれています。すべてのMQL5プログラムは、メタトレーダ5データフォルダのMQL5フォルダーの下にあります。メタトレーダ5データフォルダを見つけるには、メタトレーダまたはMetaEditorの[ファイル]メニューから[データフォルダ―を開く]を選択します。データフォルダ―がwindowsエクスプローラーで開きます。
すべてのMQL5プログラムは同じファイル拡張子を使用するため、プログラムタイプはメタトレーダ5のMQL5フォルダー内のサブフォルダ―に編成されます。MQL5フォルダー内のサブフォルダ―の内容は次の通りです。
・Expert - このフォルダーには、EA用のMQ5およびEX5ファイルが含まれています。
・Indicators - このフォルダーには、インジケータ用のMQ5およびEX5ファイルが含まれています。
・Scripts - このフォルダーには、スクリプトの用のMQ5およびEX5ファイルが含まれています。
・Include - このフォルダーには、MQHインクルードファイルが含まれています。
・Libraries – このフォルダーには、ライブラリ用のMQ5、EX5およびDLLファイルが含まれています。
・Images – プログラムでビットマップイメージを使用する場合は、このフォルダに.bmp形式で保存する必要があります。
・Files – インクロードファイル、ライブラリ、画像、またはその他のMQLプログラム以外のプログラムで使用する外部ファイルは、このフォルダに保存する必要があります。
・Presets – これはEAの[プロパティ]ダイアログまたはストラテジーテスターの[入力]タブからロードまたは保存される.setファイルのデフォルトフォルダーです。
・Logs – EAログはこのフォルダに保存されます。これらのログはメタトレーダーのメインインターフェースのツールボックスウィンドウ内の[エキスパート]タブで表示できます。
この本の上記のフォルダーへの参照は、それらがメタトレーダー5データフォルダーのMQL5フォルダーの下にあることを前提としています。したがって、Expertsフォルダへの参照は、メタトレーダー5データフォルダーのMQL5Expertsサブフォルダを参照します。
メタエディター P5
MetaEditorはMT5に含まれるMQL5のIDE(総合開発環境)です。MTインターフェースからメタエディターを開くには、標準ツールバーのメタエディターボタンをクリックするか、キーボードのF4を押します。Windowsの[スタート]メニューからメタエディターを開くこともできます。
図1.1-MetaEditorインターフェイス。左上から時計回りに、ナビゲータウィンドウ、コードエディター、ツールボックスウィンドウです。
メタエディターにはオートコンプリート、パラメータ情報ツールチップ、検索ツール、デバッグツールなど、MQL5プログラムを作成するための便利な機能が数多くあります。図1.2は、名前のリスト機能を示しています。
図1.2-リスト名のドロップダウン
MQL5言語要素、変数または関数名の最初の文字を入力すると、一致するすべてのキーワードを含むドロップダウンリストが表示されます。上下の矢印キーを使用してリストをスクロールしEnterキーを押してキーワードをオートコンプリートします。マウスの左ボタンでリストからキーワードを選択することもできます。キーワードでCtrl+Spaceを押すか、[編集]メニューから[リスト名]を選択すると、いつでも[リスト名]ドロップダウンボックスを呼び出すことができます。
図1.3は、パラメーター情報ツールチップを示しています。関数のパラメータを入力すると、パラメータ情報ツールチップが表示され、関数のパラメータを思い出させることができます。ツールチップで強調されているテキストが現在のパラメータです。
図1.3パラメータ情報ツールチップ
一部の関数には複数のバリアントがあります。図1.3のSymbolInfoDouble()関数には、ツールチップに表示される[1of2]テキストで示されているように、2つのバリアントがあります。上下の矢印キーを使用して、関数のすべてのバリアントをスクロールします。キーボードでCtrl+Shift+Spaceを押すか、[編集]メニューから[パラメータ情報]を選択すると、いつでも[パラメータ情報]ツールチップを呼び出すことができます。
MetaEditorインターフェース内には2つの追加ウィンドウがあります。ナビゲータウィンドウは、MQL5フォルダの内容をフォルダツリーで表示し、MQL5プログラムに簡単にアクセスできるようにします。ツールボックスウィンドウには、コンパイルエラーを表示する[エラー]タブなど、いくつかのタブがあります。検索結果を表示する
MetaEditorには組み込みのMQL5リファレンスがあり、MQL5関数と言語要素を検索するのに役立ちます。カーソルをMQL5キーワードの上に置き、キーボードのF1を押すだけです。MQL5リファレンスが適切なページに開きます。ヘルプメニューからMQL5リファレンスを開くこともできます。
MQL5ウィザード P7
MQL5ウィザードは、新しいMQL5プログラムを作成するために使用されます。MQL5ウィザードを開くには、ツールバーの[新規]ボタンをクリックするか、[ファイル]メニューから[新規]を選択します。次のオプションを含むウィンドウが表示されます。
・ExpertAdvisor(template) : 組み込みのテンプレートから新しいEAファイルを作成します。作成されたファイルは\MQL5\Expertsフォルダーまたは指定されたサブフォルダーに保存されます。
・ExpertAdvisor(generate) : これにより、ユーザーはコーディングなしでEAを作成できます。生成されたEAはMQL5標準ライブラリを使用します。
・Custom Indicator : 組み込みのテンプレートから新しいカスタムインジケータファイルを作成します。作成されたファイルは、\MQL5\Indicatorsフォルダーまたは指定されたサブフォルダーに保存さ れます。
・Script : 組み込みのテンプレートからからのスクリプトファイルを作成します。作成されたファイルは、\MQL5\Scriptsフォルダまたは指定されたサブフォルダに保存されます。
・Library : 組み込みのテンプレートからからのライブラリファイルを作成します。作成されたファイルは、\MQL5\Librariesフォルダまたは指定されたサブフォルダに保存されます。
・Include(*.mqh) : ビルトインテンプレートから.mqh拡張子の空のインクルードファイルを作成します。作成されたファイルは、\MQL5\Includeフォルダーまたは指定されたサブフォルダーに保存されます。
・New Class : 組み込みのテンプレートからクラス定義を含むインクルードファイルを作成します。作成されたファイルは、\MQL5\Expertsフォルダ、また指定されたサブフォルダに保存されます。
この本全体を通して、MQL5ウィザードを使用したプログラムの作成についてさらに詳しく説明します。
コンパイル P8
MQL5プログラムをコンパイルするには、MetaEditorツールバーの[コンパイル]ボタンを押すだけです。現在のMQ5ファイルと含まれているすべてのファイルのエラーがチェックされ、EX5ファイルが生成されます。コンパイルエラーまたは警告は、ツールボックスウィンドウの[エラー]タブに表示されます。
EX5ファイルを生成する前に、エラーを修正する必要があります。第22章では、プログラムエラーのデバッグと修正について説明します。警告は調査する必要がありますが、通常は安全に無視できます。警告のあるプログラムでも、正常にコンパイルされます。
構文 P8
MQ5はC++、C#、またはJavaなどのほかの最新のプログラミング言語に似ています。Cスタイルの構文を使用する最新のプログラム言語でプログラミングしたことがある場合、MQ5の構文と構造は非常によく知られています。
MQ5の式または演算子は、セミコロン(;)で終了する必要があります。式は複数行にまたがることができますが、式の最後にはセミコロンが必要です。式の最後にセミコロンを追加しないことは初心者が犯すよくある間違いです。
//簡単な式
X = Y + Z;
//複数行にわたる式
X = (Y + Z)
/(q - r);
セミコロンの規則の唯一の例外は、複合演算子です。複合演算子は演算子とそれに続く大括弧({})のペアで構成されます。以下の例では、if(x==0)です。括弧内の式はセミコロンで終了する必要があります。
//シンプルな複合演算子
if(x == 0)
{
Print(“xはゼロに等しい”);
Return;
}
識別子 P9
変数、関数、およびクラスに名前を付ける時は、一意でわかりやすい識別子を使用する必要があります。識別子は、プログラム内の別の識別子と同じであってはならず、MQ5言語要素と同じであってはなりません。
文字、数字、およびアンダースコア文字()を使用できますが、識別子の最初の文字を数字にすることはできません。識別子の最大長は64文字です。これにより、創造性を発揮する余地がたくさんあるため、明確で説明的な識別子を使用してください。
識別子は大文字と小文字が区別されます。これは、MyIdentifierとmyIdentifierが同じではないことを意味します!プログラマーは大文字化を使用して、さまざまなタイプの変数、関数、およびクラスを区別します。この本で使用する大文字化スキームは次の通りです。
- グローバル変数、オブジェクト、クラス、および関数名は、各単語の最初の文字を大文字にします。
例 : MyFunctionまたは MyVariable
- 関数内で宣言されるローカル変数とオブジェクトは、キャメルケースを使用します。これは、最初の文字が小文字で、ほかの単語の最初の文字が大文字です。
例 : myVariable またはlocalObject
- 定数はすべて大文字です。単語を区切るにはアンダースコアを使用します。
例 : MY_CONSTANT
コメント P9
コメントは、コードのセクションがプログラム内で何をするかを説明するために使用されます。プログラムを整理しておくために、プログラム全体でコメントを使用する必要があります。コメントを使用して、プログラムからコード行を一時的に削除することもできます。コメントアウトされた行は、コンパイラによって無視されます。
コメントを追加するには、最初の2文字を二重スラッシュにする必要があります。これにより、1行のコードがコメント化されます
//これはコメントです。
//以下のコード行はコメントアウトされます。
//x = y + z;
複数行のコードを出力するには、コメントの先頭にスラッシュアスタリスク(/*)を使用し、コメントの末尾に(*/)を使用します。
/* これは複数行のコメントです
これらの行はコンパイラによって無視されます
X=y + z; */
MetaEditorには、便利なコメントコマンドのセットがあります。コメントしたい行をマウスで強調表示して選択します。[編集]メニュー[コメント]サブメニューの下にある[コメント行]メニュー項目は、選択した行をコメントアウトし、[コメント行を解除]は選択した行からコメントを削除します。Function Headerメニュー項目は、自動生成されたものと同様のコメント付きの関数ヘッダーを挿入します。
MQ5ファイル:
//[編集]メニュー -> [コメント] -> [関数ヘッダー]で生成される関数ヘッダー
//+-------------------------------------------------------------------+
//| |
//+-------------------------------------------------------------------+