機能
FileOpen関数は、指定された名称とフラグでファイルを開く関数です。
<書式>
int FileOpen( string file_name, // ファイル名 int open_flags, // フラグの組み合わせ short delimiter=’\t’, // デリミタ(区切りに使われる文字列) uint codepage=CP_ACP // コードページ ); |
引数
- [in] ファイルの名称はサブフォルダを含むことが出来ます。ファイルが書き込み用に開かれている場合は、存在しないサブフォルダは作成されます
- open_flags
[in] ファイル操作のモードを決めるフラグの組み合わせフラグは次の通りです。
FILE_READ – ファイルが読み込みのために開かれる
FILE_WRITE – ファイルが書き込みのために開かれる
FILE_BIN – バイナリ読み書きモード(文字列から/への変換はなし)
FILE_CSV – csv ファイル(unicode または ansi 文字列への変換され区切り文字で区切られる)
FILE_TXT – 単純なテキストファイル( csv と同じだが区切り文字がない)
FILE_ANSI – ANSI 文字列( 1 バイト文字)
FILE_UNICODE – UNICODE 文字列(2 バイト文字)
FILE_SHARE_READ – 複数プログラムから読み込まれる
FILE_SHARE_WRITE – 複数プログラムから書き込まれる
FILE_COMMON – 全てのクライエント端末に共通なファイルの位置( \Terminal\Common\Files )
3.delimiter=’\t’ デリミター(デリミターとは区切りに使われる文字列のことです)
[in] txt または csv ファイルでセパレータとして使用される値。csv ファイルのデリミタが指定されていない場合、デフォルトはタブです。
txt ファイルのデリミタが指定されていない場合、セパレータは使用されません。
セパレータが明らかに 0 に設定されている場合、セパレータは何も使用されません。
4.コードページの値。
どの文字コード規格に従って、処理をするかというパラメーターなのですが、MQL5で事前に定められている文字コード定数を入力します。
戻り値
ファイルが正常に開かれた場合、この関数は、ファイルデータのアクセスに使用されるファイルハンドル(ファイルアクセス処理に必要な鍵のようなもの)が返されます。失敗した場合 INVALID_HANDLE(妥当ではないハンドル値) を返します。
備考
セキュリティ上の理由から、MQL5 言語ではファイルの扱いは厳しく制御されています。MQL5 手段を用いて操作されるファイルは、ファイルサンドボックスの外に存在することは出来ません。
ファイルを特定のエンコーディング(コードページパラメータにはコードページ値を指定されます)で読み込む必要がある場合は、FILE_ANSIフラグを必ず設定してください。指定されたFILE_ANSIフラグがない場合、テキストファイルは変換なしでUnicodeで読み込まれます。
ファイルは MQL5\files サブフォルダ(テスト時は testing_agent_directory\MQL5\files )内のクライアント端末のフォルダで開かれます。FILE_COMMON フラグが指定されている場合、ファイルは、全てのメタトレーダー5クライアント端末が使用する共有フォルダで開かれます。
「名前付きパイプ」は以下の規則に従って開くことが出来ます
•パイプ名は文字列で「\servername\pipe\pipename」の様な外観を持つべきです。ここで servername はネットワーク内のサーバ名でpipename はパイプ名です。パイプが同じコンピュータ上で使用されている場合はサーバ名は省略出来ますが「\.\pipe\pipename」のように点を挿入する必要があります。パイプに接続しようとしているクライアントはその名称を知っているべきです。
•FileFlush() 及び FileSeek() は、パイプから読み込み、それへ書き込みという一連の動作の間に、ファイルの先頭に呼び出す必要があります
MQL5リファレンス
サンプルコード
以下のサンプルコードはTerminal>Common>ディレクトリのFilesフォルダにあるSignal.txtというテキストファイルがあることを前提としたものです。
#include <Trade\Trade.mqh>
//ファイルのインクルード
CTrade trade;
//クラスオブジェクトの宣言
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
double Ask=NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits);
//チャートの値の取得と正規化
int ExternalFile=FileOpen("Signal.txt",
FILE_READ|FILE_ANSI|FILE_COMMON,
'|',
CP_ACP);
//テキストファイルを開き、ファイルハンドルを取得
string BuySignal=FileReadString(ExternalFile);
//Terminal>Common>Filesフォルダにあるテキストを読み取る
FileClose(ExternalFile);//ファイルを閉じる
if(PositionsTotal()==0 && BuySignal=="BUY IT NOW")//読み取った中に"BUY IT NOW"があれば
{
trade.Buy(0.1,NULL,Ask,0,Ask+100*_Point,NULL);//買い注文
}//if(PositionsTotal()==0 && BuySignal=="BUY IT NOW")
Comment("BuySignal",BuySignal,"PositionsTotal:",PositionsTotal());//コメント表示
}
//+------------------------------------------------------------------+
OnTick関数については↓をご覧ください↓
FileReadString関数については↓をご覧ください。
Normalizedouble関数については↓をご覧ください
コメント