注文が開いているときにファイルに書き込むことができない - ページ 2

 

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());

はコンパイルされ、実行時エラーはなく、ファイルに次のような出力がありました。

ファイルテスト#1

 
RaptorUK: エラーメッセージは、パラメータ1について述べていますが、これはファイルハンドルではないでしょうか?
1は文字列で、2がint(必須)です。複数の問題?
 
RaptorUK:
すみません、"parts" ......あなたは、**** END TICK USDCHF ****のメッセージを受け取りますか? それともその前に終わりますか?


はい、ファイルは完成しています。
 
RaptorUK:

エラーメッセージにあるパラメータ1はファイルハンドルではないですか?

そうです、誰かが最後のパラメータが 無効だと言っていたのです。それでも、私は"; "を';'に変更しましたが、同じ問題が発生しました。
 
Thirteen:

どういう意味か、詳しく教えてください。

ドキュメント(FileOpen() 参照)では、デリミタがシングルクォーテーションで囲まれていますが、書籍(ファイル操作 参照)では、シングルクォーテーションの使用に関して一貫性がありません:一部のコード例では、ダブルクォーテーションが使用されています。

さらに、次のようなコードもあります。

はコンパイルされ、実行時エラーはなく、ファイルには次のような出力がありました。



試しに「;」や「;」も使ってみましたが、同じ問題が発生しました。

私のコードは、ファイルが作成され、ティックごとにファイルが開かれ、すべての情報が書き込まれ、その後ファイルが閉じられる、素晴らしい動作をします。EA が注文を出すまではすべてうまくいき、その後ファイルには何も書き込まれません。

 
WHRoeder:
1つ目は文字列、2つ目はint(必須)です。エラーの内容は、p1です。複数の問題?


エラーはファイルハンドルで、ハンドルは常に1で常に動作していますが、EAが注文を開くと、ハンドルが再び1で過去何百ティックも動作しているにもかかわらず、次のティックでハンドルが無効であると表示されます。前回試したときは、注文が開くときにハンドルが上がり始め、2、3、4、などになっていました。

全く同じコードで、なぜ1のままでないのか、1のままでもエラーが出ます。

 
何か心当たりはありますか?
 
favosys:
何かアイデアはありますか?

掲載されているコードに問題があるとは思えません。

そこで、2つの選択肢があります。

  • あなたのコードをすべて投稿してください。
  • 問題を再現する短いスクリプト/EAを作成し、それを投稿する。

 
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);
  }
//+------------------------------------------------------------------+
 
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に調整し、設定します。