Создание CandleManager при неодновременном запуске двух стратегий в одном приложении

Создание CandleManager при неодновременном запуске двух стратегий в одном приложении
Atom
04.01.2017
Evgeny


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



Спасибо:


1 2 3  >
Mikhail Sukhov

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


Это все зависит от кода стратегий и самого приложения.

Подхода стокшарпа не существует, так как это АПИ, а не конкретное приложение. Есть подход по правильному написанию программ на .NET и WPF. Лучше их читать.
Спасибо:

RomSunZ

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


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

Evgeny

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


RomSunZ, у меня главная предпосылка была, что стратегии и их соответствующие candlemanager`ы запускаются неодновременно.
То есть сначала запускается первая стратегия с первым менеджером свечек, происходит подписка на тики по инструменту и этот первый менеджер свечек все нормально строит.
Затем (например, через час) запускается вторая стратегия со вторым менеджером свечек. Этот второй менеджер свечек тоже подпишется на событие получения новых сделок (TradeCandleBuilderSource), но ведь от этого второй менеджер свечек уже все равно не получит тики за первый час, пока работал только первый менеджер свечек.
Или не так и я что-то упустил?
Спасибо:

gem81

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


Вопрос возник такой же)
Попробую пояснить что не так.
Есть соединение public QuikTrader client = new QuikTrader(); общее для всего приложения.
Далее Мы создаём TradeCandleBuilderSource(client) и запускаем _candleManager.Start(_series);
я опустил все инициации серий и т.п.
затем через какое-то время мы нажимаем кнопку запустить второй алгоритм по тому же инструменту. Скрипт так сделан, что контролирует количество открытых им позиций по алгоритму, и ему не важно, сколько открывает позиций параллельный алгоритм.
И вот теперь при попытке запустить второй экземпляр окна со своим набором TradeCandleBuilderSource(client) и _candleManager.Start(_series); ничего не происходит.
из глобальных переменных тут только client, всё остальное формируется в классе нового окна с чартом. [cursing]
пояснил, у самого моск подкоптился
Спасибо:

RomSunZ

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


Вопрос на засыпку, как в примерах с отдельными ChartWindow (суть с разными экземплярами "стратегий") все строится, а у Вас нет?
Спасибо:

gem81

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


RomSunZ
Вопрос на засыпку, как в примерах с отдельными ChartWindow (суть с разными экземплярами "стратегий") все строится, а у Вас нет?


Написано всё как в примере. Результат на картинке. Первый раз всё вырисовывает, открываешь второй раз чарт по тому же инструменту, пусто

sh_double_sec.png

sh_double_sec.png 202 KB (452)
Спасибо:

RomSunZ

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


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

Evgeny

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


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

Support

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


1. Я бы рекомендовал использовать один CandleManager
2. "По повод тиков с начала сессии". Для CandleManager существуют "источники данных", в частности, для работы с тиковыми реал-тайм данными используется RealTimeCandleBuilderSource<T>. Вы можете попробовать использовать для каждого CandleManager один RealTimeCandleBuilderSource.
3. Все сформированные свечи хранятся в контейнере CandleManager. Эту "историю" Вы можете использовать при запуске второй стратегии.
Спасибо:

Support

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


gem81
Вопрос возник такой же)
Попробую пояснить что не так.
Есть соединение public QuikTrader client = new QuikTrader(); общее для всего приложения.
Далее Мы создаём TradeCandleBuilderSource(client) и запускаем _candleManager.Start(_series);
я опустил все инициации серий и т.п.
затем через какое-то время мы нажимаем кнопку запустить второй алгоритм по тому же инструменту. Скрипт так сделан, что контролирует количество открытых им позиций по алгоритму, и ему не важно, сколько открывает позиций параллельный алгоритм.
И вот теперь при попытке запустить второй экземпляр окна со своим набором TradeCandleBuilderSource(client) и _candleManager.Start(_series); ничего не происходит.
из глобальных переменных тут только client, всё остальное формируется в классе нового окна с чартом. [cursing]
пояснил, у самого моск подкоптился


Если у вас один candleManager, то второй раз вызывать _candleManager.Start(_series) не надо, можно просто во второй стратегии еще раз подписаться на событие CandleManager.Processing.. Вам нужно иметь ссылки на CandleSeries, и каждый раз при попытке вызова candleManager.Start(_series) проверять есть ли такая серия в CandleManager.Series... Если есть, то серия уже запущена... Уже построенные свечи получаем при помощи _candleManager.GetCandles<T>(CandleSeries)...
Спасибо:
1 2 3  >

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

loading
clippy