价格!=价格? - 页 6

 

这就是我所说的双倍的虫子....。(双关语意;)

听起来,在提出的几个自定义函数 中,没有一个达成了共识。有谁愿意在这一点上分享一下(不是双关语),他们使用哪一个作为日常的CompareDouble函数?

很明显,如果我们想要可靠的系统,我们必须使用一些自定义的CompareDouble函数。

 

这个问题可以忽略不计,主要是除非确切的数值很重要。

如果我想 一个(可能是不规范的)触发价格之上 开盘,我就用出价>触发。如果因为四舍五入而恰好 这个价格上触发,我真的不在乎。

如果我想在一个(可能是不规范的)触发价格上或周围 开盘,我会测试一个缺口。买入价>触发价&买入价<触发价+3*pips2dbl。市场很容易在一个点上移动一整个点,所以Bid == trigger总是错误的,MathAbs(bid-trigger) < Point/2是正确的,但很可能不会成功。

如果等价点很重要,比如我想移动一个止损点,但我离市场太近了(止损点),那么我就用 Bid - newSL > StopLelvel - Point/2

 
WHRoeder:

这个问题可以忽略不计,主要是除非确切的数值很重要。

如果我想 一个(可能是不规范的)触发价格之上 开盘,我就用出价>触发。如果因为四舍五入而碰巧在 这个价格触发,我真的不在乎。

如果我想在一个(可能是不规范的)触发价格上或周围 开盘,我会测试一个缺口。买入价>触发价&买入价<触发价+3*pips2dbl。市场很容易在一个点上移动一整个点,所以Bid == trigger总是错误的,MathAbs(bid-trigger) < Point/2是正确的,但很可能不会成功。

如果等价点很重要,比如我想移动一个止损点,但我离市场太近了(止损点),那么我就用 Bid - newSL > StopLelvel - Point/2。


谢谢。现在,这就是我所说的解构线。

事实上,你所提到的与我的应用非常接近。 我正在确定新的TakeProfit是否与已经设置并发送的原始TakeProfit不同(根据经纪人或MQL4标准)。 在调用OrderModify之前,我正在比较两个指标值和两个TakeProfit值。

if (Volume[0]>1)return;
 
       for(int b=OrdersTotal()-1;b>=0; b--)
       {
       if(atr2kTP == atr2kTPAdjust|| btphold==btp)) return;//-----------This is where I am comparing them, and where the function would go.
         if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
           if(OrderMagicNumber()==MAGICMA)
             if(OrderSymbol()==Symbol())
                if(OrderType()==OP_BUY)                                  
                  atr2kTPAdjust=atr2kTP; 
                       OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
 
       }              
         for(int s=OrdersTotal()-1;s>=0; s--)
         {
          if(atr2kTP == atr2kTPAdjust|| stphold==stp) return;
           if(OrderSelect(s,SELECT_BY_POS,MODE_TRADES))
             if(OrderMagicNumber()==MAGICMA)
               if(OrderSymbol()==Symbol())
                  if(OrderType()==OP_SELL)                      
                      atr2kTPAdjust=atr2kTP;                      
                        OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
         }
 }
 

这是我最后的OrderMod代码,使用Point/2过滤器来比较双倍订单值。 每次都能无差错地工作并修改订单。 谢谢!

void AutoAdjustTakeProfit()
{
if (Volume[0]>1 || atr2kTP == atr2kTPAdjust)return;  

       for(int b=OrdersTotal()-1;b>=0; b--)
          { 
            if(OrderSelect(b,SELECT_BY_POS,MODE_TRADES))
               if(OrderMagicNumber()==MAGICMA)
                 if(OrderSymbol()==Symbol())
                    {          
                      if(OrderType()==OP_BUY)// buy ordeer section
                        {  
                          if((btphold-btp> Point/2) || (btphold-btp<-Point/2))  //--------------------------This is the DoubleCompare Code
                            {                                                                             
                              atr2kTPAdjust=atr2kTP; 
                              OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),btp,0,CLR_NONE);                          
                            }
                        } 
                     
                      if(OrderType()==OP_SELL) // Sell ordeer section
                        {   
                          if((stphold-stp>Point/2) || (stphold-stp <-Point/2)) //--------------------------This is the DoubleCompare Code
                            {                                                  
                               atr2kTPAdjust=atr2kTP;                      
                               OrderModify(OrderTicket(),OrderOpenPrice(),OrderStopLoss(),stp,0,CLR_NONE);
                            }
                        }
                    }
           }
}
 
  1. if (Volume[0]>1)return;
    如果你在一个新条形图的开始时错过了一些点,你的代码就不会执行。总是使用时间
  2.   if((stphold-stp>Point/2) || (stphold-stp <-Point/2))
      if( MathAbs(stphold - stp) > Point/2) // Simplified
    再说一遍,你真的关心等号吗?如果你使用:
      if( MathAbs(stphold - stp) >= Point)
    它可能会在略低于一个点的时候触发。这还是和不等式一样的。
  3. 为什么要移动它一个点,用点来移动它们,避免四舍五入的问题,以及ERR_TOO_FREQUENT_REQUESTS
 

newBar效果很好。

MathAbs很不错,我以为它只转换方程左边的负数,不知道它还能把差值转换成正值。

点/2的精度对我的信号目的并不重要。 我只想避免四舍五入的错误,以避免孱弱的编码。

我更愿意把频率误差和舍入误差一样踩在脚下。 所以我想使用最无误差的稳定计算,而不是最精确的计算代码

因此,通过增加我的TakeProfit MathAbs(stphold - stp)的比较,甚至超过2*pips,我应该有最大的机会消除舍入错误和频率错误?

非常感谢。

removed.

 
moneycode:

newBar效果很好。

以前我发现IsNewCandle的问题,这就是为什么我改用成交量触发器。如果成交量的处理可能很慢或丢失,那么蜡烛也可能是这样。所以这两个都是一个坏主意。

由于newBar工作正常,我现在试图用下面的代码来识别IsNewCandle失败的情况。

IsNewCandle()函数调用在start()里面,在newBar代码行的上方。(卖出最低的代码图片)这个打印测试没有成功,相反,它在每个新条上都打印了。

在我看来,把一个新条形的检查放到一个函数 中是个坏主意,函数是用来使代码可重复使用的 ... ...试着在新条形的第一个刻度线中调用IsNewCandle()两次,看看你得到什么答案 ... ...

顺便说一句 ......这已经偏离了本主题,如果你想继续讨论,请把它移到一个新的主题。我稍后会整理的 .

 
WHRoeder:

....,因为价格只能以点的倍数变化,所以点/2就是....。


如果你在比较价格,很好。然而,如果你是在比较双数,例如价格的平均数,那么点/2是不可能的。
 
HarriMQL4:

如果你是在比较价格,很好。但是,如果你是在比较双数,例如价格的平均数,点/2就不行了。


你注意到这个话题的标题了吗?

;)

 
HarriMQL4:

如果你是在比较价格,很好。然而,如果你是在比较双数,例如价格的平均数,点/2就不行了。
价格 双倍的.. .