Здесь достаточно сказать, что любая глобальная переменная должна быть объявленараньше (выше по тексту программы), чем первое обращение к этой переменной (в данном случае из функции start()). В рассматриваемой программе это правило нарушено, поэтому компилятор сообщил об ошибке. Однако специальные функции вызываются для исполнения клиентским терминалом в соответствии с их собственными свойствами, поэтому не имеет значения, в каком месте программы указано описание той или иной функции. Давайте переставим местами специальные функции и посмотрим, что из этого получится (эксперт possible.mq4).

  • Вы можете самостоятельно по своемувыбору поменять местами специальные функции в исходном коде и убедиться, что для любоговарианта результат будет таким же, как и в случае исполнения эксперта simple.mq4.
  • Функция OnCalculate() должна иметь тип возвращаемого значения int.
  • Торговые приказы формируются в программах с помощью встроенных функций, называющихся торговыми.

Функция GetLastError()

Их можно разделитьна две категории – управляющие и исполнительные. В большинстве случаев в экспертеиспользуется всего одна управляющая функция и несколько исполнительных. Для каждого типа события входные параметры функции OnChartEvent() имеют определенные значения, которые необходимы для обработки этого события. В таблице перечислены события и значения, которые передаются через параметры. Функция OnDeinit() вызывается при деинициализации и является обработчиком события Deinit. Должна быть объявлена с типом void и иметь один параметр типа const int , который Capital Gains содержит код причины деинициализации.

Пользовательская исполнительная торговая функция Open_Ord()

Управление передаётся в блок 9-10 (за пределы цикла) и программа заканчиваетработу. Основное время работы программы – это период работы функции start(). При некоторых условиях (см. свойства специальных функций в разделе Специальные функции), в том числе – при поступлении в клиентский терминал нового тика с сервера, клиентский терминал вызовет для исполнения специальную функцию start(). Эта функция (как и другие функции) может обращаться к информационному окружению клиентского терминала, производить необходимые вычисления, открывать и закрывать ордера, словом производить любые действия, позволенные правилами языка MQL4. Обычно в ходе исполнения специальной функции start() вырабатывается решение, которое реализуется в виде управляющего воздействия (красная стрелка).

  • Торговый приказ – это управляющее воздействие, передаваемоепрограммой на сервер, с целью открытия, закрытия или модификации ордеров.
  • Головная часть – это несколько строк программы, расположенных в её начале (буквально – в первой, второй строке и т.д.), содержащих некоторые записи.
  • Для функций FileWrite(), FileWriteArray(), FileWriteDouble(), FileWriteInteger() и FileWriteString() изменен тип возвращаемого значения с int на uint.
  • Параметры volume и tick_volume содержат соответственно историю торгового и тикового объема.
  • Выражение – последовательность операндов и знаков операций – запись в программе, вычисленное значение которой характеризуется типом данных.

Функции

Существует также разница между порядком исполнения эксперта и индикатора при первом запуске программы. Эта разница определяется свойствами специальных функций программы определённого вида (см. Специальные функции). После присоединения к окну финансового инструмента эксперт выполняет подготовительные операции (функция init()) и переходит в режим ожидания тика для запуска функции start(). В отличие от экперта, индикатор не только выполняет функцию init(), но и однократно производит вызов функции start() для первого предварительного расчета значения индикатора.

Изменения в языке MQL4

Для получения дополнительной информации об ошибке необходимовызвать функцию GetLastError(). Для получения информацииоб ошибке необходимо вызвать функцию GetLastError(). Чтобы получить дополнительную информацию об ошибке, необходимо вызватьфункцию GetLastError(). Для удаления любого графического объекта (независимо от способа его создания – вручнуюили программно) достаточно выделить его и нажать клавишу Delete. Однако, говоряо программировании, следует подчеркнуть, что правильно составленная программа обязательнодолжна «почистить» после себя окно финансового инструмента. Иными словами,в программе должен быть предусмотрен блок, в котором удаляются все созданные программойграфические объекты.

В дальнейшем при поступлении тика программа запускается вызовом только функции start(), то есть исполняются операторы в соответствии с алгоритмом функции start(). Обработка ошибок во всех пользовательских исполнительных торговых функциях выполняетсяподобным образом. Если торговая операция завершилась успехом, то функция заканчиваетработу (потому, что не будет выполняться очередная итерация цикла while, т.к.после исполнения функции Terminal() значение элемента массива Mas_TipTip будетравно 1).

Для монитора с разрешением 1024 х 768 пикселей максимальная длина строки составляет 118 символов. Мы объявляем любые глобальные переменные в начале нашего файла исходного кода, обычно после внешних переменных. Расположение не имеет значения, если как глобальные, так и внешние переменные находятся вне и перед любыми функциями. У вас есть 31 символ для описания вашей переменной, поэтому используйте их максимально эффективно.

Эта функция имеет аргументы, которые необходимо передать в функцию. Функция будет выставлять рыночный ордер на покупку на текущий символ с указанным размером лота, стоп-лоссом и тейк-профитом. Функции являются строительными блоками современных языков программирования. Функция — это блок кода, предназначенный для выполнения определенной задачи, например, размещения ордера или расчета стоп-лосса. Например, если переменная типа Double назначена переменной типа Int, Double будет округлена до ближайшего целого числа. Переменная является основной единицей хранения любого языка программирования.

В данной задаче все сообщения являются взаимоисключающими, т.е. Невозможна ситуация,при которой возникает необходимость вывести на экран одновременно два или болеесообщений. Поэтому в данном случае можно использовать всего один графический объект,постоянно присутствующий на экране, и по мере необходимости изменять выводимыйтекст. Отобразим объект в правом верхнем углу окна финансового инструмента, в которомбудет работать эксперт. Поскольку положение объекта по ходу торгов менять не предполагается,то удобно использовать объект типа OBJ_LABEL, т.к.

Это делается для того,чтобы на очередной итерации цикла for была предпринята ещё одна попытка модифицироватьтот же ордер. Особое внимание нужно обратить на тот факт, что все торговые операции совершаютсяв режиме реального времени. Если ордеров слишком много, то эксперт будет генерироватьмножество торговых приказов. За время, пока эти приказы будут исполнены, рынокможет развернуться. Однако функция не возвращает управление в вызывающую её функциюTrade() до тех пор, пока не будут модифицированы все ордера, подлежащие модификации.Это значит, что возникает опасность пропустить торговый приказ на закрытие илиоткрытие ордеров. По этой причине любая стратегия должна составляться таким образом,чтобы по возможности не допускать значительного количества рыночных ордеров.

Логические операции

Число координат, связываемых с объектом, может бытьот 1 до 3 в зависимости от его типа. При успешном создании объекта функция возвращаетTRUE, иначе FALSE. Чтобы получить дополнительную информацию об ошибке, необходимовызвать функцию GetLastError(). В программе имеются три специальные функции (init(), start() и deinit() ), содержанием каждой из которых является всего один оператор return(0) выхода из функции.

Таким управляющим воздействием может быть сформированный программой торговый приказ на открытие, закрытие или модификацию ордера. Специальная функция init() вызывается для исполнения один раз в начале работы программы. В этой функции обычно указывается код, который необходимо выполнить один раз перед началом основной работы программы. Например, при исполнении функции init() выполняется инициализация некоторых глобальных переменных, в окне финансового инструмента отображаются графические объекты, выводятся те или иные сообщения. Когда все программные строки в функции init() исполнены, функция заканчивает исполнение, в результате чего управление возвращается клиентскому терминалу.