Блог им. mirovan

Разработка МТС. Как поставить задачу перед программистом

Однажды на одном известном трейдерском ресурсе ко мне обратился человек (назовем его Александром) с просьбой помочь разработать робота для торговли на фондовом рынке. У меня был опыт разработки программного обеспечения под заказ, но торгового робота на заказ я еще не писал. Сразу отмечу, что у меня есть несколько торговых систем, которые работают на разных инструментах, но их я писал для себя.
 
Итак, мы созвонились с этим человеком, общение прошло очень приятно, было видно, что Александр заинтересован фондовым рынком и хочет зарабатывать. У него был некоторый опыт работы на фондовом рынке и своя торговая система. Сначала мы обсудили с ним некоторые детали, и он вкратце описал идею построения торговой системы. Однако Александр не имел технического образования, чтобы поставить четкий и ясный алгоритм. В этом заключалась первая сложность нашего сотрудничества. Определив алгоритм, я показал, как система Александра работала бы на исторических данных (рис. 1), и предложил еще два варианта (рис. 2, рис. 3) изменения торговой стратегии, из которых мы выбрали приемлемый.
 Разработка МТС. Как поставить задачу перед программистом
Рис 1. Кривая доходности исходной системы
 
 Разработка МТС. Как поставить задачу перед программистом
Рис 2. Первый вариант изменения торговой системы

 
Разработка МТС. Как поставить задачу перед программистом
Рис 3. Второй вариант изменения торговой системы

 
Затем мы обсудили вопросы этапов разработки и условия оплаты. Сотрудничество наше было на словах и доверии, без подписания бумаг. Я сделал первую версию торгового робота и показал его Александру, чтобы он удостоверился в моей честности. После оплаты первого этапа разработки, я доработал программу, после чего робот был запущен на реальном счете. В процессе работы робота было выявлены рад некритичных ошибок, которые я исправил. После чего Александр оплатил оставшуюся часть стоимости торгового робота, и на этом разработка была закончена. Я хочу сказать, что мне повезло с таким заказчиком, он не менял требования в процессе разработки, был всегда на связи, с ним было приятно общаться, и мы всегда находили компромисс при решении проблем. Однако, так гладко бывает далеко не всегда, в основном проблемы возникают на этапе постановки задачи перед программистом и начале разработки.
 
 
Я хотел бы классифицировать данные проблемы:
 
1. Разговор на разных на языках
Вы можете не обладать знанием определенного языка программирования, не владеть некоторыми терминами при постановке задачи, но вы обязаны излагать свои мысли четко и ясно. Представьте что на месте программиста не программист, а ваша бабушка: чем четче и яснее Вы опишите идею, тем легче программист сможет понять вас. Чтобы поставить задачу перед разработчиком торговой системы Вы должны точно понимать, как ваша система работает. А именно знать следующие параметры:
 
1.1 Точка входа. Вы точно должны знать, где и на основании чего должна осуществляться сделка. Это может быть определенный свечной паттерн, уровни сопротивления/поддержки, поведение индикаторов и осцилляторов, соотношение рыночного сантимента и т.д. Помимо этого надо знать как будет осуществлен вход в сделку. Будет это лимитная заявка на вход или сделка будет произведена по рыночной цене. Если рассматривается обычный график зависимости цены от времени, то определить, как открывается сделка – по закрытию/открытию свечи или может быть осуществлен вход в сделку внутри свечи.
 
1.2 Точка выхода. Также является значимым фактором. Программист должен понять – где ваша система выходит из сделки, на основании изменения конкретной рыночной ситуации, либо в конце торгового дня, либо при изменении значения индикаторов и т.д. Аналогично с точкой вход – требуется понимание условий выход в зависимости от таймфрейма.
 
1.3 Таймфрейм. Если Ваша система использует график зависимости цены от времени, то вы должны точно знать на каком таймфрейме должна работать ваша торговая система. Условно можно разделить таймфреймы на две категории – таймфрейм для высокочастотной торговли (тиковый или минутный таймфрейм) и все остальные таймфреймы. В зависимости от выбранного таймфрейма, на котором будут заключаться сделки, будет поставлен следующий вопрос о количестве сделок за единицу времени. Система также может работать на нескольких таймфреймах, например вход может осуществляться на 5-минутном графике, а выход и управление позицией – на часовом.
 
1.4 Частота сделок. Нужно отдавать себе отчет – сколько ваша система делает сделок на выбранном таймфрейме. Если это высокочастотная торговая система, т.е. сделка может длиться нескольких миллисекунд – то потребуется хорошая инфрастуктура, широкий устойчивый канал доступа к интернету и, в идеале, прямой доступ к бирже. Работа на таймфрейме другого масштаба (более длительного), подразумевает не такое большое количество сделок, поэтому инфраструктурным ограничениям можно уделять меньшее внимание.
 
1.5 Управление рисками. Этой части я уделяю наибольшее внимание. Вам необходимо понимать и уметь объяснить программисту, как ваша система будет управлять деньгами – каким объемом система будет совершать операции, сколько вы можете потерять в одной сделке (в день, в неделю). Почти любой торговой системе этот момент остается одним из самых тонких моментов. Более того, при программировании, часть кода на управление позиции занимает существенную часть программного кода.
1.6 Программное обеспечение. Вы должны объяснить программисту, под какую платформу должна работать ваша торговая система. Это может быть самый распространенный терминал на российском рынке – Quik, собственный терминал брокера. Если это высокочастотная система – то тут нужно думать о прямом доступе к бирже и протоколе Plaza2. Программное обеспечение на бирже постоянно совершенствуется и можно использовать все нововведения, к примеру анонсированную платформу SPECTRA. Сейчас на рынке FORTS и RTS Standard эксплуатируется версия торговой системы 3.8. Новая версия имеет порядковый номер 3.9 и получила название SPECTRA. В эксплуатацию SPECTRA будет введена к 2013 году, производительность системы будет достигать 30 000 транзакций в секунду. Нюансы использования программного обеспечения нужно учитывать вам исходя из требований к роботу, в случае затруднения, программист должен сам предложить, что использовать в качестве создания робота.
 
1.7 Аппаратное обеспечение. Вам надо задуматься, где вы будете запускать своего робота. Это может быть домашний компьютер (что я бы не рекомендовал), отдельный компьютер или ноутбук, или выделенный сервер. Об этом также надо уведомить программиста для наилучшего понимания друг друга.
 
1.8 Технология и платформа для разработки. О методах разработки программных продуктов можно писать довольно много, вам нужно лишь определить, как будет работать ваш будущий робот (с точки зрения программного обеспечения), на каком языке будет написан, какие дополнительные требования у программы будут. Способы взаимодействия робота можно разделить на 3 категории – робот в торговом терминале, автономный робот, работающий через терминал, полностью автономный робот. К первому типу можно отнести роботов, разрабатываемых для самого популярного терминала Quik, где код робота будет написан на языке Qpile и будет иметь вид как таблица Quik.
 
 Разработка МТС. Как поставить задачу перед программистом
Рис 4. Робот-портфель в терминале Quik
 
Ко второму относятся системы для разработки и тестирования роботов, такие как TradeMatic, Wealth Lab, MetaStock и т.д. Особенностью этих систем является возможность отправки заявок в торговый терминал.
Разработка МТС. Как поставить задачу перед программистом
Рис 5. TradeMatic
 
Разработка МТС. Как поставить задачу перед программистом
Рис 6. Wealth Lab
 
 
Также к этому типу можно отнести роботов, написанных специально для терминала на каком-либо из языков программирования, в большинстве случаев это C#, C++, Java. Хотелось бы отметить популярную библиотеку для создания торговых роботов Stock#. К последнему типу стоит отнести роботов, работающих либо через протокол брокера (поэтому терминал не нужен), либо разработанный для шлюза Plaza2 биржи ММВБ-РТС.
Разработка МТС. Как поставить задачу перед программистом
Рис 7. StockSharp — платформа для торговых роботов
 
Язык и платформу для создания торгового робота, выбирается из потребностей и навыков разработчика. Отмечу минимальный набор функций, которые должен предусматривать робот: отправка заявок, получение информации об исполнении, управление позицией, отказоустойчивость при перезагрузке и обрыве связи, логирование. Все эти нюансы, нужно также определить с разработчиком.
 
 
2. Договор о цене и условиях работы «на берегу»
Прежде чем начать работу с человеком, разрабатывающим торгового робота, необходимо обезопасить себя от недобросовестных разработчиков, в свою очередь программист тоже заинтересован в этом. Я бы рекомендовал сделать следующе (читать далее)
 
 
3. «Всегда на связи»
Постарайтесь узнать, в какое время разработчик будет работать над проектом и как с ним можно связаться при возникновении непредвиденных обстоятельств. При этом помните, что вам тоже надо поддерживать обратную связь с разработчиком, т.к. при длительном вашем отсутствии программист может подумать, что вы уже не заинтересованы в разработке и бросить работу над проектом, а хуже всего выложить ваши идеи в публичный доступ.


4. Доверяй, но проверяй

Прежде чем договориться о разработке торгового робота или стратегии, не поленитесь, узнайте у других людей, посмотрите отзывы в интернете о тех, кто уже работал с данным человеком или компанией. Это позволит Вам принять правильный выбор – работать с разработчиком или искать другого.


5. Не живи одним днем, смотри в будущее

Если у вас есть идея торговой системы, то разработчик, запрограммировав вашу стратегию, покажет, как она работает на исторических данных. При таком тестировании на истории, обычно из одной системы могут «родиться» сразу несколько, которые в дальнейшем вы захотите попробовать применить. Более того разработчик может указать те слабые места Вашей системы и предложить как изменить их. Поэтому, старайтесь сохранить дружественно-деловые отношения с разработчиком, ведь, возможно, придется к нему обратиться еще не один раз.

 
Разработка торговой системы, ее п
рограммирование в виде робота – достаточно долгий, трудный процесс. Поэтому, если вы решили автоматизировать свою торговлю, вам необходимо запастись временем и терпением. Помните, что главный успех проекта заключается в тесном контакте между заказчиком и разработчиком в дружеской, но деловой обстановке.



Оригинал статьи на сайте rotostroy.ru
★20
3 комментария
классный пост!
Тимофей Мартынов, да, но слишком много букав :)
Тоже пишем системы с тестированием, бесплатно, на фьючах кому интересно в личку
avatar

теги блога Максим Милованов

....все тэги



UPDONW
Новый дизайн