Double vs FLOAT - 不明确的MathFloor错误

 

大家好,我对报价的准确性已经感到厌倦了。归一化等等。

      float AUTOPRICE;
      float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
      float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
      float Averab=((askP+bidP))/2.0;
      AUTOPRICE=MathFloor(Averab)*Point;
      Print("FLOAT  "+"  askP="+askP+" bidP="+bidP+" Averab="+DoubleToString(Averab,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE,10));

      double AUTOPRICE2;
      double askP2=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
      double bidP2=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
      double Averab2=((askP2+bidP2))/2.0;
      AUTOPRICE2=MathFloor(Averab2)*Point;
      Print("DOUBLE  "+"  askP2="+askP2+" bidP2="+bidP2+" Averab2="+DoubleToString(Averab2,10)+" AUTOPRICE="+DoubleToString(AUTOPRICE2,10));

传播:2

2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TESTMATHFLOOR EURUSD,M30:DOUBLE askP2=105143 bidP2=105141 Averab2=105142.000000 AUTOPRICE=1.0514200000

2017.02.26 09:56:54.475 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105143 bidP=105141 Averab=105142.0000000000 AUTOPRICE=1.0514199734




传播:3

2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105144 bidP2=105141 Averab2=105142.5000000000 AUTOPRICE=1.0514200000

2017.02.26 09:57:47.832 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105144 bidP=105141 Averab=105142.5000000000 AUTOPRICE=1.0514199734


传播:4

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105145 bidP2=105141 Averab2=105143.000000 AUTOPRICE=1.0514200000

2017.02.26 09:58:05.813 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOAT askP=105145 bidP=105141 Averab=105143.0000000000 AUTOPRICE=1.0514299870

传播:5

2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:DOUBLE askP2=105146 bidP2=105141 Averab2=105143.5000000000 AUTOPRICE=1.0514300000

2017.02.26 09:58:39.495 2017.01.02 00:03:00 Exp - DOUBLE TEST MATHFLOOR EURUSD,M30:FLOATaskP=105146 bidP=105141 Averab=105143.5000000000 AUTOPRICE=1.0514299870

那些额外的标志是在隧道尽头的某个地方..........。

 
      double askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
      double bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);

      double Averab=((askP+bidP)*1)/2.0;
      Print("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor((int)Averab)="+MathFloor((int)Averab));

在传播=2时

askP=105143 bidP=105141 Averab=105142MathFloor((int)Averab)=105142

点差=3时

askP=105144 bidP=105141 Averab=105142.5 MathFloor((int)Averab)=105142

at 4!!!! spread

askP=105545 bidP=105141 Averab=105143 MathFloor((int)Averab)=105142

为什么?

 
Vladislav Andruschenko:

大家好,我对报价的准确性已经感到厌倦了。归一化等等。

你应该在某种程度上能够理解什么是double和int。类型转换是如何工作的。

我从来没有使用过MathMod 和MathFloor。你的代码让人觉得你根本不明白你所写的东西背后是什么。

打印出来的双数是关于什么的。如果你想打印double的真实值,你需要查看它的字节。

 

仅仅是为了避免不得不手动写。

这个变量本身并没有给出我所期望的结果。

类型铸造、int规范化和配音是我一直在做的事情,没有人帮助我。

此刻我很绝望,因为我已经尝试了所有的选项。并且放了一段1000分之一的代码,但它没有发挥应有的作用。

但感谢你的帮助。

试着做我想做的事:事后不要给我看代码,只要告诉我它是否有效。

采取询问和出价。

并计算出平均价格。

如果价差是奇数(3,5,7,9,等等),那么相当于平均价格接近于买入价。

比如说。

买入价=1.55555 卖出价=1.55557平均价格=1.55556 价差=2

买入价=1.5555 卖出价=1.55558平均价格=1.55556 价差=3

而且你会得到它的权利。

但是当价差为4、5、6、7时--你会有这种准确度,进入未知状态。而这些数字会游向错误的方向。

 
Vladislav Andruschenko:
      double askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
      double bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);

      double Averab=((askP+bidP)*1)/2.0;
      Print("askP="+askP+" bidP="+bidP+" Averab="+Averab+" MathFloor((int)Averab)="+MathFloor((int)Averab));

在传播=2时

askP=105143 bidP=105141 Averab=105142 MathFloor((int)Averab)=105142

点差=3时

askP=105144 bidP=105141 Averab=105142.5 MathFloor((int)Averab)=105142

at 4!!!! spread

askP=105545 bidP=105141 Averab=105143 MathFloor((int)Averab)=105142

为什么?

有一次,我遇到了类似的情况--我的脑海中沸腾着愤懑的情绪。将double替换成float 有帮助,我还是不知道为什么

 
sibirqk:
我曾经遇到过类似的情况--当时我的脑海中沸腾着愤懑的情绪。用float代替double 有帮助,我还是不知道为什么

谢谢你,我会试一试的........,我的心也被震撼了。

是的!!!。这正是它的工作方式!没关系的。

float askP=NormalizeDouble(Ask,Digits)/NormalizeDouble(Point,Digits);
float bidP=NormalizeDouble(Bid,Digits)/NormalizeDouble(Point,Digits);
float Averab=((askP+bidP))/2.0;

谢谢!!!。我不知道我会做什么了........

 
#define ALPHA 0.1

int askP = (int)(Ask / Point + ALPHA);
int bidP = (int)(Bid / Point + ALPHA);

这就是MathFloor 的工作方式

int MyMathFloor( const double Num )
{
  return((int)((Num > 0) ? Num : Num - 1));
}
 
double Averab = NormalizeDouble ((Ask + Bid)/(2.0 * Point), Digits);
 
fxsaber:
#define ALPHA 0.1

int askP = (int)(Ask / Point + ALPHA);
int bidP = (int)(Bid / Point + ALPHA);

这就是MathFloor的工作方式

int MyMathFloor( const double Num )
{
  return((int)((Num > 0) ? Num : Num - 1));
}

包括2、3、4、5、6、7?

因为我以前试过你的方法(没有+ALPHA)。2,3的传播是可以的,但4,5已经是一个故障 了。

安德烈-迪克
double Averab = NormalizeDouble ((Ask + Bid)/2.0, Digits);

正常化,这是我在函数中做的第一件事,但不幸的是,在某些传播中,它开始出现故障。

 
Vladislav Andruschenko:

正常化是我在函数中做的第一件事,但不幸的是,在某些传播中,它开始出现故障。

我把它修好了,现在试试吧。
 
Vladislav Andruschenko:

采取询问和出价。

并计算出平均价格。

如果价差是奇数(3,5,7,9等),那么相当于平均价格更接近于买入价。

#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);
}