• В поисках edge’a часть 4 (Об эффективности)

    Размышлял недавно над тем, как большинство трейдеров тестируют свои системы, в итоге пришел к выводу, что 80% из них свойственна одна общая модель поведения, что-то вроде: 1. Прикрепил индикатор, линию тренда, или прочел в книге очередного Бильямса о сетапе, или сам трейдер подметил закономерность. 2. Написал пару простых или не очень правил 3. Протестировал 4. […]

  • Сказка о феях или немного о продуктивности

    Эпиграф: Танкисты (Т) посреди леса, жутко матерясь, натягивают гусеницу. Вдруг появляется Лесная Фея (Ф) и спрашивает: Ф: -Танкисты, танкисты, а что это вы такое делаете? Т: -Трахаемся! Ф: -А хотите по-настоящему потрахаться, со вкусом? Т: -Ну дык,конечно хотим! Взмахнула Фея своей волшебной палочкой, и у танка отвалилась башня... В трейдинге как и в любой деятельности, […]

  • Сезонность индекса волатильности VIX

    В этом году индекс волатильности VIX находился гораздо ниже своих средних исторических значений, возможно к осени волатильность подрастет. Спасибо ÜberFeed Источник

    ,

 

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 влияет волатильность” или более конкретную “как действия ЦБ РФ влияют на Рубль, если за предыдущий день были максимальные валютные интервенции за месяц”. Как вы видите все три идеи отличаются разным уровнем проработки, отличаются разным уровнем глубины знаний о предмете. Читать далее…

More ÜberBlog »»