Domande dai principianti MQL4 MT4 MetaTrader 4 - pagina 249

 
Taras Slobodyanik #:

Il punto è che gli operatori possono essere tradotti in assembler senza usare funzioni, con semplici comandi del processore - questi sono gli operatori.

Ciò che è più complesso, ciò che richiede la chiamata di procedure complesse è una funzione.

riguardo al succo, una funzione è una CALL in assembler ed è un'implementazione hardware che salva l'indirizzo sec sullo stack, poi i parametri della funzione sono programmaticamente passati sullo stack, le variabili locali della funzione sono anche allocate sullo stack....

cioè una chiamata di funzione è una certa sequenza di azioni, legata al linguaggio e alle convenzioni hardware del PC


E gli operatori... ad essere onesti, ho imparato più da Wiki ora che prima della discussione

 
Igor Makanu #:

bene, se per arrivare al punto, la funzione è CALL in assembler ed è l'implementazione hardware, che salva l'indirizzo secante sullo stack, allora i parametri della funzione sono programmaticamente trasferiti sullo stack, le variabili locali della funzione sono anche allocate sullo stack....

cioè una chiamata di funzione è una certa sequenza di azioni, legata al linguaggio e alle convenzioni hardware del PC


e gli operatori..., ad essere onesti, ho imparato di più dal wiki ora che prima della discussione

CALL è una chiamata (operatore), non la funzione stessa.

cioè una funzione è un grande numero di operatori)

 
Taras Slobodyanik #:

CALL è una chiamata (operatore), non la funzione stessa.

cioè una funzione è un grande numero di operatori)

e se c'è solo un operatore, allora non è una funzione?

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

e se c'è un solo operatore, allora non è una funzione?

La domanda riguardava "if" e "alert".
perché il primo è un operatore e il secondo una funzione?

La stessa parola "alert" è anche un operatore - ma è una parola che chiama una funzione)

e la parola "se" non chiama una funzione.

la funzione è molte parole (operatori)

 
Signori, grazie per le vostre risposte, c'è molta discussione. Purtroppo non sono in grado di capirne la maggior parte, perché usate termini profondi, che non ho ancora incontrato nel libro di testo.

Dalla risposta di Maxim e Taras posso concludere che l'apparato terminologico del linguaggio non è rigoroso e ci sono supposizioni, chiamando alcuni operatori come funzioni. Basandosi sulla risposta che un operatore è una parola e una funzione ha molte parole, diventa anche poco chiaro che lo stesso operatore "if" può avere molte parole/azioni tra parentesi regolari e graffe.
 
Ivan Butko #:
Signori, grazie per le vostre risposte, la discussione è iniziata. Purtroppo non riesco a capirne la maggior parte, perché usi termini profondi che non ho incontrato nel libro di testo.

Dalla risposta di Maxim e Taras posso concludere che la terminologia del linguaggio non è rigorosa e ci sono supposizioni, chiamando alcuni operatori come funzioni. Basandosi sulla risposta che un operatore è una parola e una funzione ha molte parole, diventa anche poco chiaro che lo stesso operatore "if" può avere molte parole/azioni tra parentesi regolari e graffe.

una funzione è un sottoprogramma.
un operatore è una parola del programma.

Una funzione è fatta in modo da non dover scrivere molti operatori identici ogni volta, e chiamarla molte volte.

Chiamare una funzione per eseguire un singolo operatore non ha senso, perché può essere fatto in una volta sola.


ps. Alert è una funzione (sottoprogramma) scritta dagli sviluppatori in modo che tutti possano usarla.

 
Taras Slobodyanik #:

una funzione è un sottoprogramma.
un operatore è una parola del programma.

Una funzione è fatta in modo da non dover scrivere molti operatori identici ogni volta, e chiamarla molte volte.

Chiamare una funzione per eseguire un singolo operatore non ha senso, perché può essere fatto in una volta sola.


ps. Alert è una funzione (subroutine) scritta dagli sviluppatori per tutti.

Esattamente, Alert ha una descrizione che è nascosta come una caratteristica della funzione. Rileggendo la sezione, ho notato che.

Grazie per il chiarimento, penso che non ci sia più dissonanza nella mia testa su questo argomento

 
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);
}
Buon pomeriggio. Si prega di avvisare. Perché il calcolo non è corretto? Per essere più precisi, mostra il profitto del prossimo ordine senza aggiungerlo al precedente.
L'idea è quella di cambiare il biglietto da cui dovrebbero salire, dopo aver stabilito un certo profitto.
 
Passare attraverso i e sostituire cnt
 
Aleksei Stepanenko #:
Passare attraverso i e sostituire cnt

scrivere il modo corretto.

Motivazione: