ÜberBlog

Cython для трейдинга – скорость имеет значение

Python замечательный язык, де факто питон стал OpenSource альтернативой множеству дорогостоящих математических пакетов в научной среде, трейдинг здесь не является исплючением. Я считаю, что трейдинг  – это больше наука, чем искусство. Весь прошлый месяц я делал инструмент, который выполняет тонны расчетов, при чем он это делает на питоне. А как любой интерпретируемый язык – питон достаточно медленный, и прожорливый по части памяти, но в умелых руках его скорости могут достигать скоростей C/C++ языков! Поделюсь небольшим опытом оптимизации расчетов на питоне, а также поделюсь single pass алгоритмом для расчета СКО на Питоне. Сразу скажу, для этого конкретного кода мне удалось добиться увеличения производительности кода в 30 (тридцать) раз!

Вот тот самый код, который считает СКО, среднее и количество в online режиме, это позволяет получить большой выигрыш по производительности и по использованию памяти. Если кто не знает, обычный расчет СКО подразумевает 2 прохода по всем данным, сначала рассчитывается средняя, потом среднеквадратическое отклонение от нее. Более того большинство online алгоритмов расчета СКО не проходили проверку на стабильность, я тупо сравнивал с numpy.std(), и мой алгоритм имеет 100% сходимость с numpy. Хотя алгоритм конечно не мой, я откопал его где-то в интернетах и переписал на питон.

class Stats_py:
    k = 0.0
    Mk = 0.0
    Qk = 0.0
    def __init__(self):
        self.k = 0.0
        
    def add(self, x):
        self.k += 1
        if self.k == 1.0:    
            self.Mk = x
            self.Qk = 0.0
        else:
            d = x - self.Mk
            self.Qk += (self.k-1.0)*d*d/self.k
            self.Mk += d / self.k
    
    def std(self):
        return sqrt(self.Qk/self.k)
    def mean(self):
        return self.Mk
    def count(self):
        return self.k

Делаем простую проверку на скорость в IPython:

values = np.random.random(10000)
s = Stats_py()
for x in values:
    s.add(x)  
print np.std(values), s.std()

%timeit s.add(1)
------
0.289223020474 0.289223020474
100000 loops, best of 3: 2.93 µs per loop

Как вы видите цифры бьються до последнего знака, а выполнение одного вызова функции add() занимает 2.93 микросекунды = 2930 наносекунд. С одной стороны это очень мало, с другой стороны когда нужно совершить миллиарды итераций это время начинает уже сильно ощущаться.

Теперь давайте выжмем из этого кода все на что он способен! Для этого нам нужно взять в руки напильник Cython и научиться с ним работать. IPython Notebook предоставляет отличную возможность писать и отлаживать код Cython прямо в браузере! Для этого есть специальный %%cyton magiс, примеры работы с ним можно посмотреть в разделе Cython Magic Functions Extension.

Оптимизация cython

Читать далее…

System Development Framework 2.0: Исследования практика

В предыдущем посте мы коснулись теоретических аспектов исследований в рамках System Development Framework 2.0, теперь пришло время поговорить о практике. Как я писал раньше, основной задачей моего фреймворка – является минимизация человеческого присутствия в принятии решений, а также отладка всех механизмов при создании торговых систем. По своему опыту я осознал, что достаточно трудно делать первый шаг в исследованиях, потому-что часто приходится идти на ощупь или искать черную кошку в темной комнате, особенно если ее там нет :)
Стандартизация бизнес процессов – это то что нужно любому бизнесу, без нее у вас может получиться в лучшем случае элитное производство штучного продукта, но никогда не получится массового производства, потому что на каждой технологической операции вы будете терять какое-то время. А время для трейдера – самый ценный ресурс, я это осознал давно, более того – переключение между задачами просто выжигает мне мозг, по-этому я предпочитаю перекладывать рутинные операции на ПО и формализованные процедуры, чтобы их выполнение не занимало много интеллектуальных ресурсов.

Шаг 1: Research Ticket™

Записывайте все, что придет вам в голову! Мозг трейдера каждый день бомбардируется тяжелыми нейтронами в виде новостей, чатов, твиттеров, социальных сетей и прочих отвлекающих факторов, а идея – она приходит быстро и также быстро уходит, если вы не запишите ее на будущее то скорее всего через несколько месяцев придется все выдумывать снова, или вообще все забудется навсегда.
Раньше у меня был список идей в OneNote, потом я писал в блокнот, сейчас я пришел к формату Research Ticket™, тикет содержит в себе 3 раздела: данные, цель исследования и методика исследования.

  • Данные – это не только котировки базового актива, но вообще любые данные, которые будут использованы в исследовании. Это могут быть фундаментальные данные по компании, или календарь экономических новостей, или данные по смежным рынкам. Все это пишется в соответствующую графу.
  • Цель исследования – в этой графе можно описать к каким ожидаемым результатам мы планируем придти, также описываются разные интересные моменты, которые нужно исследовать поподробнее.
  • Методика исследования – примерный алгоритм действий как будет проистекать исследование, этот раздел очень важен, потому что нужно ставить перед собой много маленьких, и выполнимых задач-шагов, в противном случае ваш мозг может отказаться решать слишком расплывчатую задачу, и просто впадет в ступор :)
  • Итоги исследования – результаты исследования, после завершения работы, должны быть написаны с обратной стороны листа, в зависимости от результатов исследование идет дальше по фреймворку или отправляется в архив до лучших дней.

Research Ticket я предпочитаю писать от руки, а не печатать, так как во время работы на компьютере возникает много соблазнов и отвлекающих факторов, лучше налить хорошего чайку и в спокойной обстановке, чтобы никто не отвлекал, занести мысли в тикет. Потом новый тикет вешается на “прикол” на доску рядом с рабочим местом, и он всегда перед глазами, так и просит, чтобы его порисечили :)

Шаг 2: Exploration

Читать далее…

System Development Framework 2.0: Исследования теория

Сегодня мы поговорим об этапе System Development Framework 2.0 – исследованиях, я специально пропустил этап идей, потому что моя задача на сегодня разложить и систематизировать исследования в рамках моего фреймворка, к идеям мы вернемся позже. Сейчас самое время поговорить о том, что делать с идеями, потому что я встречал много трейдеров у которых было много идей, но мало сил и компетенции их развить и превратить в продукт. На самом деле путь от идеи до продукта, в нашем случае торговой системы, занимает очень много времени: идей много, на все времени не хватает, постоянно что-то отвлекает, в итоге все нарастает как снежный ком. Когда садишься на компьютер с желание что-нибудь сделать, возникает минимум 10 направлений приложения своего труда, не только исследования, но и технические проблемы. Да и вообще пока почитаешь новости, блоги, социальные сети – желание что-нибудь сделать, куда-то уходит.

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

Микрофреймворк в рамках System Development Framework 2.0

Нужно понимать, что процесс между этапами “Идея” и “Исследование” проходит не линейно, а часто какая-то идея циркулирует и наполняется новыми смыслами и деталями, до тех пор пока эта идея не станет максимально конкретной и формализуемой. Для примера можно взять несколько разных по уровню конкретики идей: “торговля опционами в Америке”, “как выход Non-Farm Payrolls влияет волатильность” или более конкретную “как действия ЦБ РФ влияют на Рубль, если за предыдущий день были максимальные валютные интервенции за месяц”. Как вы видите все три идеи отличаются разным уровнем проработки, отличаются разным уровнем глубины знаний о предмете. Читать далее…

System Development Framework 2.0: Этапы

Мой SysDev разделен на 5 этапов, три из них посвящены разработке торговой системы, и два этапа направленные на поддержание торгового процесса. Каждого этапа мы коснемся подробнее в дальнейших постах, а сейчас краткое описание всех этапов.

Этап 1: Идеи

Это самый сложный этап в моей торговле, потому-что на этом этапе проявляется вся сложность трейдинга, его творческая составляющая. Иногда довольно сложно формализовать идею, много времени уходит на чтение различной литературы или нормативных документов, много поисков, много тупиков. И самое страшное, поток идей может забить мозг на столько, что теряешь вектор движения, приходится останавливаться, структурировать информацию и раскладывать по полочкам. Повторюсь, это самый творческий этап, самый неформализуемый, и самый сложный. Почти всегда он оказывает влияние на другие, к примеру когда я принял решение заняться опционами, у меня ушло около 3 месяцев, чтобы сделать свой тестер стратегий на опционах, и еще около 3х месяцев на выстраивание полной системы: от идеи до торговой системы и совершения сделок.

Этап 2: Исследования

Когда у нас есть какая-то конкретная идея, можно начинать запускать механизм SysDev Framework. На этом этапе сырье в виде идеи, превращается в заготовку торговой системы – в исследование. Можно было бы перескочить этот шаг, и сразу начать писать правила торговых систем и тестировать их. Однако, я пришел к выводу, что такой путь неэффективен, так как очень легко быстро потеряться в дебрях нюансов, и в итоге когда вы сделаете торговую систему, может получиться так, что множество идей были забыты и не проверены. Это примерно как найти свой дом на Google Maps: сначала вы должны найти континент, потом страну, область, город и только потом улицу и дом. Быстро переключив масштаб карты с глобального на минимальный вы вряд ли сможете когда-то отыскать нужную точку на карте. Именно для этого нужен этап исследований, чтобы помимо глобального направления (идеи) мы смогли бы отыскать локальные области (но не точки) где может быть рыночная неэффективность.

Читать далее…

System Development Framework 2.0

Прошло более четырех лет с тех пор как я опубликовал свой первый пост про System Development Framework, и прошло более шести лет с тех пор как я прочитал ту самую ветку на EliteTrader, наверное пришло время собрать и проанализировать, как эволюционировал этот фреймворк в моей торговле, что изменилось, что работает и что нет.
Эти строки я пишу больше для того, чтобы систематизировать в своей голове знания и подходы, которые я выработал за последние 5 лет, надеюсь они смогут помочь другим трейдерам что-то улучшить в своей торговле. Сразу предупреждаю: не ждите готовых решений или предложений о покупке. Это всего лишь идеология, которая помогала мне последние годы выдирать профит у рынка, и спасаться от убытков, даже когда все летело в тартарары, когда одна за одной системы деградировали и умирали я не получал убытков к которым бы не был готов, все было в рамках расчетов.

Идеология System Development Framework

System Development Framework – это технология разработки, тестирования и исполнения торговых систем. Как в любом хорошем отлаженном бизнесе, где все бизнес процессы понятны и формализованы, в трейдинге тоже можно и нужно формализовать подходы, минимизировать человеческое вмешательство. В реальной жизни есть два подхода к производству: можно производить уникальный штучный товар под каждого клиента, а можно создать массовое производство и сделать много похожих продуктов, но временные и человеческие затраты на единицу продукции у массового производства несравнимо ниже, чем у аналогичного предприятия производящего уникальные продукты.
По пути массового производства иду и я со своим SysDev Framework, я не хватаю с неба звезд в плане понимания рынка и его участников, но я достаточно далеко продвинулся в этом. Тем не менее я постоянно работаю над тем, чтобы уменьшить свои трудозатраты на технические вещи (бэктестинг, исполнения трейдов, аудит, риск менеджмент), для того чтобы максимально сосредоточиться на понимании рынков, исследованиях рыночных неэффективностей, поиске интересных (не общедоступных) данных. Как только пришла идея, и она хоть как-то формализована, она подается на вход механизму, на выходе которого получается торговая система, готовая к торгам.

Читать далее…

Оценка ликвидности американских опционов CBOE

Давно не писал, чего-нибудь хардкорного, все ликбезы да ликбезы, но тут под руку подвернулась необходимость быстренько происследовать американский рынок опционов. Это исследование достаточно общее, и как мне кажется будет полезным для всех, кто интересуется американскими опционами, которые торгуются на опционной бирже CBOE. Попутно в этом посте я покажу несколько приемов работы с Python Pandas, который незаменим в случае когда нужно набросать какое-нибудь исследование на коленке, для трейдера Python Pandas является незаменимой вещью, более того я считаю, что Pandas в связке с IPython Notebook по гибкости и скорости разработки может дать фору любому языку программирования.

Почему американские опционы?

Бинарные опционы и опционы на РТС – это конечно хорошо, но если вы хотите стать профи в опционах, или вы оперируете суммой больше 100к долларов, вам потребуется ликвидность. И ни один рынок в мире не предоставляет такого набора базовых активов и ликвидности как американский, опционы там на любой вкус и цвет: хочешь недельные сроки – пожалуйста, хочешь на 3 года – пожалуйста. Более того, при наличии ETF перед инвестором и трейдером открывается весь мир, так как ETF есть практически на все мировые активы: индексы, золото, нефть, облигации и даже форекс! Для любителей российского рынка есть ETF RSX – Market Vectors Russia ETF, конечно ETF никогда не заменит базовый актив, и всегда будет присутствовать tracking error, зато вся торговля с одного брокерского счета у американского брокера. С другой стороны американский рынок – не сахар, это пожалуй, один из самых эффективных рынков в мире, не просто так многочисленные хедж-фонды зарабатывают себе на хлеб. Но я считаю, что до тех пор пока на вашем счете не будет десятка миллионов долларов, волноваться не стоит, и неэффективность всегда можно будет найти.
Читать далее…

Бинарные опционы стратегии и вероятности

Какими должны быть стратегии на бинарных опционах

Сегодня мы поговорим о том какими должны быть стратегии на бинарных опционах, я не хочу раскрывать каких-то секретов или палить граали. Тема сегодняшнего поста очень простая: с какой вероятностью должна выигрывать стратегия на бинарных опционах, чтобы математическое ожидание трейдинга было около нуля. Т.е. чтобы нивелировать преимущество как бы брокера бинарных опционов над вами. На самом деле это все достаточно просто считается, есть аналитическая формула, но мы будем считать по-рабоче-крестьянски численным методом, чтобы ни у кого не возникло сомнений или недопонимания. Делать мы это будем с помощью моего любимого языка программирования Python,кстати тут много интересного про Python для трейдера.

Какая вероятность выигрыша нужна для стратегий на бинарных опционов

Сделать подобную симуляцию очень просто, мы будем делать ее с помощью моего скрипта для risk management. С помощью настроек скрипта мы будем симулировать наши рыночные и торговые условия, и получим результат.

Нам понадобятся следующие настройки:
1. Вероятность выигрыша – тут мы указываем вероятность выигрыша нашей стратегии на бинарных опционах, для начала пусть будем считать, что наша стратегия – это бросок монетки с вероятностью 50/50
2. Средний выигрыш – какую часть суммы нам возвращает брокер бинарных опционов, пусть для начала это будет 80%, или $80 на ставку $100
3. Средний проигрыш – всегда неизменный и будет равняться $100
Читать далее…

Брокеры бинарных опционов: отзывы и рейтинги

Брокеры бинарных опционов – казино?

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

Когда мы с вами прижигали утюгом форекс брокеров, мы выяснили, что создать форекс брокера не так уж и сложно. Но вот, что я вам скажу, создать “как бы брокера бинарных опционов” еще проще. Вам нужно две вещи: оффшор и сайт! Все!

Давайте разберемся с этой кухней поподробнее: бинарные опционы – это внебиржевой инструмент! Есть конечно биржевые бинарные опционы на CBOE, на индекс S&P500 и VIX, но там бинарники не торгуются вообще, тупо мертвый инструмент.

бинарные опционы на индекс S&P500

Таким образом, раз бинарные опционы не торгуются на бирже, они торгуются на дилерском рынке. А мы все помним, что дилер принимает полный риск второй стороны сделки. Все усугубляется тем, что бинарные опционы очень сложно хеджировать, ни о каком дельта-хедже как на ванильных опционах речи не идет! Таким образом мы имеем классическую ситуацию: казино играет против клиента.

Регулирование брокеров бинарных опционов

Теперь давайте пройдемся по самим брокерам, вот достаточно солидный список брокеров бинарных опционов. Если вы не поленились и пошли по списку вы бы заметили одну интересную особенность, что многие как бэ брокеры бинарных опционов используют Кипрские оффшоры и как бэ регулируются Комиссией по ценным бумагам Кипра (CySEC). Это нам как бы намекает, что как бы брокеры, как бы солидные. CySEC – известна тем, что первой признала бинарные опционы финансовым инструментом в 2012 году. Я не знаю на сколько суровый и требовательный регулятор у Кипра, но недавние события в банковской системе Кипра могут намекать на то, что Кипру нужны деньги, что соответственно может означать,то что регулятор может проявлять гибкость в подходах. :) С другой стороны открытого мошенничества опасаться не стоит, все равно в условия торговли “как бы брокеры бинарных опционов” закладывают такое преимущество, что казино и не снилось :)

Читать далее…

timing

Инвестирование в акции и облигации на основе макростатистики

Листая архивы ÜberFeed наткнулся на совершенно гениальный по содержанию пост – Forecasting Stock Market Strength Using Federal Reserve Data. Он нашел отклик в моей душе, еще и потому что я тоже делал что-то похожее на этот метод в далеком 2006 году!

Стратегия инвестирования на основе силы и слабости рынка

Автор статьи предлагает сделать долгосрочную торговую стратегию, которая бы принимала решение на основе макроэкономических показателей (таких как безработица, рост ВВП, инфляция и др.). Так как эта стратегия долгосрочное, речь скорее идет об инвестировании, чем о спекуляциях.
Автор проанализировал разные виды макроэкономических показателей, он выделил около 10 наиболее полезных в прогнозировании силы или слабости рынка, список этих показателей включал такие макро-показатели как:
Читать далее…

Инвестирование в ПАММ счета лохотрон или реальность?

ПАММ лохотрон

Инвестирование в ПАММ: “терзают меня смутные сомнения”

В этом посте я расскажу о том как инвестировать в ПАММ счета, точнее о том как построена индустрия доверительного управления через ПАММ счета. В ПАММ счетах очень много мутного, и вызывающего вопросы. Мне как трейдеру с 10-летним опытом работы, вся кухня видна как на ладони, но последней каплей было то, что ко мне подошел сосед-пенсионер и начал расспрашивать про форекс и ПАММы. Наболело!

Что такое ПАММ счет

ПАММ счёт это (от англ. Percent Allocation Management Module, МУПР — модуль управления процентным распределением) – новомодная технология доверительного управления в которой средства инвесторов собираются в общий котел, а сделки управляющего разделяются пропорционально доли каждого инвестора. На мой взгляд аббревиатура МУПР (Мутное Управление Публичным Разводом) больше подходит ПАММ счетам по смыслу. Я конечно не берусь утверждать на 146%, но терзают меня смутные сомнения. Давайте разбираться и копнем глубже.

Кто предоставляет ПАММ площадки

Как правило ПАММ площадки находятся на базе так называемых форекс брокеров (хотя мы знаем что стать форекс брокером стоит копейки). Как правило такие форекс брокеры имеют низконалоговую юрисдикцию с минимальным регулированием со стороны финансового регулятора страны регистрации компании. Как правило у них в активе есть сайт, терминал метатрейдер, и много много PR в интернете. Как мы разбирались такие ПАММ брокеры, брокерами по факту не являются, а являются дилерами (в чем разница между дилером и брокером), таким образом любая заключенная между управляющим и компанией сделка будет являться двухсторонней. Любой убыток полученный управляющим будет являться прибылью ПАММ брокера, и наоборот, если управляющий выигрывает он напрямую приносит убытки форекс брокеру, если тот не захеджирован!!! Таким образом мы имеем ничто иное, как конфликт интересов. Кроме того, что форекс брокер стрижет спрэд с операций, а также комиссию за управление, он имеет прямой интерес, чтобы управляющий слил много денег!

Читать далее…