サンプルコード 一覧へ戻る

MQL5サンプルコード

【MT5(MQL5)サンプルコード】ファイル関数(基礎)

スポンサーリンク

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指定されたフィルタに基づいて、ディレクトリ内のファイルの検索を開始します。
FileFindNextFileFindFirst() 関数で始めた検索を続けます。
FileFindClose検索ハンドルを閉じます。
FileOpen指定された名称とフラグでファイルを開きます。
FileDelete指定されたファイルを削除します。
FileFlush入力/出力ファイルのバッファに残っている全てのデータをディスクに書き込みます。
FileGetIntegerファイルの整数プロパティを取得します。
FileIsEnding読み出し処理において、ファイルの終わりを定義します。
FileIsLineEnding読み出し処理において、テキストファイル内の行の終わりを定義します。
FileClose以前に開いたファイルを閉じます。
FileIsExistファイルの存在をチェックします。
FileCopyファイルをローカルまたは共有フォルダから別のファイルに複製します。
FileMoveファイルを移動または名称を変更します。
FileReadArrayBIN形式のファイルから文字列を除く全ての型の配列を読み込みます。
FileReadBoolCSV ファイルから、現在の位置から区切り文字までの文字列(またはテキスト行の終わり)を読み込み、読んだ文字列を bool 型の値に変換します。
FileReadDatetimeCSV ファイルから、「YYYY.MM.DD HH:MM:SS」、「YYYY.MM.DD」または「HH:MM:SS」フォーマットの文字列を読み込みdatetime 値に変換します。
FileReadDoubleファイルポインタの現在位置から double 値を読み込みます。
FileReadFloatファイルポインタの現在位置から float 値を読み込みます。
FileReadIntegerファイルポインタの現在位置から int、short または char 値を読み込みます。
FileReadLongファイルポインタの現在位置から long 値を読み込みます。
FileReadNumberCSV ファイルから、現在の位置から区切り文字までの文字列(またはテキスト行の終わり)を読み込み、読んだ文字列を double 型の値に変換します。
FileReadStringファイルポインタの現在位置から string 値を読み込みます。
FileReadStructバイナリファイルのファイルポインタの現在の位置から、パラメータとして渡される構造体にコンテンツを読み込みます。
FileSeekファイルポインタの位置を指定された位置から指定されたバイト数で移動します。
FileSize対応する開かれているファイルのサイズを返します。
FileTell対応する開かれているファイルのファイルポインタの現在位置を返します。
FileWriteデータを CSV または TXT 形式のファイルに書き込みます。
FileWriteArrayBIN 形式のファイルに文字列を除いた任意の型の配列を書き込みます。
FileWriteDoubleバイナリファイルのファイルポインタの現在位置にdouble 型の値を書き込みます。
FileWriteFloatバイナリファイルのファイルポインタの現在位置にfloat 型の値を書き込みます。
FileWriteIntegerバイナリファイルのファイルポインタの現在位置に int 型の値を書き込みます。
FileWriteLongバイナリファイルのファイルポインタの現在位置に long 型の値を書き込みます。
FileWriteStringBIN または TXT ファイルのファイルポインタの現在位置に string パラメータの値を書き込みます。
FileWriteStructバイナリファイルのファイルのファイルポインタの現在位置にパラメータとして割らされた構造体のコンテンツを書き込みます。
FileLoad指定されたバイナリファイルのすべてのデータを渡された数値型または単純な構造体型の配列に読み込みます
FileSave配列のすべての要素をパラメータとして渡されたバイナリファイルに書き込みます
FolderCreateFiles ディレクトリ内にフォルダを作成します。
FolderDelete選択されたディレクトリを削除します。フォルダが空でない場合は、削除出来ません。
FolderClean指定されたフォルダ内の全てのファイルを削除します。
出典:ファイル関数 – MQL5 リファレンス

サンプルコード

操作可能なフォルダのパスを取得してみます。

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公式ページ

コメント

タイトルとURLをコピーしました