Вопросы от начинающих MQL4 MT4 MetaTrader 4 - страница 249

 
Taras Slobodyanik #:

как же не суть, как раз в этом и суть, в том что операторы можно перевести в ассемблер без использования функций, простыми командами процессора - это и есть операторы.

А то что более сложное, то что требует вызова сложных процедур, то уже функции.

ну если про суть, то функция это CALL в ассемблере и это аппаратная реализация, которая сохраняет секущий адрес в стек, затем программно передаются в стек параметры функции, локальные переменные функции тоже выделяются на стеке....

т.е. вызов функции, это определенная последовательность действий, привязанная к соглашениям языка и аппаратной части ПК


а операторы..., если честно, то из Вики больше сейчас узнал, чем до начала обсуждения

 
Igor Makanu #:

ну если про суть, то функция это CALL в ассемблере и это аппаратная реализация, которая сохраняет секущий адрес в стек, затем программно передаются в стек параметры функции, локальные переменные функции тоже выделяются на стеке....

т.е. вызов функции, это определенная последовательность действий, привязанная к соглашениям языка и аппаратной части ПК


а операторы..., если честно, то из Вики больше сейчас узнал, чем до начала обсуждения

CALL это вызов (оператор), а не сама функция.

т.е. функция это большое количество операторов)

 
Taras Slobodyanik #:

CALL это вызов (оператор), а не сама функция.

т.е. функция это большое количество операторов)

а если один оператор, то значит это не функция?

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

а если один оператор, то значит это не функция?

ну вопрос ведь был про "иф" и про "алерт".
почему первое оператор а второе функция.

само слово "Алерт" это тоже оператор - но это слово вызывает функцию)

а слово "иф" не вызывает функцию.

функция - это много слов (операторов)

 
Господа, благодарю вас за ответы, развернулась дискуссия. К сожалению, большую её часть я не в силах понять, поскольку вы используете глубинные термины, что я ещё не встретил в учебнике. 

Из ответа Максима и Тараса могу сделать вывод, что терминологический аппарат в языке не строгий и присутствуют допущения, называя некоторые операторы функциями. Исходя из ответа, что оператор - это одно слово, а в функции много слов, тоже становится неясен тот факт, что в том же операторе "if" в обычных и в фигурных скобках могут быть множество слов/действий. 
 
Ivan Butko #:
Господа, благодарю вас за ответы, развернулась дискуссия. К сожалению, большую её часть я не в силах понять, поскольку вы используете глубинные термины, что я ещё не встретил в учебнике. 

Из ответа Максима и Тараса могу сделать вывод, что терминологический аппарат в языке не строгий и присутствуют допущения, называя некоторые операторы функциями. Исходя из ответа, что оператор - это одно слово, а в функции много слов, тоже становится неясен тот факт, что в том же операторе "if" в обычных и в фигурных скобках могут быть множество слов/действий. 

функция - это подпрограмма.
оператор - это слово программы.

Функцию делают для того чтобы не писать каждый раз много одинаковых операторов, и вызывают ее многократно.

Вызывать функцию для исполнения одного оператора не имеет смысла, потому как это можно сделать сразу.


пс. Алерт - это функция (подпрограмма) написанная разработчиками, чтобы все ее использовали.

 
Taras Slobodyanik #:

функция - это подпрограмма.
оператор - это слово программы.

Функцию делают для того чтобы не писать каждый раз много одинаковых операторов, и вызывают ее многократно.

Вызывать функцию для исполнения одного оператора не имеет смысла, потому как это можно сделать сразу.


пс. Алерт - это функция (подпрограмма) написанная разработчиками, чтобы все ее использовали.

Точно, у Алерта же есть описание, которое скрыто, как признак функции. Перечитал раздел, обратил внимание на это. 

Спасибо за пояснения, вроде диссонанса в голове больше нет по этому вопросу

 
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

напишете плз, как будет правильно.

Причина обращения: