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


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


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



Thanks:


1 2 3  >
Mikhail Sukhov

Avatar
Date: 1/5/2017
Reply


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

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

RomSunZ

Avatar
Date: 1/6/2017
Reply


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

Evgeny

Avatar
Date: 1/7/2017
Reply


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

gem81

Avatar
Date: 1/9/2017
Reply


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

RomSunZ

Avatar
Date: 1/9/2017
Reply


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

gem81

Avatar
Date: 1/9/2017
Reply


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


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

sh_double_sec.png

sh_double_sec.png 202 KB (383)
Thanks:

RomSunZ

Avatar
Date: 1/9/2017
Reply


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

Evgeny

Avatar
Date: 1/10/2017
Reply


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

Support

Avatar
Date: 1/12/2017
Reply


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

Support

Avatar
Date: 1/12/2017
Reply


gem81 Go to
Вопрос возник такой же)
Попробую пояснить что не так.
Есть соединение 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)...
Thanks:
1 2 3  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy