被错误困扰的是没有交易业务 - 页 5 123456789101112...21 新评论 Nauris Zukas 2020.06.10 20:33 #41 Alexey Viktorov:这不是因为我重新编译了它,而是因为测试是从不同的日期开始的。而且我注意到了这个bug,如果你放进已经存在的东西,那么测试就不会发生,而是立即给出之前的测试结果。所以不要被这种拐杖所迷惑。试着让它变得正常。如果有东西丢失或参数无效,通过打印报告,一切都会正确。 如果只是由于不同的日期,那么我的检查就会发现它(缺失的小节等),但问题不在于日期。如果我不能重建自动验证所发现的错误,那么我就更容易溜之大吉,并希望有买家的复仇者能找到问题所在(如果有的话)。这种验证的实现并没有让我完全理解在哪里寻找错误。而印刷品 对我来说已经被推到了所有的地方。 Alexey Viktorov: 我注意到这样一个问题,如果我粘贴已经是,那么测试就不会发生,并立即给出以前的测试结果。 而不是为了得到以前的测试结果,我必须改变一些东西,甚至添加一个空字符串(我是说 "重新编译")。 Andrey Kaunov 2020.07.24 13:27 #42 Roman Gergert:我终于想明白了,也许有人可以帮忙,一般来说,苏联只检查了最小手数,当MM被启用时,所以硬核设置手数=0.01,好了,在验证器存款原来是1美元(在一个主题中发现这个信息),分别使用手数0.001(或左右)来交易,由于我总是在一个地方是很多0.01,他因此没有足够的钱,机器人不交易)确切地说,罗曼,验证器正在用1美元的存款进行测试。 在EA中有很多规范化的功能。如果它返回0,交易甚至不会尝试打开。 if((Auto() && (b==0 || (b>0 && BuyPriceMin-Ask>(b==1?iPointOrderStep_1:iPointOrderStep_2)*Point()))) || buy) { BuyLot=buy && LotFromPanel()>0 ? LotFromPanel() : BuyLot; double norm_lot=NormalizeLots(_Symbol,BuyLot); if(norm_lot>0.0) { int ticket=OrderSend(Symbol(),OP_BUY,norm_lot,NormalizeDouble(Ask,_Digits),30,0,0, "NZT-48",iMagicNumber,0,clrGreen); if(ticket>0) { ObjectSetInteger(0,"V_5_buy",OBJPROP_STATE,false); buy=false; } else Print("Order Send error #",GetLastError()); } else Print("Not enough money for the minimum lot"); }但不清楚的是,这个EA的手数正常化功能是如何将0.2手送入开仓的。//+------------------------------------------------------------------+ //| Функция нормализации лота | //+------------------------------------------------------------------+ double NormalizeLots(string symbol, double lot, bool is_margin=true) { if(lot<=0) return(0.0); RefreshRates(); double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); double free = AccountFreeMargin()*0.95; double margin = MarketInfo(symbol,MODE_MARGINREQUIRED); double _lot=lot<min?min:(lot>max?max:lot); _lot=MathRound(_lot/step)*step; if(is_margin && _lot*margin>free) _lot=0.0; return(_lot); } 毕竟,如果第0.2批来检查,并且从日志中判断的利润率是645,那么表达式的这一部分应该是真的if(is_margin && _lot*margin>free) _lot=0.0; //0.2*645>0.95而该函数将发送0.0,但不发送0.2。它只能发送0.2,如果它MarketInfo(symbol,MODE_MARGINREQUIRED);返回0或一个可忽略不计的值。我完全不明白这个验证器是如何工作的。亲爱的MQL开发人员,请给我们发送测试日志,而不是三行的干巴巴的验证错误报告。对于我们这些卑微的程序员来说,理解代码错误并修复它们会容易得多。你可以把它作为档案发送到电子邮件,你可能会想到一个方法)) P.S. 有趣的情况。第5天,我试图在市场上推出一个专家顾问,它在测试器和现实生活中都能完美运行。 Renat Akhtyamov 2020.07.24 23:44 #43 Andrey Kaunov:正是如此,罗曼,验证器以1美元的存款进行测试。在EA中有很多规范化的功能。如果它返回0,交易甚至不会尝试打开。但不清楚的是,这个EA的手数正常化功能是如何将0.2手送入开仓的。毕竟,如果第0.2批来检查,并且从日志中判断的利润率是645,那么表达式的这一部分应该是真的而该函数将发送0.0,但不发送0.2。它只能发送0.2,如果它返回0或一个可忽略不计的值。我完全不明白这个验证器是如何工作的。亲爱的MQL开发人员,请给我们发送测试日志,而不是三行的干巴巴的验证错误报告。对于我们这些卑微的程序员来说,理解代码错误并修复它们会容易得多。你可以把它们作为档案发送到电子邮件,你可能会想到一个办法:))))。 P.S. 有趣的情况。第5天,我试图在市场上推出一个专家顾问,它在测试器和现实生活中都能完美运行。 看起来你的杠杆率与市场上的不同,可能是1:500。只需改变代码中的一行,就能将手数计算到1k100。margin= AccountLeverage()*MarketInfo(symbol,MODE_MARGINREQUIRED)/100.0; 而市场的最小手数是0.1,我想....。 Vladimir Karputov 2020.07.25 05:21 #44 你生活在你自己的某种有限的世界里。在一个正常的世界里,最小手数可能与0.01非常不同 接收:阅读并再次阅读《哪些检查必须通过......》一文。 在发送交易指令 之前,你必须检查它是否会通过,是否有足够的保证金......。 总的来说,到目前为止,验证器已经完成了它的主要任务:从市场中筛选出不完整的代码。 Andrey Kaunov 2020.07.25 11:42 #45 Renat Akhtyamov:看起来你的杠杆率与市场上的不同,可能是1:500。只需改变代码中的一行,就能使手数计算达到1k100的杠杆率。margin= AccountLeverage()*MarketInfo(symbol,MODE_MARGINREQUIRED)/100.0; 雷纳特,谢谢你的建议,我会试一试的。 Vladimir Karputov: 你生活在你自己的一些有限的世界里。在一个正常的世界里,最小手数可能与0.01非常不同接收:阅读并再次阅读《哪些检查必须通过......》一文。在发送交易指令 之前,你必须检查它是否会通过,是否有足够的保证金......。总的来说,到目前为止,验证器已经应对了它的主要任务:从市场中筛选出不完整的代码。 弗拉基米尔,你能建设性地理解这个问题吗!?我不是要检查该地段的保证金和其他东西吗?必须通过哪些检查...... "这篇文章对我来说已经像一本圣经 了。我在上面发布了代码片段。我已经根据你在文章中的建议修改了代码,完全符合要求。 //+------------------------------------------------------------------+ //| Функция нормализации лота | //+------------------------------------------------------------------+ double NormalizeLots(string symbol, double lot, int direction, bool is_margin=true) { if(lot<=0) return(0.0); RefreshRates(); double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); //double free = AccountFreeMargin()*0.95; //double margin = MarketInfo(symbol,MODE_MARGINREQUIRED); double _lot=lot<min?min:(lot>max?max:lot); _lot=MathRound(_lot/step)*step; //if(is_margin && _lot*margin>free) _lot=0.0; ResetLastError(); if(is_margin && (AccountFreeMarginCheck(Symbol(),direction,_lot)<=0 || GetLastError()==134)) _lot=0.0; return(_lot); } 但我仍然得到 "没有交易"。 好吧,如果函数总是发送0.0手并且不允许打开交易,我把它改为发送最小手数。 //+------------------------------------------------------------------+ //| Функция нормализации лота | //+------------------------------------------------------------------+ double NormalizeLots(string symbol, double lot, int direction, bool is_margin=true) { if(lot<=0) return(0.0); RefreshRates(); double min=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN); double max=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX); double step=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP); //double free = AccountFreeMargin()*0.95; //double margin = MarketInfo(symbol,MODE_MARGINREQUIRED); double _lot=lot<min?min:(lot>max?max:lot); _lot=MathRound(_lot/step)*step; //if(is_margin && _lot*margin>free) _lot=0.0; ResetLastError(); if(is_margin && (AccountFreeMarginCheck(Symbol(),direction,_lot)<=0 || GetLastError()==134)) _lot=min; return(_lot); } 而我得到的历史记录显示,交易确实发生了(见下面的屏幕截图)。但是,最低的一批当然来的很奇怪,但是让它来吧。但交易是存在的! 在这种情况下,非常奇怪的事情是验证器,使最低手数为0.2的存款1美元。 自然,不会有任何交易!而 这是用一个完全足够的代码。顺便说一下,我已经删除了指标等的所有条件,以便测试。一旦EA启动,交易就会开始进行。 Vladimir Karputov: ...到目前为止,验证器已经应对了它的主要任务:从市场中筛选出不完整的代码。 那么,验证器是如何处理的呢?我看不出它除了把程序员的脑袋炸开之外还能做什么!"。 请注意,我没有要求你改变验证器中的任何东西。我们可以简单地看到测试日志。我们将了解测试是在什么参数下运行的,以及在什么存款上。最后,我们至少可以用打印来检查代码中的错误所在,并尽可能快地修复它。我们不会在整整一个星期内将手指指向天空,只试图将一个错误定位。我们不是在对着干,是吗?我理解,我们正在努力共同赚取一些东西。 Renat Akhtyamov 2020.07.25 11:54 #46 Andrey Kaunov:......这不像是我们在对着干!我理解,我们是想一起赚取一些东西。 安德鲁,我在周末遇到了一次服务器冻结的情况。 这意味着它只是不会吃MarketInfo(...)。 我几乎无法让它工作。 所以,如果你明白你不能吞下Market,那就得想想如何让验证器不发誓。 例如,我问--什么是杠杆? 上面写着0。 我在代码中添加了--如果是0,则表示100 如果逻辑清晰,就会成功,祝你好运!"。 Andrey Kaunov 2020.07.25 12:04 #47 我明白了,雷纳特,谢谢你。 我已经做了很多的拐杖,但在一些地方我却走到了死胡同。而且我希望充分的代码能得到充分的测试。此外,在没有测试日志的情况下,要找到问题也不是不可能,但这是非常费力的。 也许验证器也能得到升级,那就更好了。我不是唯一遇到这种问题的人。 Vitaly Muzichenko 2020.07.25 13:44 #48 Andrey Kaunov:我明白了,雷纳特,谢谢你。我已经做了很多的拐杖,但在一些地方我却走到了死胡同。而且我希望充分的代码能得到充分的测试。此外,在没有测试日志的情况下,要找到问题也不是不可能,但这是非常费力的。也许验证器也能得到升级,那就更好了。我不是唯一遇到这种问题的人。 是的,你不是唯一面临这个问题的人,在下一个主题中,还有一个人面临这个问题--你已经是两个了。 另外,看看每天有多少EA被贴在市场上而没有任何问题,这就叫 "专业水平"。 Andrey Kaunov 2020.07.25 14:28 #49 维塔利,如果你和其他 "专业人士 "能够在第一次就通过验证,我只能鼓掌。但是,关于一个类似的问题,远不止两个主题。另外,不是每个人都写,有些人只是读。顺便说一下,这个专家顾问不是我的。我在市场上为客户准备。但这并不能否定上述的问题。如果你仔细阅读我的帖子,也许作为一个 "专业人士",你可以提出一个解决问题的办法。沿着 "你很笨,我很聪明 "的思路发一个帖子,并不需要太多的知识。 这里有另一个问题给你。为什么在OnTick()的开头加入了5分钟内以最小手数无条件 连续开仓5笔交易,验证器也给我一个"无交易操作"的信息。 void OnTick() { static int test_ticket[2]={0,0}; if(test_ticket[1]<5 && test_ticket[0]==0) { test_ticket[0]=OrderSend(_Symbol,OP_BUY,SymbolInfoDouble(_Symbol,SYMBOL_VOLUME_MIN),NormalizeDouble(Ask,_Digits),30,0.0,0.0,"NZT-48_test",33333,0,clrNONE); if(test_ticket[0]>0) test_ticket[1]++; } if(OrderSelect(test_ticket[0],SELECT_BY_TICKET)) if(OrderCloseTime()==0 && OrderOpenTime()+300<TimeCurrent()) if(OrderClose(test_ticket[0],NormalizeDouble(OrderLots(),2),NormalizeDouble(Bid,_Digits),30,clrNONE)) { printf("Test order closed, ticket #%d",test_ticket[0]); test_ticket[0]=0; } ... } Renat Akhtyamov 2020.07.25 14:47 #50 Andrey Kaunov:维塔利,如果你和其他 "专业人士 "能够在第一次就通过验证,我只能鼓掌。但是,关于一个类似的问题,远不止两个主题。另外,不是每个人都写,有些人只是读。顺便说一下,这个专家顾问不是我的。我在市场上为客户准备。但这并不能否定上述的问题。如果你仔细阅读我的帖子,也许作为一个 "专业人士",你可以提出一个解决问题的办法。沿着 "你很笨,我很聪明 "的思路发一个帖子,并不需要太多的知识。这里有另一个问题给你。为什么我在OnTick()的开头加入了5分钟内以最小手数无条件 开仓5笔交易,验证器却给我"没有交易操作"?而且你应该首先在这里发布验证者的完整回应而你凭什么认为验证机是按照你发明的原理来设置票据的? 打开5个交易,你需要计算打开的交易数量,而不是票据的数量。 123456789101112...21 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
这不是因为我重新编译了它,而是因为测试是从不同的日期开始的。而且我注意到了这个bug,如果你放进已经存在的东西,那么测试就不会发生,而是立即给出之前的测试结果。所以不要被这种拐杖所迷惑。试着让它变得正常。如果有东西丢失或参数无效,通过打印报告,一切都会正确。
如果只是由于不同的日期,那么我的检查就会发现它(缺失的小节等),但问题不在于日期。如果我不能重建自动验证所发现的错误,那么我就更容易溜之大吉,并希望有买家的复仇者能找到问题所在(如果有的话)。这种验证的实现并没有让我完全理解在哪里寻找错误。而印刷品 对我来说已经被推到了所有的地方。
我注意到这样一个问题,如果我粘贴已经是,那么测试就不会发生,并立即给出以前的测试结果。
而不是为了得到以前的测试结果,我必须改变一些东西,甚至添加一个空字符串(我是说 "重新编译")。
我终于想明白了,也许有人可以帮忙,一般来说,苏联只检查了最小手数,当MM被启用时,所以硬核设置手数=0.01,好了,在验证器存款原来是1美元(在一个主题中发现这个信息),分别使用手数0.001(或左右)来交易,由于我总是在一个地方是很多0.01,他因此没有足够的钱,机器人不交易)
确切地说,罗曼,验证器正在用1美元的存款进行测试。
在EA中有很多规范化的功能。如果它返回0,交易甚至不会尝试打开。
但不清楚的是,这个EA的手数正常化功能是如何将0.2手送入开仓的。
毕竟,如果第0.2批来检查,并且从日志中判断的利润率是645,那么表达式的这一部分应该是真的
而该函数将发送0.0,但不发送0.2。它只能发送0.2,如果它
返回0或一个可忽略不计的值。我完全不明白这个验证器是如何工作的。
亲爱的MQL开发人员,请给我们发送测试日志,而不是三行的干巴巴的验证错误报告。对于我们这些卑微的程序员来说,理解代码错误并修复它们会容易得多。你可以把它作为档案发送到电子邮件,你可能会想到一个方法))
P.S. 有趣的情况。第5天,我试图在市场上推出一个专家顾问,它在测试器和现实生活中都能完美运行。正是如此,罗曼,验证器以1美元的存款进行测试。
在EA中有很多规范化的功能。如果它返回0,交易甚至不会尝试打开。
但不清楚的是,这个EA的手数正常化功能是如何将0.2手送入开仓的。
毕竟,如果第0.2批来检查,并且从日志中判断的利润率是645,那么表达式的这一部分应该是真的
而该函数将发送0.0,但不发送0.2。它只能发送0.2,如果它
返回0或一个可忽略不计的值。我完全不明白这个验证器是如何工作的。
亲爱的MQL开发人员,请给我们发送测试日志,而不是三行的干巴巴的验证错误报告。对于我们这些卑微的程序员来说,理解代码错误并修复它们会容易得多。你可以把它们作为档案发送到电子邮件,你可能会想到一个办法:))))。
P.S. 有趣的情况。第5天,我试图在市场上推出一个专家顾问,它在测试器和现实生活中都能完美运行。看起来你的杠杆率与市场上的不同,可能是1:500。
只需改变代码中的一行,就能将手数计算到1k100。
margin= AccountLeverage()*MarketInfo(symbol,MODE_MARGINREQUIRED)/100.0;
而市场的最小手数是0.1,我想....。你生活在你自己的某种有限的世界里。在一个正常的世界里,最小手数可能与0.01非常不同
接收:阅读并再次阅读《哪些检查必须通过......》一文。
在发送交易指令 之前,你必须检查它是否会通过,是否有足够的保证金......。
总的来说,到目前为止,验证器已经完成了它的主要任务:从市场中筛选出不完整的代码。
看起来你的杠杆率与市场上的不同,可能是1:500。
只需改变代码中的一行,就能使手数计算达到1k100的杠杆率。
margin= AccountLeverage()*MarketInfo(symbol,MODE_MARGINREQUIRED)/100.0;
雷纳特,谢谢你的建议,我会试一试的。
你生活在你自己的一些有限的世界里。在一个正常的世界里,最小手数可能与0.01非常不同
接收:阅读并再次阅读《哪些检查必须通过......》一文。
在发送交易指令 之前,你必须检查它是否会通过,是否有足够的保证金......。
总的来说,到目前为止,验证器已经应对了它的主要任务:从市场中筛选出不完整的代码。
弗拉基米尔,你能建设性地理解这个问题吗!?我不是要检查该地段的保证金和其他东西吗?必须通过哪些检查...... "这篇文章对我来说已经像一本圣经 了。我在上面发布了代码片段。我已经根据你在文章中的建议修改了代码,完全符合要求。
但我仍然得到 "没有交易"。
好吧,如果函数总是发送0.0手并且不允许打开交易,我把它改为发送最小手数。
而我得到的历史记录显示,交易确实发生了(见下面的屏幕截图)。但是,最低的一批当然来的很奇怪,但是让它来吧。但交易是存在的!
在这种情况下,非常奇怪的事情是验证器,使最低手数为0.2的存款1美元。
自然,不会有任何交易!而 这是用一个完全足够的代码。顺便说一下,我已经删除了指标等的所有条件,以便测试。一旦EA启动,交易就会开始进行。
...
到目前为止,验证器已经应对了它的主要任务:从市场中筛选出不完整的代码。
那么,验证器是如何处理的呢?我看不出它除了把程序员的脑袋炸开之外还能做什么!"。
请注意,我没有要求你改变验证器中的任何东西。我们可以简单地看到测试日志。我们将了解测试是在什么参数下运行的,以及在什么存款上。最后,我们至少可以用打印来检查代码中的错误所在,并尽可能快地修复它。我们不会在整整一个星期内将手指指向天空,只试图将一个错误定位。我们不是在对着干,是吗?我理解,我们正在努力共同赚取一些东西。
......这不像是我们在对着干!我理解,我们是想一起赚取一些东西。
安德鲁,我在周末遇到了一次服务器冻结的情况。
这意味着它只是不会吃MarketInfo(...)。
我几乎无法让它工作。
所以,如果你明白你不能吞下Market,那就得想想如何让验证器不发誓。
例如,我问--什么是杠杆?
上面写着0。
我在代码中添加了--如果是0,则表示100
如果逻辑清晰,就会成功,祝你好运!"。
我明白了,雷纳特,谢谢你。
我已经做了很多的拐杖,但在一些地方我却走到了死胡同。而且我希望充分的代码能得到充分的测试。此外,在没有测试日志的情况下,要找到问题也不是不可能,但这是非常费力的。
也许验证器也能得到升级,那就更好了。我不是唯一遇到这种问题的人。
我明白了,雷纳特,谢谢你。
我已经做了很多的拐杖,但在一些地方我却走到了死胡同。而且我希望充分的代码能得到充分的测试。此外,在没有测试日志的情况下,要找到问题也不是不可能,但这是非常费力的。
也许验证器也能得到升级,那就更好了。我不是唯一遇到这种问题的人。
是的,你不是唯一面临这个问题的人,在下一个主题中,还有一个人面临这个问题--你已经是两个了。
另外,看看每天有多少EA被贴在市场上而没有任何问题,这就叫 "专业水平"。
维塔利,如果你和其他 "专业人士 "能够在第一次就通过验证,我只能鼓掌。但是,关于一个类似的问题,远不止两个主题。另外,不是每个人都写,有些人只是读。顺便说一下,这个专家顾问不是我的。我在市场上为客户准备。但这并不能否定上述的问题。如果你仔细阅读我的帖子,也许作为一个 "专业人士",你可以提出一个解决问题的办法。沿着 "你很笨,我很聪明 "的思路发一个帖子,并不需要太多的知识。
这里有另一个问题给你。为什么在OnTick()的开头加入了5分钟内以最小手数无条件 连续开仓5笔交易,验证器也给我一个"无交易操作"的信息。
维塔利,如果你和其他 "专业人士 "能够在第一次就通过验证,我只能鼓掌。但是,关于一个类似的问题,远不止两个主题。另外,不是每个人都写,有些人只是读。顺便说一下,这个专家顾问不是我的。我在市场上为客户准备。但这并不能否定上述的问题。如果你仔细阅读我的帖子,也许作为一个 "专业人士",你可以提出一个解决问题的办法。沿着 "你很笨,我很聪明 "的思路发一个帖子,并不需要太多的知识。
这里有另一个问题给你。为什么我在OnTick()的开头加入了5分钟内以最小手数无条件 开仓5笔交易,验证器却给我"没有交易操作"?
而且你应该首先在这里发布验证者的完整回应
而你凭什么认为验证机是按照你发明的原理来设置票据的?
打开5个交易,你需要计算打开的交易数量,而不是票据的数量。