MQL4とMQL5の動作をサンプルコードで比較!MT4からMT5へのEA移行に役立つ情報まとめ
MQL5のEAプログラミング入門やリファレンスとしてもよかったらどうぞ
MT5 MQL5リファレンス サンプルコード&実行結果
MT5 EA プログラミングのためのMQL5のサンプルコードと実行結果をまとめています。EA移行に役立つようにMQL4とMQL5の違いも載せています。
公式のMQL5リファレンスは説明が簡素でサンプルコードや実行結果も掲載されていないため、どのように動作するのか理解しづらい部分が多くありました。ここではMT4からMT5へEAを書き換える際に躓いた点などもふまえてそれらを補えるように情報をまとめています。
MT4→MT5の移行で一番楽なのはMQL5コンバータ(GogoJungle)で変換する事。…なのですが…うまくいかなかった人や、自力でMQL5を習得したい人の助けになればと思い、サンプルコード形式で色々纏めてます。
言語基礎
MQL5プログラミング言語の基本的な書き方(構文、データ型、演算子など)。
- データ型
- 演算子と式
- 演算子
標準的な定数、列挙と構造体
MQ5で事前に定義された標準的な定数、列挙(いわゆるenum)、構造体(いわゆるstruct)。
- 環境状態
- 口座プロパティ …現在の口座に関する情報を取得(整数、少数、文字列などのデータ型によって取得方法が異なる)
- データ構造体
MQL5プログラム
プログラム実行、ロード、エラー取得など、MQL5プログラムの動作機能。
- プログラム実行
- ランタイムエラー …ランタイムと重大なエラーに関する情報取得
定義済み変数
MQL5プログラム(エキスパートアドバイザー、スクリプトまたはカスタム指標)では、実行開始時から、現在の価格チャートの状態を反映する事前定義された変数のセット。
- _Digits …現在のチャートシンボルの価格の小数点以下の桁数取得
- _Point …現在のチャートのシンボルのポイントサイズ取得
- _LastError …プログラム実行中に発生した直近のエラー取得
- _Period …現在のチャートの時間軸取得
- _Symbol …現在のチャートの銘柄(USDJPY等)取得
共通関数
よく使う多目的な関数群。ログ出力のPrint、一時停止のSleepなど。
- Alert …お知らせをポップアップ画面で表示
- Comment …チャート画面の左上にコメント表示
- ExpertRemove …EAを停止して、チャートから取り外す
- MessageBox …メッセージボックスを表示
- PlaySound …音声ファイルを再生
- Print …ログにメッセージを出力 / Print …”Hello World”コメント出力
- Sleep …EAやスクリプトを一時停止 / Sleep …使い方その2
- TesterStatistics …テスト結果の統計的なパラメータを取得
- TesterStop …テスト中にテスト終了コマンドを発行
- TesterDeposit …テスト中に資金の追加入金処理を再現
- TesterWithdrawal …テスト中に資金の出金処理を再現
配列関数
配列操作を行う関数群。
変換関数
データフォーマットの変換を行う関数群。文字列、数値の変換など。
- CharToString …1文字のシンボルコードを1文字の文字列に変換
- StringToDouble …シンボル表現を含むstring型の文字列をdouble型の数値に変換
- StringToInteger …シンボル表現を含むString型の文字列をlong(整数)型の数値に変換
数学関数
乱数、最大値・最小値取得、平方根などの数学関数及び三角関数のセット。
- MathAbs / fabs …指定された数値の絶対値(係数)を取得
- MathArccos / acos …指定値のアークコサインをラジアンで取得、arccosの計算
- MathArcsin / asin …指定値のアークサインをラジアンで取得、arcsinの計算
- MathArctan / atan …指定値のアークタンジェントをラジアンで取得、arctanの計算
- MathArctan2 / atan2 …2つの指定値(x, y)から角度をラジアンで取得、MathTan(θ)=y/xになるラジアンを取得
- MathCeil / ceil …double型少数値から切り上げされた整数値を取得
- MathCos / cos …角度のコサインを取得、cosθの計算
- MathExp / exp …数の指数(eのd乗)を取得
- MathFloor / floor …double型少数値から切り下げされた整数値を取得
- MathLog / log …自然対数を取得
- MathLog10 / log10 …数の底が10の対数を取得
- MathMax …2つの数値を比較して最大値を取得
- MathMin …2つの数値を比較して最小値を取得
- MathMod …割り算の余りを取得
- MathPow / pow …基数を乗した値を取得、べき乗(xy = xのy乗)の計算
- MathRand / rand …0〜32,767 の範囲内で擬似乱数値を返す
- MathRound / round …指定された数値の最も近い整数に丸めた値を取得
- MathSin / sin …指定された角度のサインを取得、sinθの計算
- MathSqrt / sqrt …数の平方根を取得、ルート√の計算
- MathSrand …擬似乱数値を初期化するための処理
- MathTan / tan …数のタンジェントを取得、tanθの計算
- MathIsValidNumber …実数の有効性をチェックする(指定された値が実数か否かを判定)
文字列関数
文字列の結合、文字列サイズの取得など、string型のデータの操作。
- StringAdd …文字列のうしろに別の文字列を追加
- StringBufferLen …文字列に割り当てられたバッファのサイズを取得
- StringCompare …2つの文字列を比較
- StringConcatenate …文字列の結合と結合した文字列のサイズを取得
- StringInit …指定した長さの文字列を作成し、指定した記号で埋める
- StringToLower …選択された文字列の全てのシンボルを小文字に変換
- StringToUpper …選択された文字列の全てのシンボルを大文字に変換
- StringTrimLeft …文字列の左部分の改行文字、スペースやタブを切り取る
- StringTrimRight …文字列の右部分の改行文字、スペースやタブを切り取る
日付と時刻
datetimeフォーマットに関する関数群。時刻取得、日時フォーマットの変換など。
- 日付と時刻
- TimeCurrent …最後の既知のサーバ時間(相場受信の最終時刻)をdatetimeフォーマットで取得
- TimeTradeServer …取引サーバの現在の計算時間を取得
- TimeLocal …ローカルコンピューター時刻をdatetimeフォーマットで取得
- TimeGMT …クライアント端末が実行しているコンピュータのローカル時間をGMTを夏時間を考慮したdatetimeフォーマットで取得
- TimeDaylightSavings …夏時間のスイッチの符号を取得
- TimeGMTOffset …DSTスイッチを考慮して、GMT時間とローカルコンピュータの現在時刻との差を秒で取得
- TimeToStruct …datetime値をMqlDateTime構造体型の変数に変換
- StructToTime …MqlDateTime構造体型の変数をdatetime値に変換
口座情報
現在の口座を取得。
- AccountInfoDouble …口座情報を取得(少数で表される情報)
- AccountInfoInteger …口座情報を取得(整数で表される情報)
- AccountInfoString …口座情報を取得(文字列で表される情報)
チェックアップ
現在の状態を取得するための関数群。エラー取得、時間軸取得など。
- GetLastError …プログラム実行中に発生した直近のエラー取得
- Symbol …現在のチャートの銘柄(USDJPY等)取得
- Period …現在のチャートの時間軸取得
- Digits …現在のチャートシンボルの価格の小数点以下の桁数取得
- Point …現在のチャートのシンボルのポイントサイズ取得
イベント処理
定義済イベントの処理を行うための関数群。EAロード時や終了時の処理を制御するなど。
市場情報
銘柄の存在チェックや銘柄数の取得など、市場の状態に関する情報を取得。
時系列と指標へのアクセス
時系列と指標の操作のための関数群。指定したローソク足や期間の最高値などを取得。
- iClose …指定したローソク足の終値を取得
- iHigh …指定したローソク足の高値を取得
- iHighest …指定した期間の最高値を取得
- iLow …指定したローソク足の安値を取得
- iLowest …指定した期間の最小値を取得
- iOpen …指定したローソク足の始値
- iTime …指定したローソク足の時間を取得
- iTickVolume …指定したローソク足のティックボリュームを取得
- iVolume …指定したローソク足のティックボリュームを取得
- iSpread …指定したローソク足のスプレッドを取得
チャート操作
チャートの情報を取得したり、チャートのスクリーンショットを作成するチャート操作のための関数群。
- ChartSymbol …指定されたチャートの銘柄を取得
- ChartPeriod …指定されたチャートの時間足を取得
- ChartID …指定されたチャートのIDを取得
- ChartScreenShot …指定されたチャートのスクリーンショット(GIF/PNG/BMP)を作成
取引関数
取引アクティビティを管理する関数群。取引リクエスト(OrderSend)など。
ファイル関数
ファイルの読み込み、書き込みなどのファイル操作のための関数群。
- ファイル関数(基礎) …ファイル操作可能なフォルダやファイル関数一覧
- FileOpen …指定のファイルを開く、または新規ファイル作成
- FileClose …開いたファイルを閉じる
- FileWrite …CSVまたはTXT形式でファイルに書き込む
統合/Python用MetaTrader
Pythonなどの外部プログラムからMetaTraderを操作する方法。
- PythonとMetaTraderの接続方法
- Pythonから使えるMetaTrader用の関数
MQL4からMQL5への移行
MQL4とMQL5で特徴的な違い。