错误、漏洞、问题 - 页 480 1...473474475476477478479480481482483484485486487...3184 新评论 Валерий 2011.08.08 15:47 #4791 papaklass: 现在更新了,并试图再次弄清楚它。我几乎在每条线上都放了打印的东西。我将报告结果。这是与你的插入物一起运行的情况,即止损被固定的时刻。 2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27 欧元兑美元的多头头寸将被关闭止损 2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27-----------------Deal #63 sl 1.33328 2011.08.09 00:41:08 核心 1 2011.01.01.14 01:41:27oldDealsTotal=62 newDealsTotal=63 2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27CSampleExpert::Trade 2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27 订单执行 在1.33328卖出0.15 [#63卖出0.15 EURUSD at 1.33328] 2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 交易执行 [#63 sell 0.15 EURUSD at 1.33328] 2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27 交易#63在1.33328卖出0.15 EURUSD 完成(基于订单#63) 2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27止损 触发 买入 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 卖出 0.15 EURUSD at 1.33328] 2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 EURUSD的多头头寸将被修改跟踪。 Errors, bugs, questions Adding 2 orders in FiboPivotandRSI Валерий 2011.08.08 16:00 #4792 显然,不同的结果是在OnTrade中的处理方式不同,我只寻找交易,只有它们让我感兴趣,另一方面,按照我的理解,你处理所有的事件,对它们进行分类,在这里有什么地方弄错了。 Aleksey Rodionov 2011.08.09 07:34 #4793 我想,期货投注市场也是一个演示?从MMVB那里拿了一个真正的,批次不一致的。 Rashid Umarov 2011.08.09 07:37 #4794 papaklass: 我下的是有效期为1小时的挂单。一小时后,未被激活的订单将在订单到期前关闭。如果几个订单同时被关闭,而在关闭之前,HistoryOrdersTotal()函数有一个非零值,那么它就会失去一些订单。例如,在关闭8个订单之前,该函数的数值为4,但在关闭之后,它的数值为10。两个订单丢失。你说 "订单丢失 "是什么意思?应该记住的是,进入OnTrade()的信息可能携带不止一个交易事件的信息。此外,如果同时发送几条信息,在处理第一条信息时,历史缓存可能已经发生了变化,你可能会有一种 "丢失事件 "的感觉。 请阅读文章MetaTrader 5中的交易事件。总结 MetaTrader 5交易平台中的所有操作都是异步的,对交易账户中的所有变化发送消息是相互独立的,所以不要试图按照 "一个请求-一个交易事件 "的规则来追踪一个事件。如果你想确定交易事件发生后到底发生了什么变化,你需要分析处理程序OnTrade每次调用时的所有交易、头寸和订单,并将它们与事件出现前的状态进行比较。 Rashid Umarov 2011.08.09 08:23 #4795 papaklass: 在关闭订单之前,我特别要求查看HistoryOrdersTotal()的值,它等于4。在关闭8个订单后,HistoryOrdersTotal()的值应该等于12(4+8),但它等于10。我附上了一个日志文件,我们可以在其中不止一次地看到类似的情况。我还附上了专家顾问,通过它可以得到这个结果。自己去做,你会看到一切。试着改变功能,会发生什么?void OnTrade(){ //--- HistorySelect(dayStart,TimeTradeServer()); Print(" ",__FUNCTION__," : historyOrdersTotal = ",HistoryOrdersTotal()," ",TimeTradeServer()); } Andrei 2011.08.09 10:05 #4796 测试员运行的HTML报告并不总是保存在文件中? Alexey Da 2011.08.09 10:19 #4797 zigan: 测试员运行的HTML报告并不总是被保存到文件中!更准确地描述一下。在什么情况下。 Andrei 2011.08.09 10:42 #4798 alexvd:更准确地描述一下。在什么情况下。很少,大约在20-30次测试者运行中出现一次 - 打开 "结果 "标签点击保存XML报告--我得到了报告文件,一切都很好!点击保存HTML报告--保存文件的窗口弹出,在空的进度条上挂了一会儿(短暂的),然后进度条迅速填满,窗口关闭......但没有创建任何报告文件!我无法说明这种情况究竟何时发生的模式。 Валерий 2011.08.09 13:06 #4799 Rosh:试着改变功能,会发生什么? 我不认为这有什么用。OnTrade,作为一个原则问题,不能像papaklass 那样工作。关键是"你需要分析每次调用OnTrade处理程序时的所有交易、头寸和订单,并与它出现之前的状态进行比较" 。 在 ,有挂单的例子,这只适用于历史上的订单。 为了避免丢失订单,我将这样修改代码。引入一个全局变量int oldHistoryOrders; 在Ontrade中,类似这样的内容。//--------------------------ТОРГОВЫЕ СОБЫТИЯ-------------------------------------------------------------+ void OnTrade(){ //--- Print(__FUNCTION__); HistorySelect(0,TimeCurrent()+1); int newHistoryOrders=HistoryOrdersTotal(); if(oldHistoryOrders==newHistoryOrders) return; Print("oldHistoryOrders=",oldHistoryOrders," newHistoryOrders=",newHistoryOrders); for(int i=oldHistoryOrders;i<newHistoryOrders;i++) Print("Order ",i," #",HistoryOrderGetTicket(i)); oldHistoryOrders=newHistoryOrders; // Print(" ",__FUNCTION__," : historyOrdersTotal = ",newHistoryOrders," ",dayStart); } 附加的文件: TestHistoryOrders.mq5 11 kb Валерий 2011.08.09 21:00 #4800 papaklass: 这不是你描述的我使用OnTrade()的工作方式。在我所附的代码中,我已经删除了所有的东西,只留下了突出函数的错误的部分。我的EA中几乎没有循环。该EA在单个tick上处理单个符号。因此,我不需要循环。我在12点内处理所有的符号。 PS:OnTrade()通知我一个交易事件。 而什么事件发生是由我的函数定义的,没有循环。 好吧,好吧,我只是指你的例子,据说证明了OnTrade功能造成的订单损失。OnTrade的工作方式是异步的,而不是按ticks计算,所以它不关心你在一个tick中处理多少个符号。你有一堆空单同时过期,所以你不能不采取变通的办法。我已经修改了你的代码,以显示OnTrade没有错过任何东西。我甚至在测试器中运行它,一切似乎都到位了。打印机从OnTrade打印的所有被删除的订单 的代码都存在于日志中。你试过我的版本吗? Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 1...473474475476477478479480481482483484485486487...3184 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
现在更新了,并试图再次弄清楚它。我几乎在每条线上都放了打印的东西。我将报告结果。
这是与你的插入物一起运行的情况,即止损被固定的时刻。
2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27 欧元兑美元的多头头寸将被关闭止损2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27-----------------Deal #63 sl 1.33328
2011.08.09 00:41:08 核心 1 2011.01.01.14 01:41:27oldDealsTotal=62 newDealsTotal=63
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27CSampleExpert::Trade
2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27 订单执行 在1.33328卖出0.15 [#63卖出0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27 交易执行 [#63 sell 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 核心 1 2011.01.14 01:41:27 交易#63在1.33328卖出0.15 EURUSD 完成(基于订单#63)
2011.08.09 00:41:08 Core 1 2011.01.14 01:41:27止损 触发 买入 0.15 EURUSD 1.32127 sl: 1.33328 tp: 1.35139 [#63 卖出 0.15 EURUSD at 1.33328]
2011.08.09 00:41:08 Core 1 2011.01.13 18:32:00 EURUSD的多头头寸将被修改跟踪。
我下的是有效期为1小时的挂单。一小时后,未被激活的订单将在订单到期前关闭。如果几个订单同时被关闭,而在关闭之前,HistoryOrdersTotal()函数有一个非零值,那么它就会失去一些订单。例如,在关闭8个订单之前,该函数的数值为4,但在关闭之后,它的数值为10。两个订单丢失。
你说 "订单丢失 "是什么意思?应该记住的是,进入OnTrade()的信息可能携带不止一个交易事件的信息。此外,如果同时发送几条信息,在处理第一条信息时,历史缓存可能已经发生了变化,你可能会有一种 "丢失事件 "的感觉。
请阅读文章MetaTrader 5中的交易事件。
总结
MetaTrader 5交易平台中的所有操作都是异步的,对交易账户中的所有变化发送消息是相互独立的,所以不要试图按照 "一个请求-一个交易事件 "的规则来追踪一个事件。如果你想确定交易事件发生后到底发生了什么变化,你需要分析处理程序OnTrade每次调用时的所有交易、头寸和订单,并将它们与事件出现前的状态进行比较。在关闭订单之前,我特别要求查看HistoryOrdersTotal()的值,它等于4。在关闭8个订单后,HistoryOrdersTotal()的值应该等于12(4+8),但它等于10。我附上了一个日志文件,我们可以在其中不止一次地看到类似的情况。我还附上了专家顾问,通过它可以得到这个结果。自己去做,你会看到一切。
试着改变功能,会发生什么?
测试员运行的HTML报告并不总是被保存到文件中!
更准确地描述一下。在什么情况下。
更准确地描述一下。在什么情况下。
很少,大约在20-30次测试者运行中出现一次 - 打开 "结果 "标签
点击保存XML报告--我得到了报告文件,一切都很好!
点击保存HTML报告--保存文件的窗口弹出,在空的进度条上挂了一会儿(短暂的),然后进度条迅速填满,窗口关闭......但没有创建任何报告文件!
我无法说明这种情况究竟何时发生的模式。
试着改变功能,会发生什么?
关键是"你需要分析每次调用OnTrade处理程序时的所有交易、头寸和订单,并与它出现之前的状态进行比较" 。 在 ,有挂单的例子,这只适用于历史上的订单。 为了避免丢失订单,我将这样修改代码。
引入一个全局变量int oldHistoryOrders; 在Ontrade中,类似这样的内容。
这不是你描述的我使用OnTrade()的工作方式。在我所附的代码中,我已经删除了所有的东西,只留下了突出函数的错误的部分。我的EA中几乎没有循环。该EA在单个tick上处理单个符号。因此,我不需要循环。我在12点内处理所有的符号。
PS:OnTrade()通知我一个交易事件。 而什么事件发生是由我的函数定义的,没有循环。