Функция start() - страница 2

 

В MQL4 существуют 3 функции с предопределенными именами:

init() - функция, вызывающаяся в процессе инициализации модуля. В случае ее отсутствия при инициализации не вызывается никакой функции.

start() - основная функция. У экспертов вызывается после прихода очередного тика. У пользовательских индикаторов вызывается при пересчете после прикрепления индикатора к графику, при открытии клиентского терминала (если индикатор прикреплен к графику), а также после прихода очередного тика. У скриптов выполняется сразу после прикрепления к графику и выполнения инициализации. В случае отсутствия в модуле функции start() этот модуль (эксперт, скрипт или пользовательский индикатор) не может быть запущен.

deinit() - функция, вызывающаяся в процессе деинициализации модуля. В случае ее отсутствия при деинициализации не вызывается никакой функции.

Предопределенные функции могут иметь параметры. Однако при вызове этих функций клиентским терминалом никакие параметры переданы извне не будут, а будут использованы умолчательные значения. Функции start()init() и deinit() могут быть вызваны из любого места модуля по общим правилам, наравне с другими функциями.

Нежелательно из функции init() вызывать start() или совершать торговые операции, так как в момент инициализации модуля могут быть не готовы данные графиков, рыночные цены и т.д. Функции init() и deinit() должны максимально быстро завершать свою работу и ни в коем случае не зацикливаться в попытке начать полноценную работу раньше вызова функции start().

 
FAQ:

В MQL4 существуют 3 функции с предопределенными именами:

init() - функция, вызывающаяся в процессе инициализации модуля. В случае ее отсутствия при инициализации не вызывается никакой функции.

start() - основная функция. У экспертов вызывается после прихода очередного тика. У пользовательских индикаторов вызывается при пересчете после прикрепления индикатора к графику, при открытии клиентского терминала (если индикатор прикреплен к графику), а также после прихода очередного тика. У скриптов выполняется сразу после прикрепления к графику и выполнения инициализации. В случае отсутствия в модуле функции start() этот модуль (эксперт, скрипт или пользовательский индикатор) не может быть запущен.

deinit() - функция, вызывающаяся в процессе деинициализации модуля. В случае ее отсутствия при деинициализации не вызывается никакой функции.

Предопределенные функции могут иметь параметры. Однако при вызове этих функций клиентским терминалом никакие параметры переданы извне не будут, а будут использованы умолчательные значения. Функции start()init() и deinit() могут быть вызваны из любого места модуля по общим правилам, наравне с другими функциями.

Нежелательно из функции init() вызывать start() или совершать торговые операции, так как в момент инициализации модуля могут быть не готовы данные графиков, рыночные цены и т.д. Функции init() и deinit() должны максимально быстро завершать свою работу и ни в коем случае не зацикливаться в попытке начать полноценную работу раньше вызова функции start().


Спасибо! Я читал документацию. Вопрос: по приведённым в начале темы ссылкам start() возвращает -1 (return(-1)). Для чего? Там рассматриваются скрипты и советники, в которых работа ведётся с глобальными переменными клиентского терминала. Может быть, в этом дело?
 

Предопределенные функции ничего не возвращают при системном вызове.

 Однако, при пользовательском вызове возвращают то, что вы указали в операторе return согласно типу возвращаемого значения функции.

FAQ:

В MQL4 существуют 3 функции с предопределенными именами:

init() - функция, вызывающаяся в процессе инициализации модуля. В случае ее отсутствия при инициализации не вызывается никакой функции.

start() - основная функция. У экспертов вызывается после прихода очередного тика. У пользовательских индикаторов вызывается при пересчете после прикрепления индикатора к графику, при открытии клиентского терминала (если индикатор прикреплен к графику), а также после прихода очередного тика. У скриптов выполняется сразу после прикрепления к графику и выполнения инициализации. В случае отсутствия в модуле функции start() этот модуль (эксперт, скрипт или пользовательский индикатор) не может быть запущен.

deinit() - функция, вызывающаяся в процессе деинициализации модуля. В случае ее отсутствия при деинициализации не вызывается никакой функции.

Предопределенные функции могут иметь параметры. Однако при вызове этих функций клиентским терминалом никакие параметры переданы извне не будут, а будут использованы умолчательные значения. Функции start()init() и deinit() могут быть вызваны из любого места модуля по общим правилам, наравне с другими функциями.

Нежелательно из функции init() вызывать start() или совершать торговые операции, так как в момент инициализации модуля могут быть не готовы данные графиков, рыночные цены и т.д. Функции init() и deinit() должны максимально быстро завершать свою работу и ни в коем случае не зацикливаться в попытке начать полноценную работу раньше вызова функции start().

  Красным выделил, что надо для понимания вопроса темы.
 
Тяжело искать черную кошку в темной комнате... особенно если ее там нет.
 
SportsmanRussia:

Спасибо! Я читал документацию. Вопрос: по приведённым в начале темы ссылкам start() возвращает -1 (return(-1)). Для чего? Там рассматриваются скрипты и советники, в которых работа ведётся с глобальными переменными клиентского терминала. Может быть, в этом дело?


Да собственно ни для чего, нет смысла. Разве что вы сами своим кодом вызываете start(), init(), deinit(), тогда можно получить возвращаемое значение и есть смысл его возвращать из этих функций. На работу системы возвращаемое значение не влияет, т.е. если функция strat() вызвана по приходу нового тика, то без разницы что из нее вернуть.

 

Спасибо всем за ответы!

Сделал запрос в MetaQuotes. Будут результаты - сообщу.

 
SportsmanRussia:

Спасибо всем за ответы!

Сделал запрос в MetaQuotes. Будут результаты - сообщу.

Две страницы ответов вам не помогли, думаю, не поможет и ответ Метаквотов ...
 
SportsmanRussia:

что же возвращает функция start()?

Используйте void start(), ибо незачем возвращать бесполезные значения, а возвращать она может хоть string, хоть double, хоть bool. Для рекурсии может оказаться полезным например.
 
SportsmanRussia:

Спасибо всем за ответы!

Сделал запрос в MetaQuotes. Будут результаты - сообщу.


Если я Вас правильно понял, то интересно узнать не что возвращает start(), а куда передается управление операторами return() вот, например, в этом коде:

datetime LastTradeTime = 0;
int start()
 {
  // определяем необходимость входа в рынок
  ...
  // рассчитываем уровни Стоп Лосс, Тейк Профит и размер лота
  ...
  // проверяем, достаточно ли прошло времени после последней торговой операции
  if(LocalTime() - LastTradeTime < 10)
   {
    Comment("Со времени последней торговой операции прошло меньше 10 секунд!",
            " Эксперт не будет торговать!"); 
    return(-1);
   }
 
  // открываем позицию
  if(OrderSend(...) < 0)
   {
    Alert( "Ошибка открытия позиции № ", GetLastError() );
    return(-2);
   }
    
  // запоминаем время последней торговой операции
  LastTradeTime = LocalTime();
 
  return(0); }

 
VladTch:


Если я Вас правильно понял, то интересно узнать не что возвращает start(), а куда передается управление операторами return() вот, например, в этом коде:

За зря всё писали в этой теме. Теперь развелись только писатели. Читателей больше не осталось. Вымерли, поди...
Причина обращения: