错误、漏洞、问题 - 页 101

 
Urain:

无论是哪种方式。

if(a==0){expression}意味着如果a是0,那么它就是真的,所以执行{expression}。

if(a=0){expression}等同于if(a){a=0;expression}。如果a为真,{a=0;表达式}。

第二条是错误的,应该这样写

if(a=x) { 表达式 } 将x的值分配给变量a,如果之后a不为0,则执行表达式。

if(a=0) { } 优化后将只有a=0

 
mql5:

第二条是错误的,正确的写法是

if(a=x) { 表达式 } 将x的值分配给变量a,如果之后a不为0,则执行表达式。

if(a=0) { } 优化后将只有a=0

对不起,这是正确的,表情是从左到右执行的。

这就是为什么我们从分配开始,然后检查真相。

 
Renat:

情况大致如此。

这段代码不仅能计算出最大体积,而且还能将其准确地融入符号设置的限制中。

它计算了它,但在插入时忘记了为什么要计算它。

   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(lot<minvol) lot=minvol;

到此为止的手数价值的计算,是为了以最小的保证金消耗所有可用的保证金。

如果这个值至少增加了一个量级,就没有足够的资金来开仓。

但是,所引用的代码的第二行是在如果条件得到满足的情况下产生的批量值,并可能增加一个比体积步长大得多的值,因为在现实中存在着体积最小=0.1和体积步长=0.01。

而在下面这段代码中,可能会出现除以0的情况,对此没有任何保护措施。

   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   lot=stepvol*NormalizeDouble(lot/stepvol,0);

如果SymbolInfoDouble()返回0,就是这样了。MQL5程序终止于除以0,对吗?它不能返回0?你不能以 "它不会返回0 "作为借口,因为,首先,它可能会,其次,除以0是致命的。

关于 "输入的准确性 "有一些较少的评论,但它们确实不是太重要,也就是说,它们没有如此严重的后果,你可以忽略它们。

在预料到可能出现的关于代码 "近似 "的争论时,我注意到:有多少产品的用户能够发现并有能力修复这样的 "坏地方"?

对他们来说,这就是 "来自开发者的代码"。一个值得仰望的榜样。

 

为什么当所有的必填项都填完后,"下一步 "按钮没有激活?

 
EvgeTrofi:

为什么当所有的必填项都填完后,"下一步 "按钮没有激活?

你需要同意通过邮寄方式接收通讯。
 
simpleton:

它确实在计算,但后来它忘记了它在计算什么。

预料到可能的争论,即代码是 "近似的",我想指出:有多少产品的用户可以正确地修复这样的 "坏地方"?

代码是近似的(从两块复制的),但你的评论是正确的。

以下是更正后的版本。

double CalculateMaxVolume(string symbol)
  {
   double price=0.0;
   double margin=0.0;
//--- select lot size
   if(!SymbolInfoDouble(symbol,SYMBOL_ASK,price))                return(0.0);
   if(!OrderCalcMargin(ORDER_TYPE_BUY,symbol,1.0,price,margin)) return(0.0);
   if(margin<=0.0)                                            return(0.0);

   double lot=NormalizeDouble(AccountInfoDouble(ACCOUNT_FREEMARGIN)/margin,2);
//--- normalize and check limits
   double stepvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_STEP);
   if(stepvol>0.0)
     {
      double newlot=stepvol*NormalizeDouble(lot/stepvol,0);
      if(newlot>lot) lot=NormalizeDouble(newlot-stepvol,2);
      else           lot=newlot;
     }

   double minvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MIN);
   if(lot<minvol) lot=0.0;   // 

   double maxvol=SymbolInfoDouble(symbol,SYMBOL_VOLUME_MAX);
   if(lot>maxvol) lot=maxvol;
//--- return trading volume
   return(lot);
  }
 
gumgum:

还有,为什么session_index++;,而session_index=1已经是假的。

我们不能事先知道每个工具的会议数量是多少。所以我们按编号查询每个会话。如果它是真的

session_exist=SymbolInfoSessionQuote(symbol,day,session_index,start,finish);

我们对其开始和结束的时间感兴趣。如果我们得到的是假的--那就是了,这个数字没有会话。

 
Rosh:

我们不能事先知道一种乐器的节数是多少。因此,我们按编号要求每节课。如果它是真的

我们分析其开始和结束的时间。如果我们得到的是假的--那就是了,这个数字没有会话。

A...... 那为什么在星期五,一切都在24点结束,但实际上是23点?
 
gumgum:
A......,那么为什么一切都在周五的24点结束,而现实中是23点?
因为服务器就是这么说的。我们会去看看的,谢谢。
 
据我所知,你现在可以在你的个人资料上更改你的电子邮件?在电子邮件 领域,你现在可以进行修改,但这些修改不会被保存下来
原因: