专家社区 - 页 2

 
对于停止,最好是引入一个 "冷却"(我不知道如何正确称呼它)。

如果你追踪一个精度为一个点的止损,经纪人会嚎叫着切断专家顾问系统 :)

我认为这样更好。
   if (MathAbs(CurrentStopLoss - NewStopLoss) > (Ask - Bid)*Koef) { // 修改止损 ................ }


也就是说,如果新的止损点与旧的止损点相差一定数量(1-2),我们就修改订单。
你的问题在这里自动解决了。

 
麦克,谢谢你的建议。会做的。
只是这里的问题不同--它试图设置_到_相同的_值_...也就是说,这样的检查不会挽救错误,而只是减少其概率 =)
 
只是这里的问题不同--它试图设置_到_相同的_值_...也就是说,这样的检查不会挽救错误,而只是降低其概率 =)

这很可能是EA文本中的一个小故障。
我也有过类似的情况,我不记得是怎么解决的。

但上面的例子确保了脚本中的任何错误
就不会有人试图将其设置为相同的值。
 
Только тут проблема в другом - оно пытается установить _на_то_же_значение_... т.е. такая проверка не спасёт от ошибки, а просто уменьшит её вероятность =)

这很可能是专家文本中的一个小故障。我也有一个类似的,怎么解决的,我不记得了。但上面的例子确保了脚本中的任何错误 ,不会试图设置为相同的值。





Mak,那里有1行文字=
)_TrailingStop( orderticket, 50 )。



我写这个函数正是为了避免这样的错误,而且检查的结果也是一样的,不同的是每一个点 都要计算出来。如果数值相同(在这种情况下,从价格到止损点的距离等于50),跟踪止损应该不起作用。此外,在大多数情况下,它不起作用=)))),有时会因某些原因而滑过....。

 
也许NormalizeDouble 的工作方式有时不同?
它是四舍五入还是丢弃?

一般来说,最好永远不要比较浮动类型是否相等。
唯一的例外是:
double A,B; .......... A = .......; ............. B = A; ........... if (B == A) ........



而关于一条线...在_TrailingStop中,有很多行, ,如果至少有2行,就已经有了出错的理由 :)

 
做什么的,丢弃还是舍弃?
我也很好奇;)

我已经在这里部分纠正了:而不是
( orderstoploss == 0.0 ........ )


作出的

if ( orderstoploss <= 0 ......... )

而其他的似乎都很好。

....亏损订单 < ( 买入价 - 追踪止损 * 点 ) 





雷纳特,我一般都把希望寄托在你身上=)这里可能有一个简单的角度--而我只是没有注意到......

 
我看看周末能不能帮上忙。
 
我这个周末会试着看一看,看看是否能帮上忙。
我一定要把它弄好...
 
这可能是一个简单的东西,就像一个角度--而我只是没有注意到......

komposter,你错了 :)正如那个弯勺子的女孩所说,"事情并不像他们看起来那样"。
例如,下面这个循环打印了5个数字。
for (double d = 0.1; d <= 0.5; d += 0.1) Print(d);


在边界增加1.0的情况下,下一个周期将印刷多少?

for (double d = 1.1; d <= 1.5; d += 0.1) Print(d);



你也会期望打印5个数字,但它只打印了4个(四)。这不是很好吗?
如果我们在循环之后再添加一行。

Print("d=" + d + "(d <= 1.5)=" + (d <= 1.5))。


我们得到。

d=1.50000000(d<=1.5)=0



几乎和你的一样,有一个停顿,但更基本 :)。这个问题和第一个计算机芯片一样古老。
计算机使用二进制算术,人类使用十进制算术。在四舍五入时,会出现假象。

Mak建议的 "四舍五入",如果你有四舍五入的根本问题,而不是一个微不足道的错误,就会有帮助。

许多人认为,金融计算必须使用特殊的十进制算术库,但即使这些算术库也可能包含错误,有时候
这有时会产生严重的后果。顺便问一下,Renat,你用的是哪种算术的实现?

 
komposter

看了一下(还没有做任何挖掘),发现了你计算的 参考。
试着 "丢弃 "它,把点。可能这就是问题所在(MarketInfo中的点可能并不总是按照你想要的方式出现的?)