Preguntas de los principiantes MQL4 MT4 MetaTrader 4 - página 249

 
Taras Slobodyanik #:

La cuestión es que los operadores pueden traducirse en ensamblador sin utilizar funciones, mediante simples comandos del procesador: son los operadores.

Lo que es más complejo, lo que requiere llamar a procedimientos complejos es una función.

sobre la esencia, una función es una LLAMADA en lenguaje ensamblador y su implementación de hardware, que guarda la dirección sec en la pila, entonces los parámetros de la función se pasan programáticamente en la pila, las variables locales de la función también se asignan en la pila....

es decir, una llamada a una función es una determinada secuencia de acciones, ligada a las convenciones del lenguaje y del hardware del PC


y operadores... para ser honesto, he aprendido más de la wiki ahora que antes de la discusión

 
Igor Makanu #:

bueno, si para ir al grano, la función es CALL en ensamblador y es la implementación de hardware, que guarda la dirección secante en la pila, entonces los parámetros de la función se transfieren programáticamente a la pila, las variables locales de la función también se asignan en la pila....

es decir, una llamada a una función es una determinada secuencia de acciones, ligada a las convenciones del lenguaje y del hardware del PC


y operadores..., para ser honesto, he aprendido más de la wiki ahora que antes de la discusión

CALL es una llamada (operador), no la función en sí.

es decir, una función es un gran número de operadores)

 
Taras Slobodyanik #:

CALL es una llamada (operador), no la función en sí.

es decir, una función es un gran número de operadores)

¿y si sólo hay un operador, entonces no es una función?

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

¿y si hay un operador, entonces no es una función?

La pregunta era sobre "if" y "alert".
¿por qué el primero es un operador y el segundo una función?

La palabra "alerta" en sí misma también es un operador - pero es una palabra que llama a una función)

y la palabra "si" no llama a una función.

la función es muchas palabras (operadores)

 
Señores, gracias por sus respuestas, hay mucha discusión. Desgraciadamente, no soy capaz de entender la mayor parte, porque utilizas términos profundos, que aún no he encontrado en el libro de texto.

De la respuesta de Maxim y Taras puedo concluir que el aparato terminológico del lenguaje no es estricto y hay suposiciones, llamando a algunos operadores como funciones. Partiendo de la respuesta de que un operador es una palabra y una función tiene muchas palabras, tampoco queda claro que el mismo operador "if" pueda tener muchas palabras/acciones entre paréntesis regulares y rizadas.
 
Ivan Butko #:
Señores, gracias por sus respuestas, la discusión comenzó. Desgraciadamente no puedo entender la mayor parte, porque usas términos profundos que no he encontrado en el libro de texto.

De la respuesta de Maxim y Taras puedo concluir que la terminología en el lenguaje no es estricta y hay suposiciones, llamando a algunos operadores como funciones. Partiendo de la respuesta de que un operador es una palabra, mientras que una función tiene muchas palabras, tampoco queda claro que el mismo operador "if" pueda tener muchas palabras/acciones entre paréntesis regulares y rizadas.

una función es un subprograma.
un operador es una palabra de programa.

Una función está hecha para que no tengas que escribir muchos operadores idénticos cada vez, y llamarla muchas veces.

Llamar a una función para ejecutar un solo operador no tiene sentido, porque se puede hacer de una vez.


ps. Alert es una función (subprograma) escrita por los desarrolladores para que todo el mundo pueda utilizarla.

 
Taras Slobodyanik #:

una función es un subprograma.
un operador es una palabra de programa.

Una función está hecha para que no tengas que escribir muchos operadores idénticos cada vez, y llamarla muchas veces.

Llamar a una función para ejecutar un solo operador no tiene sentido, porque se puede hacer de una vez.


ps. La alerta es una función (subrutina) escrita por los desarrolladores para que todo el mundo la utilice.

Correcto, la Alerta tiene una descripción, que se oculta como una característica de la función. He releído la sección y me he dado cuenta.

Gracias por la aclaración, creo que ya no hay disonancia en mi cabeza sobre este tema

 
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);
}
Buenas tardes. Por favor, avisa. ¿Por qué el cálculo no es correcto? Para ser más precisos, muestra el beneficio del siguiente pedido sin sumarlo al anterior.
La idea es cambiar el billete a partir del cual deben subir cuando se haya fijado un determinado beneficio.
 
Pasa por i y sustituye a cnt
 
Aleksei Stepanenko #:
Pasa por i y sustituye a cnt

escriba la forma correcta.