AutoGraf серии 4 - возможности MQL. - страница 34

 

Если файл подключать через include, то можно объявлять переменные extern и не нужно никакой передачи параметров. Чтобы не было путанцы с именами переменных и функций надо для каждой стратегии использовать свои префиксы в именах.

Извините, что встреваю, но такие длительные мучения над таким простым вопросом не оставляют равнодушным:)

 
Integer >>:

Если файл подключать через include, то можно объявлять переменные extern и не нужно никакой передачи параметров. Чтобы не было путанцы с именами переменных и функций надо для каждой стратегии использовать свои префиксы в именах.

Извините, что встреваю, но такие длительные мучения над таким простым вопросом не оставляют равнодушным:)

Спасибо. Сейчас попробуем.

 
Integer писал(а) >>

Если файл подключать через include, то можно объявлять переменные extern и не нужно никакой передачи параметров. Чтобы не было путанцы с именами переменных и функций надо для каждой стратегии использовать свои префиксы в именах.

Извините, что встреваю, но такие длительные мучения над таким простым вопросом не оставляют равнодушным:)

Речь идёт об импорте функций в компилированный эксперт (ex4).
 
SK. писал(а) >>
Речь идёт об импорте функций в компилированный эксперт (ex4).

Ну извините, я как обычно не о том... Может об импорте из компилированной библиотеки?

-

Если основной модуль откомпилирован, то не проблема использовать инкулдник со стратегией, все будеть откомпилировано. Если основной модуль с открытым кодом, а стратегия откомпилированная, то можно сделать переходник в виде инклудника с открытым кодом.

 

Уважаемые!

Я рассматриваю следующую схему цепочки подключения:



Функция AG_AT является переключателем выбора присоединяемых стратегий.

 

Уважаемые!

Ответьте пожалуйста на вопрос.

Если функция АТ не является переключателем, а содержит код стратегии то (хотя, как я понимаю, это без разницы), каким образом приложение различает что функция АТ отдает указание (например, обращение к терминалу) ему, а не ведет торговлю сама?

Из описания к применению:

Исполнение функции АТ связано с двумя основными возможностями.

Первая из них заключается в том, что функция АТ может самостоятельно вести торговлю - формировать торговые приказы и отправлять их на сервер. При этом функция может не обрабатывать никакие данные полученные из приложения (или обрабатывать часть этих данных), а выполнять собственные вычисления, используя для этого все возможности языка MQL 4, в т.ч. обращение к терминалу для обработки ордеров, получение текущих котировок, вычисление торговых критериев, управление графическими объектами и т.д.

Вторая возможность непосредственно связана с приложением AutoGraf 4. Функция АТ может отдавать указания приложению AutoGraf 4 на установку любых необходимых инструментов с заданными настройками на определённые ордера или на ценовой график, изменение общих настроечных параметров приложения, удаление инструментов, может выводить сообщения пользователю и пр. (выходные параметры).

Если в функции АТ сформирован приказ на заключение сделки и нет строки кода для учета в приложении, то торгует сама. Приложение, в этом случае, просто транслирует приказ на терминал без всякого учета и обработки.

Если есть, то приказ проходит через приложение в передаваемых по ссылке параметрах функции АТ.

Правильно я понимаю?

 
Integer писал(а) >>

Ну извините, я как обычно не о том... Может об импорте из компилированной библиотеки?

-

Если основной модуль откомпилирован, то не проблема использовать инкулдник со стратегией, все будеть откомпилировано. Если основной модуль с открытым кодом, а стратегия откомпилированная, то можно сделать переходник в виде инклудника с открытым кодом.

Извиняться не за что, обсуждение по делу.

--

Немного терминологии. Есть два зеркальных понятия - экспорт и импорт. Они используются применительно к собственной территории.

Экспорт - это от нас за наши пределы. Например, экспорт газа из России в Европу.

Импорт - это из-за границы в наши пределы. Например, импорт песка в Сибирь из Африки.

В данном случае речь идёт об импорте. Наша территория здесь - эксперт AG_exp.ex4. Это - основа приложения AutoGraf 4, поставляемая пользователю в виде компилированного файла. Исходный код эксперта не поставляется (естественно, т.к. приложение распространяется на коммерческой основе, хотя и бесплатно), поэтому присоединение в эксперт каких-либо модулей через inclide (пользователем-программистом) невозможно.

--

Задача заключалась в том, чтобы предоставить пользователю возможность присоединять к приложению AutoGraf 4 свои торговые алгоритмы, написанные на MQL4 и оформленные в виде .ех4 файлов стратегий. Для решения этой задачи в эксперте AG_exp.ex4 прописан код, в соответствии с которым в эксперт импортируется функция автоматической торговли AG_AT, поставляемая как в виде .ех4, так и в виде mq4. Далее пользователь может сам решать как ему обустроить свои коды. Наиболее удобно использовать один из двух вариантов:

1. Написать собственный код непосредственно в функции AG_AT() и скомпилировать одноимённый файл AG_AT.mq4, получив AG_AT.ех4.

Пример: http://autograf.dp.ua/Pages/2/26/267/26711/26711_1.htm, примеры 1-15: http://autograf.dp.ua/Pages/2/26/267/2679/2679_1.htm

2. Написать собственный код новой функции в отдельном файле стратегии, например, My_Strategy() в файле My_Strategy.mq4. Прописать в функции AG_AT() импорт функции My_Strategy() из файла My_Strategy.ех4 (современный вариант). Примеры http://autograf.dp.ua/Pages/2/26/267/26712/26712_1.htm, http://autograf.dp.ua/Pages/2/26/267/26712/26712_2.htm

.

Ни в одном из этих вариантов не представляется возможным прописать внешние переменные так, чтобы они были доступны пользователю. Единственная возможность указать внешние переменные - прописать их в эксперте AG_exp.ex4 на этапе проектирования, что и сделано. Значения переменных передаются транзитом через AG_AT() в пользовательскую стартегию My_Strategy() в массиве Instrument. Такая технология принята в AutoGraf 4 последней весии и она исправно работает.

--

Что всё это значит для пользователя? Это значит, что любой пользователь может написать свою стратегию и запускать её в среде AutoGraf 4. При этом и своя стратегия будет работать и все возможности AutoGraf 4 будут доступны пользователю. В частности, из стратегии можно управлять любыми инструментами AutoGraf 4 (!) - подтяжками, переворотами, звуками и пр.

Для проф. программистов технология предусматривает возможность передавать в файл стратегии настраиваемую переменную-пароль. Это значит, что программисты могут писать стратегии под AutoGraf 4 и распространять их на коммерческой основе (например, только для оговоренного счёта).

 
LeonidSB писал(а) >>

Уважаемые!

Я рассматриваю следующую схему цепочки подключения:

Функция AG_AT является переключателем выбора присоединяемых стратегий.

Да. Правильно.

 
LeonidSB писал(а) >>

Уважаемые!

Ответьте пожалуйста на вопрос.

Если функция АТ не является переключателем, а содержит код стратегии то (хотя, как я понимаю, это без разницы), каким образом приложение различает что функция АТ отдает указание (например, обращение к терминалу) ему, а не ведет торговлю сама?

Стратегия может передавать в приложение:

- значения общих настраиваемых параметров (SL, TP, Lots и пр)

- параметры устанавливаемых и удаляемых инструментов

Стратегия не передаёт в приложение приказы на открытие и закрытие ордеров (это планируется в AG 5 на основе возможностей MQL 5), а пока (в AG 4) в этом нет жёсткой необходимости. Стратегия может и должна сама открывать/закрывать ордера по собственному алгоритму пользователя.

Если в функции АТ сформирован приказ на заключение сделки и нет строки кода для учета в приложении, то торгует сама. Приложение, в этом случае, просто транслирует приказ на терминал без всякого учета и обработки.

Если есть, то приказ проходит через приложение в передаваемых по ссылке параметрах функции АТ.

Правильно я понимаю?

Не очень понятно что Вы называете "строка кода для учёта в приложении".

Приложение учитывает ордера всякий раз, когда ему возвращают управление. На каждой итерации большого цикла пересчитанный массив учёта ордеров Orders передаётся в AG_AT и далее в стратегию. На основании учёта ордеров в стратегии могут вычисляться те или иные управляющие воздействия. Отдавать управление в приложение из стратегии необходимо почаще, чтоб в стратегии всегда был свежий массив учёта ордеров.

Торговый приказ из любой части программы (приложения, или AG_AT, или стратегии) уходит сразу в терминал МТ4 и сразу на сервер. После исполнения приказа на сервере управление возвращается тем же путём в точку отправления торгового приказа. Пока приказ обрабатывается на сервере все молчат и ждут ответа - ничего не происходит (если я не ошибаюсь, в МТ 5 эта технология будет изменена - ждать не будем, будем работать:)

 
Спасибо!