当订单打开时,无法写入文件 - 页 2 1234 新评论 GreenMoney 2013.08.19 22: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())显示分隔符用单引号括起来,但书中(见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()); 编译了,没有出现任何运行时错误,并在文件中产生了以下输出。 William Roeder 2013.08.20 01:43 #12 RaptorUK: 你有";"而不是';'......你收到的错误信息谈到了参数1,那不是文件柄吗? 第一个是一个字符串,第二个是一个int(按要求)。错误提到了p 1。多个问题? [删除] 2013.08.20 02:44 #13 RaptorUK: 对不起,"部分"......你是否收到**** END TICK USDCHF **** 的信息?还是在这之前就结束? 是的,该文件是完整的。 [删除] 2013.08.20 02:49 #14 RaptorUK: 你有";"而不是';'......你收到的错误信息是关于参数1的,那不是文件柄吗? 是的,别人说的是最后一个参数 无效,我不知道为什么。我还是把"; "换成了';',但得到了同样的问题。 [删除] 2013.08.20 02:51 #15 Thirteen: 能否请你详细说明一下你的意思? 虽然文档(见FileOpen())显示分隔符用单引号括起来,但书中(见File Operations)关于单引号的使用是不一致的:一些代码实例显示使用了双引号。 此外,下面的代码。 编译了,没有出现任何运行时错误,并在文件中产生了以下输出。 我尝试了";"和";"得到了同样的问题。 我的代码运行起来,效果很好,文件被创建,每打一次勾,文件就被打开,所有的信息都被写入其中,然后文件被关闭。所有的工作都很好,直到EA打开一个订单,然后文件中没有任何信息被写入。 [删除] 2013.08.20 02:55 #16 WHRoeder: 第一个是一个字符串,第二个是一个int(按要求)。提到的错误是p 1。多个问题? 错误在于文件句柄,句柄一直是1,而且一直在工作,但是当EA打开一个订单时,下一个跳动就会说句柄无效,尽管它又是1,而且在过去的几百个跳动中一直工作。我最后一次尝试,当订单打开时,手柄开始上升,变成2、3、4等。 这是完全相同的代码,我不知道为什么它不保持为1,甚至当它仍然是1时,它仍然给出错误。 [删除] 2013.08.21 03:18 #17 有什么想法吗? Simon Gniadkowski 2013.08.21 07:28 #18 favosys: 有什么想法吗?我看不出你所发布的代码有什么问题。 所以我认为有两个选择。 发布你所有的代码,这样我们就可以自己尝试,并尝试修复它。 创建一个简短的脚本/EA来复制这个问题并发布。 [删除] 2013.08.21 17:06 #19 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); } //+------------------------------------------------------------------+ Simon Gniadkowski 2013.08.21 19:01 #20 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 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
WHRoeder:
最后一个参数无效 -不是一个int
能否请你详细说明一下你的意思?
虽然文档(见FileOpen())显示分隔符用单引号括起来,但书中(见File Operations)关于单引号的使用是不一致的:一些代码实例显示使用了双引号。
此外,下面的代码。
编译了,没有出现任何运行时错误,并在文件中产生了以下输出。
对不起,"部分"......你是否收到**** END TICK USDCHF **** 的信息?还是在这之前就结束?
是的,该文件是完整的。
你有";"而不是';'......你收到的错误信息是关于参数1的,那不是文件柄吗?
是的,别人说的是最后一个参数 无效,我不知道为什么。我还是把"; "换成了';',但得到了同样的问题。
能否请你详细说明一下你的意思?
虽然文档(见FileOpen())显示分隔符用单引号括起来,但书中(见File Operations)关于单引号的使用是不一致的:一些代码实例显示使用了双引号。
此外,下面的代码。
编译了,没有出现任何运行时错误,并在文件中产生了以下输出。
我尝试了";"和";"得到了同样的问题。
我的代码运行起来,效果很好,文件被创建,每打一次勾,文件就被打开,所有的信息都被写入其中,然后文件被关闭。所有的工作都很好,直到EA打开一个订单,然后文件中没有任何信息被写入。
第一个是一个字符串,第二个是一个int(按要求)。提到的错误是p 1。多个问题?
错误在于文件句柄,句柄一直是1,而且一直在工作,但是当EA打开一个订单时,下一个跳动就会说句柄无效,尽管它又是1,而且在过去的几百个跳动中一直工作。我最后一次尝试,当订单打开时,手柄开始上升,变成2、3、4等。
这是完全相同的代码,我不知道为什么它不保持为1,甚至当它仍然是1时,它仍然给出错误。
有什么想法吗?
我看不出你所发布的代码有什么问题。
所以我认为有两个选择。
我看不出你发布的代码有什么问题。
所以我认为有两个选择。
谢谢你,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是一个隐藏的文件夹。
谢谢
代码。
谢谢你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是一个隐藏的文件夹。
谢谢
代码。