Добрый день. В предыдущем посте были описаны базовые компоненты – классы обёртки над API брокера. Не хотелось нагружать их дополнительной логикой, поэтому оставим их как есть, и перейдём к чуть более сложному объекту. На сцене появляется IOrderManager, который отвечает за заявки и сделки по ним.
interface IOrderManager { List<Order> GetOrders(string symbol, int strategyID); void PlaceOrder(string symbol, int strategyID, OrderAction action, OrderType type, double price, double amount, double stopPrice); }
Всего два метода – выставить заявку и получить их список. Но, у реализации IOrderManager’а непростая задача – надо не просто выставлять заявки, но также хранить какая стратегия это сделала и какие прошли сделки. Получается, у OrderManager’а есть некое состояние – список заявок/сделок, поэтому этот объект относится больше к модели, чем к сервисному слою программы. Перед этим я описывал IPortfolioGate – класс-обёртка для работы с портфелем, вот у него нет состояния, он просто транслирует вызов методов внешней COM библиотеки, а вот OrderManager это некий дополнительный уровень над всем этим – у него появляются «знания» о предметной области, и именно он используется в классах стратегий.
Также, появляются две сущности – заявка (Order) и сделка (Trade). Класс Order имеет список сделок прошедших по данной заявке.
class Order { public string Symbol { get; set; } public OrderAction Action { get; set; } public double Price { get; set; } … public List<Trade> Trades { get; set; } }
Занимаетесь алготрейдингом и хотите развиваться в этом направлении? Вы можете присоединиться к команде единомышленников на Quantrum.me.
От вас потребуются:
* навыки программирования Python;
* опыт торговли и понимание рынка.
Вы должны быть готовы:
* выполнять задачи команды и следовать правилам;
* учиться и проходить онлайн-курсы;
* работать в Linux.
Вас ждет строгий отбор. Но если вы его пройдете, то получите доступ к ресурсам команды, повысите свой уровень программирования и прибыльность торговли.
Запрос на вступление в команду отправляйте на ra@quantrum.me.
Результаты консервативной количественной инвестиционной модели LQI (lazy quantitative investing), о которой я писал ранее (http://smart-lab.ru/blog/384110.php), за август (результаты за прошлый месяц: smart-lab.ru/blog/412521.php). Хотя месяц и не был слишком удачным для S&P 500 и для модели — ей удалось остаться в плюсе и обогнать свои бенчмарки:
weight monthly.ret
XLY 0.085 -2.03
XLP 0.143 -1.00
XLE 0.093 -5.46
XLF 0.127 -2.26
XLV 0.089 1.98
XLI 0.104 0.51
XLB 0.000 0.71
XLK 0.000 2.40
XLU 0.106 2.71
IYZ 0.000 -1.21
VNQ 0.000 -0.71
SHY 0.000 0.17
TLT 0.115 2.69
GLD 0.140 4.29
Предыдущие веса были опубликованы утром 1-го августа, соответственно доходности приведены за период с закрытия 1-го августа до закрытия 31-го августа.
Корреляция между весами и ретурнами положительная — 0.061. Хотя модель и сделала серьезную ошибку, взяв весом 9.3% XLE, сильно упавший за месяц — однако это было компенсировано верными решениями о покупке топ-перформеров месяца — XLV, XLU, TLT и в особенности GLD (с максимальным весом 14%). Вследствие этого модели удалось обогнать свои бенчмарки (SPY & EQW — equal-weighted портфель из торгуемых тикеров) в терминах ретурна и риска (максимальная просадка). Сравнение — на графике в начале: SPY — +0.1%, EQW — +0.2%, LQI — +0.5%. Просадки: SPY — 2.1%, EQW — 1.5%, LQI — 1.0%. В целом модель перформила в августе в рамках своего риск-ретурн профиля.
Приветствую! В предыдущем посте была теория, теперь к делу. Кое-что буду упрощать, чтобы представить картинку в целом.
Итак, чтобы проект не зависел от API внешней com библиотеки (SmartCom или д.р.), чтобы в коде стратегий не использовались специфические типы, разработку я начала с обёрток над смарткомом. Я определил три базовых интерфейса: IConnectGate, IMarketDataGate и IPortfolioGate. Соответственно для подключения, для получения маркет-даты и для выставления заявок и работы с портфелем. Причём каждый из этих трёх интерфейсов мне надо было реализовать минимум дважды – для смарткома и для локального тестера.
В случае со смарткомом, это некий адаптер-обёртка, благодаря которому, я оперирую собственными типами и не завишу от com библиотеки. Т.е. у меня есть свои типы (например, направление заявки, тайм-фрейм), которые используются в коде, а адаптер-обёртка конвертирует их в специфические, понятные внешней библиотеке. Также, желательно, чтобы у каждого объекта, в программе, была только одна обязанность, поэтому никакой дополнительной логики эти обёртки не несут.
Быстро сказка сказывается, да не быстро дело делается)).
Напишу немного про прогресс. Отсутствие позитивной обратной связи на мои теоретизирования и обвинения в перегибе в сторону теории охладили моё желание изливать свои теоретические рассуждения и мысли), ну ничего, оно вернётся со временем — мысли то не пропали)). Это почему я не пишу. По поводу конкретного прогресса теперь. Я искал — я нашел — нашел компаньона — теперь работаем вдвоём. Пока всё пучком, надеюсь тандем выстрелит, в любом случае опыт интересный и полезный получится. А в целом по поводу тандема — сценарий обычный — первичная эйфория сменилась более объективным отношением. Определили схемы взаимодействия, набросали роудмап со сроками, двигаемся согласно установленного плана)).
Плюсы тандема (не любого, а именно этого):
— Я закрыл те области, которые у меня проседали, могу сконцентрироваться на том, что умею и люблю — рисёч. Кроме технических вопросов кстати скомпенсировал свой перекос в теорию и пространные рассуждения, в запрягание нежели езду и т.д.
… активы под управлением так называемых количественных (или квантовых) хедж-фондов удвоились за последнее десятилетие, превысив $450 млрд в 2016 г. Однако их растущая популярность негативно сказалась на результатах. Согласно Hedge Fund Research, средняя доходность всех хедж-фондов, инвестирующих в акции, составила в этом году 7,7%, а количественных – только 4,9%***
Если все квантовые фонды полны гениев, используют мощнейшие компьютеры и огромные объемы данных, где же те простофили, что поставляют “мясо” для всех этих количественных стратегий с абсолютным доходом?
Приветствую всех
Проводил вебинар, к сожалению были сложности с комнатой. Заранее прошу прощения у присутствовавших. Комната подвисла, и не видел вопросов, по ходу занятия. Кого-то это зацепило.
Суть мероприятия, сводилась к тому, чтобы собрать простой алгоритм по стандартным индикаторам скользящих и rsi
Сам алгоритм ценности не имеет. Хоть я его и запустил в торговлю на мероприятии — но это лишь чтобы показать, что робот сам совершает сделки (правда я не учел постоянный сигнал, и сделки естественно получились со скрипом)
Но, вебинар тематический и, естественно, сложно все уложить в рамках одного занятия. То есть обьяснить сложности и тонкости программы не возможно, потому для новичков естественно было сложно понять что либо.