AlexShul
AlexShul личный блог
03 мая 2012, 13:08

Мой первый робот для 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п.
 
 
 
 
20 Комментариев
  • Алексей (rwsmart)
    03 мая 2012, 13:14
    знакомый один прогер писал нейронку. сталкивался с проблемой: повышал количество обучаемых цепей — росла точность. но железо не успевало переобучать сеть. снижал до порога успевания — падал КПД сигналов.
    с этой бедой как боролся?
  • Anton Medvedev
    03 мая 2012, 14:07
    Я конечно не специалист по нейронным сетям, но насколько я понимаю, в этом случае сеть = много параметрическая функция будущей цены от прошлых цен.
    а есть ли такая функция вообще? Если нет — деятельность обессмыслена в той постановке о которой идет речь.
  • NiTorchkov
    03 мая 2012, 14:31
    Шикарно! Спасибо)
    А вы не пробовали прогнать уже робота самого на всей истории, где сеть обучалась+проверялась+осаток. Мне кажется именно это будет реальным критерием качества сети в данном случае. Может быть зависимости какие интересные всплывут.
    А так круто! Пишите исчо!

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн