Проскальзывание в стратегиях акция/фьючерс

  • 319 Views
  • Последнее сообщение 23 декабря 2015
xf170 posted this 17 декабря 2015

Вопрос к программисту: 

нужно было решить пролему проскальзывания в роботе при торговле акция/фьючерс.

Ситуация такая: я хочу купить на 1 млн. рублей акиций - когда робот выставит такую заявку, возникнет ситуация, что какую то часть мы купим по цене, которая нам нужна была, а другую часть мы возьмем по другой цене (которая нас не устраивает), так как очень большой объем, 

Мы хотим чтобы робот научился такие позиции набирать постепенно. 

admin posted this 17 декабря 2015

На выбор предлагаю для обсуждения несколько мер решения проблемы проскальзывания:

1) Кнопка выхода по "замороженной цене". Выставляется заявка в объеме, что предлагает спрос/предложения (либо меньше, если требуемый объем выхода укладывается в предлагаемый рынком). Если заявка не успела пройти, она не снимается. Если рынок безнадежно ушел, то можно через робота снять заявку и изменить "замороженную цену" путем повторного нажатия кнопки выхода по "замороженной цене".

2) Стратегия акции и фьючерсы осуществляют вход/выход не по спросу/продложению, а по цене последней сделки. Немного, но это улучшит проблему входа-выхода большим объемом. Сделаем обязательно.

3) Вход в позиции, когда надо набрать план большим объемом для стратегий акции/фьючерсы. Тут можно управлять таймером опроса цены для замедления процесса входа. На мой взгляд, тут проблем нет, если только это не вход-выход по экспирации, когда нужно минимизировать убытки при переходе (это отдельным пунктом). Помимо этого, в этих стратегиях заявки зависшие не снимаются (если только принудительно не настроить снимать зависшие заявки), и вход/выход из позиций не "продавливает" рынок.

4) Вход и выход из позиций в случае корзин (арбитража). Тут самое сложное. Нужно учесть объемы спроса/предложения нужных инструментов, ликвидность каждого инструмента для управления очередность входа (если делать механизм, надо и это учитывать), неравные веса вхождения в корзину, и величину проскальзывания от текущей цены (чтоб наверняка). 

5) Вход и выход при экспирации. Вижу процесс перехода так. Создается новая стратегия с тем же набором инструментов, что и та, по которой близка экспирация. В новой стратегии в настройках указывается, что это переход по экспирации и пользователь выбирает стратегию из списка и запускает ее. Далее эти две стратегии начинают работать в симбиозе, одновременно совершая вход-выход. Это позволит избежать одномоментного входа и выхода сразу большим объемом и сгладит процесс перехода с одних фьючерсов на другие. 

Этих мер достаточно будет, или есть еще идеи?

xf170 posted this 18 декабря 2015

1) Вообще не понял о чем речь. На что  "замороженные цены"? Если на спред, то да это круто. Если на одну ногу то, что с другой? И чем это отличается от того, что сейчас
2) Согласен улучшит, но лишь на маленьких объемах и не много.
У нас сейчас задача загрузить объем  от 1  до 10 миллионов рублей в классический арбитраж "спот-фьюч"с минимальным проскальзыванием. Это решение, мне кажется, не уберет в нашем случае эффект "влияния на рынок большими заявками".
3) До экспирации досиживать не будем. Но из описания мне не все ясно. Мы выставим сразу весь лот на оби ноги? или все же частями? Если частями, то мне нравиться, только предлагаю следующую часть лота выставлять, лишь после исполнения предыдущего, а не привязываться ко времени.
4) ДА. Обидно когда входишь, а тут БАЦ и мимо). Уж лучше вообще иногда не входить, чем так.
5)Написано красиво, если это еще и работать так буде, так вообще песня!
Но есть нюанс. Вопрос как технически будет происходить перекладка?
Примеры
Вариант 1
Можно перекладывать лотами, продали старые две ноги купили новые две ноги.
И так по выбранному количеству лотов. Хочешь по одному, хочешь сразу по пять.
Здесь хотелось бы пытаться поймать минимальный календарный спред по всей стратегии, которую перекладываем.
Вариант 2
Можно перекладывать по каждому инструменту отдельно. Переложили сбербанк, далее перекладываем Роснефть, и тд. То есть пытаемся поймать календарный спред по каждому инструменту отдельно в рамках одной стратегии. Так то же на мой взгляд возможно. Немного хлопотнее для пользователя, но возможно более экономически эффективнее.

admin posted this 18 декабря 2015

1) Кнопка выхода по "замороженной цене". Выставляется заявка в объеме, что предлагает спрос/предложения (либо меньше, если требуемый объем выхода укладывается в предлагаемый рынком). Если заявка не успела пройти, она не снимается. Если рынок безнадежно ушел, то можно через робота снять заявку и изменить "замороженную цену" путем повторного нажатия кнопки выхода по "замороженной цене".

На примере стратегии акции. Условно, у нас стратегия от лонга и в наличии 20 лотов, надо выйти из позиций по текущей цене. Текущая цена спроса 100р. Робот запоминает цифру 100. Текущий объем в лучшем спросе 5 лотов. Человек нажимает кнопку "Выйти из позиций по замороженной цене". Робот выставляет заявку продать 5 лотов по цене 100. Ждет, пока пройдет заявка, либо когда не нажмется еще раз кнопка "Выйти из позиций по замороженной цене". Если заявка прошла и текущее значение спроса 100 или выше, то выставляется следующая порция в стакан в объеме, соответствующим текущему спросу. И так далее, пока не пройдет весь объем по нужной цене. Тут спорный момент в том, что не лучше ли выставить весь объем в заявке и просто подождать, пока его доклюют.

На примере арбитража точно также, только вместо цены у нас значение базиса. Стратегия (условно) Сбер-СберП. Соотношение 1к2. Сбер в лонге 20 контрактов, СберП в шорт 40 контрактов. Текущая цена базиса 100. Человек нажимает кнопку выйти из позиций по замороженной цене. Замораживается цифра 100. То есть выход будет либо по цене 100 либо выше (поскольку первый инструмент в лонге, то стратегия в лонговом состоянии для простоты понимания). Пользуясь случаем, расшифрую понятие лонговое состояние стратегии. Если базис будет 110, то либо первый инструмент подорожал больше, чем подешевел второй инструмент, либо второй подешевел больше, чем подорожал первый (для шорта все наоборот). Поэтому в данном случае выход по цене базиса 100 или больше будет как минимум, не хуже, чем в момент нажатия кнопки "Выход по замороженной цене". Таким образом, если первая корзина в лонге, то базис в лонге и наоборот. В отличие от обычной стратегии "Акции", тут надо анализировать сразу несколько стаканов и их количество. Если цена базиса дает "добро" на сделку робот анализирует объем текущего спроса по Сбер и объем текущего предложения по СберП. Если текущая зона укладывается в рыночный объем, то выставляются заявки по одной зоне и робот будет ждать завершения сделки. Если не укладывается, предлагаю заявки не отправлять. В идеале, в зоне должно быть контрактов по минимуму. Пусть лучше тогда будет несколько зон с одинаковой ценой и объемом, тогда проще организовать постепенный набор позиций. Распределять вход внутри зоны - я пока не придумал удачный алгоритм (упирается в невозможность приобретения доли контракта, например, 0,5 контракта).

Теперь про вход. Если текущая цена 100, а нам надо лесенкой набрать план по 150, 140, 130, 120, 110, 100. Если цена будет заморожена, то план можно и не набрать. Тут вижу разумным не выставлять заявки следующей зоны, пока не пройдут заявки предыдущей зоны. Это же правило можно распространить на вход/выход при обычной работе.

xf170 posted this 18 декабря 2015

 На примере стратегии акции. Условно, у нас стратегия от лонга и в наличии 20 лотов, надо выйти из позиций по текущей цене. Текущая цена спроса 100р. Робот запоминает цифру 100. Текущий объем в лучшем спросе 5 лотов. Человек нажимает кнопку "Выйти из позиций по замороженной цене". Робот выставляет заявку продать 5 лотов по цене 100. Ждет, пока пройдет заявка, либо когда не нажмется еще раз кнопка "Выйти из позиций по замороженной цене". Если заявка прошла и текущее значение спроса 100 или выше, то выставляется следующая порция в стакан в объеме, соответствующим текущему спросу. И так далее, пока не пройдет весь объем по нужной цене. Тут спорный момент в том, что не лучше ли выставить весь объем в заявке и просто подождать, пока его доклюют.

  С этим понятно  

 На примере арбитража точно также, только вместо цены у нас значение базиса. Стратегия (условно) Сбер-СберП. Соотношение 1к2. Сбер в лонге 20 контрактов, СберП в шорт 40 контрактов. Текущая цена базиса 100. Человек нажимает кнопку выйти из позиций по замороженной цене. Замораживается цифра 100. То есть выход будет либо по цене 100 либо выше (поскольку первый инструмент в лонге, то стратегия в лонговом состоянии для простоты понимания). Пользуясь случаем, расшифрую понятие лонговое состояние стратегии. Если базис будет 110, то либо первый инструмент подорожал больше, чем подешевел второй инструмент, либо второй подешевел больше, чем подорожал первый (для шорта все наоборот). Поэтому в данном случае выход по цене базиса 100 или больше будет как минимум, не хуже, чем в момент нажатия кнопки "Выход по замороженной цене". Таким образом, если первая корзина в лонге, то базис в лонге и наоборот.

   В целом идея понятна. Если мы выходим, а базис сходиться, т.е. цена для нас лучше, и нам хорошо))). Если цена убегает, против нас, то мы снимаемся с выхода и ждем.   

 В отличие от обычной стратегии "Акции", тут надо анализировать сразу несколько стаканов и их количество. Если цена базиса дает "добро" на сделку робот анализирует объем текущего спроса по Сбер и объем текущего предложения по СберП. Если текущая зона укладывается в рыночный объем, то выставляются заявки по одной зоне и робот будет ждать завершения сделки.

  Да, причем думаю входить/выходить с менее ликвидной ноги, в данном случае префов. Это важно!!! Кстати, как сейчас определяем какая нога ходит первой?  

Если не укладывается, предлагаю заявки не отправлять.

  Да  

В идеале, в зоне должно быть контрактов по минимуму. Пусть лучше тогда будет несколько зон с одинаковой ценой и объемом, тогда проще организовать постепенный набор позиций.

  А так можно?  

Распределять вход внутри зоны - я пока не придумал удачный алгоритм (упирается в невозможность приобретения доли контракта, например, 0,5 контракта).

  Как технически будет организован набор , назовем его -"Айсберг", нам не принципиально . В рамках одной зоны или нескольких, важно что заданными объемами и по заданной цене "базиса"  

 Теперь про вход. Если текущая цена 100, а нам надо лесенкой набрать план по 150, 140, 130, 120, 110, 100. Если цена будет заморожена, то план можно и не набрать. Тут вижу разумным не выставлять заявки следующей зоны, пока не пройдут заявки предыдущей зоны. Это же правило можно распространить на вход/выход при обычной работе.

 

 

Вообще не вижу разницы вход это или выход. И там и там сделки - покупаем/продаем. Делаем по такому же алгоритму.

admin posted this 18 декабря 2015

Кстати, как сейчас определяем какая нога ходит первой?  

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

В идеале, в зоне должно быть контрактов по минимуму. Пусть лучше тогда будет несколько зон с одинаковой ценой и объемом, тогда проще организовать постепенный набор позиций.

  А так можно?  

если диапазон узкий, а зон много, оно само так получается.

 

В итоге картина более менее прояснилась. Буду делать.

xf170 posted this 21 декабря 2015

Добрый день! Как идет работа по доработки? И когда будет результат )) 

admin posted this 21 декабря 2015

Здравствуйте!

Пока держу все в уме. Сейчас на очереди обновление для скоринга серьезное и переход на новую версию сайта. По срокам: оптимистично если, то перед Новым Годом, писсимистично - в январе.

xf170 posted this 23 декабря 2015

Добрый день) 

А можете это сделать до НГ, а то мы просили это сделать больше месяца назад.

admin posted this 23 декабря 2015

Некоторую часть уже сделал. Вчера тестировал, сегодня выложу обновление. Сделал следующее:

- постепенный набор позиций (заявки по новой зоне не выставляются, пока не пройдут заявки по предыдущей зоне)

- заявка не выставляется до тех пор, пока текущий объем лучшего спроса/предложения (в зависимости от ситуации) не будет подходящим.

Тестировал на малоликвидном рынке (демо), работает значительно лучше, чем раньше, но не гарантирует 100% прохождения заявки. Вкупе с отсрочкой (заданным значением проскальзывания) вероятность прохождения заявки еще выше.

Нововведение пока для стратегии Арбитраж 2.0

xf170 posted this 23 декабря 2015

Но акциями я там могу торговать? 

admin posted this 23 декабря 2015

Но акциями я там могу торговать? 

да, конечно

Close