Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Подпишись на нашу страницу в Facebook. Следи за последними новостями!
Рустам
3597
Рустам 2013.06.01 09:28  

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

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

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

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

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

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

Егор
32
Егор 2013.06.01 09:43  
FAQ:

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

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

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

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

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

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


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

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

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

FAQ:

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

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

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

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

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

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

  Красным выделил, что надо для понимания вопроса темы.
Рустам
3597
Рустам 2013.06.01 11:31  
Тяжело искать черную кошку в темной комнате... особенно если ее там нет.
Dmitry Fedoseev
41687
Dmitry Fedoseev 2013.06.01 12:07  
SportsmanRussia:

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


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

Егор
32
Егор 2013.06.02 03:57  

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

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

Artyom Trishkin
71270
Artyom Trishkin 2013.06.02 04:34  
SportsmanRussia:

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

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

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

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

Используйте void start(), ибо незачем возвращать бесполезные значения, а возвращать она может хоть string, хоть double, хоть bool. Для рекурсии может оказаться полезным например.
vladtch
8
vladtch 2013.06.03 08:16  
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); }

Vadim Zhunko
5216
Vadim Zhunko 2013.06.03 16:23  
VladTch:


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

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