FX・株・日経225・自動売買・シグナル配信の投資情報総合サイト | MT4やEAのすべてが解かる【fx-on.com】

 |記事一覧| >>

MQL4とMQL5の互換性について(9)


「MQL4とMQL5の互換性について」の連載ですが、いよいよ今回が最終回です。

今回は、これまで取り上げていない関数のなかで、比較的よく使われる関数をいくつか紹介します。


■共通関数

以下の共通関数については、MQL4とMQL5とで互換性があります。

 void Alert(...) ポップアップアラート
 void Comment(...) コメントの画面表示
 int GetTickCount( ) 経過時間
 int MessageBox(string text, string caption=NULL, int flags=0) メッセージボックス
 void PlaySound(string filename) 音声ファイル再生
 void Print(...) エキスパートログへ出力
 bool SendFTP(string filename, string ftp_path=NULL) FTPサーバーへ送信
 bool SendNotification(string message) プッシュ通知送信
 void SendMail(string subject, string some_text) メール送信
 void Sleep(int milliseconds) スリープ

いくつかの関数で、戻り値が「void」か「bool」かで異なるものもありますが、基本的には同じように使えます。


■変換関数

実数、文字列、時刻など異なるデータ間の変換を行う関数については、MQL4とMQL5とで関数名は異なりますが、対応はしています。

以下の関数で[MQL4]とついているものがMQL4用で、[MQL5]とついているものがMQL5用です。

 [MQL4]string CharToStr(int)
 [MQL5]string CharToString(uchar)
 文字コードから文字へ変換

 [MQL4]string DoubleToStr(double value, int digits)
 [MQL5]string DoubleToString(double value, int digits=8)
 実数から文字列へ変換

 [MQL4]double NormalizeDouble(double value, int digits)
 [MQL5]double NormalizeDouble(double value, int digits)
 実数の正規化

 [MQL4]double StrToDouble(string value)
 [MQL5]double StringToDouble(string value)
 文字列から実数へ変換

 [MQL4]int StrToInteger(string value)
 [MQL5]long StringToInteger(string value)
 文字列から整数へ変換

 [MQL4]datetime StrToTime(string value)
 [MQL5]datetime StringToTime(string value)
 文字列から時刻へ変換

 [MQL4]string TimeToStr(datetime value, int mode=TIME_DATE|TIME_MINUTES)
 [MQL5]string TimeToString(datetime value, int mode=TIME_DATE|TIME_MINUTES)
 時刻から文字列へ変換

比べてみるとわかるように、MQL4の関数名の「Str」の部分がMQL5では「String」になっているだけです。
機械的に置き換えることができるでしょう。


■文字列関数

文字列を操作する文字列関数については、以下のようにMQL4とMQL5とで関数が対応しています。

 [MQL4]string StringConcatenate(...)
 [MQL5]int StringConcatenate(string& string_var, ...)
 文字列の連結

 [MQL4]int StringFind(string text, string matched_text, int start=0)
 [MQL5]int StringFind(string text, string matched_text, int start=0)
 文字列の検索

 [MQL4]int StringGetChar(string text, int pos)
 [MQL5]ushort StringGetCharacter(string text, int pos)
 文字列中の文字コード

 [MQL4]int StringLen(string text)
 [MQL5]int StringLen(string text)
 文字列長

 [MQL4]string StringSetChar(string text, int pos, int value)
 [MQL5]bool StringSetCharacter(string& string_var, int pos, ushort character)
 文字列の変更

 [MQL4]string StringSubstr(string text, int start, int length=0)
 [MQL5]string StringSubstr(string string_value, int start_pos, int length=-1)
 部分文字列の抽出

 [MQL4]string StringTrimLeft(string text)
 [MQL5]int StringTrimLeft(string& string_var)
 文字列の左詰め

 [MQL4]string StringTrimRight(string text)
 [MQL5]int StringTrimRight(string& string_var)
 文字列の右詰め

戻り値やパラメータの型が違うものもありますが、基本的には同じように使うことができます。


■口座情報関数

口座残高や口座番号など口座情報を取得する関数は、MQL4では、AccountBalance()、AccountNumber()など個別の関数でしたが、MQL5では取得する情報のデータ型により、次のような3つの関数に集約されています。

 double AccountInfoDouble(int property_id) 実数型の口座情報の取得
 long AccountInfoInteger(int property_id) 整数型の口座情報の取得
 string AccountInfoString(int property_id) 文字列型の口座情報の取得

例えば、口座残高の場合、実数データなので、AccountInfoDouble(ACCOUNT_BALANCE)として取得します。
また口座番号であれば、整数データなので、AccountInfoInteger(ACCOUNT_LOGIN)として取得します。


■トレード関数

最後にトレード関数ですが、このブログの過去の記事で何度も触れたように、MQL4とMQL5とではトレードを実行する際のプログラムの仕方が全く異なります。

MQL4ではオーダー毎にポジションができるのに対して、MQL5では同じ通貨ペアのオーダーは一つのポジションにまとめられてしまうため、関数の置き換えだけでは互換性のあるプログラムを作成することは難しいです。

ということで最後に宣伝です。

2013年11月15日
MT4のEAと同じロジックのEAをMT5で作るには

この記事で紹介した拙著「FXメタトレーダー4&5一挙両得プログラミング」では、MT4と同じオーダー毎のポジションを仮想ポジションとして扱うことにより、MT5でも互換性のあるEAを作成することが可能となります。

MQL4からMQL5への移植にお悩みの方は是非お試しください。


■休載のお知らせ

この記事をもちまして、一旦、本ブログの連載を休止させていただきます。

みなさんご存知のように、MT4、MT5は日々アップデートが行われており、MT4、MT5の仕様はもとより、MQL4、MQL5の言語仕様も追加、変更が行われています。

このような頻繁なアップデートに関する情報は、すぐに古くなってしまうこともありますし、しばらくは、MT4、MT5の動向を見極める時間にしたいと思います。

これまで2年足らずの短い期間でしたが、連載をご覧いただいた読者の皆様に感謝いたします。
どうもありがとうございました!


公開日:2014年03月31日
 |記事一覧| >>
Profile
豊嶋教授フォト
豊嶋久道
慶應義塾大学在学中よりC言語プログラミングに親しみ、実用系のフリーソフトウェア、シェアウェアを公開。

1993年博士(工学)の学位を取得
専門はデジタル信号処理。

2003年よりFX取引を始め、システムトレードの道へ。
MetaTrader4、MetaTrader5を利用した売買システムの研究を行っている。

主な著書に
著書