Избранное трейдера Михаил
reversed=1и оставить только строчку номер 15 в запросе
limit=1получим запрос вида
https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json?reversed=1&limit=1Вариант автоматизации упрощенно:
using System; using System.Net; using System.IO; using System.Text; namespace GetLastPrice { class Program { static void Main(string[] args) { string newLine; string[] lastLine; string link = "https://iss.moex.com/iss/engines/futures/markets/forts/securities/SiZ7/trades.json?reversed=1&limit=1"; int count = 0; for (;;) { HttpWebRequest request = (HttpWebRequest)WebRequest.Create(link); request.ContentType = "text/plain; charset=utf-8"; HttpWebResponse response = request.GetResponse() as HttpWebResponse; using (Stream responseStream = response.GetResponseStream()) { StreamReader sr = new StreamReader(responseStream, Encoding.UTF8); while ((newLine = sr.ReadLine()) != null) { if (count == 14) { if (newLine =="") break; else { lastLine = newLine.Split(","); Console.WriteLine("Volume is " + lastLine[6] +" at Price " + lastLine[5]); } } count++; } } count = 0; response.Close(); } } } }
Напоминаю, что в первой части, собравшей 300 лайков, шла речь о том, чего не стоит покупать для получения пассивного дохода.
В этой, 2-й части, будут мысли о подходящих инструментах для получения пассивного дохода.
По причинам, изложенным приблизительно здесь, я буду писать только о североамериканских рынках.
Начнем с пары оговорок
Добрый день. В предыдущих частях я описывал, как на C# сделал собственный тестер, применяя объектно-ориентированный подход, рассказывал про интерфейсы, про их реализации, и, рассказывал про работу с БД. На данный момент осталось совсем немного. В этом топике я опишу вариант расчёта результатов работы стратегии.
Чтобы не запутаться, даже не читая предыдущие топики, поясню, что есть и к чему надо придти. Есть стратегии – это некий объект программы, который выставляет заявки на основе получаемой маркет-даты. Заявки (Order) регистрируются системой. Также, регистрируются сделки прошедшие по заявке (каждая заявка имеет список сделок — List<Trades> trades). После прогона стратегии, все заявки и сделки сохраняются в БД, и после, их можно извлечь и посчитать по ним статистику работы стратегии. По сути, эта статистика состоит из двух аспектов: сами закрытые позиции и оценка эффективности на их основе. Начнём с первого. Вот интерфейс, который принимает заявки со сделками, и, выдаёт, собственно, список закрытых позиций:
interface IClosePositionManager { List<ClosePosition> ClosePositions (List<Order> orders); }
В своем недавнем топике я объяснял, почему шорты лучше торговать на фьючерсе, а лонги на споте. Там же был и предложен метод, как можно, получая безрисковую ставку, торговать шорты по данным спота. Понятно, что все эти рассуждения не учитывали комиссии брокеров. И я в том топике предложил посчитать все За и Против, исходя из реальных условий. Вот и давайте проведем такие расчеты на примере моего личного счета. Что он из себя представляет?
RI – 50%
SBER, GAZP, GMKN, ROSN – по 12.5%
Si – 33%
OФЗ – 33%
Что из себя представляют приведенные %%? Это соотношение между полным лонгом по моим системам в соответствующем эмитенте по номиналу, рассчитанному по цене закрытия предыдущего дня к размеру счета, рассчитанному по тем же ценам. Так как в RI, SBER, GAZP, GMKN, ROSN торгуются по три трендовых торговых идеи, две из которых разбиваются на 2-3 торговых алгоритма с разными параметрами (у одной идеи оптимизируемый параметр один и на нем особо с портфелями не разбежишься) плюс еще в RI торгуется одна контртрендовая система с реальным таймфреймом пара часов. Поэтому в этой части портфеля полный лонг, как и полный шорт, дело нечастое (примерно по 30% времени в году). В Si торгуется одна идея с одним набором параметров, так как при среднем времени в позиции 12 с небольшим дней заморачиваться с портфелями тоже смысла большого не имеет, поэтому тут и полный лонг и полный шорт занимают примерно по 45% времени. Ну и в ОФЗ у меня банальный B&H.
Прочитал сегодня книжку Джоэля Гринблатта «Маленькая книга победителя рынка акций». Книжка и в самом деле маленькая — по объему, да и читается легко. Отзыв писать про книгу не буду здесь — сами все прочтете. Суть в другом. В этой «маленькой книге» дается простая «волшебная формула», как выбрать себе портфель акций и получать доходность выше среднерыночных. Как и почему это работает — рассказывается в книге, здесь я не буду дискутировать на эту тему.
Суть формулы простая — берем все компании из доступного списка, в США это 3500 компаний, которые отслеживают всевозможные скринеры, сортируем их по рентабельности капитала в порядке убывания. Каждой компании присваиваем рейтинг — порядковый номер в списке. Это будет рейтинг компании по капиталу. Потом этот список пересортировываем так, чтобы отсортировать список в порядке убывания доходности акции как таковой (читай, по коэффициенту P\E). Каждой компании в списке присваиваем еще один рейтинг — это будет рейтинг доходности акции. Суммируем рейтинги для каждой акции. Это и есть «волшебная формула».
Далее в портфель выбираем акции с минимальным суммарным рейтингом. В книге предлагается в портфель выбрать 20-30 акций. И предлагается проводить такую процедуру периодически с целью ротации акций в портфеле. Тут тоже есть тонкости, они расписаны в книге довольно подробно. Суть «волшебной формулы» — используя этот механизм вы будете отбирать портфель хорошие компании по хорошей цене — все как у Баффета.
Естественно, захотелось получить такой «волшебный рейтинг» для отечественного рынка акций. Результат исследований доступен по ссылке (там полная таблица, в ней порядка 140 эмитентов, можно сортировать столбцы), здесь же приведен ТОП-10.
– Привет! В предыдущий раз, ты рассказывал про дата-сервис, про отдельный слой доступа к данным. Расскажи теперь про сами сущности и репозитории. При помощь чего ты вытягиваешь данные из таблиц?
– Ок. Если необходимо сохранять сделки и статистику, или откуда-то брать исторические котировки для тестов, то неплохо использовать БД. Но, как с ней общаться? Есть несколько способов. В C#, есть например традиционный ADO.NET, но речь пойдёт не о нём. В прошлый раз мы отделили работу с БД от бизнес-логики, это уже очень здорово, но можно пойти дальше! Есть способ общаться с самой БД на достаточно абстрактном уровне, инкапсулируя детали формирования самих запросов. Такой способ лучше вписывается в концепцию объектно-ориентированного проектирования, и называется он ORM (object relation mapping).
– Хм, я что-то слышал про ORM. У меня сложилось неоднозначное ощущение, вроде, есть целое сообщество, кто против них (OrmHate), и считает это антипаттерном. Все эти дополнительные уровни абстракции, и вообще, они наверно дико тормозные?
Перевод статьи из блога tr8dr, кое-что из основ для HFT торговли.
Алгоритмы высокочастотной торговли можно разделить на следующие категории:
1. Различные формы маркет мэйкинга (вероятно самый большой процент)
2. Заработок на действиях других участников рынка или на микроструктуре рынка
3. Краткосрочный арбитраж
4. Алгоритмы исполнения больших заявок
Также среднесрочные стратегии подразделяются на:
1. Следование за трендом (если есть достаточно сильный импульс)
2. Следование за циклами (продажа/покупка в точках разворота высокоамплитудных ценовых циклов)
3. Долгосрочный арбитраж
Если сфокусироваться на алгоритмах маркет мэйкинга и следования тренду/циклам, то понимание ценового режима и ценовой функции очень важно.
Режим
Мы должны определять текущий ценовой режим для того, чтобы понимать, где мы можем применять стратегию маркет мэйкинга, а где следование тренду или циклам.