初学者的问题 MQL4 MT4 MetaTrader 4 - 页 249

 
Taras Slobodyanik #:

重点是,运算符可以不使用函数,通过简单的处理器命令翻译成汇编,这些就是运算符。

更复杂的是,需要调用复杂程序的是一个函数。

关于要点,一个函数在汇编器中是一个CALL,它的硬件实现是将sec地址保存在堆栈中,然后函数参数在堆栈中以编程方式传递,局部函数变量也在堆栈中分配....。

也就是说,函数调用是一个特定的动作序列,与个人电脑的语言和硬件惯例相联系。


和运营商......说实话,我现在从维基学到的东西比我在讨论前学到的更多

 
Igor Makanu #:

好吧,如果说到重点,函数是在汇编中调用的,而且是硬件实现的,它将秘密地址保存在堆栈中,那么函数参数是以编程方式转移到堆栈中的,局部函数变量也分配在堆栈中....。

也就是说,函数调用是一个特定的动作序列,与个人电脑的语言和硬件惯例相联系。


和运营商......,说实话,我现在从维基上学到的东西比讨论前更多。

CALL是一个调用(操作符),而不是函数本身。

即一个函数是大量的运算符)

 
Taras Slobodyanik #:

CALL是一个调用(操作符),而不是函数本身

即一个函数是一个大量的运算符)

如果只有一个运算符,那么它就不是一个函数

void OnStart()
{
   int x = 0;
   inc(x);
}
//+------------------------------------------------------------------+
void inc(int &v)
{
   v = v + 1;
}
 
Igor Makanu #:

而如果有一个运算符,那么它就不是一个函数

问题是关于 "如果 "和 "警报"。
,为什么第一个是运算符,第二个是函数?

"警报 "这个词本身也是一个运算符--但它是一个调用函数的词)

而 "如果 "这个词并没有调用一个函数。

功能是许多字(运算符)。

 
先生们,感谢你们的回答,有很多的讨论。

从马克西姆和塔拉斯的回答中,我可以得出结论,语言中的术语设备并不严格,存在假设,把一些运算符称为函数。基于运算符是一个字,而函数有很多字的答案,也就不清楚同一个 "if "运算符在正括号和大括号中可以有很多字/动作。
 
Ivan Butko #:
先生们,谢谢你们的回答,讨论开始了。 从马克西姆和塔拉斯的回答中,我可以得出结论,语言中的术语并不严格,而且存在假设,把一些运算符称为函数。基于运算符是一个字,而函数有很多字的答案,也就不清楚同一个 "if "运算符在正括号和大括号中可以有很多字/动作。

一个函数是一个子程序。
一个运算符是一个程序字。

制作一个函数是为了让你不必每次都写许多相同的运算符,并多次调用它。

调用一个函数来执行一个运算符是没有意义的,因为它可以一次性完成。


ps.Alert是开发人员编写的一个函数(子程序),以便每个人都能使用它。

 
Taras Slobodyanik #:

一个函数是一个子程序。
一个运算符是一个程序字。

制作一个函数是为了让你不必每次都写很多相同的运算符,并多次调用它。

调用一个函数来执行一个运算符是没有意义的,因为它可以一次性完成。


ps.Alert是一个由开发人员编写的函数(子程序),供大家使用。

对了,Alert有一个描述,它作为函数的一个特征被隐藏起来。重读该节,注意到了这一点。

谢谢你的澄清,我想在这个问题上,我的脑子里已经没有不和谐的因素了

 
double CalculateProfitHistory() 
{
   double profit = 0;
   int cnt = LockTicket, i , ototal = OrdersHistoryTotal();
   for(i = 0; i < ototal; i++)
     {
      if(OrderSelect(cnt, SELECT_BY_TICKET, MODE_HISTORY))
        {
         if(OrderSymbol() == Symbol() && OrderCloseTime() > 0)
           {
            if(OrderType() == OP_BUY || OrderType() == OP_SELL)
              {
               if(OrderMagicNumber() == Magic )
                 {
                  profit += OrderProfit()+OrderCommission()+OrderSwap();
                                    
                 }
              }
           }
        }
     }
   return(profit);
}
下午好。请告知。为什么计算结果不正确?更准确地说,它显示的是下一个订单的利润,而不是把它加到前一个订单上。
这个想法是在设定了一定的利润后,改变他们应该向上的门票。
 
通过i并替换cnt
 
Aleksei Stepanenko #:
通过i并替换cnt

写下正确的方法。