Блог им. ivanovr

2.5 года торговли ботом

Прочитал пост smart-lab.ru/blog/121566.php, жизненно, решил тоже поделиться.
Торгую ботом около 2.5 лет большой пакет стратегий на RI и GZ таймфреймы 5, 15, 60. Бот в виде Quik + самописная программа + MySQL. Поскольку это требует скромных ресурсов, то все отлично работает на виртуальном сервере (покупаю за 400р/мес). Скорости от бота не требуется. Алгоритм отлажен так чтобы не требовать контроля.
Сумма сейчас 3 ляма из них 1.5 честнозаработанных. За первые 1.5 года напилил больше 100%. Затем, где-то в мае прошлого года рынок испортился и эквити ушла в горизонталь. Сейчас есть позывы к нормализации рынка, но лето может все испортить. С другой стороны есть новые данные с рынка и на них уже готовы новые стратегии, которые не плохо работали бы если бы да кабы. Будем посмотреть.
Стратегии непосредственно руками не разрабатываю, использую самописный тестер на исторических данных и генетический алгоритм для поиска стратегий. Оптимизатор выбирает несколько правил из набора доступных, а также подбирает параметры каждого правила. Набор доступных правил кодирую сам по мотивам всяких статей и собственным соображениям. Сигналы на вход и выход есть комбинация правил. Плюс также есть варианты выхода по времени и Stop Loss, параметры эти и еще более другие подбираются алгоритмом. В общем руками стратегии не ковыряю, смотрю только эквити из тестера. Иногда смотрю какие правила и какие парамеры используются. Оптимизирую на старых данных, кусок самых свежих использую для отбраковки переоптимизированных. Естественнос стремлюсь уменшать число параметров, так что в последнее время ограничиваюсь двумя правилами, что дает информационную емкость перебираемого пространства 30-40 бит.

Тестер написан так чтобы работать максимально быстро, может быть где-то в ущерб точности. Зато прошел проверку сравнением с реалом, так что доверяю. Одна оптимизация занимает 10-30 часов (генетика требует очень много прогонок). На доступных оптимизаторах наверное результата не дождался бы, но у них и задачи другие.
В процессе оптимизации смотрю эквити лучших стратегий, а также выборочно не самых лучших. Все равно из-за эффекта подгонки максимизация на первой выборке не есть самоцель. Те стратегии, что хорошо себя ведут на основном и проверочном участке откладываю. Накопил уже наверное несколько сотен стратегий. По мере поступления новых данных с рынка смотрю на их поведение и тут самое важное смотреть как торгует на совсем свежих данных. Понравившимся доверяю бабло. Фактически получается 3 набора данных: для оптимизации, для отбора после оптимизации и последний перед принятием решения. По простой логике вроде 2 участка это достаточно: на первом крутая подгонка, а на втором вроде как влияния подгонки нет. Но как-то поймал себя на мысли, что отбор из нескольких вариантов по результатам разглядывания эквити это тоже оптимизация! Ну может и слабенькая, но есть, и от нее не скрыться. Демон подгонки хитер и изворотлив, надо бдить.
Вот в кратце и все.

ЗЫ: для тех кто хочет почитать на тему, советую «Энциклопедию торговых стратегий» 
★57
47 комментариев
интересно ) не могли бы вы поделиться исходниками?, сами стратегии можете не выкладывать. Интересует процесс объединения квика с MySQL.
avatar
SHCHUTUSHCHA, там все просто: выгрузка по ODBC в таблицу MySQL. На каждую строчку триггер из полей время и дата формирует поле с нормальной полной датой и временем. Программа время от времени делает select * from таблица order by время_дата и выбирает очередную порцию. Потом удаляет то что прочитала но за последнюю секунду оставляет т.к. время с точностью до секунды и могут прийти еще данные за эту секунду. Тонкости обеспечивающие надежность какие-то были, могу поделиться триггером, настройками, алгоритмом. Код на Delphi, будет ли такой интересен?
Но! Если нужно реализовать минимальную задержку (мне пока не надо), лучше читать по DDE. Есть код на дельфи который робастно делает такое чтение, опробовал его, но еще не обкатал в работе за ненадобностью.
avatar
ivanovr, да я делфи-паскаль тоже знаю, поделитесь если вам конечно не трудно. Честно говоря мне это надо не совсем для трейдинга, у скоро сессия а курсач по базам данных я еще и не начинал, причем как раз на эту тему :)
avatar
SHCHUTUSHCHA, «Честно говоря мне это надо не совсем для трейдинга» — честно говоря худшее что можно было услышать. Задача непосредственно к БД относится весьма косвенно, так что может лучше про Delphi+БД посмотреть? Материала и примеров полно. Может тебе дать схему БД трейдилки + пример на дельфи как читаются данные? Схема есть сейчас, пример надо готовить.
avatar
ivanovr, схемы бд трейдилки будет достаточно, с самим процессом программирования у меня проблем возникнуть не должно.
avatar
SHCHUTUSHCHA, кинул в личку
avatar
Огромное спасибо за рекомендованную книгу, нашел ее тут если кому интересно тоже
forex-profi.com/book/221-d-kac-d-makkormik-enciklopediya-torgovyh-strategiy.html
Сам люблю алгоритмическую торговлю. Ни какого влияния эмоций на трейдинг, правда пока использую режим торгового советника — программа дает рекомендации, а сделку осуществляю сам.
avatar
Круто, спасибо.

Парочку правил можно в студию? :)
avatar
Станислав Иванов, примеры правил есть в указанной книге. Книга качается без проблем нахаляву (а веть когда-то купил аж за 800р).
avatar
ivanovr, ясно, спасибо!
avatar
спасибо за книгу. почитаю.
Получается прибыль 1,5 ляма за 2,5 года? в принципе, неплохо, главное, чтобы стабильно
pansportsmen, как я писал, сначала стабильно, потом год нулевой. Но ведь и другие тут жаловались на РТСное болото. Так что буду надеяться, что год был исключительный.
avatar
Дальнейших успехов!
Frank_Cowperwood, спасибо. Через пол-года доложу что вышло.
avatar
Интересно… а генетический алгоритм тут при чем? если вы нужную эквити сами выбираете…
Ded2012, генетический алгоритм решает задачу оптимизации в следующей постановке: найти стратегии максимально хорошего качества (максимум целевой ф-ии) по результатам торговли на основном блоке истории. Из всего моря вариантов он находит самые лучшие. Но на проверочном блоке далеко не всякая лучшая хорошо себя покажет т.к. демон подгонки творит свои темные делишки. Я просматриваю то немногое что он нашел с тестом на основном и проверочном блоках, причем смотрю например гладкость эквити, что целевая ф-я не учитывает в полной мере. По теории на проверочном участке нет оптимизации и значит демон подгонки раскрывает свои карты — т.е. переоптимизированные стратегии отсеиваются. Например экспериментальный факт, что на любом заданном участке истории путем оптимизации генетикой или другим алгоритмом оптимизации можно выдать хорошую эквити (и может даже успеть продать кому-то пока еще нет свежих данных для проверки без оптимизации)
avatar
ivanovr, понятно. А основной и проверочный блоки истории отбираются по каким критериям? Скажем основной 2005-2011 г. а проверочный- 2012 г.?
Ded2012, да, именно так. В идеале проверочный порядка 1/4 от основного. Также если есть мнение что после 2008-го рынок поменялся, то имеет смысл основной брать скажем 2009-2012, а проверочный будет 2005-2009 + 2013. При проверке к 2005-2009 не сильно придираемся, на 2013 смотрим пристально.
avatar
ivanovr, ну да..2013 это смесь. тут и пилы 2012 и «красота» 2009 )
ivanovr, а на других рынках не проверяете? например DAX
Ded2012, и вообще как ведут ваши находки себя на других рынках? какие ближе всего к нам?
Ded2012, пробовал на некоторых американских акциях (сразу на пакете из нескольких), вырисовывалось нечто не плохое. Но серьезно не занимался т.к. мало что знаю про них, а по=хорошему надо заложить правильную комиссию (закладывал 0.1% на круг как для РТС). Да и насколько хорошие данные были не знаю.
Серьезно пробовал для Forex несколько лет назад. Ничего хорошего не получилось. Подгонка. Хорошо не торговал, просто посмотел на свежих данных. С тех пор правда копилка правил подросла и еще кое-какие улучшения, может еще попробую. С Forex мне кажется проблема в том что цена резко двигается а потом флет. На резких движениях спреды обычно раздвигают и нет уверенности что все это можно адекватно смоделировать.
avatar
ivanovr, диверсификация бы очень помогла мне кажется вам. фьюч на дакс, евростокс, руссел2000 хорошо ходят… тамнет проблемы ликвидности. комиссии как на римке… укладываются в 1 тик… Данные я прямо с демки брал для тестов, предоставленной западным брокером. О форексе конечно несерьезно… там все сложнее.
Ded2012, или вот например факт, что после 12.06.2006 RTS резко поменялся. Если ГА давать данные до этой точки, то он быстро находит на этом участке то что хорошо стригло рынок, а остальная часть на этом фоне уже не интересна. Вполне разумно при моделировании увеличивать во времени торгуемый объем, чтобы более свежие данные давали больший вклад.
avatar
А… чуть не забыл. А сколько примерно живет «свежая» эквити? По моему опыту- 10 лет считаешь живет год, считаешь год- живет месяц. Если оптимизировать.
Ded2012, еще рановато делать такие оценки. За 2.5 года пересматривал портфель 2 раза. Пересмотр был частичным, некоторые стратегии остались.
Есть которые не плохо торгуют время большее, чем на котором они тестировались и проверялись. Вот пример эквити стратегии для RI и GZ одновременно i051.radikal.ru/1305/21/1978c8ea3e91.gif. Хотя и они в последнее время дают пологую эквити на нашем болоте. Из наблюдений вижу рынок с 2008г. заметно поменялся.
avatar
ivanovr, пояснения к картинке: слева от синей вертикальной линии основной и проверочный блок. Справа — это то что стратегия не могла видеть т.к. была найдена там где синяя линия.
Черная верхняя это сумма двух нижних — для RI и GZ
avatar
подскажите, каким сервером пользуетесь?
avatar
k4rv, вопрос не понят. Параметры сервера, хостер или другое?
avatar
Почему MySQL? Были эксперименты с Postgree?
Сам пока не использую БД, внутри алгоритма достаточно
массивов, а статистику собираю в текстовики.
Определённые неудобства есть, плэтому рассматриваю
комбинацию C#+Postgree. Но у меня вопрос по потенциальной
производительности такой комбинации, если БД уходит за гиг.
Андрей Кучумов, по большому счету БД нужна только ради того, чтобы из QUIK выгружать по ODBC. Выбором БД особо не мучался. Задача была выбрать то, что требует мало памяти, поддерживает SQL и клиент-сервер, чтобы удаленно коннектиться для отчетов. Был опыт с Firebird, но по совокупности причин выбраз MySQL. По скорости как правило выигрывает то, что наиболее примитивно, думаю в этом смысле MySQL выигрывает у Postgress. Также в MySQL при создании таблицы указать каким движком обрабатывать таблицу. Движки есть разные, например можно использовать тот который не умеет транзакции и он будет быстр на примитивных операциях. Для таблицы которая наполняется из QUIK использую движок который держит таблицу в памяти т.е. диск вобще не участвует, что плюс. Естественно данные этой таблицы теряются при рестарте сервера, но в данной задачи это не играет роли.
Трейдилка же использует БД весьма слабо, хотя таблиц в схеме штук 20. При старте программы она все что надо грузит из таблиц в память, строит индексы в памяти и дальше БД особо не требуется. Обработка данных делается в памяти без SQL по принципу «курсорных циклов». Где надо данные проиндексированы. Компоненты MIDAS в Delphi позволяют это делать без специальных усилий и мне кажется в целом получилось отличное решение. Время от времени накопленные изменения сбрасываются в БД, но если БД не доступна, то сбросятся позже. Единственное место требующее живой БД это связка с квиком по ODBC, но когда ни будь переделаю ее на DDE.
Сейчас есть отличная вещь — sqlite, возможно вам подойдет.
avatar
ivanovr, пока в раздумьях. С одной стороны собственно
«трейдилка» работает быстро и нагружать её не вижу смысла,
скорее ещё бы много повыкидывал. Но при этом сделать 2-х
компонентную систему: «трейдилка»+«анализатор».
И вот «анализатор» я бы нагрузил.
Андрей Кучумов, анализатору ИМХО не имеет смысла использовать БД. Это часть существующая отдельно от трейдилки. И даже если выполнение стратегии требует симуляции на истории, необходимости в БД для анализатора не вижу. Хотя возможно будет полезен подход когда данные перед симуляцией берутся из БД, а дальше к БД обращений нет. Обращения к БД в контексте данной задачи — это очень медленно.
avatar
ivanovr, мне хочется в «анализатор» завести все графики,
чтобы можно было ручками повертеть историю, посмотреть,
но чтобы параллельно он делал обсчёт и выдавал «разжёванную»
статистику в «трейдилку». Что-то вроде терминала,
но с моими индикаторами.
Андрей Кучумов, а почему бы не использовать готовую платформу для разработки и тестирования стратегий?
avatar
ivanovr, вопрос в «готовности». Понять насколько решение
тебе подходит иногда по времени столько же, сколько
создать своё. Пока не вижу решения под свои наработки.
ivanovr, ivanovr, Не подскажите а в какой конторе виртуальный сервер покупали за 400р/мес?
Хочу с домашней машины робота на удаленный сервер посадить. Спасибо.
avatar
Chipmunk,

vpsnow.ru/#plans
ровно 10 евро, выгоднее платить WME

www.burstnet.eu/winvps.shtml
тут вроде как дешевле, но еще возьмут НДС и еще чего-то там. Но все равно чуть выгоднее.
avatar
Как часто прогоняете генетик? И не пробовали фитнес-функцию брать не деньги, а что-то другое? Или у Вас не так много параметров для бридинга?
avatar
facevalue, Первый вопрос не понял. Фитнес-функция обычно = критерий Шарпа. Что такое бридинг я честно говоря не в курсе.
avatar
ivanovr, По первому вопросу: мы периодически перегоняем генетик, и получаются новые данные, которые работают какое-то время. Как только они ломаются (характерные резкие отклонения от PNL), прогоняем и получаем новые для работы алгоритма. По поводу фитнес-функции — спасибо за мысль, попробуем. Хотя опыты с Шарпи на других негенетических роботах положительных результатов не дали, не смотря на то, что Шарпи, собсно, сложный показатель прибыльности. Пока что используем для фитнеса сухую доходность поколений.

Бридинг — от англ «to breed», у генетиков дословно подразумевается как разведение/производство поколений. Продукт генетического алгоритма — продукт бридинга. )
avatar
facevalue,
когда-то найденные стратегии снова не оптимизирую (если об этом), просто ищу новые стратегии с учетом более новых данных. Ведь структура стратегии это тоже вполне себе параметр, значит не логично его фиксировать, а остальные параметры пересматривать. Заново начинаю гонять оптимизацию как правило после того как сделаю какие-то доработки или появится идея какие настройки поменять. Тогда гоняю чтобы оценить влияние изменений.

По поводу бриндинга: что имелось в виду под параметрами бриндинга и как они связаны с фитнес-функцией? В вопросе явно прозвучала связь, но уловить смысл не могу.
avatar
«Оптимизатор выбирает несколько правил из набора доступных, а также подбирает параметры каждого правила.»

Фантастика! Блестящая идея!
avatar
Интересный подход. Напишите про успехи в последние 2 года статью? Я так понял что в итоге получаются достаточно простые стратегии которые приносят доход? Сколько лет в периоде для оптимизации?
avatar

теги блога Roman Ivanov

....все тэги



UPDONW
Новый дизайн