注文が開いているときにファイルに書き込むことができない - ページ 2 1234 新しいコメント GreenMoney 2013.08.19 20:31 #11 WHRoeder: Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,";");//File opening Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,";");//File opening 最後の引数が無効です -intではありません どういう意味か、詳しく教えてください。 ドキュメント(FileOpen() 参照)では、デリミタがシングルクォーテーションで囲まれていますが、書籍(ファイル操作 参照)では、シングルクォーテーションの使用に関して一貫性がありません:一部のコード例では、ダブルクォーテーションが使用されています。 さらに、次のようなコードもあります。 int handle=FileOpen("testing.csv", FILE_CSV|FILE_WRITE|FILE_READ, ";"); if(handle > 0) { FileSeek(handle, 0, SEEK_END); FileWrite(handle, "test1", "test2", "test3", "test4"); FileClose(handle); } else Print ("FileOpen failed. Error # ", GetLastError()); はコンパイルされ、実行時エラーはなく、ファイルに次のような出力がありました。 William Roeder 2013.08.19 23:43 #12 RaptorUK: エラーメッセージは、パラメータ1について述べていますが、これはファイルハンドルではないでしょうか? 1は文字列で、2がint(必須)です。複数の問題? 削除済み 2013.08.20 00:44 #13 RaptorUK: すみません、"parts" ......あなたは、**** END TICK USDCHF ****のメッセージを受け取りますか? それともその前に終わりますか? はい、ファイルは完成しています。 削除済み 2013.08.20 00:49 #14 RaptorUK: エラーメッセージにあるパラメータ1はファイルハンドルではないですか? そうです、誰かが最後のパラメータが 無効だと言っていたのです。それでも、私は"; "を';'に変更しましたが、同じ問題が発生しました。 削除済み 2013.08.20 00:51 #15 Thirteen: どういう意味か、詳しく教えてください。 ドキュメント(FileOpen() 参照)では、デリミタがシングルクォーテーションで囲まれていますが、書籍(ファイル操作 参照)では、シングルクォーテーションの使用に関して一貫性がありません:一部のコード例では、ダブルクォーテーションが使用されています。 さらに、次のようなコードもあります。 はコンパイルされ、実行時エラーはなく、ファイルには次のような出力がありました。 試しに「;」や「;」も使ってみましたが、同じ問題が発生しました。 私のコードは、ファイルが作成され、ティックごとにファイルが開かれ、すべての情報が書き込まれ、その後ファイルが閉じられる、素晴らしい動作をします。EA が注文を出すまではすべてうまくいき、その後ファイルには何も書き込まれません。 削除済み 2013.08.20 00:55 #16 WHRoeder: 1つ目は文字列、2つ目はint(必須)です。エラーの内容は、p1です。複数の問題? エラーはファイルハンドルで、ハンドルは常に1で常に動作していますが、EAが注文を開くと、ハンドルが再び1で過去何百ティックも動作しているにもかかわらず、次のティックでハンドルが無効であると表示されます。前回試したときは、注文が開くときにハンドルが上がり始め、2、3、4、などになっていました。 全く同じコードで、なぜ1のままでないのか、1のままでもエラーが出ます。 削除済み 2013.08.21 01:18 #17 何か心当たりはありますか? Simon Gniadkowski 2013.08.21 05:28 #18 favosys: 何かアイデアはありますか?掲載されているコードに問題があるとは思えません。 そこで、2つの選択肢があります。 あなたのコードをすべて投稿してください。 問題を再現する短いスクリプト/EAを作成し、それを投稿する。 削除済み 2013.08.21 15:06 #19 RaptorUK:投稿されたコードに問題があるとは思えません。 そこで、2つの選択肢があります。あなたのコードをすべて投稿してください。 問題を再現する短いスクリプト/EAを作成し、それを投稿する。 RaptorUKさん、ありがとうございます。問題を解決するために、問題を正確に再現するEAをすでに作成しました。基本的にそれは始まり、それはファイルを作成し、各目盛りをカウントしてファイルに書き込みます。つまり、ファイルはティック1、ティック2、などのようなものです。 15回目に注文を出すと、注文情報がファイルに表示され、終了(******)も表示されます。その後、各ティックにティック番号(16、17など)と注文の状態(注文がまだ開かれているかどうか)を書き込むことになっています。15ティック以降は、なぜかEAがファイルに書き込まない。 50ティックで注文をクローズするはずですが、それは重要ではなく、重要なのは注文をオープンしたときにファイルに書き込み続けるということです。 In my Windows 7 machine the files are created in C:\Users\{username}AppDataLocal\VirtualStoreProgram Files (x86)\SIGTrader 4 templatesfiles Appdataは隠しフォルダです。 ありがとうございました。 Code: //+------------------------------------------------------------------+ //| log.mq4 | //| Copyright 2013, MetaQuotes Software Corp. | //| http://www.metaquotes.net | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "http://www.metaquotes.net" extern string Nombre_archivo="log"; extern int Take_Profit=6; extern int Stop_Loss=35; extern int Deslizamiento=4; extern double vol=1; int Handle, Qnt_Symb, ticket, err, abierta = 0; string File_Name, larcor; int cont=1; //+------------------------------------------------------------------+ //| expert initialization function | //+------------------------------------------------------------------+ int init() { //---- File_Name = StringConcatenate(Nombre_archivo, " - ", Symbol(), " - ", TimeToStr(TimeLocal(),TIME_DATE), " - ", TimeHour(TimeLocal()), ".", TimeMinute(TimeLocal()), ".", TimeSeconds(TimeLocal()), ".txt"); Handle=FileOpen(File_Name,FILE_CSV|FILE_WRITE,';');//File opening if(Handle==-1) // File opening fails { Alert("An error while opening the file. ",// Error message "May be the file is busy by the other applictiom"); PlaySound("Bzrrr.wav"); // Sound accompaniment return; // Exir start() } FileClose( Handle ); //---- return(0); } //+------------------------------------------------------------------+ //| expert deinitialization function | //+------------------------------------------------------------------+ int deinit() { //---- //---- return(0); } //+------------------------------------------------------------------+ //| expert start function | //+------------------------------------------------------------------+ int start() { //---- double op, cl; Print("Order open: ", abierta); //Print("File: ", File_Name); Handle=FileOpen(File_Name,FILE_CSV|FILE_READ|FILE_WRITE,';');//File opening Print("Handle: ", Handle); if(Handle==-1) // File opening fails { Alert("An error while opening the file. ",// Error message "May be the file is busy by the other applictiom"); PlaySound("Bzrrr.wav"); // Sound accompaniment return; // Exir start() } FileSeek(Handle, 0, SEEK_END); Qnt_Symb=FileWrite(Handle,"**** INICIANDO TICK PAR ", Symbol(), ": ", TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS), " ****"); Qnt_Symb=FileWrite(Handle,"************************************************************"); Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Este es el tick num: ", cont); if(cont == 15){ op = iOpen(NULL, 0, 0); cl = iClose(NULL, 0, 0); if(op < cl){ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Estamos en LARGO, se abre compra"); ticket = OrderSend(Symbol(),OP_BUY,vol,Ask,Deslizamiento,Ask-Stop_Loss*Point,Ask+Take_Profit*Point); if(ticket == -1){ err = GetLastError(); Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Error No. ", err, " al tratar de abrir la orden"); } else{ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Abierta orden ", ticket, ", hora: ", TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)); abierta = 1; } } else{ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Estamos en CORTO, se abre venta"); ticket = OrderSend(Symbol(),OP_SELL,vol,Bid,Deslizamiento,Bid+Stop_Loss*Point,Bid-Take_Profit*Point); if(ticket == -1){ err = GetLastError(); Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Error No. ", err, " al tratar de abrir la orden"); } else{ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - "," Abierta orden ", ticket, ", hora: ", TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS)); abierta = 1; } } } if((cont > 15) && (cont < 50)){ if(ticket != -1){ if(OrderSelect(ticket, SELECT_BY_TICKET) == true){ datetime horacierre = OrderCloseTime(); if(horacierre == 0){ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Orden ", ticket, " en par ". Symbol(), " sigue abierta."); } else{ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","La orden ", ticket, " se cerro automaticamente a las ", TimeToStr(horacierre,TIME_DATE|TIME_SECONDS)); } } } } if(cont == 50){ if(abierta == 1){ if(larcor == "LARGO"){ if(OrderClose(ticket,OrderLots(),Ask,3)){ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Se cerro la orden ", ticket, " en LARGO"); } else{ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","No se pudo cerrar la orden ", ticket, " en LARGO"); } } else{ if(OrderClose(ticket,OrderLots(),Bid,3)){ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Se cerro la orden en CORTO"); } else{ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","No se pudo cerrar la orden ", ticket, " en CORTO"); } } } } if(cont > 50){ Qnt_Symb=FileWrite(Handle,TimeToStr(TimeLocal(),TIME_DATE|TIME_SECONDS)," - ","Fin de EA"); } Qnt_Symb=FileWrite(Handle,"***************************"); Qnt_Symb=FileWrite(Handle,"**** FIN TICK PAR ", Symbol(), " ****"); FileClose( Handle ); cont++; //---- return(0); } //+------------------------------------------------------------------+ Simon Gniadkowski 2013.08.21 17:01 #20 favosys: RaptorUKさんありがとうございます。問題を解決するために、問題を正確に再現するEAをすでに作っていました。基本的にそれは始まり、それはファイルを作成し、各目盛りをカウントしてファイルに書き込みます。つまり、ファイルはティック1、ティック2、などのようなものです。 15 番目のティックで注文が開かれ、注文情報がファイルに表示され、終了 (******) も表示されます。その後、各ティックにティック番号(16、17など)と注文のステータス(注文がまだ開かれているかどうか)を書き込むことになっています。15ティック以降は、なぜかEAがファイルに書き込まない。 50ティックで注文をクローズするはずですが、それは重要ではなく、重要なのは、注文をオープンしたときにファイルに書き込み続けるということです。 In my Windows 7 machine the files are created in C:\Users\{username}AppDataLocal\VirtualStoreProgram Files (x86)\SIGTrader 4 templatesfiles Appdataは隠しフォルダです。 ありがとうございました。 コードです。 あなたのコードは、私がテストに使用しているブローカーで取引を行うことはできません。それはECN "タイプ "ブローカーです。 TPとSLを0.0に調整し、設定します。 1234 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
WHRoeder:
最後の引数が無効です -intではありません
どういう意味か、詳しく教えてください。
ドキュメント(FileOpen() 参照)では、デリミタがシングルクォーテーションで囲まれていますが、書籍(ファイル操作 参照)では、シングルクォーテーションの使用に関して一貫性がありません:一部のコード例では、ダブルクォーテーションが使用されています。
さらに、次のようなコードもあります。
はコンパイルされ、実行時エラーはなく、ファイルに次のような出力がありました。
すみません、"parts" ......あなたは、**** END TICK USDCHF ****のメッセージを受け取りますか? それともその前に終わりますか?
はい、ファイルは完成しています。
エラーメッセージにあるパラメータ1はファイルハンドルではないですか?
そうです、誰かが最後のパラメータが 無効だと言っていたのです。それでも、私は"; "を';'に変更しましたが、同じ問題が発生しました。
どういう意味か、詳しく教えてください。
ドキュメント(FileOpen() 参照)では、デリミタがシングルクォーテーションで囲まれていますが、書籍(ファイル操作 参照)では、シングルクォーテーションの使用に関して一貫性がありません:一部のコード例では、ダブルクォーテーションが使用されています。
さらに、次のようなコードもあります。
はコンパイルされ、実行時エラーはなく、ファイルには次のような出力がありました。
試しに「;」や「;」も使ってみましたが、同じ問題が発生しました。
私のコードは、ファイルが作成され、ティックごとにファイルが開かれ、すべての情報が書き込まれ、その後ファイルが閉じられる、素晴らしい動作をします。EA が注文を出すまではすべてうまくいき、その後ファイルには何も書き込まれません。
1つ目は文字列、2つ目はint(必須)です。エラーの内容は、p1です。複数の問題?
エラーはファイルハンドルで、ハンドルは常に1で常に動作していますが、EAが注文を開くと、ハンドルが再び1で過去何百ティックも動作しているにもかかわらず、次のティックでハンドルが無効であると表示されます。前回試したときは、注文が開くときにハンドルが上がり始め、2、3、4、などになっていました。
全く同じコードで、なぜ1のままでないのか、1のままでもエラーが出ます。
何かアイデアはありますか?
掲載されているコードに問題があるとは思えません。
そこで、2つの選択肢があります。
投稿されたコードに問題があるとは思えません。
そこで、2つの選択肢があります。
RaptorUKさん、ありがとうございます。問題を解決するために、問題を正確に再現するEAをすでに作成しました。基本的にそれは始まり、それはファイルを作成し、各目盛りをカウントしてファイルに書き込みます。つまり、ファイルはティック1、ティック2、などのようなものです。
15回目に注文を出すと、注文情報がファイルに表示され、終了(******)も表示されます。その後、各ティックにティック番号(16、17など)と注文の状態(注文がまだ開かれているかどうか)を書き込むことになっています。15ティック以降は、なぜかEAがファイルに書き込まない。
50ティックで注文をクローズするはずですが、それは重要ではなく、重要なのは注文をオープンしたときにファイルに書き込み続けるということです。
In my Windows 7 machine the files are created in C:\Users\{username}AppDataLocal\VirtualStoreProgram Files (x86)\SIGTrader 4 templatesfiles
Appdataは隠しフォルダです。
ありがとうございました。
Code:
RaptorUKさんありがとうございます。問題を解決するために、問題を正確に再現するEAをすでに作っていました。基本的にそれは始まり、それはファイルを作成し、各目盛りをカウントしてファイルに書き込みます。つまり、ファイルはティック1、ティック2、などのようなものです。
15 番目のティックで注文が開かれ、注文情報がファイルに表示され、終了 (******) も表示されます。その後、各ティックにティック番号(16、17など)と注文のステータス(注文がまだ開かれているかどうか)を書き込むことになっています。15ティック以降は、なぜかEAがファイルに書き込まない。
50ティックで注文をクローズするはずですが、それは重要ではなく、重要なのは、注文をオープンしたときにファイルに書き込み続けるということです。
In my Windows 7 machine the files are created in C:\Users\{username}AppDataLocal\VirtualStoreProgram Files (x86)\SIGTrader 4 templatesfiles
Appdataは隠しフォルダです。
ありがとうございました。
コードです。