Double vs FLOAT - 不明确的MathFloor错误 - 页 5

 
如果被四舍五入的数字 是尾数,则四舍五入可能是不正确的,在这种情况下,必须在四舍五入之前进行归一化,以达到所需的精度。
 
Taras Slobodyanik:
如果要四舍五入的数字 是尾数,四舍五入可能会出错,在这种情况下,你应该在四舍五入前归一到正确的精度。

我相信正常化是必要的,谁能说我没有做过呢 :-)

当然,数据是有尾巴的,所以Mathfloor是 "走错了路"。

 
Vladislav Andruschenko:

我相信正常化是必要的,谁能说我没有做过呢 :-)

当然,数据是有尾巴的,所以Mathfloor是 "走错了路"。

你的代码在四舍五入前没有进行归一化处理)

它到处都有,但在最后你把一个 未被规范的数字四舍五入

 
Taras Slobodyanik:

你在四舍五入之前没有归一化)

到处都有,但最后你是在四舍五入一个 未被规范的数字

我尝试了数百种代码的变体,我把其中一种变体扔在这里,但事实证明,问题不在四舍五入--而是在打印和注释的数据输出中。

 
Vladislav Andruschenko:

很明显,正常化是必要的。

归一化是一个昂贵的操作,在这个任务中根本不需要NormalizeDouble 和MathFloor。
 
fxsaber:
归一化是一个昂贵的操作,对于这个任务,根本不需要NormalizeDouble和MathFloor。

我认为应该在《手册》中加入对MathFloor 和MathCeil的建议--"建议在进行四舍五入之前对数值进行标准化处理"。

ps.我自己也遇到过一次这个功能。

 
Taras Slobodyanik:

我认为应该在《手册》中加入对MathFloor和MathCeil的建议--"建议在四舍五入前对数值进行标准化处理"。

ps.我自己曾经遇到过这个功能。

我很久以前就偶然发现了它。

但即使是归一化,也不会得到你所期望的结果。

 
那么,为什么没有归一化和MathFloor就能成功呢?

关于交易、自动交易系统和策略测试的论坛

Double vs FLOAT - 不明确的MathFloor错误

fxsaber, 2017.02.26 08:53

#define ALPHA 0.1

int DoubleToInt( const double Num )
{
  return((int)(Num + ALPHA));
}

void OnStart()
{
  double NewPrice = DoubleToInt((Ask + Bid) / (2 * Point)) * Point;

  Print(NewPrice);
}
 
fxsaber:
那么,为什么没有归一化和MathFloor就能成功呢?
它是否符合这样的要求:如果价差是奇数,那么价格应该更接近于买入价?
毕竟,我用MathFloor 正是为了这个目的。
 
Vladislav Andruschenko:
它是否符合这样的要求:如果价差是奇数,那么价格必须更接近于买入价?
是的。