9. AT: Входные и выходные параметры


 При инсталляции приложения 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().

 
int AG_AT ( int Parol_AT,   double Order[][],   string Object[],  double Instrument[][][][], 
                   int Ddraw_Object[][],  double& Tuning[],  double& Manager[][],  string& Message[] )

Пользовательская функция автоматической торговли используется для получения данных из приложения 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().