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);
}
}
这就是我所说的双倍的虫子....。(双关语意;)
听起来,在提出的几个自定义函数 中,没有一个达成了共识。有谁愿意在这一点上分享一下(不是双关语),他们使用哪一个作为日常的CompareDouble函数?
很明显,如果我们想要可靠的系统,我们必须使用一些自定义的CompareDouble函数。
这个问题可以忽略不计,主要是除非确切的数值很重要。
如果我想在 一个(可能是不规范的)触发价格之上 开盘,我就用出价>触发。如果因为四舍五入而恰好在 这个价格上触发,我真的不在乎。
如果我想在一个(可能是不规范的)触发价格上或周围 开盘,我会测试一个缺口。买入价>触发价&买入价<触发价+3*pips2dbl。市场很容易在一个点上移动一整个点,所以Bid == trigger总是错误的,MathAbs(bid-trigger) < Point/2是正确的,但很可能不会成功。
如果等价点很重要,比如我想移动一个止损点,但我离市场太近了(止损点),那么我就用 Bid - newSL > StopLelvel - Point/2
这个问题可以忽略不计,主要是除非确切的数值很重要。
如果我想在 一个(可能是不规范的)触发价格之上 开盘,我就用出价>触发。如果因为四舍五入而碰巧在 这个价格触发,我真的不在乎。
如果我想在一个(可能是不规范的)触发价格上或周围 开盘,我会测试一个缺口。买入价>触发价&买入价<触发价+3*pips2dbl。市场很容易在一个点上移动一整个点,所以Bid == trigger总是错误的,MathAbs(bid-trigger) < Point/2是正确的,但很可能不会成功。
如果等价点很重要,比如我想移动一个止损点,但我离市场太近了(止损点),那么我就用 Bid - newSL > StopLelvel - Point/2。
谢谢。现在,这就是我所说的解构线。
事实上,你所提到的与我的应用非常接近。 我正在确定新的TakeProfit是否与已经设置并发送的原始TakeProfit不同(根据经纪人或MQL4标准)。 在调用OrderModify之前,我正在比较两个指标值和两个TakeProfit值。
这是我最后的OrderMod代码,使用Point/2过滤器来比较双倍订单值。 每次都能无差错地工作并修改订单。 谢谢!
newBar效果很好。
MathAbs很不错,我以为它只转换方程左边的负数,不知道它还能把差值转换成正值。
点/2的精度对我的信号目的并不重要。 我只想避免四舍五入的错误,以避免孱弱的编码。
我更愿意把频率误差和舍入误差一样踩在脚下。 所以我想使用最无误差的稳定计算,而不是最精确的计算代码。
因此,通过增加我的TakeProfit MathAbs(stphold - stp)的比较,甚至超过2*pips,我应该有最大的机会消除舍入错误和频率错误?
非常感谢。
newBar效果很好。
以前我发现IsNewCandle的问题,这就是为什么我改用成交量触发器。如果成交量的处理可能很慢或丢失,那么蜡烛也可能是这样。所以这两个都是一个坏主意。
由于newBar工作正常,我现在试图用下面的代码来识别IsNewCandle失败的情况。
IsNewCandle()函数调用在start()里面,在newBar代码行的上方。(卖出最低的代码图片)这个打印测试没有成功,相反,它在每个新条上都打印了。
在我看来,把一个新条形的检查放到一个函数 中是个坏主意,函数是用来使代码可重复使用的 ... ...试着在新条形的第一个刻度线中调用IsNewCandle()两次,看看你得到什么答案 ... ...
顺便说一句 ......这已经偏离了本主题,如果你想继续讨论,请把它移到一个新的主题。我稍后会整理的 .
....,因为价格只能以点的倍数变化,所以点/2就是....。
如果你在比较价格,很好。然而,如果你是在比较双数,例如价格的平均数,那么点/2是不可能的。
如果你是在比较价格,很好。但是,如果你是在比较双数,例如价格的平均数,点/2就不行了。
你注意到这个话题的标题了吗?
;)
如果你是在比较价格,很好。然而,如果你是在比较双数,例如价格的平均数,点/2就不行了。