Восстановление сохраненной стратегии

Восстановление сохраненной стратегии
Atom
25.09.2014
Andrii


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

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

Теги:


Спасибо:


< 1 2 3  >
Andrii

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


lebedevsrg
Andrii
секретные разработки?

Поиск по форуму - лучшее лекарство от подозрительности))
Так мной было описан полный набор функций для сохранения заявок/сделок по стратегии в базу данных в разделе по развитию S#.Shell Ссылка

Сейчас по прошествии 2-х месяцев могу сказать что все работает на 100%.
Однако я внес следующие изменения в подход к сохранению позиций:
1) заменил сохранение в MS SQL на сохранение в MS Access, используя универсальный интерфейс OleDb;
все-таки Access проше, систему не грузит и занимает в 10ки раз меньше места,
2) вообще прекратил сохранять заявки и сделки, сохраняю только позиции; для транения позиций пришлось сделать отдельный класс TradeBook, в котором как раз расписано для каждой стратегии какую она имеет долю в "общем пироге" открытой по инструменту позиции - это к вопросу devruss'а относительно учета результатов работы нескольких стратегий с одним счетом и инструментом.


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

Но в целом я понял, используется AttachOrder и его сделками... этого и хотел
Спасибо:

RomSunZ

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


Супер секретная разработка по сохранению/восстановлению стратегий:
[url]http://stocksharp.com/forum/4045/S--Shell--Manual/?page=2
Спасибо:

devruss

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


Большое спасибо за ответ. Так как я не программист, мне потребовалось несколько дней, чтобы разобраться в коде
Есть несколько вопросов:
- Ваша идея восстановления позиции состоит в том, чтобы при каждом запуске заново грузить все сделки и по ним считать позицию. Для этого сделки хранятся в БД. Это абсолютно верно, что из сделок можно получить поозицию, но, как мне кажется, избыточно.
Был ли рассмотрен следующий подход: при совершении сделки (partial fill/ full fill), меняется позиция. Робот узнает об изменении позиции только от feedback от биржи о статусе исполненного ордера (ну либо если ордер лимитный, и робот знает, что пришел confirmation о том, что он выставлен, + цена прошла уровень ордера, то автоматом считаем ордер исполненным - нужно для HFT). Так вот, как только робот узнает об изменении позиции, вместо того, чтобы тут же сохранять сделку в БД он просто записывает в файл позицию. При старте робота, не нужно выгружать все сделки, а только сообщить стартовую позицию и все.

- Встает вопрос, за какой период нужно выгружать сделки. Если робот торгует длинные таймфремы, то это может быть и несколько месяцев. А это дофига сделок, если есть в портфеле есть стратегии торгующие high frequency и low frequency.

- В чем потенциальные минусы предложенного подхода в сравнении с уже реализованным выше. Может я упускаю какие-то тонкости?
Спасибо:

JaguarFX

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


Тут в каждом подходе есть свои плюсы и свои минусы.

1. Восстановление позиций через восстановление заявок/сделок
Очевидный плюс - получение полноценной статистики и PnL на основе свойств стратегии.
Минус - при большом числе заявок/сделок перфоманс при старте падает.
Кроме того у меня при количестве заявок прим. от 2000 / сделок от 3000 стали возникать проблемы с тем, что предварительный запрос на очистку таблиц от старых записей в целях исключения дублирований стал прерываться при старте следующего по коду запроса на запись, и как результат пошла мультипликация записей. Возможно там для решения проблемы нужно было перейти на асинхронный вызов и дожидаться выполнения первого запроса из кода, но я к этому моменту осознал избыточность для моих интересов данного подхода и остановил запись и восстановление заявок/сделок.
Перешел на подход №2.

2. Восстановление позиций через восстановление информации о позициях
Очевидный плюс - сохранение в БД только самой важной информации.
Далее, если объект заявка содержит только одно поле UserOrderId для хранения информации о сигнале на открытие позиции, то в собственном классе по позициям можно создать несколько полей для последующего использовании при принятии решения о закрытии позиции (н-р сигнал, тайм-фрейм) и подсчете доходов (н-р при торговле фичами размер резерва капитала, даты/спреды ролл-оверов).
Минус - необходимость создания собственного класса для хранения позиций и встраивание его работы в работу стратегии.
Кроме того стандартные статистика и PnL по стратегии теряют свою актуальность. Статистика конечно не столь важна, а вот для расчета PnL пришлось написать отдельную функцию. Для моей стратегии правда это было и так необходимо сделать, так как PnL с учетом колебаний рыночной стоимости не интересен, а интересна мгновенная и общая годовая доходность работы по сигналам.

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

devruss

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


lebedevsrg
Тут в каждом подходе есть свои плюсы и свои минусы.

1. Восстановление позиций через восстановление заявок/сделок

2. Восстановление позиций через восстановление информации о позициях


Я тоже создал свои классы и под хранение инфы по трейдам (не позициям), а также по правильному подсчету pnl, mark-to-market pnl, доходности и т.д.
Поправь меня если я не прав, но по ссылке выше ты рассказал именно про реализацию подхода 1 - восстановления позиции через сделки.
Тогда вопрос: Как реализовать именно вараинт 2?
По большому счету тут SQL не нужно. Достаточно 1 файл с элементами типа {Strategy ID/Name, Position}. И при перезапуске робота считывать эти данные и сообщать роботу с какой позицией он стартует. Тогда в общем случае и логику менять не надо, так как робот просто сразу переходит в состояние long/short N контрактов как бы пропуская фазу набора позиции.


Спасибо:

Andrii

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


devruss
lebedevsrg
Тут в каждом подходе есть свои плюсы и свои минусы.

1. Восстановление позиций через восстановление заявок/сделок

2. Восстановление позиций через восстановление информации о позициях


Я тоже создал свои классы и под хранение инфы по трейдам (не позициям), а также по правильному подсчету pnl, mark-to-market pnl, доходности и т.д.
Поправь меня если я не прав, но по ссылке выше ты рассказал именно про реализацию подхода 1 - восстановления позиции через сделки.
Тогда вопрос: Как реализовать именно вараинт 2?
По большому счету тут SQL не нужно. Достаточно 1 файл с элементами типа {Strategy ID/Name, Position}. И при перезапуске робота считывать эти данные и сообщать роботу с какой позицией он стартует. Тогда в общем случае и логику менять не надо, так как робот просто сразу переходит в состояние long/short N контрактов как бы пропуская фазу набора позиции.




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

покажешь свои классы "подсчету pnl, mark-to-market pnl, доходности и т.д." ?

Спасибо:

RomSunZ

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


А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные по предыдущим сделкам/позициям/ордерам использовать для анализа работы системы?
Спасибо:

devruss

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


Цитата:

по большому счету да, сохраняешь состояние стратегии и восстанавливаешь его при создании. Но тогда теряется статистика стратегии... но если у тебя свои классы по ее подсчету, то можно себе позволить
покажешь свои классы "подсчету pnl, mark-to-market pnl, доходности и т.д." ?


В данном топике это оффтоп. На самом деле, я даже классы не делал. На каждом тике пересчитываю стоимость позиции (== mark to market), из этого получается и pnl при закрытии позиции (реализованный mark to market) и доходность (pnl/capital)
Спасибо:

devruss

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


RomSunZ
А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные по предыдущим сделкам/позициям/ордерам использовать для анализа работы системы?


Я не понял, как можно передать роботу позицию? AttachOrder функция есть, а как указать текущую позицию при старте?
Спасибо:

Andrii

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


devruss
RomSunZ
А что мешает взять из БД позицию/ордера/сделки по последней открытой позиции, а сохраненные данные по предыдущим сделкам/позициям/ордерам использовать для анализа работы системы?


Я не понял, как можно передать роботу позицию? AttachOrder функция есть, а как указать текущую позицию при старте?


Код
Strategy str = new MyStrategy() { Position = 5 };

Спасибо: devruss
< 1 2 3  >

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

loading
clippy