MetaTrader 5策略测试器:缺陷,缺陷,改进建议 - 页 42 1...353637383940414243444546474849...84 新评论 Sergey Chalyshev 2019.12.18 22:53 #411 fxsaber: 在任何角色上都有播放的说明。任何问题--只要运行它。 不,我宁愿是你,当我弄清楚你的代码时,我就会忘记我为什么要开始了 )) 你能在股票期货上测试吗,例如Si?你想要一个用于测试的交换账户吗? Dmitiry Ananiev 2019.12.18 23:28 #412 Sergey Chalyshev:不,我更喜欢你,等我搞清楚你的代码,我就会忘记我为什么要开始了))你能在一个交易所的期货上进行测试吗,比如说Si ?你想要一个用于测试的交换账户吗? 该交易所存在着流动性低和订单排队的问题。因此,莫斯科交易所 的测试仪是不正确的。在外汇市场上,几乎没有这种小手的现象。虽然有时确实会出现这种情况。 fxsaber 2019.12.18 23:30 #413 Sergey Chalyshev: 要我给你一个股票账户来测试吗? 是的。但我应该马上指出,在测试器中任何以最后价格执行的行为都是一个错误。 fxsaber 2019.12.18 23:34 #414 检查测试器的代码是否正确。 #include <MT4Orders.mqh> // https://www.mql5.com/ru/code/16006 #define Bid SymbolInfoDouble(_Symbol, SYMBOL_BID) #define Ask SymbolInfoDouble(_Symbol, SYMBOL_ASK) void CloseAll() { for (int i = OrdersTotal() - 1; i >= 0; i--) if (OrderSelect(i, SELECT_BY_POS)) { if (OrderType() <= OP_SELL) OrderClose(OrderTicket(), OrderLots(), OrderClosePrice(), 0); else OrderDelete(OrderTicket()); } } bool Check1() { bool Res = true; Res &= OrderSend(_Symbol, OP_BUY, 1, Ask, 0, Bid, 0) && !OrdersTotal(); CloseAll(); Res &= OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, Bid) && !OrdersTotal(); CloseAll(); Res &= OrderSend(_Symbol, OP_SELL, 1, Bid, 0, Ask, 0) && !OrdersTotal(); CloseAll(); Res &= OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, Ask) && !OrdersTotal(); CloseAll(); return(Res); } bool Check2() { bool Res = true; Res &= OrderModify(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), Ask, Bid, 0, 0) && !OrdersTotal(); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_BUY, 1, Ask, 0, 0, 0), Ask, 0, Bid, 0) && !OrdersTotal(); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0), Bid, Ask, 0, 0) && !OrdersTotal(); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_SELL, 1, Bid, 0, 0, 0), Bid, 0, Ask , 0) && !OrdersTotal(); CloseAll(); return(Res); } bool Check3() { bool Res = true; Res &= OrderSelect(OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask, 0, 0, 0), SELECT_BY_TICKET) && (OrderType() <= OP_SELL); CloseAll(); Res &= OrderSelect(OrderSend(_Symbol, OP_SELLLIMIT, 1, Bid, 0, 0, 0), SELECT_BY_TICKET) && (OrderType() <= OP_SELL); CloseAll(); Res &= OrderSelect(OrderSend(_Symbol, OP_BUYSTOP, 1, Ask, 0, 0, 0), SELECT_BY_TICKET) && (OrderType() <= OP_SELL); CloseAll(); Res &= OrderSelect(OrderSend(_Symbol, OP_SELLSTOP, 1, Bid, 0, 0, 0), SELECT_BY_TICKET) && (OrderType() <= OP_SELL); CloseAll(); return(Res); } bool Check4() { bool Res = true; const double TickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); Res &= OrderModify(OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - TickSize, 0, 0, 0), Ask, 0, 0, 0) && (OrdersTotal() == 1) && (OrderSelect(0, SELECT_BY_POS)) && (OrderType() <= OP_SELL); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_BUYSTOP, 1, Ask + TickSize, 0, 0, 0), Ask, 0, 0, 0) && (OrdersTotal() == 1) && (OrderSelect(0, SELECT_BY_POS)) && (OrderType() <= OP_SELL); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_SELLLIMIT, 1, Bid + TickSize, 0, 0, 0), Bid, 0, 0, 0) && (OrdersTotal() == 1) && (OrderSelect(0, SELECT_BY_POS)) && (OrderType() <= OP_SELL); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_SELLSTOP, 1, Bid - TickSize, 0, 0, 0), Bid, 0, 0, 0) && (OrdersTotal() == 1) && (OrderSelect(0, SELECT_BY_POS)) && (OrderType() <= OP_SELL); CloseAll(); return(Res); } bool Check5() { bool Res = true; const double TickSize = SymbolInfoDouble(_Symbol, SYMBOL_TRADE_TICK_SIZE); Res &= OrderModify(OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask - TickSize, 0, 0, 0), Ask, Bid, 0, 0) && !OrdersTotal(); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_BUYSTOP, 1, Ask + TickSize, 0, 0, 0), Ask, Bid, 0, 0) && !OrdersTotal(); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_SELLLIMIT, 1, Bid + TickSize, 0, 0, 0), Bid, Ask, 0, 0) && !OrdersTotal(); CloseAll(); Res &= OrderModify(OrderSend(_Symbol, OP_SELLSTOP, 1, Bid - TickSize, 0, 0, 0), Bid, Ask, 0, 0) && !OrdersTotal(); CloseAll(); return(Res); } bool Check6() { bool Res = true; Res &= OrderSend(_Symbol, OP_BUYLIMIT, 1, Ask, 0, Bid, 0) && !OrdersTotal(); CloseAll(); Res &= OrderSend(_Symbol, OP_BUYSTOP, 1, Ask, 0, Bid, 0) && !OrdersTotal(); CloseAll(); Res &= OrderSend(_Symbol, OP_SELLLIMIT, 1, Bid, 0, Ask, 0) && !OrdersTotal(); CloseAll(); Res &= OrderSend(_Symbol, OP_SELLSTOP, 1, Bid, 0, Ask, 0) && !OrdersTotal(); CloseAll(); return(Res); } #define TOSTRING(A) #A + " = " + (string)(A) + "\n" void OnTick() { Print(TOSTRING(Check1()) + TOSTRING(Check2()) + TOSTRING(Check3()) + TOSTRING(Check4()) + TOSTRING(Check5()) + TOSTRING(Check6())); ExpertRemove(); } 如果工作正常,应该有 2019.12.19 00:27:59.263 2019.12.13 00:00:00 Check1() = true 2019.12.19 00:27:59.263 2019.12.13 00:00:00 Check2() = true 2019.12.19 00:27:59.263 2019.12.13 00:00:00 Check3() = true 2019.12.19 00:27:59.263 2019.12.13 00:00:00 Check4() = true 2019.12.19 00:27:59.263 2019.12.13 00:00:00 Check5() = true 2019.12.19 00:27:59.263 2019.12.13 00:00:00 Check6() = true Sergey Chalyshev 2019.12.18 23:51 #415 fxsaber: 去吧。但我应该直接指出,在测试器中以最后价格执行的任何行动都是一个错误。 我已经亲自写信给你了。 自然,最后的价格执行是没有意义的(胡说八道)。 fxsaber 2019.12.19 00:34 #416 Sergey Chalyshev: 你能在股票期货上测试吗,例如Si? 更好。在真正的虱子上,但TP是在鳍上执行的。 Sergey Chalyshev 2019.12.19 00:42 #417 fxsaber: 不太好。 不,你的测试器出了问题。你如何对所有的蜱虫或真正的蜱虫进行测试? 在Si上试试。 9点45分,市场仍然关闭,任何东西都可以在那个时候出现,你必须在10点01分之后打开。 fxsaber 2019.12.19 01:07 #418 Sergey Chalyshev: 如果一个交易所符号和一个净值账户,才会接受当前价格 的限制。 不幸的是,所有的品牌(包括TP)都是在翻板上执行的。因此,最好不要在测试器中使用市场。 Alexey Kravchenko 2019.12.23 04:20 #419 从测试者那里获得所有加载的棒子呢?请回答我。或者解释为什么需要这种人为的限制。 Andrey Khatimlianskii 2019.12.23 04:32 #420 Alexey Kravchenko: 那么,从测试者那里获得所有加载的棒子呢?请回答我。或者解释为什么需要这种人为的限制。 为了加快测试99%的EA的速度。 对于剩下的1%,可以插入一个拐杖。 1...353637383940414243444546474849...84 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
在任何角色上都有播放的说明。任何问题--只要运行它。
不,我宁愿是你,当我弄清楚你的代码时,我就会忘记我为什么要开始了 ))
你能在股票期货上测试吗,例如Si?你想要一个用于测试的交换账户吗?
不,我更喜欢你,等我搞清楚你的代码,我就会忘记我为什么要开始了))
你能在一个交易所的期货上进行测试吗,比如说Si ?你想要一个用于测试的交换账户吗?
该交易所存在着流动性低和订单排队的问题。因此,莫斯科交易所 的测试仪是不正确的。在外汇市场上,几乎没有这种小手的现象。虽然有时确实会出现这种情况。
要我给你一个股票账户来测试吗?
是的。但我应该马上指出,在测试器中任何以最后价格执行的行为都是一个错误。
如果工作正常,应该有
去吧。但我应该直接指出,在测试器中以最后价格执行的任何行动都是一个错误。
我已经亲自写信给你了。
自然,最后的价格执行是没有意义的(胡说八道)。
你能在股票期货上测试吗,例如Si?
更好。在真正的虱子上,但TP是在鳍上执行的。
不太好。
不,你的测试器出了问题。你如何对所有的蜱虫或真正的蜱虫进行测试?
在Si上试试。
9点45分,市场仍然关闭,任何东西都可以在那个时候出现,你必须在10点01分之后打开。如果一个交易所符号和一个净值账户,才会接受当前价格 的限制。
不幸的是,所有的品牌(包括TP)都是在翻板上执行的。因此,最好不要在测试器中使用市场。
那么,从测试者那里获得所有加载的棒子呢?请回答我。或者解释为什么需要这种人为的限制。
为了加快测试99%的EA的速度。
对于剩下的1%,可以插入一个拐杖。