При
инсталляции приложения AutoGraf 4 файл исходного кода
функции автоматической торговли
AG_AT.mq4 и скомпилированный
файл AG_AT.ex4 устанавливаются в Каталог
клиентского терминала\experts\libraries. Функция
имеет предопределённое имя - AG_AT.ex4. Это значит, что приложение
AutoGraf 4 обращается к функции автоматической
торговли с конкретным названием, поэтому пользователь не должен изменять
название функции по своему усмотрению.

В случае, если файл AG_AT.ex4 в указанном каталоге не обнаружен, то включение режима автоматической торговли (перемещение управляющего значка АТ в верх) приведёт к зависанию приложения AutoGraf 4.
После инсталляции AutoGraf 4 в указанном каталоге будет установлен подкаталог Example_AT. В нём также имеются подкаталоги, в каждом из которых содержится исходный код и скомпилированный файл функции автоматической торговли. Все скомпилированные файлы имеют одноимённые названия AG_AT.ex4, но разные коды. Каждый такой файл содержит пример алгоритма управления различными инструментами. Коды всех примеров поставляются открыто, с ними можно познакомиться, открыв файл AG_AT.mq4 из соответствующего каталога в редакторе MetaEditor. В названия подкаталогов включены номера инструментов, используемых в примере. Например, в подкаталоге Example_3_6_7 представлен исходный код и скомпилированный файл примера функции автоматической торговли, в котором используется управление инструментами 3 (Следование за ценой), 6 и 7 (соотв. Подтяжка не выше и Подтяжка не ниже). Для опробования того или иного примера необходимо переместить соответствующий файл AG_AT.ex4 их подкаталога Example_AT в Каталог клиентского терминала\experts\libraries и перезапустить приложение AutoGraf 4 (для наглядности рекомендуется запустить приложение AutoGraf 4 в тестере в режиме визуализации - можно наблюдать как по указанию функции AT устанавливаются инструменты и как эти инструменты исполняются).
Пользовательская функция автоматической торговли AG_AT().
|
Пользовательская функция автоматической торговли используется для получения данных из приложения AutoGraf 4, изменения настроечных параметров приложения, установки и удаления инструментов и сообщений пользователю. Если функция возвращает 0, то она отключается приложением AutoGraf 4, т.е. режим АТ выключается, функция AG_AT() приложением AutoGraf 4 не вызывается. Если функция возвращает 1, то она вызывается на каждой итерации приложения AutoGraf 4.
Параметры функции:
Parol_AT - значение пароля (может применяться для коммерческого распространения функции АТ);
Order[][] - массив ордеров, - последний известный набор ордеров и их характеристик;
Object[] - массив имён объектов, - последний известный набор рассматриваемых объектов;
Instrument[][][][] - массив инструментов,- последний известный набор установленных инструментов;
Ddraw_Object[][] - массив объектов, на которые установлен инструмент Тянуть объект;
Tuning[] - массив настроек приложения AutoGraf 4;
Manager[][] - массив устанавливаемых и удаляемых инструментов;
Message[] - массив сообщений пользователю.
Параметры, передаваемые по значению, являются входными, а параметры, передаваемые по ссылке (признак - &), - выходными. Указанные параметры функции AG_АТ() описаны в следующих разделах сайта:
Как это работает.
Общая технология исполнения программ в терминале MetaTrader состоит в том, что обычный эксперт вызывается для исполнения на каждом новом тике, некоторое время исполняется его код, после чего эксперт прекращает работу и переходит в режим ожидания нового тика. Обычно время исполнения такого эксперта исчисляется долями секунды, например, может составлять 0.07 сек., в некоторых случаях больше, например 1 - 2 сек. Поэтому большую часть времени обычный эксперт "простаивает" в ожидании нового тика (обычный промежуток между тиками измеряется секундами или десятками секунд).
Ранее уже упоминалось, что основу приложения AutoGraf 4 составляет зацикленный эксперт. Принципиальное отличие зацикленного эксперта от обычного состоит в том, что зацикленный эксперт никогда не останавливает свою работу - не переходит в режим ожидания нового тика. После того, как полностью выполнен весь код зацикленного эксперта, он запускается на исполнение снова. Эксперт приложения AutoGraf 4 исполняется приблизительно от 20 до 500 раз в секунду (один полный цикл называется итерацией). Использование зацикленного эксперта позволило отслеживать управляющие воздействия пользователя и моментально на них реагировать.
Применительно к исполнению функции автоматической торговли это означает следующее. На каждой новой итерации приложение AutoGraf 4 один раз вызывает на исполнение функцию автоматической торговли AG_AT(), т.е. передаёт ей управление; после исполнения этой функции управление возвращается в приложение AutoGraf 4. Это значит, что код функции AG_AT() исполняется до 500 раз в секунду. В течение всего времени, когда исполняется функция AG_AT() в приложении AutoGraf 4 ничего не происходит. Чтобы приложение AutoGraf 4 продолжило работу, необходимо чтобы функция AG_AT() завершила своё исполнение и вернула управление в приложение AutoGraf 4. Поэтому желательно, чтобы функция AG_AT() всякий раз завершалась как можно быстрее.
При включённой автоматической торговле (управляющий значок АТ вверху) эксперт приложения и вызываемая экспертом функция AG_AT() работают поочерёдно. Если пользователь отключил режим автоматической торговли, то функция AG_AT() из эксперта не вызывается на исполнение. Отдельно следует ещё раз подчеркнуть, что эксперт приложения работает постоянно, поэтому ручной режим работы доступен пользователю всегда. Это значит, что в автоматическом режиме пользователь может всегда вмешаться вручную в ход торгов и при необходимости отключить режим автоматической торговли.
Простой пример. Параметр Parol_AT.
Рассмотрим наиболее простой вариант построения функции автоматической торговли. Прежде всего, необходимо обозначить ту часть кода, о которой трейдер-программист должен позаботиться обязательно.
Во-первых, это заголовок функции (блок 1-2). В этой части ничего менять не следует. Даже если ни один из параметров, указанных в заголовке функции, в коде не используется, всё равно все перечисленные в заголовке параметры следует оставить как есть. Если удалить какой-то из параметров, то функция может работать некорректно или вообще не будет работать, что в подавляющем большинстве случаев приведёт к зависанию приложения.
Во-вторых, это возвращаемое значение. Если функция возвращает значение 1 (блок 4-5), то через некоторое время приложение AutoGraf 4 снова вызовет функцию AG_AT() (т.е. передаст ей управление). Если функция вернула значение 0 ((блок 2-3), то это будет воспринято приложением AutoGraf 4 как указание больше не вызывать функцию AG_AT(), т.е. отключить автоматическую торговлю.
//жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж // AG_AT.mq4 // Пользовательская функция Автоматической Торговли. // Применяется при построении стратегии автоматической торговли для приложения AutoGraf 4 // Сергей Ковалёв, Днепропетровск, sk@autograf.dp.ua, ICQ 64015987, http://autograf.dp.ua //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 0 жж #property library #import "AG_Lib.ex4" int AG_Magic_Number(); // Вычисление MN int AG_Message(string& Message[], string _Text);// Запись текстов сообщен. в Message[] // Запись управ.воздейст.в Manager[][] int AG_Set_Instr(double& Manager[][], int ii, double v1, double v2, double v3, double v4, double v5, double v6, int io , int ih); #import "AG_Trade_Criterion.ex4" int AG_Trade_Criterion_1(); // Ф-ия определен. торгов. критериев 1 int AG_Trade_Criterion_2(); // Ф-ия определен. торгов. критериев 2 #import //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 1 жж int AG_AT(int Parol_AT, double Order[][], string Object[], double Instrument[][][][], int Ddraw_Object[][], double& Tuning[], double& Manager[][], string& Message[]) { //================================================================================== 2 == if (!IsDemo()) // Для демо без ограничений { if(Parol_AT != AccountNumber() + 1) // Если введен неправильный пароль { // Пример сообщения (макс. 62 симв) AG_Message(Message, "Разработчик J.Smith, http://company.com "); AG_Message(Message, "Введен неправильный пароль для функции АТ."); return(0); // Выход из функции AT } // AutoGraf автоматически отключит АТ } //================================================================================== 3 == /* // Здесь необходимо указать код торговой стратегии: // - вычисление торговых критериев, // - открытие и закрытие ордеров, // - сообщения пользователю и пр. */ //================================================================================== 4 == return(1); } //жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж Конец модуля жжжжжжжжжжжжжжжжжжжжжжжжжжжжжжжж 5 жж |
К необязательной части кода представленной функции относится блок 2-3, в котором анализируется пароль. Возможность применения пароля предусмотрена для случая коммерческого распространения функции автоматической торговли AG_AT(). В списке входных параметров эксперта приложения AutoGraf 4 есть переменная Parol_AT. Значение этой переменной никак не обрабатывается в эксперте приложения, но передаётся в качестве параметра в функцию AG_AT().
Блок анализа пароля должен содержать индивидуальный алгоритм вычисления, неизвестный пользователям. В представленном примере используется очень простое вычисление: к номеру реального счёта пользователя прибавляется 1. Например, если счёт пользователя 12345, то правильным паролем будет значение 12346. Для того, чтобы пользователь смог использовать функцию AG_AT(), значение 12346 необходимо указать в настройках эксперта приложения AutoGraf 4 (значение переменной Parol_AT).
В случае, если пользователь правильно ввёл пароль, то после анализа в блоке 2-3 управление будет передано в блок 3-4 для выполнения основного кода функции AG_AT(). Если же пароль введен неправильно, то функция AG_AT() вернёт в приложение AutoGraf 4 значение 0 (исполнение оператора return(0)). В этом случае приложение отключит режим автоматической торговли, управляющий значок АТ будет автоматически перемещён в нижнее положение. Пользователь может ввести другое значение пароля и снова включить функцию автоматической торговли; если пароль окажется правильным, то функция будет исполняться, если же нет, то автоматическая торговля снова будет отключена. В представленном коде анализируются только реальные счета, для демо-счётов анализ пароля не выполняется.
Если трейдер-программист намерен создать функцию AG_AT() не для коммерческого использования, а для собственной работы, то использование пароля не обязательно. В этом случае блок 2-3 можно полностью исключить из кода функции AG_AT().
Использование библиотек.
При инсталляции приложения AutoGraf 4 в Каталог клиентского терминала\experts\libraries устанавливаются два файла библиотек. AG_Lib.ex4 - это файл, в котором собраны библиотечные функции, используемые при вычислениях в функции автоматической торговли AG_AT(). AG_Trade_Criterion.ex4 - файл, содержащий пользовательские функции для вычисления торговых критериев. Указанные библиотечные функции можно использовать (блок 0-1) или не использовать в функции AG_AT(). В зависимости от этого функция автоматической торговли AG_AT() будет иметь широкие или ограниченные возможности. Подробнее об использовании библиотек здесь:
Вывод сообщений.
Функция автоматической торговли AG_AT() может передавать данные в приложение AutoGraf 4 для вывода сообщений. Для этой цели используется библиотечная функция AG_Message(), содержащаяся в файле библиотек AG_Lib.ex4. Подробнее об этом можно прочесть в разделе:
Связанные данные.
В процессе торговли могут измениться состав и значения параметров ордеров, состав и координаты графических объектов, состав и настроечные параметры инструментов. В результате этого естественного развития событий все объекты учёта (ордера, объекты, инструменты, настройки) могут быть переиндексированы, поэтому следует учитывать, что на каждой новой итерации в пользовательскую функцию передаются обновлённые массивы.
Все массивы, передаваемые в пользовательскую функцию AG_AT(), связаны и согласованы между собой. Это значит, что перед тем, как вызвать для исполнения функцию AG_AT(), в приложении AutoGraf 4 выполняются необходимые проверки. Согласованность касается всей совокупности данных, описывающих состояние игрового поля в момент времени, максимально приближенный к моменту передачи управления в пользовательскую функцию AG_AT().
Использование имеющегося кода механической торговой системы.
Если у трейдера уже имеется исходный код (файл *.mq4) эксперта, в котором реализована некая торговая стратегия, то вставить этот код в функцию автоматической торговли очень просто. В подавляющем большинстве случаев достаточно скопировать код специальной функции start() этого эксперта и вставить его в блок 3-4 функции AG_AT(). Если Пользователь самостоятельно написал код этого эксперта, то выполнить такую операцию для него не составит никакого труда.
В других случаях, если в имеющемся эксперте используются специальные функции init() и deinit(), в которых выполняются обязательные действия, может понадобиться внести в исходный код эксперта некоторые изменения.
Это - наиболее быстрый и простой вариант переноса имеющегося кода эксперта в функцию AG_AT(). Однако, в ряде случаев этот вариант нельзя назвать наиболее эффективным, т.к. при этом значительная часть возможностей AutoGraf 4 не будет востребована. Технология приложения AutoGraf 4 позволяет не только использовать уже имеющийся код эксперта, но предоставляет новые средства управления торговлей, главное из которых - возможность управления инструментами.
Примеры кодов управления инструментами из функции автоматической торговли AG_AT() можно посмотреть в подразделе Примеры функции AG_AT().