Контрольные точки стратегий.
Atom
20.05.2012
ra81


Хочется поговорить собственно о Сабже :). Кто как контроллирует корректность работы стратегии. Я для себя определил два метода контроля процессов.

  1. Самоконтроль, то есть процесс сам себя всячески провряет и гарантированно исполняет только то, что от него требуется.
  2. Внешний контроль, то есть процесс запускается, чегото делает, а мы смотрим все ли делается так, Как положено и в случае нарушений выполняем определенные действия.

У этих вариантов есть и плюсы и минусы. В первом варианте приходится реализовывать довольно сложную логику самопроверок, и все равно не во всех случаях возможно гарантировать что все будет ок. Во втором варианте может так получиться что дочерний процесс начудит так, что исправить ситуацию невозможно. Поэтому почти всегда использую комбо этих вариантов.

Далее предлагаю поделиться, и возможно составить перечень точек контроля, помогающих быть уверенным что все идет как положено и ситуация в рамках ожидаемой. Итак начну потихоньку.

  1. Если вы используете историю в стратегии для формирования индикаторов или еще чего, обязательно необходимо сделать валидацию исторических данных. Иначе рискуете торговать в матрице :).
  2. Если ваша стратегия оперирует ограниченным объемом инструментов, необходимо проверять что объем взятый стратегией не выходит за допустимые пределы. Если стратегия только на sell, значит надо убедиться, что продано не больше чем допустимо. Иначе рискуете набрать левую позицию и получить нарушение логики стратегии.
  3. Если в стратегии используется стоп ордера, необходимо убедиться что на каждую сделку поставился стоп ордер. Иначе рискуете получить убыток неопределенного размера при потере связи с брокером.
  4. Необходимо контроллировать число активных ордеров стратегии. Они не должны выходить за допустимые лимиты. А то может получиться, что ордер поставился, сделка по нему не пришла, и он был забыт. Потом поставился новый ордер, сделка пришла. А через некоторое время и старый ордер отработал. Получили перебор позиции как минимум.
  5. Если стратегия торгует в одну сторону buy или sell, проверять направление позиции. Иначе можно получить отрицательную позицию на стратегии торгующей в buy если неверно отработает защита позиции и будет продано больше чем положено.
  6. Необходимо проверять приходят ли данные в стратегию или нет. Может отпасть экспорт, глюкануть терминал или другой форсмажор, а стратегия будет продолжать работать ожидая данных и мы ничего не узнаем.
  7. Запрет на несанкционированные действия. Это раскрывается ниже.
  8. Проверять размер лося по стратегии, и обрубать концы при превышении допустимого размера. Недавний пример видели на Si, где был хороший расколбас с хорошим лосем. Робота сразу не пришибли.
  9. Данный пункт довольно трудоемко исполнять (по причине уже существующих стратегий которые это не учитывают), но такая ситуация имеет место быть и заслуживает внимания. В стратегиях нужно оценивать приходящие котиры на валидность. Если брокер вам прислал левую котировку, явно выпадающую из реала, стратегия должна ее игнорировать или ожидать подтверждения. К примеру прислали котир от бакса а вы торгуете по сбербанку. Явно можно отсекать левые котировки.


Помимо точек контроля очень важно чтобы стратегия вела себе вполне определенным образом, то есть так как вы от нее ожидаете. Поскольку коннектор может генерировать события из разных потоков, ваша стратегия может оказаться в состоянии которое для вас является неожиданным и неучтенным. Отсюда вытекает - стратегия должна иметь четкий перечень состояний, и переходить из одного в другое вполне определенным и известным заранее способом. Это облегчит вам жизнь и отладку приложения в будущем. К этому я пришел через некоторое время, помучавшись (распиливая логику на мелкие подстратегии), а в реализации помог как всегда Сергей (не в первый раз), подсоветовав одну замечательную и простую реализацию workflow. Библиотек реализующий конечные автоматы (читай wokflow) много, и даже в студии есть своя реализация.

Суть решения сводится к тому, что в каждый момент времени система находится в заранее определенном состоянии, и в случае событий извне системы, осуществляет переходы в другие состояния. Кому интересно почитайте про автоматное программирование. Прелесть решения в том, что логика переходов и состояний описывается в одном месте, и если система хочет перейти в неположенное состояние вы сразу об этом узнаете. Таким образом система преобретает полезное свойство - мы знаем что она может делать в текущее время а что нет. В спойлере пример описания логики переходов для примера. Вот она собственно вся логика системы. Как на ладони.


Использовав подобный подход из теории автоматного программирования я сразу же устранил пару очень неприятных багов, система стала работать без ошибок, система упростилась, избавился от необходимости создавать велосипед в виде частичной реализации workflow переходов итд.
Почти все элементы стратегий можно и нужно реализовывать по данной схеме, тогда все будет четко и понятно функционировать.

Пока все. По мере формализации буду добавлять. От вас жду того-же.


1 2  >
Alexander

Фотография
Дата: 20.05.2012
Ответить


Лучше не чтоб процесс сам себя контролировал, а был внешний процесс - Шеф, который контролировал работу всех модулей и делал соответствующие действие в случае некорректной работы одного из них.
Спасибо:

ra81

Фотография
Дата: 20.05.2012
Ответить


Alexander Mukhanchikov
Лучше не чтоб процесс сам себя контролировал, а был внешний процесс - Шеф, который контролировал работу всех модулей и делал соответствующие действие в случае некорректной работы одного из них.

Я придерживаюсь комбо. И то и другое. Внешний процесс не может знать всего, а может проверять по точкам. Да и не нужно знать всего для внешнего процесса. Процесс Шеф смотрит чтобы вся канитель не вышла за допустимые пределы, а процесс подшефный по возможности проверяет некоторые параметры свои и выруливает в нужном направлении. Если что-то идет совсем не так Шеф просто мочит подшефный процесс и сигнализирует. Точки контроля которые использую я я описал. Но их куда больше, неплохо было бы составить общий список :)
Спасибо:

wulff

Фотография
Дата: 21.05.2012
Ответить


Добрый всем день.

Я пришел к тому же выводу, нужен сторонний и внутренний контроль за работой стратегии. Иначе вся работы сводится на нет одним глюком. У меня частенько бывает что не приходит сигнал о появлении новых сделок по инструменту, и все... робот стоит ждет с моря погоды, хотя все нормально на самом деле.
Спасибо:

ra81

Фотография
Дата: 17.06.2012
Ответить


Дописал в шапку про автоматное программирование. Использовал, оценил, везде внедряю. Советую и вам. Сергею респект, за наводку на данную методу программирования, которая уже обсосана собственно со всех сторон, а я изобретал велосипеды.
Спасибо:

paveld

Фотография
Дата: 17.06.2012
Ответить


Извиняюсь, а что за класс StateMachine?
Спасибо:

Антон

Фотография
Дата: 17.06.2012
Ответить


http://en.wikipedia.org/wiki/Finite-state_machine тут ответы на все вопросы. А вообще StateMachine - стандартный подход к событийному программированию, когда нужно контролировать возможность перехода сущности в разные состояния.
Спасибо:

ra81

Фотография
Дата: 18.06.2012
Ответить


Антон
А вообще StateMachine - стандартный подход к событийному программированию, когда нужно контролировать возможность перехода сущности в разные состояния.


Я бы перефразировал несколько иначе. Если вы хотите детерменировать поведение системы. Если четко не указать переходы, состояния начнут перекрываться и тд, в общем гемора огрести можно :).

Да и собственно грааль был не столько в методе, сколько в наводке на готовые удобные решения подобной техники программирования, о которых я не знал.
Спасибо:

paveld

Фотография
Дата: 18.06.2012
Ответить


И все таки класс StateMachine это какая-то уже готовая реализация данного механизма? Где то можно взять исходники и примеры?
Спасибо:

Антон

Фотография
Дата: 18.06.2012
Ответить


Одна из реализаций. http://code.google.com/p/stateless/ Там же и примеры.
Спасибо: paveld

OvcharenkoVI

Фотография
Дата: 18.06.2012
Ответить


paveld
И все таки класс StateMachine это какая-то уже готовая реализация данного механизма? Где то можно взять исходники и примеры?


тоже интересно
Спасибо:
1 2  >

Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy