//you are looking for a word in a number.... twice... It's like asking how many ounces are in a foot. Wrong datatype.//Change your ticket number to a string.string ticketString=IntegerToString(OrderTicket());
//now your ticket number is a string.
mfilename = StringSubstr(ticketString,StringLen(ticketString)-7,7) + ".DAT";
//now you are asking for the substring and length of a string instead of an integer.
fhandle=FileOpen(mfilename, FILE_BIN|FILE_READ);
if(fhandle == -1)
//if you are getting an INVALID HANDLE that is -1 you could also just say <0 instead of <=0 this may be why it only fails some times.
{ Alert( "File:", mfilename, " not found, the last error is: ", GetLastError());
filewriting(mfilename); }
if(fhandle>0)
FileClose(fhandle);
这是打开文件和关闭文件的部分。
我使用标准的MQL4文件函数,而不是DLL调用。
你能不能添加以下内容,并汇报一下输出情况。
您是否确认该文件存在于正确的 目录中? 它不再应该在experts\files..它必须在MQL4\Files 中,您可以通过点击File > Open data Folder 在MT4中找到正确的MQL4文件夹。
Orderticket 是一个int,StringLen 期望是一个字符串。
因此,如果数字的数量<7(如在测试器中),则调用失败。 >7的前导数字被删除?
尝试IntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -- 0012345.DAT
你能添加以下内容并报告输出情况吗?
你是否确认文件存在于正确的 目录中? 它不再应该在experts/files..它必须在MQL4\Files 中,您可以通过点击文件>打开数据文件夹,在MT4中找到正确的MQL4文件夹。
你能添加以下内容并报告输出结果吗 ......
您是否确认该文件存在于正确的 目录中? 它不再应该在experts\files..它必须在MQL4\Files 中,您可以通过点击文件>打开数据文件夹 在MT4中找到正确的MQL4文件夹。
亲爱的RaptorUK。
我在此附上打印语句后的日志文件。
我知道文件夹结构在Build 610中被改变了。但后来,终端客户程序应该自动调整,因为我使用的是默认的文件夹。
谢谢你的帮助。
Orderticket 是一个int,StringLen 期望是一个字符串。
因此,如果数字的数量<7(如在测试器中),则调用失败。 >7的前导数字被删除?
尝试IntegerToString( OrderTicket(), 7, '0') + ".DAT" // 12345 -- 0012345.DAT
亲爱的WHRoder。
我尝试了你的建议,但它仍然给我同样的错误代码。5004.你指出了一个很好的信息,即orderticket返回int。但是,旧的客户终端程序(build 580 something)并没有返回任何编译错误或运行时错误。 正如我之前提到的,这个错误代码5004似乎根本不影响我的EA性能。我的EA仍然可以在正确的条件下开仓和平仓。
我使用的是默认目录,我没有指定具体的目录。我可以看到文件在那里,但它仍然无法打开它们。更加令人困惑的是,它并不总是失败。大多数时候,它都能成功打开文件。我已经添加了另一个条件来测试它是否成功打开文件。成功率大约是10:1,其中1是指文件打开失败。
谢谢你的帮助。
你使用的是什么版本
也许是UAC的问题
正如WHRoeder所说的那样......如果你使用的是测试器,而它没有使用至少包含7位数字的票据号码,那么你就要求它寻找从6减7(ticketString-7)或-1位置开始的子串,这将使它落空。你还提到了 "默认 "文件夹。
默认 "文件夹已经和以前不同了。我不得不假设,当你说'默认'时,你是在说Mql4/files的新'默认'文件夹......而不是在旧的experts/files。
确保你采纳了上面的建议,使用文件>打开数据文件夹,并查看你的平台所使用的实际位置。如果你使用UAC,它可能在用户/appdata中,正如有人建议的那样......这很好,只要你知道它并在需要时相应地调整你的路径。
如果交易正常的话,显然这部分代码只是为了记录和 记录,而不是策略的一个组成部分。希望这些建议能帮助你实现无误运行。欢迎来到论坛!
PipPip...Jimdandy
你使用的是什么版本
也许是UAC的问题
我目前使用的客户终端是Build 610。
正如WHRoeder所说的那样......如果你使用的是测试器,而它没有使用至少包含7位数字的票据号码,那么你就要求它寻找从6减7(ticketString-7)或-1位置开始的子串,这将使它落空。你还提到了 "默认 "文件夹。
默认 "文件夹已经和以前不同了。我不得不假设,当你说'默认'时,你是在说Mql4/files的新'默认'文件夹......而不是在旧的experts/files。
确保你采纳了上面的建议,使用文件>打开数据文件夹,并查看你的平台所使用的实际位置。如果你使用UAC,它可能在用户/appdata中,正如有人建议的那样......这很好,只要你知道它并在需要时相应地调整你的路径。
如果交易正常的话,显然这部分代码只是为了记录和记录,而不是策略的一个组成部分。希望这些建议能帮助你实现无误运行。欢迎来到论坛!
PipPip...Jimdandy
正如我给WHRoeder的回复,我已经按照他的建议做了,但它仍然给我同样的错误代码 5004。
对于默认文件夹,我知道文件夹结构在第610版中有所改变。我已经重新编译了我的EA,我从来没有指定我自己的文件夹。因此,我认为EA会在客户终端的默认文件夹中创建并寻找DAT文件。而且证实了大多数时候,FILEOPEN是成功的。只有10%的相同语句失败。(我正在使用简单的if语句来测试它是否成功)。
干杯。
亲爱的RaptorUK。
这里我附上了打印语句后的日志文件。
我知道文件夹结构在build 610中被改变了。但这样一来,终端客户程序应该会自动调整,因为我使用的是默认文件夹。
谢谢你的帮助。
没有附上任何文件......。
你是否确认你要读取的文件确实存在? 请在正确的文件夹中查找并检查 ...... 还有一件事,为什么你有一个叫filewriting() 的函数 来读取 文件?