Приветствую всех читателей нашего блога.
Уже достаточно давно я упоминал о возможностях программы FinLab.MTS. Многие из Вас уже знают, что с помощью этой программы можно создавать торговых роботов и автоматизировать любые механические системы.
Однако до конкретики пока не доходило. Ну что ж, пришло время.
Сегодня выкладываю первую часть описания API программы FinLab.MTS
Конечно для тех, кто силён в трейдинге, но не силен в программировании сразу разобраться в этом описании будет довольно трудно, но если долго мучиться – что-нибудь получится.
Итак, сегодня рассказ про
- Концепцию программы FinLab.MTS
- Философию алгоритмов программы
- и для затравки начало рассказа про класс Algorithm
Если что будет не понятно – пишите в комментариях – будем разбираться.
Поехали…
1. Концепция программы FinLab.MTS.
Программа FinLab.MTS позволяют пользователю свои собственные торговые стратегии, выходящие за рамки торговых стратегий, заложенных в FinLab.PairTrade.
Программа FinLab.MTS имеет специально разработанный для этих целей API-интерфейс.
Для понимания принципов работы программы FinLab.MTS необходимо рассмотреть два ключевых понятия:
- Пользовательская задача
- Алгоритм пользователя
Пользовательская задача – это задача (очень подробно о понятии «задача» рассказано в описании FinLab.PairTrade), в которой решения о выставлении и снятии заявок производятся согласно Алгоритму пользователя.
Пользовательская задача в общем случае рассчитана на парный трейдинг. В ней содержится «Первая нога» (фьючерс) и «Вторая нога» (спот).
Спекулятивный трейдинг в контексте пользовательской задачи – это трейдинг, при котором вторая нога или пустой стакан (Empty) или просто не учитывается.
Индексный трейдинг также возможен в том случае, когда спот является синтетическим финансовым инструментом, созданным из заготовки.
Ни в том, ни в другом случае, реализация алгоритма со стороны разработчика ни чем не отличается от общего случая. Более того, можно написать алгоритм, применимый одновременно для всех трех вариантов трейдинга.
Пользовательская задача обладает всеми свойствами задачи как таковой. Ее можно запускать, останавливать, сохранять ее настройки в файл, загружать ее из файла, вносить в состав суперзадачи и т.д.
Алгоритм пользователя в программе FinLab.MTS - это некая программная структура с четко определенным функционалом, предназначенная для анализа торговых данных и принятия торговых решений.
Никаких ограничений по количеству запускаемых пользовательских задач в программе нет. Все определяется производительностью конечного компьютера.
Пользовательская задача выступает посредником между алгоритмом пользователя и торговым терминалом. Пользовательская задача передает алгоритму пользователя данные о котировках, опрашивает алгоритм о необходимости постановки или снятия заявки, а так же информирует алгоритм о совершаемых задачей сделках.
Таким образом, при реализации своего алгоритма пользователь избавляется от необходимости решать вопросы:
- Совместимости с терминалом
- Обработки служебной информации
- Перекрытия открываемых позиций
А это означает, что:
- Любой алгоритм, написанный для программы FinLab.MTS будет работать с любым терминалом, поддерживаемым программой! Кроме того, такой алгоритм будет работать с любым финансовым инструментом на любой бирже.
- Алгоритм пользователя будет получать от программы только ту информацию, которая необходима для принятия торговых решений.
Более подробно о структуре алгоритма рассказано ниже.
2. Философия алгоритмов в FinLab.MTS.
С программной точки зрения алгоритм пользователя – это класс, наследующий абстрактный класс Algorithm из пространства имен FinLab.MTS.Infinity библиотеки FinLab.MTS.Infinity.dll.
При наследовании указанного класса пользователь должен переопределить ряд методов и свойств класса. Переопределяемые методы класса Algorithm отвечают за принятие решений о постановке или снятии заявок, а также обрабатывают данные о сделках, совершенных согласно пользовательского алгоритма.
Переопределяемые свойства класса Algorithm служат для отображения промежуточной расчётной информации в таблице главного окна программы.
Работа пользовательской задачи и алгоритма строится по следующему принципу:
В любой момент времени в рынке может быть не более одной заявки на покупку и не более одной заявки на продажу.
Этот принцип однозначно определяет последовательность работы пользовательской задачи:
1) При любом изменении на рынке пользовательская задача обращается к алгоритму
2) Если в рынке нет заявки на покупку, то пользовательская задача опрашивает алгоритм на предмет выставления новой заявки на покупку. Если алгоритм ничего не выдает в ответ, то программа ждет следующего изменения ситуации на рынке.
3) Если алгоритм выдает команду на выставление заявки, то программа передает эту команду в терминал и дожидается ответа терминала о результате выполнения этой команды.
4) Если команда не выполнена, и заявка не выставлена, то программа возвращается к пункту 1.
5) Если же команда выполнена, и заявка становится в очередь, то при следующем обновлении стакана задача опрашивает алгоритм на предмет снятие этой заявки. В случае отказа – задача возвращается в пункту 5, в случае необходимости снятия заявки – снимает заявку и возвращается в пункту 1.
6) Если заявка исполняется полностью, то задача возвращается к пункту 1.
7) Если происходит сделка, то задача оповещает алгоритм о совершенной сделке.
Процесс аналогичен для заявок на продажу.
Таким образом:
- задача никогда не спросит алгоритм о необходимости выставить заявку в каком-либо направлении, если в этом направлении уже существует активная неисполненная заявка.
- Задача никогда не спросит алгоритм о необходимости снять заявку, если заявок нет.
- Задача никогда не передаст алгоритму «чужие» заявки и сделки.
5 шагов для создания собственного торгового робота
1) Создать класс, наследующий абстрактный класс Algorithm;
2) Переопределить необходимые методы и свойства;
3) Скомпилировать dll-ку и скопировать ее в папку программы FinLab.MTS ;
4) Запустить программу и создать новую пользовательскую задачу;
5) Выбрать подготовленный класс из списка и начать работу.
3. Класс Algorithm
Как уже было сказано, это базовый класс. Он реализует несколько интерфейсов, а также имеет ряд собственных свойств и методов.
namespace FinLab.MTS.Infinity
{
[Serializable]
public abstract class Algorithm : IDisposable, ITaskInfo, IControlable, IAlgorithm, IInitializeable
{...}
}
Возможность сохранять и загружать задачу предъявляет к алгоритму требование сериализуемости. Эти требования описаны в разделе 5.3. Подробнее о сериализации можно узнать на сайте МайкроСофт.
http://msdn.microsoft.com/en-us/library/ms950721.aspx
На сегодня пока хватит.
Читайте. Если что-то будет непонятно – задавайте вопросы в комментариях…
Чтобы не пропустить следующие части – не забывайте подписываться на новые статьи по RSS… (кто не знает, что такое RSS – можете посмотреть здесь>>) .
Интересно, ждем продолжения
С нетерпением ждём продолжения.
Самый лучший и актуальный лозунг: “Напиши робота и участвуй в конкурсе “Лучший частный инвестор”” ))
[...] Timon: Самый лучший и актуальный лозунг: "Напиши робота и учас… [...]
[...] я начал выкладывать описание API программы FinLab.MTS. Первую часть этого описания можно посмотреть здесь. Сегодня [...]
Куда все пропали . Неужели всё всем уже ясно и понятно. Или наоборот наступил тёмный лес и все ушли в тень ?
Опыта набираются ))
Самый лучший способ набраться опыта – пройти пошагово написание кода какой нибудь стратегии вместе с опытным программистом. Мне например непонятно вот это “Спекулятивный трейдинг в контексте пользовательской задачи – это трейдинг, при котором вторая нога или пустой стакан (Empty) или просто не учитывается.” Всё это понятно когда работать собираешься на ФОТС( первая нога) Но непонятно можно ли будет использовать только вторую ногу для спекуляций на фондовом рынке ?