Perguntas de Iniciantes MQL4 MT4 MetaTrader 4 - página 249

 
Taras Slobodyanik #:

A questão é que os operadores podem ser traduzidos em assembler sem utilizar funções, por simples comandos do processador - estes são os operadores.

O que é mais complexo, o que exige chamar de procedimentos complexos, é uma função.

sobre a essência, uma função é um CALL em linguagem de montagem e sua implementação de hardware, que salva o endereço sec na pilha, então os parâmetros da função são programados na pilha, variáveis da função local também são alocadas na pilha....

ou seja, uma chamada de função é uma certa seqüência de ações, vinculada à linguagem e às convenções de hardware do PC


e operadores... para ser honesto, aprendi mais com o wiki agora do que aprendi antes da discussão

 
Igor Makanu #:

bem, se para chegar ao ponto, a função é CALL em assembler e é a implementação de hardware, que salva o endereço secant na pilha, então os parâmetros da função são programmaticamente transferidos para a pilha, variáveis da função local também são alocadas na pilha....

ou seja, uma chamada de função é uma certa seqüência de ações, vinculada à linguagem e às convenções de hardware do PC


e operadores..., para ser honesto, aprendi mais com o wiki agora do que antes da discussão

CALL é uma chamada (telefonista), não a função em si.

ou seja, uma função é um grande número de operadores)

 
Taras Slobodyanik #:

CALL é uma chamada (telefonista), não a função em si.

ou seja, uma função é um grande número de operadores)

e se houver apenas um operador, então não é uma função?

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

e se existe um operador, então não é uma função?

A pergunta era sobre "se" e "alerta".
por que o primeiro é um operador e o segundo uma função?

A própria palavra "alerta" também é um operador - mas é uma palavra que chama uma função)

e a palavra "se" não chama uma função.

função são muitas palavras (operadores)

 
Cavalheiros, obrigado por suas respostas, há muita discussão. Infelizmente, não sou capaz de entender a maior parte, porque você usa termos profundos, que ainda não encontrei no livro didático.

Da resposta de Maxim e Taras posso concluir que o aparato terminológico no idioma não é rigoroso e há suposições, chamando alguns operadores como funções. Com base na resposta de que um operador é uma palavra e uma função tem muitas palavras, também não fica claro que o mesmo operador "se" pode ter muitas palavras/ações entre parênteses regulares e encaracolados.
 
Ivan Butko #:
Cavalheiros, obrigado por suas respostas, a discussão começou. Infelizmente não consigo entender a maior parte, porque você usa termos profundos que não encontrei no livro didático.

Da resposta de Maxim e Taras posso concluir que a terminologia no idioma não é rigorosa e há suposições, chamando alguns operadores como funções. Com base na resposta de que um operador é uma palavra, e uma função tem muitas palavras, também não fica claro que o mesmo operador "se" pode ter muitas palavras/ações entre parênteses regulares e encaracolados.

uma função é um subprograma.
um operador é uma palavra de programa.

Uma função é feita para que você não tenha que escrever muitos operadores idênticos a cada vez, e chamá-la muitas vezes.

Chamar uma função para executar um único operador não faz sentido, porque isso pode ser feito de uma só vez.


ps. Alerta é uma função (subprograma) escrita pelos desenvolvedores para que todos possam usá-la.

 
Taras Slobodyanik #:

uma função é um subprograma.
um operador é uma palavra de programa.

Uma função é feita para que você não tenha que escrever muitos operadores idênticos a cada vez, e chamá-la muitas vezes.

Chamar uma função para executar um único operador não faz sentido, porque isso pode ser feito de uma só vez.


ps. Alerta é uma função (sub-rotina) escrita pelos desenvolvedores para que todos possam usar.

Exatamente, Alert tem uma descrição que está escondida como uma característica da função. Reler a seção, notei que

Obrigado pelo esclarecimento, acho que não há mais dissonância em minha cabeça sobre este assunto

 
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);
}
Boa tarde. Por favor, informe. Por que o cálculo não é correto? Para ser mais preciso, ele mostra o lucro do próximo pedido sem adicioná-lo ao anterior.
A idéia é mudar o bilhete do qual eles devem subir depois que um certo lucro tiver sido estabelecido.
 
Passar pelo i e substituir o cnt
 
Aleksei Stepanenko #:
Passar pelo i e substituir o cnt

escreva da maneira correta.