Fragen von Anfängern MQL4 MT4 MetaTrader 4 - Seite 249

 
Taras Slobodyanik #:

Der Punkt ist, dass Operatoren in Assembler übersetzt werden können, ohne Funktionen zu verwenden, durch einfache Prozessorbefehle - das sind die Operatoren.

Was komplexer ist, was den Aufruf komplexer Prozeduren erfordert, ist eine Funktion.

eine Funktion ist ein CALL in Assembler und seiner Hardware-Implementierung, die die sec-Adresse auf dem Stack speichert, dann werden die Funktionsparameter programmatisch auf dem Stack übergeben, lokale Funktionsvariablen werden ebenfalls auf dem Stack zugewiesen....

d.h. ein Funktionsaufruf ist eine bestimmte Abfolge von Aktionen, die an die Sprach- und Hardwarekonventionen des PCs gebunden sind


Und Betreiber... um ehrlich zu sein, habe ich jetzt mehr aus Wiki gelernt als vor der Diskussion

 
Igor Makanu #:

Nun, um es auf den Punkt zu bringen, die Funktion ist CALL in Assembler und es ist eine Hardware-Implementierung, die die Sekantenadresse auf dem Stack speichert, dann werden die Funktionsparameter programmatisch auf den Stack übertragen, die lokalen Funktionsvariablen werden ebenfalls auf dem Stack abgelegt....

d.h. ein Funktionsaufruf ist eine bestimmte Abfolge von Aktionen, die an die Sprach- und Hardwarekonventionen des PCs gebunden sind


und Betreiber..., um ehrlich zu sein, habe ich jetzt mehr aus dem Wiki gelernt als vor der Diskussion

CALL ist ein Aufruf (Operator), nicht die Funktion selbst.

d.h. eine Funktion ist eine große Anzahl von Operatoren)

 
Taras Slobodyanik #:

CALL ist ein Aufruf (Operator), nicht die Funktion selbst.

d.h. eine Funktion ist eine große Anzahl von Operatoren)

und wenn es nur einen Operator gibt, dann ist es keine Funktion?

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

und wenn es nur einen Operator gibt, dann ist es keine Funktion?

Die Frage bezog sich auf "if" und "alert".
Warum ist das erste ein Operator und das zweite eine Funktion?

Das Wort "alert" selbst ist auch ein Operator - aber es ist ein Wort, das eine Funktion aufruft)

und das Wort "if" ruft keine Funktion auf.

Funktion besteht aus vielen Wörtern (Operatoren)

 
Meine Herren, ich danke Ihnen für Ihre Antworten, es gibt viel zu diskutieren. Leider kann ich das meiste davon nicht verstehen, weil Sie tiefe Begriffe verwenden, die mir im Lehrbuch noch nicht begegnet sind.

Aus der Antwort von Maxim und Taras kann ich schließen, dass der terminologische Apparat in der Sprache nicht streng ist und es Annahmen gibt, die einige Operatoren als Funktionen bezeichnen. Ausgehend von der Antwort, dass ein Operator ein Wort ist und eine Funktion viele Wörter hat, wird auch unklar, dass derselbe "if"-Operator viele Wörter/Aktionen in regulären und geschweiften Klammern haben kann.
 
Ivan Butko #:
Meine Herren, ich danke Ihnen für Ihre Antworten, die Diskussion ist eröffnet. Leider kann ich das meiste davon nicht verstehen, weil Sie tiefe Begriffe verwenden, die mir im Lehrbuch nicht begegnet sind.

Aus der Antwort von Maxim und Taras kann ich schließen, dass die Terminologie in der Sprache nicht streng ist und es Annahmen gibt, die einige Operatoren als Funktionen bezeichnen. Ausgehend von der Antwort, dass ein Operator ein Wort ist und eine Funktion viele Wörter hat, wird auch unklar, dass derselbe "if"-Operator viele Wörter/Aktionen in regulären und geschweiften Klammern haben kann.

eine Funktion ist ein Unterprogramm.
ein Operator ist ein Programmwort.

Eine Funktion ist so aufgebaut, dass man nicht jedes Mal viele identische Operatoren schreiben und sie mehrmals aufrufen muss.

Es macht keinen Sinn, eine Funktion aufzurufen, um einen einzelnen Operator auszuführen, da dies auf einmal geschehen kann.


ps. Alert ist eine Funktion (Unterprogramm), die von den Entwicklern so geschrieben wurde, dass jeder sie nutzen kann.

 
Taras Slobodyanik #:

eine Funktion ist ein Unterprogramm.
ein Operator ist ein Programmwort.

Eine Funktion ist so aufgebaut, dass man nicht jedes Mal viele identische Operatoren schreiben und sie mehrmals aufrufen muss.

Es macht keinen Sinn, eine Funktion aufzurufen, um einen einzelnen Operator auszuführen, da dies auf einmal geschehen kann.


ps. Alert ist eine Funktion (Unterprogramm), die von den Entwicklern für alle Benutzer geschrieben wurde.

Genau, Alert hat eine Beschreibung, die als ein Merkmal der Funktion versteckt ist. Ich habe den Abschnitt noch einmal gelesen, das habe ich bemerkt.

Danke für die Klarstellung, ich denke, es gibt keine Dissonanzen mehr in meinem Kopf zu diesem Thema

 
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);
}
Guten Tag. Bitte beraten Sie mich. Warum ist die Berechnung nicht korrekt? Genauer gesagt zeigt es den Gewinn der nächsten Bestellung an, ohne ihn zur vorherigen zu addieren.
Die Idee ist, das Ticket zu ändern, ab dem sie nach einem bestimmten Gewinn steigen sollen.
 
i durchgehen und cnt ersetzen
 
Aleksei Stepanenko #:
i durchgehen und cnt ersetzen

schreiben Sie den richtigen Weg auf.