错误、漏洞、问题 - 页 803 1...796797798799800801802803804805806807808809810...3184 新评论 ilunga 2012.08.08 07:32 #8021 Karlson: 不同的服务器,不同的500页。 这与不同的服务器有什么关系?这是同一个人的两次测试。只有在测试器中指定的货币对不同 Dmitriy Parfenovich 2012.08.08 07:34 #8022 ilunga: 这与不同的服务器有什么关系?这是同一个人的两次测试。只有在测试器中指定的货币对不同 更新你的终端/测试器,也许一切都会工作,我有687的构建,一切都能工作。 ilunga 2012.08.08 07:35 #8023 fyords:我有一切正确的东西,演示MK服务器。那么请解释一下,当你开立一个订单时,括号里的数值是多少,为什么在一种情况下是(1.29565 / 1.29654),而在另一种情况下是(1.29443 / 1.29479 / 1.29443)?(我是指你的测试结果)。fyords: 更新你的终端/测试器,也许一切都会工作,我有一个687的构建,一切都能工作。在将EA发送给冠军时(在他们的自动测试中)"弹出 "了完全相同的错误,所以更新只能提供部分帮助。更重要的是。它只出现过一次(第一次尝试在 "你的 "以外的货币对上下单)。 Rashid Umarov 2012.08.08 07:35 #8024 ilunga: 这与不同的服务器有什么关系?这是同一个人的两次测试。只有测试器中显示的货币对不同。请看一下关于测试器的文章。MetaTrader 5策略测试器中的滴答生成算法MetaTrader 5中测试的基础知识在另一个货币对上测试时,价格不需要相同。 ilunga 2012.08.08 07:51 #8025 Rosh:请看一下关于测试器的文章。MetaTrader 5策略测试器中的滴答生成算法在MetaTrader 5中测试的基本原理在另一个货币对上测试时,价格不一定要匹配因此,又做了一些测试。真的是 "当前价格 "的问题。代码。#include <Trade\SymbolInfo.mqh> #include <Trade\Trade.mqh> CSymbolInfo m_sym; CTrade m_trade; double bar_info[2]; bool a; int OnInit() { SymbolSelect("EURUSD", true); SymbolSelect("GBPUSD", true); m_sym.Name("EURUSD"); a = false; return(0); } void OnTick() { if (a) return; a = true; m_sym.Refresh(); m_sym.RefreshRates(); CopyHigh("EURUSD", PERIOD_D1, 0, 2, bar_info); Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask())); Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid())); Print("Цена открытия:" + DoubleToString(bar_info[1] + 5000*_Point)); BUY_pending("EURUSD"); Print("Текущая цена Ask:" + DoubleToString(m_sym.Ask())); Print("Текущая цена Bid:" + DoubleToString(m_sym.Bid())); } uint BUY_pending(string symbol) { CopyHigh(symbol, PERIOD_D1, 0, 2, bar_info); // готовим запрос MqlTradeRequest request = {0}; ZeroMemory(request); request.action = TRADE_ACTION_PENDING; request.magic = 0; request.symbol = symbol; request.volume = 1; request.price = m_sym.Ask() + 1; request.sl = 0; request.tp = 0; request.deviation = 10; request.type = ORDER_TYPE_BUY_STOP; request.type_filling = ORDER_FILLING_FOK; MqlTradeResult result; OrderSend(request,result); Print(IntegerToString(result.retcode)); return (result.retcode); }注意,我是以问号价格加1的价格开盘的(有巨大的保证金)。在同一时间前后,我打印了当前的卖价和买价。结果(在GBPUSD上测试时)。GR 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Ask:1.29241000 LH 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Bid:1.29220000 QL 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Цена открытия:1.34220000 GD 0 Trade 11:49:40 2012.01.02 09:00:00 buy stop 1.00 EURUSD at 2.29241 (1.29709 / 1.29722) IG 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 10009 CP 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Ask:1.29241000 HG 0 test (GBPUSD,H1) 11:49:40 2012.01.02 09:00:00 Текущая цена Bid:1.29220000价格1.29241在下单之前和之后都被打印出来。同时,在括号内(下单时),价格为1.29722。如何?还是我获得的当前价格不正确?其次,如果价格有误,那么为什么会出现错误10016(停止)? [删除] 2012.08.08 07:59 #8026 ilunga:但在切面中仍然存在错误。说实话,我不太明白,在没有停车的情况下,10016号错误 是如何出现的。我不知道你在做什么和怎么做,问题可能真的在SL。我的版本工作起来没有问题。然而,这个调用扔在了初始化块中,不需要费心检查(尽管在设置之前存在的顺序值得检查)。bool BUY_pending(string symbol,ENUM_TIMEFRAMES period,double volume,ulong magic = 0) { //----------------------------------------------------------------------------// //Work variables double price = 0, sl = 0, tp = 0; //Prices: Open, Sell stop, Take profit int ResCopy = -1; //Result of copying the data into an array int Dig = 0; //Digits bool Result = true; //Returned importance //----------------------------------------------------------------------------// ResetLastError(); //Checking the signal to stopping the trading system if(IsStopped()) return(false); //Preparation of structures ZeroMemory(TradeRequest); ZeroMemory(TradeResult); ZeroMemory(CheckResult); //Copying the data into an array ResCopy = CopyHigh(symbol,period,0,2,bar_info); if(ResCopy==-1)return(false); //Calculations Dig = (int)SymbolInfoInteger(symbol,SYMBOL_DIGITS); price = NormalizeDouble(bar_info[1] + 500*_Point,Dig); sl = NormalizeDouble(price - 200*_Point,Dig); tp = NormalizeDouble(price + 1000*_Point,Dig); //Preparation of request TradeRequest.type_filling = ORDER_FILLING_FOK; TradeRequest.action = TRADE_ACTION_PENDING; TradeRequest.type = ORDER_TYPE_BUY_STOP; TradeRequest.deviation = 10; TradeRequest.symbol = symbol; TradeRequest.magic = magic; TradeRequest.volume = volume; TradeRequest.price = price; TradeRequest.sl = sl; TradeRequest.tp = tp; //Checking Result = OrderCheck(TradeRequest,CheckResult); if((!Result)||(CheckResult.retcode!=0))return(false); //OrderSend Result = OrderSend(TradeRequest,TradeResult); //Checking for presence of the errors if(_LastError!=0){Result = false;} //----------------------------------------------------------------------------// return(Result); //----------------------------------------------------------------------------// } 附加的文件: Demo-CreateBuyStop.mq5 5 kb ilunga 2012.08.08 08:06 #8027 Interesting:我不知道你在做什么或怎么做,问题可能真的出在SL。我的版本工作起来没有问题。调用是真实的,但我把调用扔给了初始化块,不屑于检查(尽管在设置之前存在的命令值得检查)。 一个小小的请求。你能纠正代码,使其在OrderSend之前输出符号的当前价格 吗? Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 Rashid Umarov 2012.08.08 08:09 #8028 ilunga: 一个小小的请求。你能不能调整一下代码,在OrderSend之前,输出我们开仓的工具的当前价格?这样试试吧。 MqlTradeResult result; if(!OrderSend(request,result)) { PrintFormat("retcode=%d price=%G Ask=%G Bid=%G Comment=%s", result.retcode,result.price,result.ask,result.bid,result.comment); //--- PrintFormat("%s %s at %G Ask=%G Bid=%G ", EnumToString(request.type),symbol,request.price,SymbolInfoDouble(symbol,SYMBOL_ASK), SymbolInfoDouble(symbol,SYMBOL_BID)); Print("------------"); } [删除] 2012.08.08 08:10 #8029 ilunga: 小小的请求。你能纠正一下代码吗,在OrderSend之前,它能推断出我们打开的那个工具上的当前价格?一个价格的喷雾器?我认为没有这个必要,你可以添加一条关于检查成功/失败的信息,以及订单的设置。原则上你可以自己做,应该不难(按想法)。罗什。这样试试吧。对于调试来说,它将做得相当好,在工作代码中,它将是多余的(至少是一个有点麻烦的解决方案)。而且最好在OrderCheck之后下订单,这样万一出错就不会进入OrderSend。PS我忘了补充,根据这个例子,bar_info 可以放在一个函数中,没有问题。 ilunga 2012.08.08 08:39 #8030 Interesting:一个价格的喷雾器?我认为没有这个必要,你可以添加一条关于检查成功/失败的信息,以及订单的设置。原则上,你可以自己做,这应该不难(在想法上)。对于调试来说,这可能足够好,但在生产代码中,这将是多余的(至少是有点歪打正着的解决方案)。最好是在OrderCheck之后下订单,这样万一出现错误,我们就不会进入OrderSend。PS我忘了补充,根据这个例子,bar_info 也可以放在一个函数中,没有任何问题。这很有趣。在你的例子中,我已经删除了英镑的BUYSTOP,只剩下欧元兑美元了。在填写完请求中的字段后,我已经输出了挂单 的价格。1) 你有变体--挂单被放置在Inite中。2012.01.01 00:00:00 价格 = 1.304870002) 我注释了init,把它移到OnTick。我设置了一个条件,只在第一个刻度线上触发。2012.01.02 09:00:00 价格 = 1.29720000P.S. 我正确地理解,在我的(和你的)代码中bar_info[1]是当前条形的最大值? Документация по MQL5: Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров www.mql5.com Стандартные константы, перечисления и структуры / Торговые константы / Свойства ордеров - Документация по MQL5 1...796797798799800801802803804805806807808809810...3184 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
不同的服务器,不同的500页。
这与不同的服务器有什么关系?这是同一个人的两次测试。只有在测试器中指定的货币对不同
我有一切正确的东西,演示MK服务器。
那么请解释一下,当你开立一个订单时,括号里的数值是多少,为什么在一种情况下是(1.29565 / 1.29654),而在另一种情况下是(1.29443 / 1.29479 / 1.29443)?
(我是指你的测试结果)。
更新你的终端/测试器,也许一切都会工作,我有一个687的构建,一切都能工作。
在将EA发送给冠军时(在他们的自动测试中)"弹出 "了完全相同的错误,所以更新只能提供部分帮助。
更重要的是。它只出现过一次(第一次尝试在 "你的 "以外的货币对上下单)。
这与不同的服务器有什么关系?这是同一个人的两次测试。只有测试器中显示的货币对不同。
请看一下关于测试器的文章。
在另一个货币对上测试时,价格不需要相同。
请看一下关于测试器的文章。
在另一个货币对上测试时,价格不一定要匹配
因此,又做了一些测试。真的是 "当前价格 "的问题。
代码。
注意,我是以问号价格加1的价格开盘的(有巨大的保证金)。在同一时间前后,我打印了当前的卖价和买价。
结果(在GBPUSD上测试时)。
价格1.29241在下单之前和之后都被打印出来。同时,在括号内(下单时),价格为1.29722。如何?还是我获得的当前价格不正确?
其次,如果价格有误,那么为什么会出现错误10016(停止)?
但在切面中仍然存在错误。
说实话,我不太明白,在没有停车的情况下,10016号错误 是如何出现的。
我不知道你在做什么和怎么做,问题可能真的在SL。
我的版本工作起来没有问题。然而,这个调用扔在了初始化块中,不需要费心检查(尽管在设置之前存在的顺序值得检查)。
我不知道你在做什么或怎么做,问题可能真的出在SL。
我的版本工作起来没有问题。调用是真实的,但我把调用扔给了初始化块,不屑于检查(尽管在设置之前存在的命令值得检查)。
一个小小的请求。你能不能调整一下代码,在OrderSend之前,输出我们开仓的工具的当前价格?
这样试试吧。
小小的请求。你能纠正一下代码吗,在OrderSend之前,它能推断出我们打开的那个工具上的当前价格?
一个价格的喷雾器?我认为没有这个必要,你可以添加一条关于检查成功/失败的信息,以及订单的设置。
原则上你可以自己做,应该不难(按想法)。
这样试试吧。
对于调试来说,它将做得相当好,在工作代码中,它将是多余的(至少是一个有点麻烦的解决方案)。
而且最好在OrderCheck之后下订单,这样万一出错就不会进入OrderSend。
PS
我忘了补充,根据这个例子,bar_info 可以放在一个函数中,没有问题。
一个价格的喷雾器?我认为没有这个必要,你可以添加一条关于检查成功/失败的信息,以及订单的设置。
原则上,你可以自己做,这应该不难(在想法上)。
对于调试来说,这可能足够好,但在生产代码中,这将是多余的(至少是有点歪打正着的解决方案)。
最好是在OrderCheck之后下订单,这样万一出现错误,我们就不会进入OrderSend。
PS
我忘了补充,根据这个例子,bar_info 也可以放在一个函数中,没有任何问题。
这很有趣。在你的例子中,我已经删除了英镑的BUYSTOP,只剩下欧元兑美元了。
在填写完请求中的字段后,我已经输出了挂单 的价格。
1) 你有变体--挂单被放置在Inite中。
2012.01.01 00:00:00 价格 = 1.30487000
2) 我注释了init,把它移到OnTick。我设置了一个条件,只在第一个刻度线上触发。
2012.01.02 09:00:00 价格 = 1.29720000
P.S. 我正确地理解,在我的(和你的)代码中bar_info[1]是当前条形的最大值?