[存档!]任何菜鸟问题,为了不使论坛变得混乱。专业人士,不要路过。没有你,哪里都不能去 - 4. - 页 318

 
Zhunko:
没有检查,但不知何故。


完全无用的姿态足以使 double res=NormalizeDouble(res,1) 在数学上仍能处理 double res = 3; 或 double res = 3.0。

这种差异只有在打印输出(图)中才能看到,但这并不在作者对问题的描述中。

 
FAQ:


完全无用的姿态足以使 double res=NormalizeDouble(res,1) 在数学上仍能处理 double res = 3; 或 double res = 3.0。

差异只会在打印输出(图表)中显示出来,但这并不在作者对问题的描述中。

那么,你可以这样做。

double MathRoundDec(double dValue) 
 {
  return(MathRound(10 * dValue) / 10);  
 }
我认为第一个变体更好。它的工作速度会更快。
 
Zhunko:

好吧,你可以这样去做。

我认为第一个选项是最好的。它的工作速度会更快。


这个选项。

 double res=NormalizeDouble(res,1);

应该是最快的

 
谢谢大家。我将在星期一汇报--我将尝试所有的选择!
 
Vadim的版本快了20-25%,但当迭代次数超过一百万时,效果开始稳定地显现出来。(检查)
 
FAQ:
Vadim的版本快了20-25%,但当迭代次数超过一百万时,效果开始稳定地显现出来。(检查)

给我看看代码,你是怎么检查的?
 
FAQ:
Vadim的版本快了20-25%,但当迭代次数超过一百万时,效果开始稳定地显现出来。(经测试)
非常感谢您!
 
okvseok:

正确的写法是:如果(OrderSelect (OrdersHistoryTotal()-1, SELECT_BY_POS, MODE_HISTORY) == OrderTakeProfit() == OrderClosePrice()Stop=false //即如果最后一笔订单在Take Profit(达到一定水平后获利)处关闭,Stop=false?(在全局变量中停止)

这个问题的出现是因为订单打开的条件是if((iClose(NULL,0,1)<ma) && Stop==True)...

 

永远不要比较,非正常化的拍摄,毫无用处。顺便说一下,拿货订单的收盘价 可能与拿货价不同(真实/演示(在线))。

因此,更正确的做法是测量价格差异模块,将其与测试值进行比较。

if(MathAbs(OrderTakeProfit()-OrderClosePrice())<2*Point){Stop=false;}
 
Vinin:

给我看看你的代码,你是如何测试它的

   double in = 3.24857,res;
   int i, pretime = GetTickCount();
   for(i=0;i<1000000;i++){res=MathRound(in*10)/10;}
   Print("Stage 1 : ",GetTickCount()-pretime);
   pretime = GetTickCount(); 
   for(i=0;i<1000000;i++){res=NormalizeDouble(in,1);}
   Print("Stage 2 : ",GetTickCount()-pretime);  
震惊了我自己:)))