Блог им. AlexShul

Мой первый робот для FORTS

Закончилась эпопея с защитой очередной диссертации, в связи с чем появилось время на развитие проекта T-Engine. Plaza2-вариант привода хоть и завершен, однако ввиду отсутствия возможности протестировать его в боевых условиях в массы он не пошел, и видимо не пойдет, так как платить свои деньги за возможность тестирования у меня желания нет ввиду весьма сомнительных коммерческих перспектив приводов как таковых.
Давно был озадачен вопросом создания торгового робота для FORTS, работающего через QUIK, и собственно привод был только первым этапом реализации робота. Вообще, ручная торговля меня не прельщает ввиду ряда факторов, поэтому я поставил себе задачу сделать собственного торгового робота.
Алгоритмическая торговля понимает под собой использование инструментов технического анализа – MA различных типов, индикаторов, осцилляторов и прочих прелестей, широко описанных в общедоступной литературе по данной тематике. У меня же возникла идея воспользоваться искусственным интеллектом – нейронными сетями для построения собственной оригинальной торговой системы. В чем преимущества торговых алгоритмов на нейронных сетях? На мой взгляд, это:
-          недоступность широким массам;
-  способность обобщать и классифицировать некие паттерны с достаточной устойчивостью к изменениям рынка;
-          не HFT, возможность торговать на среднее депо.
Основное требование к алгоритму – низкий риск. Пытаться предсказать направленное движение, открыть позицию, установить короткий стоп, профит, стоп трейлить при нужном движении рынка.
Таймфрейм я выбрал 5 минут. Для разработки робота использовал платформу привода T-Engine, библиотеку NeuronDotNet (сети с обратным распространением ошибки “backpropagation”) с доработанным алгоритмом обучения нейросетей.
Идея при обучении – подавать на вход данные N свечей и анализировать движения цены на свече N+1. Естественно, используется куча алгоритмов предобработки данных. Например, для понижения размерности входов использую вейвлет преобразование – это позволяет сократить число входов нейросети в 2 раза без потери качества входных данных. Нейросеть использую с 1 скрытым слоем, функция активации скрытого и выходного слоев – сигмоидальная (sigmoid), входного – линейная (linear).
Данные для обучения скачивал с сайта finam. Далее данные разбивались на две выборки – на обучающую и верификационную. Первая выборка используется непосредственно для обучения, вторая используется для отбраковки обученных нейросетей.
Что получилось для неизвестных нейросети дней (показан фрагмент ~ 2.5 дня):
Мой первый робот для FORTS                      
Показано на графике: синим – как двигался рынок на самом деле (зона 0.9-1.0 – хорошее движение вверх, зона 0.1-0.0 – зона хорошего движения вниз, остальное не сильно интересует), красным – прогнозы нейросети. Если интерпретировать сигналы >0.6 как открытие в лонг, а меньше 0.4 как открытие в шорт, то чисто теоретически ситуация весьма привлекательная.
По наблюдениям, сигналы близки к “пробойной” тактике торговли. С другой стороны, данный эксперимент подтверждает, что между прошлыми ценами и будущими есть взаимосвязь, а наличие неверных сигналов – свидетельство недостаточной фильтрации входных данных.
Реализован следующий механизм:
 Мой первый робот для FORTS
  1. При наличии сигнала на открытие позиции в стакан выставляется соответствующая лимитная заявка. Запускается таймер на отслеживание исполнения. Если заявка не исполняется в течение минуты – она снимается.
  2. При открытии позиции ставится стоповый ордер и виртуальный тейк-профит, исполняемый по рынку при достижении заданного значения прибыли.
  3. Стоповый ордер трейлится.
  4. Через вечерний клиринг и овернайт позиция не переносится, а закрывается по рынку независимо от результата.
Язык разработки – C#. Платформа – NET 2.0.
 Мой первый робот для FORTS 
03 мая 2012 года робот ставится на боевые торги 1 контрактом с депо около 14тр, в случае положительных результатов депо будет пополнятся, а сайз увеличиваться.
Постараюсь периодически публиковать результаты торговли робота, а также мысли по его доработке.
 Первая сделка:
Мой первый робот для FORTS
 закрылась по трейлингу, результат +90п.
 
 
 
 
★38
20 комментариев
знакомый один прогер писал нейронку. сталкивался с проблемой: повышал количество обучаемых цепей — росла точность. но железо не успевало переобучать сеть. снижал до порога успевания — падал КПД сигналов.
с этой бедой как боролся?
rwsmart, у него может кластер вычислительный под боком, распараллелил задачу на тыщи компов и получает сигналы в доли секунд :-)
avatar
Margin_Nicolas, технически сложно и ненадежно получится.
Сеть переобучается редко, так как обучение происходит на базе данных за последние 2 года, а валидация — за последние 2 месяца.
avatar
AlexShul, ясно. я подумал о системе с обучением в реальном времени почему-то.
а как быть с отставанием системы от «характерности» рынка «сейчас»? или она работает на типичных, характерных для любого участка образах?
мне тема интересна, поэтому столько вопросов задаю
rwsmart, задача нейронки выделить характерные паттерны, задача второй выборки контролировать чтобы эти паттерны работали сейчас. Вообще, я максимально старался отойти от запоминания частных движений. Есть еще одно перспективное направление — перейти на генетический алгоритм обучения весов, но вот тут и возникают проблемы со скоростью обучения.
avatar
AlexShul, всё понятно, спасибо.
с весами и генетикой — у всех проблемы, насколько мне известно.
AlexShul, а как собираешься бороться с проблемой, когда биржа неправильно отображает размер позиции? недавно много роботов полегло в такой ситуации… Или будет всегда оператор следить за работом?
avatar
Margin_Nicolas, а как может биржа неправильно отображать? Все мы работаем на базе таблиц Quika, если туда брокер шлет неправильные данные то с этим бороться нет способа.
avatar
Margin_Nicolas, позицию надо брать не по тому, что биржа транслирует, а считать самому по совершённым сделкам. тогда проблем никаких не будет.
Я конечно не специалист по нейронным сетям, но насколько я понимаю, в этом случае сеть = много параметрическая функция будущей цены от прошлых цен.
а есть ли такая функция вообще? Если нет — деятельность обессмыслена в той постановке о которой идет речь.
avatar
trade-research, это не функция даже, а апроксимация некоторой плотности, вопрос в том могут ли данные в этой плотности содержать какие-то закономерности, между данными и будущими приращениями цены.

Вейвлеты это семейство ортогональных функций, по сути линейное преобразование, то есть хитрый стационарный фильтр. То что над ними навесили «нейронку», вряд ли поможет, уйти хотя бы от стационарности. Ставлю на то что робот в нуле будет барахтаться, или работать не лучше чем простейшая система из пары скользящих средних, как это не печально.
avatar
trade-research, я замечу лишь, что эта функция сильно нелинейная. С нейросетями всегда проблема переподгонки, знаю по своей профессиональной области. Автор пытается решить ее использованием длинной истории и тестом за последние пару месяцев, не уверен что это поможет.
avatar
Шикарно! Спасибо)
А вы не пробовали прогнать уже робота самого на всей истории, где сеть обучалась+проверялась+осаток. Мне кажется именно это будет реальным критерием качества сети в данном случае. Может быть зависимости какие интересные всплывут.
А так круто! Пишите исчо!
avatar
Отлично! верный путь.
avatar
Спасибо, интересно. (+)
А есть ли результаты работы стратегии на исторических данных? Года три-четыре?
Антон Кротов, на истории проверить довольно сложно ввиду использования трейлинга. Попробую реалтайм, результаты опубликую.
avatar
Тяжко нейросеть затачивать под фортс. У нее случаются эпилептические статусы. В любом случае — успехов и держите в курсе
Нейронные сети — перцептроны — тупиковый путь. По-пробуй сделать кластеризацию паттернов сетями кохонена.
avatar

теги блога AlexShul

....все тэги



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