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

 
fxsaber:
是的。
谢谢你
 
Vladislav Andruschenko:
谢谢你
在第一页上有一个解决方案...它已经在第六页了。
 
fxsaber:
那么,为什么没有归一化和MathFloor就能成功呢?
如果输入是0.95?
 
Dmitry Fedoseev:
如果输入是0.95?
我不明白。
 
Vladislav Andruschenko:
我可能不太确定要买什么,但看看这个选项
void OnStart()
{
double ask2 = 1.55557, ask3 = 1.55558, bid = 1.55555;
  Print("(ask2 + bid)/2 = ", (ask2 + bid)/2);
   Print("(ask3 + bid)/2 = ", (ask3 + bid)/2);
    int avPrice_2 = (int)NormalizeDouble((ask2/_Point + bid/_Point)/2, 0);
   int avPrice_3 = (int)NormalizeDouble((ask3/_Point + bid/_Point)/2, 0);
  Print("avPrice_2 = ", avPrice_2);
Print("avPrice_3 = ", avPrice_3);
}/*******************************************************************/
结果
2017.02.27 00:03:54.453 00 (EURUSD.m,H1)        (ask2 + bid)/2 = 1.55556
2017.02.27 00:03:54.456 00 (EURUSD.m,H1)        (ask3 + bid)/2 = 1.555565
2017.02.27 00:03:54.456 00 (EURUSD.m,H1)        avPrice_2 = 155556
2017.02.27 00:03:54.456 00 (EURUSD.m,H1)        avPrice_3 = 155557
 

"采取Ask和Bid.并计算出平均价格。如果价差是奇数(3,5,7,9,等等),那么就把平均价格等同于接近买入价。"

任务未定。

- 奇数散布是什么意思。1,3,...,9倍的 还是1,3,...,17,57倍的点? 四舍五入是在单位段内进行的......。

- 什么是 "更接近投标 "的意思?特别是如果差价是43倍点,比如说。我们是否在谈论将投标书等同于什么?

你首先需要明确问题,只有这样才能做出明确的决定。

同时,由于我们讨论的是偶数/奇数,所以顺理成章地去讨论整数,这个概念是有意义的。

double Ask,Bid,Middle; // Уже известные курсы Ask и Bid, вычисляемый средний курс
int Mash,Spr; // Множитель перехода к целым числам. Для 4-разрядного EURUSD 10000. И целочисленный спред

Mash=MathRound(1.0/_Point);
Spr=MathRound((Ask-Bid)*Mash); // Целочисленный спред
// Придаем конкретность среднему курсу.  Предполагаем, что "ближе к Бид" значит "ближайший меньший среднего арифметического Ask и Bid, кратный Point"
Spr=Spr >> 1; // Целочисленный спред, деленный на 2 с отбрасыванием остатка
Middle=Bid+Spr*_Point;


// Если предположение неверно, канва последующих разборов такая
if ((Spr &  1)  != 0)) {  // Спред нечетный
  }
else {  // Спред четный
  }

 
我在一个非常简单的任务中遇到了类似的情况--脚本从时间序列中读取欧元兑美元的开盘价到一个双数组中,然后 该数组写入一个文件。只要价格大于1,一切都很好。但是,当零一年的价格低于1时,有时不是很频繁,一年大约20次,一些奇怪的事情开始发生--在小数点后第15位的某个地方,1被切断了,所有以前的,当然,变成了9。这不是什么大问题,但也不是什么好事。归一化在任何地方都能做到,在读取后和写入文件前,在记录时,用归一化从一个数组转换到另一个数组--没有任何作用。如果我在从时间序列读取时加1,一切都很好。最后我厌倦了,把镙丝球改成了浮动的,就平静下来了。
 
Vladimir:

"采取Ask和Bid.并计算出平均价格。如果价差是奇数(3,5,7,9,等等),那么就把平均价格等同于接近买入价。"

任务未定。

事实上,这项任务似乎很简单,而且一个小学生就能完成。:-) 我也这么想。

但在从服务器定价、数据规范化和其他方面--有一些黑暗的角落,你甚至没有意思。

我用mql编程已经9年了--我从来没有遇到过归一化的问题,因为我得到了正确的答案。而且精确到1毫点的工作一直都很正常。

但有些任务需要高精确度。

而且有条件。

即。

  1. 我们采取ASC和BID价格 - 我们计算其平均价格=容易吗?
  2. 相应地,如果差额是奇数(例如3点),那么我们不能在没有余数的情况下进行除法,对吗?

因此,我们必须对价格进行规范化处理,如果有残留物(即使是偶数价差,也会有残留物!:-)),那么我们的平均价格就会接近低点,也就是接近买入价

比如说。

  • 升值 = 1.23455 买入 = 1.23457 差价 = 2 平均价格:1.23456
  • 问价 = 1.23455 买价 = 1.23458 价差 = 3 平均价格:1.23456
  • 要求 = 1.23455 买入 = 1.23459 差价 = 4 平均价格:1.23457

而一切似乎都很简单?一切都应该工作,而我自己是个傻瓜吗?我坐了2天,希望自己不是个傻瓜。了解关于尾巴和dabbles以及tribbles和bibbles..................

但是!用同样的公式,用偶数点差和奇数点差--在某些情况下--公式不起作用 。(见上文) .

包括,它可以对货币起作用,对石油不起作用

在某个时间点,它可能对日元起作用,而对美元不起作用

也许它是在看月亮的影响? 非洲的天气.................

但是,当你确信公式有效时,你没有注意到那1个毫点。你在.....,然后"砰,砰,砰,砰",那个毫点决定逃跑,或者打电话给第二个毫点,他挡住了去路。

IMHO。

你可以认为我是一个傻瓜,一个编程不足的人,一个小学生....。等等。

但事实依然如此。

双重值的不同组合会出现错误。同时,一切都很清楚,有浮动。

我还没有搞清楚。帮助是非常好的,我总是请求帮助,这很正常。 而且我可能会在10年内向社会寻求帮助。这很正常。而且,如果我知道陷阱,我就会对求助电话作出回应--这很正常。

当然,在这样的测试之后,我将做 "额外的调查",以了解自己为什么会出现这种情况。

感谢你们所有人的回应和帮助。

 
Vladislav Andruschenko:

事实上,这项任务似乎很简单,而且一个小学生就能完成。:-) 我也这么想。

但在从服务器获得的价格中,在数据规范化和其他方面都有这样的黑暗角落--你甚至没有意思。

我用mql编程已经9年了--我从来没有遇到过归一化的问题,因为我得到了正确的答案。而且精确到1毫点的工作一直都很正常。

但是!用同样的公式,用偶数点差和奇数点差--在某些情况下--公式不起作用 。(见上文) .

在不同的组合中,如果有双倍值,就会出现错误。同时,有了漂浮物,一切就都清楚了。

Metacvotes与一般的数据规范化有什么关系?这个术语对程序员来说意味着不同的东西,根本不是四舍五入。例如,阅读IEEE标准754,请点击:http://www.softelectro.ru/ieee754.html。 如果是4字节的长度,未规范化的实数范围可达1.17549421*10^(-38),如果是8字节的长度,可达4....*10^(-324),我们很少遇到它们,当然也不会在课程计算中遇到。如果你需要调用OrderSend,那么就按照这个函数的要求取整。在任务需要之前,没有必要使用四舍五入。

错误不是发生在double或float格式上,而是发生在所使用的操作上。这个公式没有解决这个任务的事实告诉你,它不适合这个任务。仅此而已。告诉我,在没有正常化的情况下,正常的计算会出现什么错误(这是我上面帖子中的那块)。

Spr=MathRound((Ask-Bid)/_Point); Spr=Spr >>1; Middle=Bid+Spr*_Point;

IEEE 754 - стандарт двоичной арифметики с плавающей точкой
  • Yashkardin Vladimir
  • www.softelectro.ru
double-precision длина числа, бит 32 64 смещенная экспонента (E), бит 8 11 остаток от мантиссы (M), бит 23 52 смещение 127 1023 двоичное денормализованое число (-1)S∙0,M∙exp2-127 ,где M-бинарное (-1)S∙0,M∙exp2-1023 ,где M-бинарное двоичное нормализованое число (-1)S∙1,M∙exp2(E-127) ,где M-бинарное (-1)S∙1,M∙exp2(E-1023) ,где M-бинарное...
 
Vladislav Andruschenko:

事实上,这项任务似乎很简单,而且一个小学生就能完成。:-) 我也这么想。

但在从服务器获得的价格中,在数据规范化和其他方面都有这样的黑暗角落--你甚至没有意思。

我用mql编程已经9年了--我从来没有遇到过归一化的问题,因为我得到了正确的答案。而且精确到1毫点的工作一直都很正常。

但有些任务需要高精确度。

而且有条件。

即。

  1. 我们采取ASC和BID价格 - 我们计算其平均价格=容易吗?
  2. 相应地,如果差额是奇数(例如3点),那么我们不能在没有余数的情况下进行除法,对吗?

因此,我们必须对价格进行规范化处理,如果有残留物(即使是偶数价差,也会有残留物!:-)),那么我们的平均价格就会接近低点,也就是接近买入

比如说。

  • 升值 = 1.23455 买入 = 1.23457 差价 = 2 平均价格:1.23456
  • 问价 = 1.23455 买价 = 1.23458 价差 = 3 平均价格:1.23456
  • 要求 = 1.23455 买入 = 1.23459 差价 = 4 平均价格:1.23457

而一切似乎都很简单?一切都应该工作,而我自己是个傻瓜吗?我坐了2天,希望自己不是个傻瓜。了解关于尾巴和dabbles以及tribbles和bibbles..................

但是!用同样的公式,用偶数点差和奇数点差--在某些情况下--公式不起作用 。(见上文) .

包括,它可以对货币起作用,对石油不起作用

在某个时间点,它可能对日元起作用,而对美元不起作用

也许它是在看月亮的影响? 非洲的天气.................

但是,当你确信公式有效时,你没有注意到那1个毫点。你在.....,然后"砰,砰,砰,砰",那个毫点决定逃跑,或者打电话给第二个毫点,他挡住了去路。

IMHO。

你可以认为我是一个傻瓜,一个编程不足的人,一个小学生....。等等。

但事实依然如此。

双重值的不同组合会出现错误。同时,一切都很清楚,有浮动。

我还没有搞清楚。帮助是非常好的,我总是请求帮助,这很正常。 而且我可能在10年内向社会请求帮助。这很正常。而且,如果我知道陷阱,我就会对求助电话作出回应--这很正常。

当然,在这样的测试之后,我将做 "额外的调查",以了解自己为什么会出现这种情况。

感谢你们所有人的回应和帮助。

根据你的目标,有时完全采用整数是值得的。它节省了大量的神经 :-)有一次,我有一个任务,我必须准确地标出很多很多的级别,起初我在双倍的基础上挣扎,但后来我把所有的东西都从0转换成整数点,一切都变得很容易,很简单,没有错误。