在使用多个对子时,EA发生冲突... - 页 3 1234 新评论 Dominic Gilbert 2013.08.20 07:56 #21 啊,我想明白了! 我需要在 "If(IsNewCandle()) "被调用时从 "int start() "函数中调用订单修改。因此,在每小时收盘时,如果orderstoploss>iMA-ATR,修改挂单 的 "void OrderModify "将被修改并进行相应校准。 因此,现在它正在正确地做它的工作。)现在要读到我的眼睛流血为止... :) Dominic Gilbert 2013.08.20 09:23 #22 RaptorUK: 这就是问题所在 .... (OP_SELL的情况也类似) . . . 当你得到一个错误1,这是因为OrderStopLoss() == BuyStopPrice,所以你修改订单,使其具有相同的StopLoss值,因此错误1,所以现在你在想,一方面OrderStopLoss()== BuyStopPrice,另一方面OrderStopLoss()< BuyStopPrice 你有没有按照帖子中的链接阅读,直到你的眼睛出血? 我打赌你没有 . . .https://www.mql5.com/en/forum/146380 如果你继续忽视这个问题,它就会一直抓着你不放,你就会一直浪费时间 . . . 掌握它,了解它,不要再受它的影响,要快乐起来 除了零之外,永远不要比较双数是否相等 < 这可能是我在寻找的WHRoeder...?if (a > b)if (a - b > Point / 2.) if (a >= b)if (a - b > -Point) if (a != b)if (MathAbs(a - b) > Point / 2.) Simon Gniadkowski 2013.08.20 09:49 #23 DomGilberto: 除了零之外,从不比较双数是否相等 < 这可能是我在寻找的WHRoeder...? 当然可以,你明白为什么,问题出在哪里吗? Dominic Gilbert 2013.08.20 10:00 #24 说实话,我不明白......。但我确实尝试过把它写出来,然后打印出来进行比较... Simon Gniadkowski 2013.08.20 10:11 #25 DomGilberto: 说实话,我不明白......不过我确实试验过把它写出来并打印出比较结果...1.51234000001和1.51234000002 是不一样的,但是从价格的角度来看,它们都是 1.51234,所以是一样的......所以它们是一样的,但是一个比另一个大。 这与浮点数用二进制表示的方式有关,它是不精确的,所以通常会有一点误差。. . 看一下这个:浮点数 Dominic Gilbert 2013.08.20 10:24 #26 但为什么NormalizedDouble, Digits不能解决这个问题?为什么多余的小数点位会被包括在内?我很欣赏你不需要在预定义变量上使用NormalizeDouble,但在非预定义变量上使用NormalizeDouble有什么意义呢,然后试图比较它们,因为它们永远不会匹配。 很奇怪! 如果我想做"If(Bid > OrderOpenPrice())",那就不可能了吧?我是否需要在每个比较语句中执行上述规则?即"If(Bid - OrderOpenPrice() > Point / 2.)? 哦,如果(Bid == OrderOpenPrice()),我需要对该语句做什么吗? Simon Gniadkowski 2013.08.20 11:04 #27 DomGilberto: 但为什么NormalizedDouble, Digits不能解决这个问题呢?为什么多余的小数点位会被包括在内?我很欣赏你不需要在预定义变量上使用NormalizeDouble,但是在非预定义变量上使用NormalizeDouble有什么意义,然后试图比较它们,因为它们永远不会匹配。 NormalizeDouble并没有解决这个问题,它并没有把1.51234000001变成 1.51234,它只是以不同的方式 "搞乱 "了它......所以通过使用它,你希望它以同样的方式搞乱你所有的值。 DomGilberto: 如果我想做"If(Bid>OrderOpenPrice())",这将不会起作用,不是吗?我是否需要在每个比较语句中执行上述规则?即"If(Bid - OrderOpenPrice() > Point / 2.)? 是的,如果你想确定你的比较是给你一个准确的结果,是的。 DomGilberto: 哦,还有什么If(Bid == OrderOpenPrice()),我需要对这个语句做什么吗? 是的,它将遭受完全相同的问题......。 Dominic Gilbert 2013.08.20 11:52 #28 好的,谢谢--我已经大大减少了OrderModify的错误1--然而,我还是时不时地收到一点儿?似乎是MA_trail无效的缘故?另外,我如何正确写"If(Bid == OrderOpenPrice())?//+----------------------------------------------------------------------------------------------------------------------------------------+ //Moving Average Trailing Stop Function //+----------------------------------------------------------------------------------------------------------------------------------------+ void MA_Trail() { double ATR = iATR(NULL,60,14,1); double MA = iMA(NULL,60,MA_Period,0,1,0,1); double BuyStopPriceMath = MA - ATR; double SellStopPriceMath = MA + ATR; double BuyStopPrice = NormalizeDouble(BuyStopPriceMath,5); double SellStopPrice = NormalizeDouble(SellStopPriceMath,5); for(int b=OrdersTotal()-1; b>=0; b--) { if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES)) if(OrderMagicNumber()==MagicNumber) if(OrderSymbol()==Symbol()) { if(OrderType()==OP_BUY) { if(OrderStopLoss() - BuyStopPrice > Point / 2.) continue; if(BuyStopPrice - OrderStopLoss() > Point / 2.) bool BuyModify = OrderModify(OrderTicket(),OrderOpenPrice(),BuyStopPrice,OrderTakeProfit(),0,CLR_NONE); if(!BuyModify)Print(" Buy Trailing Stop Failed: ", GetLastError()); } if(OrderType()==OP_SELL) { if(SellStopPrice - OrderStopLoss() > Point / 2. ) continue; if(OrderStopLoss() - SellStopPrice > Point / 2. ) bool SellModify = OrderModify(OrderTicket(),OrderOpenPrice(),SellStopPrice,OrderTakeProfit(),0,CLR_NONE); if(!SellModify)Print(" Sell Trailing Stop Failed: ", GetLastError()); } } } } Simon Gniadkowski 2013.08.20 12:55 #29 DomGilberto: 好的,谢谢--我已经大大减少了OrderModify的错误1--但是,我还是时不时地得到一点?似乎是MA_trail无效的缘故?另外,我如何正确写"If(Bid == OrderOpenPrice())?你的眼睛出血量不够......。 你可以做这样的事。 !( MathAbs(FirstPrice - SecondPrice) > HalfAPoint ) 小心! 从这里:https://www.mql5.com/en/forum/136997/page4#781986 Dominic Gilbert 2013.08.20 15:04 #30 你的建议是与上述代码有关,还是与"If(Bid == OrderOpenPrice()) "有关? 1234 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
我需要在 "If(IsNewCandle()) "被调用时从 "int start() "函数中调用订单修改。因此,在每小时收盘时,如果orderstoploss>iMA-ATR,修改挂单 的 "void OrderModify "将被修改并进行相应校准。
因此,现在它正在正确地做它的工作。)现在要读到我的眼睛流血为止... :)
这就是问题所在 .... (OP_SELL的情况也类似)
. . . 当你得到一个错误1,这是因为OrderStopLoss() == BuyStopPrice,所以你修改订单,使其具有相同的StopLoss值,因此错误1,所以现在你在想,一方面OrderStopLoss()== BuyStopPrice,另一方面OrderStopLoss()< BuyStopPrice
你有没有按照帖子中的链接阅读,直到你的眼睛出血? 我打赌你没有 . . .https://www.mql5.com/en/forum/146380 如果你继续忽视这个问题,它就会一直抓着你不放,你就会一直浪费时间 . . . 掌握它,了解它,不要再受它的影响,要快乐起来
除了零之外,永远不要比较双数是否相等 < 这可能是我在寻找的WHRoeder...?
if (a > b)
if (a >= b)
if (a != b)
除了零之外,从不比较双数是否相等 < 这可能是我在寻找的WHRoeder...?
说实话,我不明白......不过我确实试验过把它写出来并打印出比较结果...
1.51234000001和1.51234000002 是不一样的,但是从价格的角度来看,它们都是 1.51234,所以是一样的......所以它们是一样的,但是一个比另一个大。 这与浮点数用二进制表示的方式有关,它是不精确的,所以通常会有一点误差。. .
看一下这个:浮点数
但为什么NormalizedDouble, Digits不能解决这个问题?为什么多余的小数点位会被包括在内?我很欣赏你不需要在预定义变量上使用NormalizeDouble,但在非预定义变量上使用NormalizeDouble有什么意义呢,然后试图比较它们,因为它们永远不会匹配。
很奇怪!
如果我想做"If(Bid > OrderOpenPrice())",那就不可能了吧?我是否需要在每个比较语句中执行上述规则?即"If(Bid - OrderOpenPrice() > Point / 2.)?
哦,如果(Bid == OrderOpenPrice()),我需要对该语句做什么吗?
但为什么NormalizedDouble, Digits不能解决这个问题呢?为什么多余的小数点位会被包括在内?我很欣赏你不需要在预定义变量上使用NormalizeDouble,但是在非预定义变量上使用NormalizeDouble有什么意义,然后试图比较它们,因为它们永远不会匹配。
NormalizeDouble并没有解决这个问题,它并没有把1.51234000001变成 1.51234,它只是以不同的方式 "搞乱 "了它......所以通过使用它,你希望它以同样的方式搞乱你所有的值。
如果我想做"If(Bid>OrderOpenPrice())",这将不会起作用,不是吗?我是否需要在每个比较语句中执行上述规则?即"If(Bid - OrderOpenPrice() > Point / 2.)?
是的,如果你想确定你的比较是给你一个准确的结果,是的。
哦,还有什么If(Bid == OrderOpenPrice()),我需要对这个语句做什么吗?
好的,谢谢--我已经大大减少了OrderModify的错误1--但是,我还是时不时地得到一点?似乎是MA_trail无效的缘故?另外,我如何正确写"If(Bid == OrderOpenPrice())?
你的眼睛出血量不够......。
你可以做这样的事。
!( MathAbs(FirstPrice - SecondPrice) > HalfAPoint )
小心!
从这里:https://www.mql5.com/en/forum/136997/page4#781986