初心者の方からの質問 MQL4 MT4 MetaTrader 4 - ページ 249

 
Taras Slobodyanik #:

要は、関数を使わずに、簡単なプロセッサの命令でアセンブラに変換できる演算子、これが演算子です。

もっと複雑なもの、複雑な手続きを呼び出す必要があるものは関数である。

関数とは、アセンブリ言語ではCALL、ハードウェアではスタックにsecアドレスを保存し、関数パラメータをプログラムでスタックに渡し、ローカル関数変数もスタックに確保する...というのが大まかな内容です。

つまり、関数呼び出しは、PCの言語とハードウェアの規則と結びついた、ある一連の動作なのです。


とオペレーター...正直、議論する前より今の方がwikiで勉強になりました。

 
Igor Makanu #:

まあ、要するに、アセンブラで関数がCALLされ、ハードウェア実装でその先頭アドレスをスタックに保存し、関数パラメータをプログラムでスタックに転送し、ローカル関数変数もスタックに確保する......ということなのでしょう。

つまり、関数呼び出しは、PCの言語とハードウェアの規則と結びついた、ある一連の動作なのです。


とオペレーター...、正直なところ、議論する前より今の方がwikiで勉強になりました。

CALLは呼び出し(演算子)であり、関数そのものでは ありません。

すなわち、関数は多数の演算子である)

 
Taras Slobodyanik #:

CALLは呼び出し(演算子)であり、関数そのものでは ありません。

すなわち、関数は多数の演算子である)

で、演算子が1つしかない場合は、関数ではない のでしょうか?

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

で、演算子が1つなら、それは関数ではない のですか?


なぜ前者は演算子、後者は関数なのでしょうか?

アラート」という言葉自体も演算子である--ただし、関数を呼び出す言葉である)

で、"if "は関数を呼び出すものではありません。

関数は多言語(演算子)

 
皆さん、ご回答ありがとうございます。

MaximとTarasの回答から、この言語の用語体系が厳密でなく、いくつかの演算子を関数と呼ぶ前提があると結論づけられるでしょう。演算子は1つの単語で、関数は多くの単語を持つという回答から、同じ「if」演算子でも、普通の括弧と中括弧の中に多くの単語・アクションを持つことができることも不明となる。
 
Ivan Butko #:
皆さん、ご回答ありがとうございました!議論が始まりました。 MaximとTarasの回答から、この言語の用語は厳密ではなく、いくつかの演算子を関数と呼ぶ前提があると結論付けられます。演算子は1語で、関数は多くの語を持つという回答から、同じ「if」演算子でも、普通の括弧と中括弧の中に多くの語・作用を持つことも不明となる。


演算子はプログラムワードです。

関数は、毎回同じ演算子をたくさん書いて、何度も呼び出す必要がないように作られています。

一度に一つの演算子を実行するために関数を呼び出すことは意味がありません。


ps.アラートは、開発者が誰でも使えるようにと書いた機能(サブプログラム)です。

 
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 を代入

を正しく書いてください。