MT4(MQL4)/MT5(MQL5)のファイル関数
Metatraderでは、所定のフォルダ配下のファイルを操作する事ができます。
int iLowest(
const string symbol, // 銘柄
ENUM_TIMEFRAMES timeframe, // 期間
ENUM_SERIESMODE type, // 時系列識別子
int count=WHOLE_ARRAY, // 要素数
int start=0 // インデックス
);
操作可能なファイルは、以下の関数で取得できる2種類のディレクトリ配下のファイルのみです。(セキュリティ的な観点で制限されているとの事です)
TerminalInfoString(TERMINAL_DATA_PATH)
TerminalInfoString(TERMINAL_COMMONDATA_PATH)
関数にすると分かり辛いですが、要は個別のデータフォルダか、全ターミナル共通のデータフォルダ配下しか触れないという事です。
↓大体こんな感じのパス。
TerminalInfoString(TERMINAL_DATA_PATH)
→C:\Users\xxxxx\AppData\Roaming\MetaQuotes\Terminal\C6E9D62BBXXXXXXXXXX9BCF11404740
TerminalInfoString(TERMINAL_COMMONDATA_PATH)
→C:\Users\xxxxx\AppData\Roaming\MetaQuotes\Terminal\Common
ファイル操作では、以下の関数が使用できます。
関数 | アクション |
---|---|
FileSelectDialog | ファイルまたはフォルダーを開く/作成ダイアログを作成します。 |
FileFindFirst | 指定されたフィルタに基づいて、ディレクトリ内のファイルの検索を開始します。 |
FileFindNext | FileFindFirst() 関数で始めた検索を続けます。 |
FileFindClose | 検索ハンドルを閉じます。 |
FileOpen | 指定された名称とフラグでファイルを開きます。 |
FileDelete | 指定されたファイルを削除します。 |
FileFlush | 入力/出力ファイルのバッファに残っている全てのデータをディスクに書き込みます。 |
FileGetInteger | ファイルの整数プロパティを取得します。 |
FileIsEnding | 読み出し処理において、ファイルの終わりを定義します。 |
FileIsLineEnding | 読み出し処理において、テキストファイル内の行の終わりを定義します。 |
FileClose | 以前に開いたファイルを閉じます。 |
FileIsExist | ファイルの存在をチェックします。 |
FileCopy | ファイルをローカルまたは共有フォルダから別のファイルに複製します。 |
FileMove | ファイルを移動または名称を変更します。 |
FileReadArray | BIN形式のファイルから文字列を除く全ての型の配列を読み込みます。 |
FileReadBool | CSV ファイルから、現在の位置から区切り文字までの文字列(またはテキスト行の終わり)を読み込み、読んだ文字列を bool 型の値に変換します。 |
FileReadDatetime | CSV ファイルから、「YYYY.MM.DD HH:MM:SS」、「YYYY.MM.DD」または「HH:MM:SS」フォーマットの文字列を読み込みdatetime 値に変換します。 |
FileReadDouble | ファイルポインタの現在位置から double 値を読み込みます。 |
FileReadFloat | ファイルポインタの現在位置から float 値を読み込みます。 |
FileReadInteger | ファイルポインタの現在位置から int、short または char 値を読み込みます。 |
FileReadLong | ファイルポインタの現在位置から long 値を読み込みます。 |
FileReadNumber | CSV ファイルから、現在の位置から区切り文字までの文字列(またはテキスト行の終わり)を読み込み、読んだ文字列を double 型の値に変換します。 |
FileReadString | ファイルポインタの現在位置から string 値を読み込みます。 |
FileReadStruct | バイナリファイルのファイルポインタの現在の位置から、パラメータとして渡される構造体にコンテンツを読み込みます。 |
FileSeek | ファイルポインタの位置を指定された位置から指定されたバイト数で移動します。 |
FileSize | 対応する開かれているファイルのサイズを返します。 |
FileTell | 対応する開かれているファイルのファイルポインタの現在位置を返します。 |
FileWrite | データを CSV または TXT 形式のファイルに書き込みます。 |
FileWriteArray | BIN 形式のファイルに文字列を除いた任意の型の配列を書き込みます。 |
FileWriteDouble | バイナリファイルのファイルポインタの現在位置にdouble 型の値を書き込みます。 |
FileWriteFloat | バイナリファイルのファイルポインタの現在位置にfloat 型の値を書き込みます。 |
FileWriteInteger | バイナリファイルのファイルポインタの現在位置に int 型の値を書き込みます。 |
FileWriteLong | バイナリファイルのファイルポインタの現在位置に long 型の値を書き込みます。 |
FileWriteString | BIN または TXT ファイルのファイルポインタの現在位置に string パラメータの値を書き込みます。 |
FileWriteStruct | バイナリファイルのファイルのファイルポインタの現在位置にパラメータとして割らされた構造体のコンテンツを書き込みます。 |
FileLoad | 指定されたバイナリファイルのすべてのデータを渡された数値型または単純な構造体型の配列に読み込みます |
FileSave | 配列のすべての要素をパラメータとして渡されたバイナリファイルに書き込みます |
FolderCreate | Files ディレクトリ内にフォルダを作成します。 |
FolderDelete | 選択されたディレクトリを削除します。フォルダが空でない場合は、削除出来ません。 |
FolderClean | 指定されたフォルダ内の全てのファイルを削除します。 |
サンプルコード
操作可能なフォルダのパスを取得してみます。
void OnInit()
{
//--- 端末データが格納されるフォルダ
string terminal_data_path=TerminalInfoString(TERMINAL_DATA_PATH);
//--- 全てのクライアント端末に共通なフォルダー
string common_data_path=TerminalInfoString(TERMINAL_COMMONDATA_PATH);
Print("terminal_data_path = ",terminal_data_path);
Print("common_data_path = ",common_data_path);
return;
}
結果
ファイル操作可能なフォルダのパスが取得されます。
terminal_data_path = C:\Users\xxxxx\AppData\Roaming\MetaQuotes\Terminal\C6E9D62BBXXXXXXXXXX9BCF11404740
common_data_path = C:\Users\xxxxx\AppData\Roaming\MetaQuotes\Terminal\Common
【参考】MQL5公式ページ
コメント / Comments