Функция 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() вот, например, в этом коде:

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