Избранное трейдера java
Этой статьей я начинаю изложение серии исследований на фондовом, срочном и валютных рынках Московской биржи. Цель – показать те закономерности, которые сохраняют свои свойства продолжительное время. Исследования основаны на результатах тестов большого количества торговых систем (более 50000 шт.). Системы были сгенерированы в режиме перебора индикаторов конструктором торговых роботов 3CBot. Каждая система состоит из 1-2 индикаторов технического анализа, параметры индикатора классические, оптимизации значений параметров не проводилось. Всего обработано 35 тикеров, 3 таймфрейма (15m, 60m, 1D), 2 периода (2013-2015 г., 2016 г.). На каждую комбинацию (тикер+ТФ+период) приходится по 370 тестов различных систем. Данный подход, в отличие от оптимизации параметров индикаторов, позволяет шире взглянуть на рынок, т.к. исключает заточенность отдельного индикатора или параметра индикатора под конкретный период рынка. Кроме того такой подход позволяет выявить тикеры и таймфреймы, где работает или не работает большинство систем, построенных на индикаторах, а также выявить системы, которые работают или не работают на большинстве тикеров. И да… сразу отвечаю на вопрос — тестированием я не сильно утруждался, все сгенерировалось автоматически за пару дней на обычном ноутбуке…
Что бы выяснить. Когда можно увеличивать размер позиции. Разберем условную стратегию. Стратегию монетки (как в простой задачке по теории вероятности, подкидывание монетки). Имеем показатели: соотношение прибыльных сделок к убыточных равно 1:1. Примем прибыльную сделку за 1, а убыточную за 0. В теории имеем, что за 10 сделок мы получим вот такую последовательность сделок:
1) 1010101010
Дело в том. Что на практике так редко бывает. Вместо этой последовательности, можем получить и вот такие:
2) 1110110000
3) 0001001111
Предположим. Что за сделку мы имеем прибыль равный 1, убыток равный -1.
Мы сделали 5 сделок. Нам выпала 2-ая последовательность. И мы на счете имеем уже прибыль, равную трем. Что будет, если мы увеличим размер позиции в два раза? Последующие 5 сделок принесут нам минус шесть. И итогом получим минус три убытка. Вместо нуля для данной стратегии. Когда чаще всего увеличивают позиции? Когда на счете мы уже имеем деньги. На простом примере видим. Как такой подход создаст убыток по стратегии в целом.
Продолжаем разработку универсального робота!
Выкладываю код OUR-0.3, который в настоящий момент еще далеко не полный – это только основа, скачать можно здесь https://yadi.sk/d/l3uic67yruCxa
Код прокомментирован подробно, но дам дополнительное описание общего плана, чтобы логику работы робота можно было представить.
Итак, по порядку:
Робот состоит из двух файлов: OUR.lua содержит основные функции (OnInit, main, коолбэки – пока только один OnStop), FunOUR.lua содержит вспомогательные функции – все остальные. Дополнительно приложен файл с информацией и файл с образцом котировок.
Функция OnInit
1 Первоначально котировки с сервера поступают в источник – таблицу с барами TBar (там все заполняется автоматически при подключении источника).
2 Далее робот делает различные вычисления, результаты которых он помещает в таблицу с данными TDat (также туда копируются параметры баров из TBar), эту таблицу нужно заполнять самому, ключи таблицы на свое усмотрение, но конечно часть ключей в алгоритм уже заложены, это «key»,«O»,«H»,«L»,«C»,«V»,«T» от них идут все вычисления. TDat – это таблица, содержащая таблицы по каждому бару, ключ соответствует номеру бара в источнике. Структура такого типа:
TDat = { [1321] = {"O","H","L","C","SMAf","SMAs"…}, [1322] = {"O","H","L","C","SMAf","SMAs"…}, … }
Майская конференция получилась замечательная.
Интересные, высокого уровня доклады, личные знакомства и общение с людьми, с которыми общалась много лет на трейдерских форумах, споры и обсуждения инвестиционных идей и эмитентов.
К сожалению, весь этот праздник уже остался позади.
Снова наступили трудовые дивидендные будни. Сейчас как раз такой период, когда, как говорили в старину, день год кормит.
Совет директоров Qiwi одобрил выплату дивидендов в размере 0,22 доллара на акцию, сообщает компания в среду.
Дата закрытия реестра — 26 мая 2016 года. Компания намерена выплатить дивиденды 27 мая 2016 года.
Совет директоров «Русагро» в августе рассмотр
Небольшая статья с ресурса http://www.talaikis.com/ о построении простой стратегии, использующую наивный байесовский классификатор при создании процесса возврата к среднему. Весь код в статье приведен на языке Python.
Это достаточно большая область исследований, но расскажем все очень кратко. Мы попытаемся найти взаимоотношение между временными сериями (в данном случае возьмем в качестве сигнала взаимный фонд XLF из финансового сектора, сдвинутый по времени на 1 день назад), а нашей целью будет фьючерс S&P500 в форме CFD. Будем входить в длинную позицию по этой бумаге при нулевой вероятности приращения. Логически нулевая вероятность ни о чем не говорит, другими словами, будем покупать возврат к среднему.
1. Получение данных
Y = read_mongo(dbase, "S&P5001440") X = read_mongo(dbase, syms[s]).shift() #готовим набор данных res = pd.concat([X.CLOSE, Y.CLOSE], axis=1, join_axes=[X.index]).pct_change().dropna() res.columns = ['X', 'Y']