mql5语言的特点、微妙之处以及技巧 - 页 128 1...121122123124125126127128129130131132133134135...247 新评论 fxsaber 2019.02.19 22:28 #1271 这对我来说是一个巨大的启示// Скрипт показыает, что цены открытия/закрытия не просто не нормализованы, но и разные при схожем значении #property strict #include <MT4Orders.mqh> // Заполнение массива ценами открытия/закрытия int FillPrices( double &Prices[] ) { const int Total = OrdersHistoryTotal(); ArrayResize(Prices, Total << 1); int Amount = 0; for (int i = 0; i < Total; i++) if (OrderSelect(i, SELECT_BY_POS, MODE_HISTORY)) { Prices[Amount++] = OrderOpenPrice(); Prices[Amount++] = OrderClosePrice(); } return(ArrayResize(Prices, Amount)); } // true - нормализованная разность равна нуля, сама разность - отлична от нуля. bool IsBadPrices( const double &Price1, const double &Price2 ) { return(!NormalizeDouble(Price1 - Price2, 5) && (Price1 != Price2)); } // Находит цены открытия/закрытия, которые // с нормализацией равны друг другу, // без нормализации - не равны. int CheckPrices( const double &Prices[] ) { int Res = 0; const int Size = ArraySize(Prices); for (int i = 0; i < Size - 1; i++) { const double Price = Prices[i]; for (int j = i + 1; j < Size; j++) if (IsBadPrices(Price, Prices[j])) { Print((string)Price + " - " + (string)Prices[j] + " = " + (string)(Price - Prices[j])); // Распечатываем найденые цены Res++; } } return(Res); } void OnStart() { double Prices[]; FillPrices(Prices); Print(CheckPrices(Prices)); // Количество "несовпадающих" пар цен. } 结果 1.95562 - 1.95562 = -2.220446049250313 e-016 1.95562 - 1.95562 = -2.220446049250313 e-016 1.71599 - 1.71599 = -2.220446049250313 e-016 1.71599 - 1.71599 = -2.220446049250313 e-016 1.58028 - 1.58028 = -2.220446049250313 e-016 14.806 - 14.806 = -1.77635683940025 e-015 1.95521 - 1.95521 = -2.220446049250313 e-016 1.95521 - 1.95521 = -2.220446049250313 e-016 8 在MT4上运行同样的脚本甚至更令人沮丧--那里有一个更大的故事。让我解释一下。 在这里你可以看到,该仓位是在同一价格开仓和平仓的。但在没有归一化的情况下,它们的价格是不平等的! ZZY检查了测试器--似乎没有这种讨厌的东西。 Alexey Navoykov 2019.02.20 01:42 #1272 Ilya Malev:我一定是打错了。如果是这样,你应该写信给技术支持,让它得到纠正(改成中等)。 否则,它就是一个测试者的 花絮。 fxsaber 2019.02.20 07:26 #1273 fxsaber:检查了测试器--似乎没有任何这种恶心的东西。在所有的测试器模式中,除了真实的ticks之外,价格都没有被规范化! // Советник выводит цены, которые не нормализованы #property strict // true - нормализованная цена не равна оригинальной bool IsBadPrice( const double &Price ) { return(NormalizeDouble(Price, 5) != Price); } #define TOSTRING(A) #A + " = " + (string)(A) + " " //const bool Init = EventSetMillisecondTimer(50); //void OnTimer() void OnTick() { for (int i = SymbolsTotal(true) - 1; i >= 0; i--) { const string Symb = SymbolName(i, true); const double PriceBid = SymbolInfoDouble(Symb, SYMBOL_BID); const double PriceAsk = SymbolInfoDouble(Symb, SYMBOL_ASK); if (IsBadPrice(PriceBid)) Print(TOSTRING(Symb) + TOSTRING(PriceBid) + TOSTRING(NormalizeDouble(PriceBid, 5) - PriceBid)); if (IsBadPrice(PriceAsk)) Print(TOSTRING(Symb) + TOSTRING(PriceAsk) + TOSTRING(NormalizeDouble(PriceAsk, 5) - PriceAsk)); } } 结果 2019.02.18 23:57:24 Symb = EURUSD PriceBid = 1.13088 NormalizeDouble(PriceBid,5)-PriceBid = -2.220446049250313 e-016 2019.02.18 23:57:26 Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble(PriceAsk,5)-PriceAsk = -2.220446049250313 e-016 2019.02.18 23:57:27 Symb = EURUSD PriceBid = 1.13085 NormalizeDouble(PriceBid,5)-PriceBid = -2.220446049250313 e-016 2019.02.18 23:58:18 Symb = EURUSD PriceAsk = 1.13112 NormalizeDouble(PriceAsk,5)-PriceAsk = -2.220446049250313 e-016 说得温和一点,这是测试器的一个错误。 fxsaber 2019.02.20 14:05 #1274 比方说,当你试图登录你的账户时,你无法连接到交易服务器。 或者,例如,你的模拟账户已经过期,登录尝试给出 "无效账户"。 尽管有这样的失败,但所有的交易历史都是可用的,即使它没有在终端中显示出来! Aleksey Vyazmikin 2019.02.20 14:31 #1275 fxsaber:比方说,当你试图登录你的账户时,你无法连接到交易服务器。 或者,例如,你的模拟账户已经过期,登录尝试给出 "无效账户"。 尽管有这样的失败,但所有的交易历史都是可用的,即使它没有在终端中显示出来!那么,历史被储存在哪里? Ilya Malev 2019.02.20 18:55 #1276 Alexey Navoykov:如果是这样,你应该写信给技术支持,让它得到修复(达到中等水平)。 否则,这是一个用于测试员grails的趣闻。在分支 "bug, questions "中,官方已经答复说没有什么会改变。更确切地说,他们根本无视所有的理性问题,回答说 "用真实的刻度来测试",我把这解释为严格的否定答案 这是一个不幸的自欺欺人的 "花边新闻"。虽然,也许还有人可以利用它在商业上以某种方式作弊(即经纪公司--这样就造成了价差规范的假象,如果这个人不进入真正的蜱虫,而99.9%的人不会这样做)。 Alexey Navoykov 2019.02.21 11:40 #1277 Ilya Malev:虽然可能是别人可以利用它在商业上进行某种程度的欺骗(即经纪公司--这样就造成了点差规范的假象,如果这个人不进入真正的点差,而99.9%不会)。理论上,所有的东西都应该在服务器上同步。 在ticks中的东西--应该在bar中。 但当然,我不知道现实中是怎样的。 Artyom Trishkin 2019.02.23 10:18 #1278 与本主题无关的评论已被移至"mql4语言的特点、复杂性和技术"。 fxsaber 2019.03.08 08:38 #1279 ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。 粗略地说,ME能看到你在电脑上做的很多事情。例如,如果你通过缓冲区从其他资源粘贴一个账户或个人账户的密码,它将进入当前ME会话的历史。 Vitaly Muzichenko 2019.03.08 08:40 #1280 fxsaber:ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。 粗略地说,ME能看到你在电脑上做的很多事情。例如,如果你通过缓冲区粘贴一个账户密码,它将进入当前ME会话的历史。哇,我复制了加密货币的密码。这对我来说有多大的危害呢? 1...121122123124125126127128129130131132133134135...247 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
结果
在MT4上运行同样的脚本甚至更令人沮丧--那里有一个更大的故事。让我解释一下。
在这里你可以看到,该仓位是在同一价格开仓和平仓的。但在没有归一化的情况下,它们的价格是不平等的!
ZZY检查了测试器--似乎没有这种讨厌的东西。
我一定是打错了。
如果是这样,你应该写信给技术支持,让它得到纠正(改成中等)。 否则,它就是一个测试者的 花絮。
检查了测试器--似乎没有任何这种恶心的东西。
在所有的测试器模式中,除了真实的ticks之外,价格都没有被规范化!
结果
说得温和一点,这是测试器的一个错误。
比方说,当你试图登录你的账户时,你无法连接到交易服务器。
或者,例如,你的模拟账户已经过期,登录尝试给出 "无效账户"。
尽管有这样的失败,但所有的交易历史都是可用的,即使它没有在终端中显示出来!
比方说,当你试图登录你的账户时,你无法连接到交易服务器。
或者,例如,你的模拟账户已经过期,登录尝试给出 "无效账户"。
尽管有这样的失败,但所有的交易历史都是可用的,即使它没有在终端中显示出来!
那么,历史被储存在哪里?
如果是这样,你应该写信给技术支持,让它得到修复(达到中等水平)。 否则,这是一个用于测试员grails的趣闻。
在分支 "bug, questions "中,官方已经答复说没有什么会改变。更确切地说,他们根本无视所有的理性问题,回答说 "用真实的刻度来测试",我把这解释为严格的否定答案
这是一个不幸的自欺欺人的 "花边新闻"。虽然,也许还有人可以利用它在商业上以某种方式作弊(即经纪公司--这样就造成了价差规范的假象,如果这个人不进入真正的蜱虫,而99.9%的人不会这样做)。虽然可能是别人可以利用它在商业上进行某种程度的欺骗(即经纪公司--这样就造成了点差规范的假象,如果这个人不进入真正的点差,而99.9%不会)。
理论上,所有的东西都应该在服务器上同步。 在ticks中的东西--应该在bar中。 但当然,我不知道现实中是怎样的。
ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。
粗略地说,ME能看到你在电脑上做的很多事情。例如,如果你通过缓冲区从其他资源粘贴一个账户或个人账户的密码,它将进入当前ME会话的历史。
ME有一个ALT+V的组合,你可以看到系统剪贴板以前的数值。即使你从浏览器中复制了一些东西,而ME在后台工作,ME也会看到它并记住它。
粗略地说,ME能看到你在电脑上做的很多事情。例如,如果你通过缓冲区粘贴一个账户密码,它将进入当前ME会话的历史。
哇,我复制了加密货币的密码。这对我来说有多大的危害呢?