int FileOpen( string filename, int mode, int delimiter=';')
Opens file for input and/or output. Returns a file handle for the opened file or -1 (if the function fails). To get the detailed error information, call GetLastError() function.
Notes: Files can only be opened in the terminal_directory\experts\files folder (terminal_directory\tester\files if for expert testing) or in its subfolders.
FILE_BIN and FILE_CSV modes cannot be used simultaneously.
If FILE_WRITE does not combine with FILE_READ, a zero-length file will be opened. If even the file containd some data, they will be deleted. If there is a need to add data to an existing file, it must be opened using combination of FILE_READ | FILE_WRITE.
If FILE_READ does not combine with FILE_WRITE, the file will be opened only if it already exists. If the file does not exist, it can be created using the FILE_WRITE mode.
No more than 32 files can be opened within an executable module simultaneously. Handles of files opened in the same module cannot be passed to other modules (libraries).
Parameters:
filename - Filename.
mode - Opening mode. It can be one or combination of values: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter - Delimiter character for csv files. By default, the ';' symbol applies.
ファイルを開くたびに上書きされている状態です。init()関数でファイルを開き、deinit()で閉じるというのも一つの解決策です
ということで、こうしてみました。
int init()
{
handle=FileOpen("cyberia_log.csv", FILE_CSV|FILE_WRITE, ';');//このコードの中でFileOpen()を使っている のはここだけで、他は全てOFFにしています。
return(0);
}
int deinit()
{
FileClose(handle)を実行。
return(0);
}
で、何かを追加したいときのコードでは、次のようにしています。
FileWrite(handle, "SellPossibilityMid:", SellPossibilityMid);
FileWrite(handle, "BuyPossibilityMid:", BuyPossibilityMid);
とすると、"too many files open" というエラーメッセージが表示されます。
bool startfileopen = true;
int init()
{
if(startfileopen)
{
handle=FileOpen("cyberia_log.csv",FILE_CSV|FILE_WRITE, ';');
startfileopen = false;
}
これで不具合は解消されたようです。
しかし、まだファイル内の1つのエントリしか表示されず、その一部が切り捨てられています...
SellPossibilityMid*SellPossibilityQuality:;0.00190286
BuyPossibilityMid*BuyPossibilityQuality:;0.00132571
UndefinedPossibilityMid*UndefinedPossibilityQuality:;0.00365143
UndefinedSucPossibilityQuality:;9
SellSucPossibilityQuality:;9
BuySucPossibilityQuality:;7
UndefinedPossibilityQuality:;18
SellPossibilityQuality:;9
BuyPossibilityQuality:;8
UndefinedSucPossibilityMid:;0.00074444
SellSucPossibilityMid:;0.00082222
BuySucPossibilityMid:;0.0008
UndefinedPossibilityMid:;0.00020286
SellPossibilityMid:;0.00021143
BuyPossibilityMid:;0.00016571
ng Short OrderTicket: ;24; Opened @: ;1.2685; Closed @: ;1.2677; Order Open Time: ;1160121599
これは役に立つかもしれない
Aaragornさん、こんにちは。あなたがCTで行っていることは素晴らしいことです。このE.A.はあなたが行っていることと似たようなことを行うと思います。これはティックデータをcsvファイルに収集するものだと思います。
よろしくお願いします。
mrtools
プログラマーの友人がいて、init() deinit()のようなものは忘れて、呼び出すときに次のように変更するように言われました。
handle=FileOpen("cyberia_log.csv",FILE_CSV|FILE_WRITE|FILE_READ,';') と変更するように言われました。
私は少しこれを残しておかなければなりません、私は後でチェックバックします。うまくいけば、dudeworksはそれを動作させることができます。ただ、私はまだこのファイルに関することをどうすればいいのかわかりません。
こんにちは、Aaragorn。あなたがCTでやっていることは素晴らしいことです。このE.A.はあなたがやっていることと似たようなことをすると思います。これはティックデータをcsvファイルに収集するものだと思うのですが、どうでしょうか?
よろしくお願いします。
mrtoolsありがとうございます!面白いですね、動いている他のコードを見ることは助けになります。
無効なハンドルエラー
Aaragorn, このエキスパートは、E.A.が取引するためにデータを集めるか配布する外部ソース(と思う)が必要ですが、残念ながら私は持っていませんし、作成方法も知りません。ですからエキスパートは取引せず、「ファイル読み取り番号の無効なハンドル-1」というエラーメッセージを表示します。
よろしくお願いします。
mrtools
Aaragorn、このエキスパートは、E.A.が取引するためにデータを集めるか配布する外部ソース(と思う)が必要ですが、残念ながら私は持っていませんし、その作成方法も知りませんので、エキスパートは取引せず、「ファイル読み取り番号に無効なハンドル-1」というエラーメッセージを出します。
よろしくお願いします
mrtoolsありがとうございます、励みになります。
私の知る限り、このコードはまずファイルの以前の値をすべて削除し、次にファイルを開いて何かを追加し、そのファイルを閉じます。
その後、書き込んだ内容を読み込むためにファイルを開いています。
私が抱えている課題は、すでに書き込まれたものを削除したり上書きしたりすることなく、ファイルに何かを追加したい場合、言い換えれば、新しいデータをファイルの末尾に追加したい場合です。
どうすればいいのか、例を教えてください。
どなたか、ファイル保存・呼び出し機能の正しい使い方を教えていただけませんか?
このドキュメントを見たのですが...
Opens file for input and/or output. Returns a file handle for the opened file or -1 (if the function fails). To get the detailed error information, call GetLastError() function.
Notes: Files can only be opened in the terminal_directory\experts\files folder (terminal_directory\tester\files if for expert testing) or in its subfolders.
FILE_BIN and FILE_CSV modes cannot be used simultaneously.
If FILE_WRITE does not combine with FILE_READ, a zero-length file will be opened. If even the file containd some data, they will be deleted. If there is a need to add data to an existing file, it must be opened using combination of FILE_READ | FILE_WRITE.
If FILE_READ does not combine with FILE_WRITE, the file will be opened only if it already exists. If the file does not exist, it can be created using the FILE_WRITE mode.
No more than 32 files can be opened within an executable module simultaneously. Handles of files opened in the same module cannot be passed to other modules (libraries).
Parameters:
filename - Filename.
mode - Opening mode. It can be one or combination of values: FILE_BIN, FILE_CSV, FILE_READ, FILE_WRITE.
delimiter - Delimiter character for csv files. By default, the ';' symbol applies.
Sample:
int handle;
handle=FileOpen("my_data.csv",FILE_CSV|FILE_READ,';');
if(handle<1)
{
Print("File my_data.dat not found, the last error is ", GetLastError());
return(false);
}
このドキュメントを見ましたが、使い方を教えるには十分な詳細が書かれていません。もし私がすでに使い方を知っていれば、このリンクは意味をなすのでしょうが、まだ知らないので、あまり洞察を与えてくれません。
http://www.metatrader.info/node/142
Aaragorn、このエキスパートは、E.A.が取引するために、データを集めるか、それを配布する外部ソース(と思う)が必要ですが、残念ながら私は持っていないし、それを作成する方法も知らないので、エキスパートは取引せず、「ファイル読み取り番号に無効なハンドル-1」というエラーメッセージを出します。
よろしくお願いします
mrtoolsコードの断片をありがとうございました。ファイルの作成と読み込みの両方を行っているのがわかります。すでに作成されたファイルの末尾に何かを追加しているようには見えません。多分、それはあるのですが、私が見ていないだけで、もしかしたら、それはやっていなくて、見るべきものは何もないのかもしれません。最後にデータを追加していることがわかるコードの一部を知っていれば、それがどのように行われるかを見ることができるのにと思います。
CTが動作しない
このスレッドを前から後ろまで読んで、解決策を見つけようとしています。
Cyberia Trader1.85g jpy.mq4 version それをロードし、 faceを持っていますが、私は全く注文を持っていない。注文がないため、フォワードテストをするのが本当に難しいです。システムは4日間稼働していますが、まだ注文がありません。
何か手助けがあればありがたいです。
乾杯
Beno