当订单打开时,无法写入文件 - 页 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())显示分隔符用单引号括起来,但书中(见File Operations)关于单引号的使用是不一致的:一些代码实例显示使用了双引号。

此外,下面的代码。

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,那不是文件柄吗?
第一个是一个字符串,第二个是一个int(按要求)。错误提到了p 1。多个问题?
 
RaptorUK:
对不起,"部分"......你是否收到**** END TICK USDCHF **** 的信息?还是在这之前就结束?


是的,该文件是完整的。
 
RaptorUK:

你有";"而不是';'......你收到的错误信息是关于参数1的,那不是文件柄吗?

是的,别人说的是最后一个参数 无效,我不知道为什么。我还是把"; "换成了';',但得到了同样的问题。
 
Thirteen:

能否请你详细说明一下你的意思?

虽然文档(见FileOpen())显示分隔符用单引号括起来,但书中(见File Operations)关于单引号的使用是不一致的:一些代码实例显示使用了双引号。

此外,下面的代码。

编译了,没有出现任何运行时错误,并在文件中产生了以下输出。



我尝试了";"和";"得到了同样的问题。

我的代码运行起来,效果很好,文件被创建,每打一次勾,文件就被打开,所有的信息都被写入其中,然后文件被关闭。所有的工作都很好,直到EA打开一个订单,然后文件中没有任何信息被写入。

 
WHRoeder:
第一个是一个字符串,第二个是一个int(按要求)。提到的错误是p 1。多个问题?


错误在于文件句柄,句柄一直是1,而且一直在工作,但是当EA打开一个订单时,下一个跳动就会说句柄无效,尽管它又是1,而且在过去的几百个跳动中一直工作。我最后一次尝试,当订单打开时,手柄开始上升,变成2、3、4等。

这是完全相同的代码,我不知道为什么它不保持为1,甚至当它仍然是1时,它仍然给出错误。

 
有什么想法吗?
 
favosys:
有什么想法吗?

我看不出你所发布的代码有什么问题。

所以我认为有两个选择。

  • 发布你所有的代码,这样我们就可以自己尝试,并尝试修复它。
  • 创建一个简短的脚本/EA来复制这个问题并发布。

 
RaptorUK:

我看不出你发布的代码有什么问题。

所以我认为有两个选择。

  • 发布你所有的代码,这样我们就可以自己尝试,并尝试修复它。
  • 创建一个简短的脚本/EA来复制这个问题并发布。


谢谢你,RaptorUK,我已经创建了一个EA,完全复制了这个问题,试图解决这个问题。基本上,它开始,它创建了一个文件,它在文件上写下每一个刻度,计算刻度。所以该文件就像tick 1,tick 2,等等。

在第15点时,它打开了一个订单,订单信息出现在文件中,结束(******)也出现了。此后,它应该在每一个点上写下点号(16,17,等等)和订单的状态,也就是说,如果订单仍在打开,或没有打开。由于某些原因,在15点之后,EA并没有在文件中写入。

在第50点时,它应该关闭订单,但这并不重要,重要的是它在打开订单时一直在文件上写。

在我的Windows 7机器上,文件是在C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files创建的。

Appdata是一个隐藏的文件夹。

谢谢

代码。

//+------------------------------------------------------------------+
//|                                                          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点时,它应该关闭订单,但这并不重要,重要的是它在打开订单时一直在文件上写。

在我的Windows 7机器上,文件是在C:\Users\{username}\AppData\Local\VirtualStore\Program Files (x86)\SIGTrader 4\experts\files创建的。

Appdata是一个隐藏的文件夹。

谢谢

代码。

你的代码不会在我用来测试的经纪商那里进行交易,它是一个ECN "类型 "的经纪商。 我将调整并设置TP和SL为0.0