任何菜鸟问题,为了不给论坛添乱。专业人士,不要路过。没有你就无处可去 - 6. - 页 364

 
bercut0077:
日安,有一个指标,但在测试器中,从年初到3月的某一时期后工作,然后停止给出信号,而我需要测试一个长的时期(AuthorizedSSBODynamicBreakoutBoxFinalEdition),代码中哪里会有这种限制--请至少给一个提示,在哪里挖掘,哪些运算符决定它?
它有时会出现故障。它只是停止画框。任何地方都没有限制。测试potikovo。有时会有帮助。
 
Sepulca:
你有该指标的源代码吗?如果没有,请搜索作者))))

我有源代码--它是一个烂摊子。
 
不,那我甚至不会去尝试它。有时你会迷失在自己的代码中,更不用说别人的代码了))))。
 

如何告诉我请一些成熟的专家顾问在MQL4和5,而且时间很短,有时你需要检查一个想法或帮助别人,最终创建一个机器人的基础,并完成自己的写作...

我将不胜感激,提前感谢!=)。

 
vadynik:

我正在写一个这样的函数

但为什么OrderOpenPrice()在五位数上返回四舍五入的价格?


int i, k=OrdersTotal();

  for (i=k-1; i>=0; i--) 
   {
    if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES))
     {                
       if ((OrderType()==OP_BUY)&&(OrderOpenPrice()>=Ask-350*Point)&&(OrderMagicNumber()==Magic)||(OrderType()==OP_BUY)&&(OrderOpenPrice()<=Ask+250*Point)&&(OrderMagicNumber()==Magic))
         {
           double o=OrderOpenPrice();
           Print(o);
           OrderClose(OrderTicket(),OrderLots(),Bid,50,Blue); 
         
      }
    }
  }
试着这样做,看看OrderOpenPrice() 真正的返回值,也许原因是你用 Digits参数对函数进行了规范化处理 ,你在打印机中看到的不是 它的真实情况。
 
vadynik:

我正在写一个这样的函数

但为什么OrderOpenPrice()会返回四舍五入到小数点后四位的价格?

打印不返回四舍五入的价格,在这种情况下,它只是输出默认的小数位数。
实际上,外汇市场上不存在低于数字 的小数点。 一般来说,以欧元SD为例,它只有四位小数点,甚至第五位小数点也是经纪公司的想法。

但在你的情况下,最好这样做:Print(DoubleToStr(OrderOpenPrice(),Digits))。

 
Ekburg:

试着这样做,看看OrderOpenPrice() 真正的返回值,也许原因是你用 Digits参数规范了该函数 ,你在打印机上看到的不是 它的真实情况。

没有规范化也是一样的,我需要从开盘价 中减去点数,如果这样的话,价格就是我所需要的,但这样我就会在IF()中得到一个类型不匹配。
Print(DoubleToStr(OrderOpenPrice(),Digits));
 
vadynik:

我需要从开盘价中减去点数,如果是这样,价格就是我所需要的,但随后我在IF中得到一个类型不匹配(

用四位数做计算。 如果准确性对你很重要,那么就用最后一位数的值放回去,因为在计算过程中,由于计算的性质,它不会发生变化。
 
Ekburg:

像对四位数一样进行计算,如果准确性对你很重要,那么就原地返回,用前面的最后一位数的值,因为在计算过程中,由于计算的特殊性,它不会改变。
只有在Ordersend、orderclose等情况下才需要归一化,而且还是在比较实际数值时,在打印机中指定小数点后 的任何数量的符号。但如果你只写Print(whatever_double_value),它通常会打印四个小数位。因此,正确的方法是写成
Print(DoubleToStr(OrderOpenPrice(),Digits));

如前所述,首先将双数转换为具有指定小数位数的字符串,然后使用Print.... 将其打印到日志中。
 
而如果计算积分,不要将其与积分混淆。说双倍SPRED=要价-出价点数,甚至让双倍SPRED=(要价-出价)/点数。