在使用多个对子时,EA发生冲突... - 页 3

 
啊,我想明白了!

我需要在 "If(IsNewCandle()) "被调用时从 "int start() "函数中调用订单修改。因此,在每小时收盘时,如果orderstoploss>iMA-ATR,修改挂单 的 "void OrderModify "将被修改并进行相应校准。

因此,现在它正在正确地做它的工作。)现在要读到我的眼睛流血为止... :)
 
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.)
 
DomGilberto:

除了零之外,从不比较双数是否相等 < 这可能是我在寻找的WHRoeder...?
当然可以,你明白为什么,问题出在哪里吗?
 
说实话,我不明白......。但我确实尝试过把它写出来,然后打印出来进行比较...
 
DomGilberto:
说实话,我不明白......不过我确实试验过把它写出来并打印出比较结果...

1.51234000001和1.51234000002 是不一样的,但是从价格的角度来看,它们都是 1.51234,所以是一样的......所以它们是一样的,但是一个比另一个大。 这与浮点数用二进制表示的方式有关,它是不精确的,所以通常会有一点误差。. .

看一下这个:浮点数

 

但为什么NormalizedDouble, Digits不能解决这个问题?为什么多余的小数点位会被包括在内?我很欣赏你不需要在预定义变量上使用NormalizeDouble,但在非预定义变量上使用NormalizeDouble有什么意义呢,然后试图比较它们,因为它们永远不会匹配。

很奇怪!

如果我想做"If(Bid > OrderOpenPrice())",那就不可能了吧?我是否需要在每个比较语句中执行上述规则?即"If(Bid - OrderOpenPrice() > Point / 2.)?


哦,如果(Bid == OrderOpenPrice()),我需要对该语句做什么吗?

 
DomGilberto:

但为什么NormalizedDouble, Digits不能解决这个问题呢?为什么多余的小数点位会被包括在内?我很欣赏你不需要在预定义变量上使用NormalizeDouble,但是在非预定义变量上使用NormalizeDouble有什么意义,然后试图比较它们,因为它们永远不会匹配。

NormalizeDouble并没有解决这个问题,它并没有把1.51234000001变成 1.51234,它只是以不同的方式 "搞乱 "了它......所以通过使用它,你希望它以同样的方式搞乱你所有的值。

DomGilberto:


如果我想做"If(Bid>OrderOpenPrice())",这将不会起作用,不是吗?我是否需要在每个比较语句中执行上述规则?即"If(Bid - OrderOpenPrice() > Point / 2.)?

是的,如果你想确定你的比较是给你一个准确的结果,是的。

DomGilberto:

哦,还有什么If(Bid == OrderOpenPrice()),我需要对这个语句做什么吗?

是的,它将遭受完全相同的问题......。
 
好的,谢谢--我已经大大减少了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());
                  }
              }   
      }
} 
 
DomGilberto:
好的,谢谢--我已经大大减少了OrderModify的错误1--但是,我还是时不时地得到一点?似乎是MA_trail无效的缘故?另外,我如何正确写"If(Bid == OrderOpenPrice())?

你的眼睛出血量不够......。

你可以做这样的事。

!( MathAbs(FirstPrice - SecondPrice) > HalfAPoint )

小心

从这里:https://www.mql5.com/en/forum/136997/page4#781986

 
你的建议是与上述代码有关,还是与"If(Bid == OrderOpenPrice()) "有关?