プラットフォームである「MetaTrader4」の機能を拡張するためのプログラム言語です。MetaTrader4は2005年にリリースされましたが、MQL4による拡張性の高さが投資家からの評価を集め、10年以上経つ現在でも数多くの証券会社が対応しているという、非常に息の長い取引プラットフォームとなります。MQL4はC++をベースに開発された言語のため、C++をはじめC#やJavaなどの開発経験があれば比較的容易に開発を行う事が出来ます。MQL4の開発環境はMetaTrader4と一緒に提供されているため、MetaTrader4をインストールすれば開発環境も全て揃います。このようにプログラム開発に対する敷居の低さもMetaTrader4が長年支持され続けている理由の一つなのでしょうね。MQL4の開発環境MQL4のプログラムを開発するには、MetaEditorというアプリケーションを使います。MetaEditorではMQL4によるプログラムの新規作成や編集といったエディターとしての機能に加えて、コンパイル(ソースコードから実行ファイルを生成する)からデプロイ(実行ファイルをMetaTrader4に配置し認識させる)まで、MQL4による開発の全てをこれ一つで網羅出来る非常に多機能なアプリケーションです。MetaEditorはMetaTrader4に同梱されており、terminal.exe(MetaTrader4の本体)と同じフォルダにあるmetaeditor.exeがMetaEditorアプリケーションとなります。MetaTrader4の上部メニューにある「メタクォーツ言語エディタ」というボタンを押すか、MetaTrader4がアクティブな状態でF4キーを押すことでもMetaEditorを起動することが出来ます。MQL4で作れるものMQL4で開発出来るプログラムは大きく分けて以下の4つとなりますが、中でもカスタムインジケーターとエキスパートアドバイザーが非常に多く開発されているプログラムとなります。カスタムインジケーターカスタムインジケーターはチャート上に様々な情報を表示するプログラムです。MetaTrader4には移動平均線やボリンジャーバンドなど一般的なインジケーターが同梱されていますが、MQL4を使用することでこれらのインジケーターの機能を拡張したり、全く新しいオリジナルのインジケーターを開発することも可能となります。チャートへの表示に特化している反面、後述するエキスパートアドバイザーのように売買を行うことは出来ません。エキスパートアドバイザー(EA)エキスパートアドバイザー(EA)は指定された条件に従い自動的に売買を行うプログラムです。売買条件は自由にプログラムで定義することが可能で、カスタムインジケーターを売買条件として使用することも可能です。売買を目的としたプログラムのため、カスタムインジケーターほど多彩な表示を行うことは出来ません。スクリプトスクリプトはチャートに設定した際に一回だけ処理を実行するプログラムです。カスタムインジケーターやエキスパートアドバイザーはブローカーから新しい価格を受信するたびに継続して動作するプログラムですが、スクリプトは継続しての動作は行わず、設定された際に1回動作するのみとなります。そのため手動での取引を補助するような機能、例えば任意のタイミングで保有中のポジションを全て決済する、といった内容はスクリプトとして開発することになります。ライブラリライブラリは他のMQL4プログラムから呼ばれることを目的としたプログラムです。使用する処理をまとめて1つのライブラリとして用意しておくことでコードの重複を防止し開発工数の削減に繋げるが出来ます。注意点として、ライブラリを使用したプログラムを実行するには、MetaTrader4のデータフォルダに呼び出し元のプログラムと使用するライブラリの双方が必要であり、呼び出し元のプログラム単体での動作は不可となります。MQL4プログラムの構成MQL4プログラムのソースコード(*.mq4)に記載する内容をいくつか紹介します。"©MQL4逆引きリファレンス"プロパティとはMQL4プログラムの設定に関する定義で、通常はソースコードの先頭に記述します。上記例では3つのプロパティを定義していますが、プロパティの種類は他にもたくさんあり、作成するプログラムによっては定義が必須となるプロパティもあります。プロパティの種類については以下のリンク先をご参照ください。移動平均の適用価格パラメーターとはMQL4プログラムを使用するユーザーが後から自由に変更可能な項目です。行頭に「input」と記載した変数はパラメーター扱いとなり、プログラムをチャートに設定した際に表示されるウィンドウの「パラメーターの入力」タブで項目の設定内容を変更することが可能となります。パラメーター項目名の日本語化パラメーターの項目名は変数名となりますが、上記例のように末尾に一行コメントをつけることで、そのコメントがパラメーターの項目名として表示されます。日本語の表示も可能なので、設定間違いを防ぐという観点からも出来る限り日本語で項目名を表示するべきでしょう。変数の型が列挙型(enum)の場合はパラメーターの設定内容がコンボボックスによる選択形式になります。MQL4で用意されている列挙型に加えて、ソースコード内で新たに定義した列挙型もコンボボックスとして使用することが出来ます。イベントハンドラの定義イベントハンドラとは特定の条件を満たすことで呼ばれる関数のことで、MQL4のプログラムは主にこのイベントハンドラの関数内に記述することになります。プログラムの種類によって必要なイベントハンドラの種類が異なりますので、作成する内容に合わせてソースコード内に定義し処理を記述しましょう。INIT_SUCCEED;}OnInit関数はMQL4プログラムが開始する際に1回だけ呼ばれる関数となり、主にプログラムの初期化処理を記述します。設定されたパラメーター内容のチェックやグローバル変数の初期化など、プログラムが動作する上で必要な前準備を行う関数になります。OnInit関数は全てのMQL4プログラムで定義することが可能で、不要であれば省略してもプログラムは正常に動作します。プログラムの終了に関する処理を記述}OnDeinit関数はMQL4プログラムが終了する際に1回だけ呼ばれる関数となり、主にプログラムの終了処理を記述します。プログラム動作中チャートに表示したオブジェクトの削除など、チャートをプログラムが開始される前の状態に戻す処理を記述するのが一般的な使用方法となります。引数のreasonにはプログラムが終了した理由(プログラムがチャートから削除された、チャートの時間足が変更になった、等)が設定されているため、その内容によって処理を分けることも可能です。OnInit関数と同様、OnDeinit関数も全てのMQL4プログラムで定義することが可能であり、不要であれば省略しても構いません。1;}OnCalculate関数はインジケーターを作成する際に定義が必須となり、インジケーターのメイン処理を記述する関数です。チャートの現在価格が変動すると、このOnCalculate関数が自動的に呼ばれることになります。最初にOnCalculate関数が呼ばれた時点で過去のローソク足も含めた全てのローソク足に対して判定や表示処理を行い、2回目以降は最新のローソク足だけに対して判定や表示処理を行うのが一般的なインジケーターの処理方法です。毎回過去のローソク足まで判定や計算を行ってしまうとインジケーターの動作が重くなり、チャートがフリーズしてしまう可能性がありますので注意しましょう。エキスパートアドバイザーのメイン処理を記述}OnTick関数はエキスパートアドバイザーを作成する際に定義が必須となり、エキスパートアドバイザーのメイン処理を記述する関数です。OnCalculate関数と同様、チャートの現在価格が変動するとOnTick関数が自動的に呼ばれることになります。この関数内で売買条件の判定を行い、条件を満たしている場合は注文を送信する、というのがエキスパートアドバイザーを作る際の一般的な流れとなります。スクリプトのメイン処理を記述}OnStart関数はスクリプトを作成する際に定義が必須となり、スクリプトのメイン処理を記述する関数です。スクリプトをチャートに設定するとOnInit関数に続いてOnStart関数が呼ばれますが、スクリプトは1回しか処理を行いませんので、OnStart関数の処理が終わるとプログラムの動作も終了となります。定期的に行う処理を記述}OnTimer関数は指定した秒またはミリ秒ごとに繰り返し呼ばれる関数となります。主な用途としてはチャートに表示したサインや背景を点滅させたい場合などに使用します。間隔はOnInit関数内でEventSetTimer関数(秒指定)またはEventSetMillisecondTimer関数(ミリ秒指定)を使用して指定し、必ずOnDeinit関数内でEventKillTimer関数を使用してタイマー処理を終了させる必要があります。イベント処理を記述}OnChartEvent関数はチャート上においてイベントが発生した際に呼ばれる関数です。イベントの内容はチャートのクリック操作や各種キーの押下、オブジェクトの作成やドラッグなど多岐に渡ります。何のイベントが発生したのかは引数のidで判別が可能となり、発生元のイベントに応じて残りの引数であるlparam、dparam、sparamの内容が変わります。string型のsparamの場合、キー押下イベントの場合は押されたキーの種類、オブジェクト作成イベントの場合はオブジェクトの名前となります。イベントの種類と引数の組み合わせについては、以下のリンク先をご参照ください。Referencehttps://docs.mql4.com/basis/function/events#oncharteventMQL4プログラムのコンパイルMQL4プログラムのコンパイル(ソースコードから実行ファイルを生成する)を行うには、MetaEditor上部メニューにある「Compile」ボタンを押すか、またはMetaEditor上でF7キーを押します。コンパイルに成功した場合はソースコードと同じフォルダに実行ファイルが生成され、MetaTrader4起動中の場合は実行ファイルを認識し使用可能となります。コンパイルに失敗した場合はMetaEditorのツールボックスウィンドウ内にある「エラー」タブにエラー内容が表示されますので、内容を確認しソースコードの修正を行いましょう。MQL5との互換性2010年に後継であるMetaTrader5がリリースされ、プログラム言語もMQL5として新しくなりましたが、MQL4とMQL5に互換性はありません。MQL4で作成したプログラムはMetaTrader5では使用出来ないことになります。MetaTrader5はリリース以降なかなか普及が進んでおらず、その原因はこの互換性にあると言われています。Referencehttps://docs.mql4.com/basis/function/events関連記事アラートを表示したい!MetaTrader4のアラートとは、音と共にメッセージ付きのポップアップウィンドウを表示する機能の事を指します。チャートを監視しながら何か別の作業を行う際には必須機能といっても良いくらい、とても便利な機能ですね。このアラート機能ですが、MQL4で作成したプログラムであれば任意のタイミングで表示することが出来ます。今回はMQL4のプ...記事を読む音を鳴らしたい!音を鳴らす、というとアラート表示機能を想像する方も多いと思いますが、今回紹介するのは音「だけ」を鳴らす方法で、アラート表示機能とは異なりポップアップウィンドウは表示しません。そのためメッセージを表示することは出来ませんが、アラート表示機能では出来ない「プログラムごとに好きなサウンドファイルを指定する」ことが可能となります。サウンドフ...記事を読むメールを送信したい!MQL4を使用したプログラムでは、任意のタイミングでメールを送信することが出来ます。メールは任意のアドレスに送信可能で、送信先のメールアドレスを登録すればスマートフォンでも受信することが出来ます。条件の達成状況や売買の成功可否をメールで送信することで、メールを受信できる環境下であれば外出先でもその状況を把握することが出来るため、非常に便...記事を読むログを出力したい!ログとは、任意のタイミングでプログラムから出力する文字情報の事を指します。プログラムの処理に直接影響を与えることはありませんが、問題が発生した際にログからその原因を探る、といった用途で使用されます。プログラム内でどの程度のログ出力を行うかは開発者次第ですが、ログ出力が多くなるとプログラムの動作速度が低下してしまう恐れがあります。そのため...記事を読むコメントを表示したい!コメントと言うとブログのコメントのようなものを想像されるかもしれませんが、MetaTrader4のコメントとはチャートの左上に表示される文字情報のことを指します。MQL4のプログラムでコメント機能を使用することで、任意の文字情報を簡単にチャートへ表示することが出来ます。プラットフォームである「MetaTrader4」の機能を拡張するためのプログラム言語です。MetaTrader4やMQL4についての詳しい内容はこちらもご参照ください。運営者情報サイト運営者:のりプログラムを作成していて「あれ、どうするんだっけ?」と思ったことはありませんか?当サイトはそんな時に答えがきっと見つかるサイトです。詳しい運営者情報はこちらからどうぞ。当サイトではEAやインジケーターの作成代行は承っておりませんが、私も利用させて頂いている信頼できる作成代行サイトさんを紹介します。MQL4逆引きリファレンス.。