プログラムの作成と使用
MQL4-EA、スクリプト、およびインジケータで書かれたアプリケーションプログラムは、MetaEditorを使用して作成されます。
MetaEditor( MetaEditor.exe )の 実行可能ファイルは 、クライアント端末の一部として提供され、端末のルートディレクトリにあります。 F1を押すとMetaEditorのユーザーガイドが開きます。 新しいプログラムの作成に必要な一般的な情報が含まれています。 エディタは、ファイル名 MetaEditor.exe をクリックする か、デスクトップのショートカット をクリックして開くことが できます。
クライアント端末の構成
操作の便宜のため、MetaEditorには、「ナビゲータ」( Ctrl + D )と「ツールボックス」( Ctrl + T )の ツールバーが組み込まれてい ます。
図25 MetaEditorのウィンドウの場所
プログラムのテキストは、エディタウィンドウにあります。 ツールボックスウィンドウは補助的です。 ナビゲータとツールボックスのウィンドウには境界線があり、ボタンを使用してエディタで表示および非表示にすることができます そして。
新しいプログラムを作成する
通常、新しいプログラムの作成中に、ツールボックスウィンドウとナビゲータウィンドウは表示されません。 このように、ユーザの注意は、作成されたプログラムに集中する。 新しいプログラムを作成するには、 エディタの [File ]メニューから[ New ]をクリックし ます 。 または、ボタンを使用して新しいファイルを作成します。
。
これらのアクションがすべて完了すると、「EA Wizard」には作成するプログラムタイプのリストが表示されます。
図26 作成するプログラムタイプの選択
EAを作成する必要がある 場合 は、EAにチェックを入れ 、「 次へ 」をクリックし ます 。 次のウィンドウでは、作成されたEAの名前を示す必要があります。 create.mq4と呼ばれるものとします。
作成されたファイルの名前は、その拡張子(型の指示)なしで書き込まれます。 |
EAウィザードには、入力するいくつかのフィールドがあるウィンドウが表示されます。
図27 EAの一般的なパラメータを示すウィンドウ。
OKを クリックすると 、 テキストがメインウィンドウに表示され、作成されたEAのフルネームcreate.mq4がファイルシステムとナビゲータウィンドウに表示されます。
図28 ファイルシステムとナビゲータウィンドウにEAの作成したファイルを表示する
MetaEditorで生成されたプログラムテキストを見てみましょう。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="comment">// |</span></span> <span class="notranslate"> <span class="comment">create.mq4 |</span></span> <span class="notranslate"> <span class="comment">// |</span></span> <span class="notranslate"> <span class="comment">ジョン・スミス| John Smith</span></span> <span class="notranslate"> <span class="comment">// |</span></span> <span class="notranslate"> <span class="comment">| www.company.com |</span></span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="preprocessor">#property copyright <span class="string">"John Smith"</span></span></span> <span class="notranslate"> <span class="preprocessor">#property link <span class="string">"www.company.com"</span></span></span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="comment">// |</span></span> <span class="notranslate"> <span class="comment">エキスパート初期化関数|</span></span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="keyword">int</span> init()</span> <span class="notranslate"> {</span> <span class="notranslate"> <span class="comment">// ----</span></span> <span class="notranslate"> <span class="comment">// ----</span></span> <span class="notranslate"> <span class="keyword">return</span> ( <span class="number">0</span> );</span> <span class="notranslate"> }</span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="comment">// |</span></span> <span class="notranslate"> <span class="comment">エキスパート初期化機能|</span></span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="keyword">int</span> deinit()</span> <span class="notranslate"> {</span> <span class="notranslate"> <span class="comment">// ----</span></span> <span class="notranslate"> <span class="comment">// ----</span></span> <span class="notranslate"> <span class="keyword">return</span> ( <span class="number">0</span> );</span> <span class="notranslate"> }</span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="comment">// |</span></span> <span class="notranslate"> <span class="comment">エキスパートスタート機能|</span></span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> <span class="notranslate"> <span class="keyword">int</span> start()</span> <span class="notranslate"> {</span> <span class="notranslate"> <span class="comment">// ----</span></span> <span class="notranslate"> <span class="comment">// ----</span></span> <span class="notranslate"> <span class="keyword">return</span> ( <span class="number">0</span> );</span> <span class="notranslate"> }</span> <span class="notranslate"> <span class="comment">// + ----------------------------------------------- ------------------- +</span></span> |
ご覧のとおり、コードには主にコメントが含まれています。 コメントは、プログラムの必須ではない部分を構成しており、コメントのテキストはプログラムによって処理されていないことはすでに分かっています。
プログラムには、init()、start()、およびdeinit()の3つの特別な関数があります。 各関数には、関数を終了するためのoperator-return(0)演算子が1つだけ含まれています。 したがって、EA Wizardによって生成されるプログラムコードは、新しいプログラムを作成するためのパターンに過ぎません。 最終的なプログラムコードは、指定されたすべての特別な機能を必ずしも含んでいるわけではありません。 それらはパターンの中にのみ存在します。なぜなら、平均的なプログラムには、これらすべての機能が含まれているからです。 いずれかの機能が使用されない場合は、その説明を削除することができます。
プログラムコードの次の行も省略することができます。
1 2 |
<span class="notranslate"> <span class="preprocessor">#property copyright <span class="string">"John Smith"</span></span></span> <span class="notranslate"> <span class="preprocessor">#property link <span class="string">"www.company.com"</span></span></span> |
プログラムは実用的ではありませんが、シンタックスの観点からは正しく記述されています。 このプログラムをコンパイルして起動することができます。 他のプログラムと同様に実行されます。 (ただし、ソースコードには何もないので、計算は行われません)。
プログラムの外観
プログラムでコメントを使用することを強くお勧めします。場合によっては、強く不可欠です。 プログラマーはプログラムを作成するだけでなく、プログラムを読み込むことも強調しなければなりません。 場合によっては、プログラムを読むときにかなりの困難が生じることがあります。 多くのプログラマーの経験から、プログラムが開発されたロジックは忘れられていることが示されています(または、別のプログラマーによって製品には知られていません)。 文字列コメントがなければ、コードフラグメントを理解することは困難で、時には不可能ですらあります。
正しくコーディングされたプログラムにはコメントが含まれています。 |
コメントの主な利点は次のとおりです。
• コメントは、1つのプログラム部分を別のプログラム部分から分離します。 賢明にフォーマットされたテキストをストレートテキストよりも読む方がはるかに簡単です。
• 第2に、文字列コメントは、プログラマがそれぞれのコード行ごとに意図したことを簡単な言葉で説明します。
• 第3に、プログラムの上部には、著者名や連絡先(著者のWebサイト、電子メールなどを含む)、プログラム割り当て(それが完全であるかどうかトレーディングプログラムまたは図書館機能)、その主な特性および限界、およびその他の有用な情報。
各プログラマーは便利なスタイルのコメントを選択できます。 MQL4開発者が提供するスタイルオプションは、EAのcreate.mql4にあります。 許容できる外観スタイルの主な特徴を見てみましょう。
1.コメント行の長さは、メインウィンドウのサイズを超えてはいけません。 この制限は、言語構文の正式な要件ではありませんが、長い行を含むプログラムの読み込みは便利ではありません。 すべての長い行を複数の行に分割して、各行が画面上に完全に表示されるようにすることができます。 1024 x 768ピクセル解像度のモニタでは、最大行長は118シンボルです。
2.変数宣言は、プログラムの始めに行われます。 各変数に説明的なコメントを書くことをお勧めします。 それらの意味を簡単に説明し、必要に応じて使用法の特質について説明します。
3.各オペレータは、別々のライン上に配置する方がよい。
4.行にコメントがある場合は、76番目の位置から開始する必要があります(1024 x 768ピクセルの解像度を持つ17インチモニターに推奨されます)。この要件は必須ではありません。必ずしも2行に分かれているわけではなく、81行目からコメントを開始することができます。通常、プログラムコード部は50シンボルの行を含み、文字列コメントは画面の右側のテキスト列のように見えます。
論理的に別々の断片を分割する場合は、全幅の連続した行コメントが使用されます(118記号)。
6.中かっこを使用する場合は、表形式のサイズインデントを使用する必要があります(通常は3つのシンボル)。
EAのコードがどのように見えるかを見てみましょう。 この場合、プログラムアルゴリズムロジックについては説明しません。 私たちはプログラムの出現に興味があります。 コメントされたプログラム(EA create.mq4 )は、次の形式をとります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
<span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> <span class="notranslate"> <span class="comment">// create.mq4</span></span> <span class="notranslate"> <span class="comment">// MQL4ブックの例として使用する。</span></span> <span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> <span class="notranslate"> <span class="keyword">int</span> Count = <span class="number">0</span> ;</span> <span class="notranslate"> <span class="comment">//グローバル変数</span></span> <span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> <span class="notranslate"> <span class="keyword">int</span> init() <span class="comment">// Spec。</span></span> <span class="notranslate"> <span class="comment">funct。</span></span> <span class="notranslate"> <span class="comment">その中に()</span></span> <span class="notranslate"> {</span> <span class="notranslate"> <span class="functions">警告</span> ( <span class="string">"Funct。init()が起動時に起動されました"</span> );</span> <span class="notranslate"> <span class="comment">//アラート</span></span> <span class="notranslate"> <span class="keyword">return</span> ;</span> <span class="notranslate"> <span class="comment">// init()を終了する</span></span> <span class="notranslate"> }</span> <span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> <span class="notranslate"> <span class="keyword">int</span> start() <span class="comment">// Spec。</span></span> <span class="notranslate"> <span class="comment">funct。</span></span> <span class="notranslate"> <span class="comment">開始()</span></span> <span class="notranslate"> {</span> <span class="notranslate"> <span class="keyword">ダブル</span>価格=単価;</span> <span class="notranslate"> <span class="comment">//ローカル変数</span></span> <span class="notranslate">カウント++;</span> <span class="notranslate"> <span class="comment">//ティックカウンター</span></span> <span class="notranslate"> <span class="functions">アラート</span> ( <span class="string">"New tick"</span> 、Count、 <span class="string">"Price ="</span> 、Price);</span> <span class="notranslate"> <span class="comment">//アラート</span></span> <span class="notranslate"> <span class="keyword">return</span> ;</span> <span class="notranslate"> <span class="comment">// Exit start()</span></span> <span class="notranslate"> }</span> <span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> <span class="notranslate"> <span class="keyword">int</span> deinit() <span class="comment">// Spec。</span></span> <span class="notranslate"> <span class="comment">funct。</span></span> <span class="notranslate"> <span class="comment">deinit()</span></span> <span class="notranslate"> {</span> <span class="notranslate"> <span class="functions">アラート</span> ( <span class="string">「出口でトリガーされた機能()」</span> );</span> <span class="notranslate"> <span class="comment">//アラート</span></span> <span class="notranslate"> <span class="keyword">return</span> ;</span> <span class="notranslate"> <span class="comment">// exit deinit()</span></span> <span class="notranslate"> }</span> <span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> |
プログラムの完全で意味のあるブロックはコメントで区切られていることが分かります。 これは特別なユーザー定義関数とプログラムの先頭部分を切り離す方法です。
1 |
<span class="notranslate"> <span class="comment">// ----------------------------------------------------- --------------------</span></span> |
変数は、各変数が記述されている別のブロックで宣言されます。 プログラムには、いくつかの行のどのコメントを使用すべきかを記述する変数が含まれていることがあります。 これはまれなケースですが、発生した場合は必ずそのようなコメントを付ける必要があります。 そうでなければ、別のプログラマーだけでなく、著者自身がしばらくしてその部分をパズルアウトすることができなくなります。
各コード行の右部分には説明コメントが含まれています。 プログラムに何も含まれていない場合は、コメントの価値を十分に評価することができ、プログラムを読むときにアルゴリズムを理解する上でいくつかの問題が発生します。 例えば、同じコードがコメントやブロック分離なしで提示された場合、プログラムが非常に単純で短くても、それを読むのがより難しくなります。
1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="notranslate"> int Count = 0;</span> <span class="notranslate"> int init(){</span> <span class="notranslate">アラート(起動時に起動される機能());</span> <span class="notranslate"> return;</span> <span class="notranslate"> }</span> <span class="notranslate"> int start(){</span> <span class="notranslate">ダブル価格=単価;</span> <span class="notranslate">カウント++;</span> <span class="notranslate">アラート( "New tick"、Count、 "Price ="、Price);</span> <span class="notranslate"> return;</span> <span class="notranslate"> }</span> <span class="notranslate"> int deinit(){</span> <span class="notranslate">アラート( ""出口でトリガされた機能() ");</span> <span class="notranslate"> return;}</span> |
プログラムの編集
実際にプログラムを使用できるようにするには、コンパイルする必要があります。 この目的のために、ボタン(F5)を使用してください。 プログラムにエラーが含まれていない場合は、コンパイルされ、ツールボックスに次のメッセージが表示されます。
図29 成功したプログラムのコンパイルに関するエディタのメッセージ
また、プログラムがコンパイル されると、対応するディレクトリ(この場合はTerminal_directory \ experts)に 新しい ファイル(create.ex4)が表示されます。 このプログラムは、クライアント端末MetaTrader4で操作可能です。 コンパイル時に、同じ名前のプログラムのソーステキストの最後のバージョン(この場合は、create.mq4ファイル)が同じディレクトリに保存されます。
プログラムがコンパイルされるときに起こる別のことは、作成されたEAの名前を持つ行がクライアントターミナルナビゲータウィンドウのEAsフォルダに表示されることです。
図30 クライアント端末のナビゲータウィンドウにEAの名前を表示する
コンパイル中にプログラムでエラーが検出された場合、MetaEditorは対応するエラーメッセージを表示します。 そのような場合は、ソーステキストの編集、エラーの修正、プログラムのコンパイルをもう一度試みるべきです。 成功したプログラムのコンパイルは、プログラムにエラーがない場合にのみ可能です。
実際にプログラムを使用する
アプリケーションプログラム(EA、スクリプト、またはインジケータ)が正常にコンパイルされ、その名前がクライアントターミナルナビゲータウィンドウに表示された場合は、実際に使用することができます。 これは、ナビゲータウィンドウから対応するアイコンをマウス(「ドラッグアンドドロップ」メソッド)を使用してセキュリティウィンドウにドラッグすることによって行われます。 これは、プログラムがセキュリティチャートに添付されて実行されることを意味します。
EAとインジケータは、ユーザーがプログラムの実行を手動で終了するまで動作します。 通常のスクリプトはアルゴリズムの実行後に動作を停止します。
すべてのアプリケーションプログラム(EA、インジケータ、またはスクリプト)は、MetaTrader 4 Client Terminalがインターネット経由でサーバー(取引センター)に接続されている場合にのみ取引のために使用することができます。 どのプログラムも、サーバーにインストールすることも、他の開発者の端末で使用することもできません。 |
言い換えれば、トレーダーがアプリケーションプログラムを使用したい場合、彼はコンピュータの電源を入れ、MetaTrader 4クライアントターミナルを開き、セキュリティウィンドウで実行可能ファイル* .ex4を開始する必要があります。 プログラムの実行中、そのアルゴリズムに応じて、取引注文が形成され、サーバに送信され、それによって取引管理が行われる。