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


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

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

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

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

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


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

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


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

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


< 1 2 
ra81

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


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

Ага выше ответили. Я как раз его и использую. Вариантов реализации достаточно много, но эта простая и легко использовать. Но потоконебезопасный класс :). Есть реализация мелкософта с гуи и прочими плюшками но громоздко.
Спасибо: paveld

ra81

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


Добавил в шапку.

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

ra81

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


Пункт 9. Левые котировки от брокера, коннектора итд.

http://stocksharp.com/fo...ymi-dannymi-ot-brokiera/
Спасибо:
< 1 2 

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

loading
clippy