Создание CandleManager при неодновременном запуске двух стратегий в одном приложении~/topic/7033/sozdanie-candlemanager-pri-neodnovremennom-zapuske-dvuh-strategii-v-odnom-prilozhenii/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T15:29:40Zhttps://stocksharp.com/images/logo.pnghttps://stocksharp.com/posts/m/39071/В общем суть проблемы в том, что класс RealTimeCandleBuilderSource, который является базовым для Tra...2017-02-02T07:50:54Z2017-02-02T07:50:54ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comВ общем суть проблемы в том, что класс RealTimeCandleBuilderSource, который является базовым для TradeCandleBuilderSource, вызывает метод AddNewValues только когда получает новый тик. А в этом методе идет проверка <br /><div class="code"><strong>Code</strong><div class="innercode"><br /> if (series.IsNew)<br /> {<br /> RaiseProcessing(series, Convert(GetSecurityValues(security)).OrderBy(v => v.Time));<br /> series.IsNew = false;<br /> }<br /> else<br /> {<br /> RaiseProcessing(series, securityValues);<br /> }<br /></div></div><br />в котором проверяется новая серия или нет. Если новая идет запрос всех сделок, если нет - обрабатываются поступившие.<br />Вам нужно переписать этот класс и запрос всех сделок делать сразу после добавления новой серии.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/39016/Да.2017-01-30T12:01:44Z2017-01-30T12:01:44ZSupporthttps://stocksharp.com/users/97869/info@stocksharp.comДа.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/39012/Скажите, пожалуйста, если все-таки создавать дополнительный CandleSeries, то по свечам, которые уже ...2017-01-27T19:03:49Z2017-01-27T19:03:49ZEvgenyhttps://stocksharp.com/users/918/info@stocksharp.comСкажите, пожалуйста, если все-таки создавать дополнительный CandleSeries, то по свечам, которые уже были сформированы к моменту запуска второй стратегии, во второй стратегии должны срабатывать правила WhenCandlesStarted, WhenCandlesChanged и т.д.? Или только правило окончания свечи?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38994/Я не вижу в этом никакой проблемы...Получение свечей проходит очень быстро... Можно конечно проверят...2017-01-27T12:26:42Z2017-01-27T12:26:42ZSupporthttps://stocksharp.com/users/97869/info@stocksharp.comЯ не вижу в этом никакой проблемы...Получение свечей проходит очень быстро... Можно конечно проверять, но это принципиально ни на что не повлияет...Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38989/Тут вопрос в другом. Событие появления обработки свечек сработает только после получения новой сделк...2017-01-27T09:20:37Z2017-01-27T09:20:37ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comТут вопрос в другом. Событие появления обработки свечек сработает только после получения новой сделки по инструменту и Ваше решение бесполезно. А человеку надо получить свечки сразу после запуска второй стратегии, т.к. сделки придут неизвестно через какой промежуток времени (например после окончания торговой сессии это будет только на следующий рабочий день). Тогда уж наверное при запуске стратегии сначала делать запрос GetCandles и после их обработки подписываться на обработку. Правда как я уже писал придется проверять появились ли изменения в свечках с момента их получения до момента подписки на событие обработки.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38974/Для вашей задачи оптимальным будет следующее решение.. Во второй стратегии Вы просто подписываетесь ...2017-01-26T16:18:39Z2017-01-26T16:18:39ZSupporthttps://stocksharp.com/users/97869/info@stocksharp.comДля вашей задачи оптимальным будет следующее решение..<br />Во второй стратегии Вы просто подписываетесь на событие CandleManager.Processing..., кроме того создаете флаг для первой свечи в этой стратегии... При получении первой свечи запрашиваете все свечи CandleManager.GetCandles, выполняет нужные операции, сбрасываете флаг....<br />При создании дополнительных CandleManager или дополнительных CandleSeries накладные расходы программы будут больше.... Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38931/А Вы смотрели поведение candlemanager например в S#.Disigner? Если там все работает, то значит решен...2017-01-20T09:57:20Z2017-01-20T09:57:20ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comА Вы смотрели поведение candlemanager например в S#.Disigner? Если там все работает, то значит решение есть, его просто надо увидеть :)Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38897/В таком случае пишите свой обработчик загрузки истории, иначе никак.2017-01-18T08:32:09Z2017-01-18T08:32:09ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comВ таком случае пишите свой обработчик загрузки истории, иначе никак.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38690/RomSunZ, вы сами пробовали на последней версии API запустить пример SampleQuikCandles с двумя чартам...2017-01-14T13:49:46Z2017-01-14T13:49:46ZEvgenyhttps://stocksharp.com/users/918/info@stocksharp.comRomSunZ, вы сами пробовали на последней версии API запустить пример SampleQuikCandles с двумя чартами по одному инструменту предварительно сделав те доработки, про которые вы говорите?<br />1. Если создавать два экземпляра CandleManager для одного коннектора, то при старте серии свечек по второму появляется ошибка System.InvalidOperationException: Subscribed. Появляется она из-за того, что в RealTimeCandleBuilderSource.Start производится подписка на получение тиков по инструменту. Попытка это вторая, т.к. при старте первого менеджера свечек подписка на тики уже ранее была произведена.<br />Соответственно после появления этой ошибки ничего уже не строится.<br />3. Это не работает. В том же примере заменяю строку запуске серии на candleManager.Start(series, System.DateTime.Today.AddDays(-1), System.DateTime.MaxValue); и от этого ничего не меняется. На втором чарте по тому же инструменту свечи появятся только если после запуска этого второго чарта придет хотя бы один тик. А он после окончания сессии никогда не придет.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38679/1. Не обязательно. 2. Должны. 3. Я же Вам написал ранее. Используйте candlemanager.Start(startTime, ...2017-01-14T08:13:10Z2017-01-14T08:13:10ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.com1. Не обязательно.<br />2. Должны.<br />3. Я же Вам написал ранее. Используйте candlemanager.Start(startTime, endTime) и получите Ваши свечи не зависимо от других запущенных стратегий.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38676/Потратил кучу времени и выяснил вот что: вторая стратегия, запущенная позднее старта первой стратеги...2017-01-13T23:56:38Z2017-01-13T23:56:38ZEvgenyhttps://stocksharp.com/users/918/info@stocksharp.comПотратил кучу времени и выяснил вот что: вторая стратегия, запущенная позднее старта первой стратегии (или второй чарт) все-таки получают данные с начала торговой сессии при следующих условиях:<br />1. CandleManager должен быть обязательно один и тот же.<br />2. CandleSeries должны быть обязательно разные (даже если стратегии или чарты используют абсолютно идентичные свечи с тем же инструментом и таймфреймом).<br />3. С момента запуска второй стратегии по этому инструменту должен придти хотя бы один тик. Если до конца сессии новых сделок так и не будет, то вторая стратегия так и не получит данные с начала сессии. Если же новые сделки будут получены, то вторая стратегия сначала получит все сформированные свечи с начала сессии, а потом начнёт получать реальные данные.<br /><br />Третий пункт как раз меня и gem81 судя по всему и сбил с толку. Так как если запускать стандартный пример с графиками ChartWindow после окончания торговой сессии (то есть новых сделок уже точно не поступит), то второй чарт по одному инструменту не строится. Но если его запускать во время торговой сессии и по инструменту продолжают поступать сделки, то все строится нормально.<br /><br />То есть по идее, если третье условие считать допустимым, то можно не прибегать к использованию метода GetCandles.<br />В идеале, конечно, хотелось бы получить подтверждение от поддержки, что описанное действительно работает (и главное - должно работать) именно так, а я не набрёл на очередной частный случай.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38673/Что значит нельзя? Вариант 1: Вы вызываете candleManager.GetCandles(CandleSeries). Получаете коллекц...2017-01-13T20:23:46Z2017-01-13T20:24:53ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comЧто значит нельзя?<br />Вариант 1:<br />Вы вызываете candleManager.GetCandles<T>(CandleSeries). Получаете коллекцию. Обрабатываете ее - это занимает некоторое время, подписываетесь на событие Processing, начинаете получать сообщения. Но со времени получения и обработки коллекции уже могли произойти изменения в коллекции в candleManager (потоки-то разные), и какие-то из изменений могли пройти мимо нас.<br /><br />Вариант 2:<br />Подписываемся на Processing и начинаем получать сообщения. Вызываем candleManager.GetCandles<T>(CandleSeries). Получаем коллекцию. Обрабатываете ее, но во время ее обработки может придти сообщение от Processing - проблемы с синхронизацией обработки.<br /><br />Есть еще какие-либо варианты?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38668/нельзя...2017-01-13T15:28:34Z2017-01-13T15:28:34ZSupporthttps://stocksharp.com/users/97869/info@stocksharp.comнельзя...Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38658/Ага, только в таком подходе можно получить пропуск свечек в промежутке между обработкой результатов ...2017-01-13T09:04:49Z2017-01-13T09:04:49ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comАга, только в таком подходе можно получить пропуск свечек в промежутке между обработкой результатов candleManager.GetCandles и подписью на событие CandleManager.Processing. Придется городить огород с проверками и т.п.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38620/Вопрос возник такой же) Попробую пояснить что не так. Есть соединение public QuikTrader client = new...2017-01-12T15:06:30Z2017-01-12T15:06:30ZSupporthttps://stocksharp.com/users/97869/info@stocksharp.com<div class="quote"><span class="quotetitle">gem81 <a href="https://stocksharp.com/posts/m/38576/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">Вопрос возник такой же)<br />Попробую пояснить что не так.<br />Есть соединение public QuikTrader client = new QuikTrader(); общее для всего приложения.<br />Далее Мы создаём TradeCandleBuilderSource(client) и запускаем _candleManager.Start(_series);<br />я опустил все инициации серий и т.п.<br />затем через какое-то время мы нажимаем кнопку запустить второй алгоритм по тому же инструменту. Скрипт так сделан, что контролирует количество открытых им позиций по алгоритму, и ему не важно, сколько открывает позиций параллельный алгоритм. <br />И вот теперь при попытке запустить второй экземпляр окна со своим набором TradeCandleBuilderSource(client) и _candleManager.Start(_series); ничего не происходит. <br />из глобальных переменных тут только client, всё остальное формируется в классе нового окна с чартом. [cursing]<br />пояснил, у самого моск подкоптился </div></div><br /><br />Если у вас один candleManager, то второй раз вызывать _candleManager.Start(_series) не надо, можно просто во второй стратегии еще раз подписаться на событие CandleManager.Processing.. Вам нужно иметь ссылки на CandleSeries, и каждый раз при попытке вызова candleManager.Start(_series) проверять есть ли такая серия в CandleManager.Series... Если есть, то серия уже запущена... Уже построенные свечи получаем при помощи _candleManager.GetCandles<T>(CandleSeries)...<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38619/1. Я бы рекомендовал использовать один CandleManager 2. "По повод тиков с начала сессии". Для Candle...2017-01-12T14:51:36Z2017-01-12T14:51:36ZSupporthttps://stocksharp.com/users/97869/info@stocksharp.com1. Я бы рекомендовал использовать один CandleManager<br />2. "По повод тиков с начала сессии". Для CandleManager существуют "источники данных", в частности, для работы с тиковыми реал-тайм данными используется RealTimeCandleBuilderSource<T>. Вы можете попробовать использовать для каждого CandleManager один RealTimeCandleBuilderSource.<br />3. Все сформированные свечи хранятся в контейнере CandleManager. Эту "историю" Вы можете использовать при запуске второй стратегии.<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38595/Я запустил у себя стандартный пример со свечками. И ожидаемо увидел тоже самое. При открытии того же...2017-01-10T10:04:03Z2017-01-10T10:04:03ZEvgenyhttps://stocksharp.com/users/918/info@stocksharp.comЯ запустил у себя стандартный пример со свечками. И ожидаемо увидел тоже самое. При открытии того же окна с тем же инструментом график рисоваться не будет. С другим инструментом - будет, а с тем же - нет.<br />И причина, насколько я понимаю, именно в том, что TradeCandleBuilderSource, который отвечает за построение онлайн свечек, вызывает перестроение свечи только при появлении нового тика. А когда открывается второе окно - старые тики, поступившие к этому моменту, второй раз не поступят, и соответственно свечи заново не сгенерятся.<br />Возможно проблему можно решить добавив другой источник, который построит свечи либо по данным в хранилище, либо по данным коллекции тиков.<br />Но в обоих случаях я вижу подводные камни.<br />Я поэтому и хотел, чтобы на эту тему отписались разработчики. Каким-то образом, они же решали эту проблему, например, в дизайнере.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38583/На сколько помню, при запуске candlemanager можно было задавать начальную/конечную дату. Попробуйте,...2017-01-09T10:42:26Z2017-01-09T10:42:26ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comНа сколько помню, при запуске candlemanager можно было задавать начальную/конечную дату. Попробуйте, может быть поможет.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38581/Вопрос на засыпку, как в примерах с отдельными ChartWindow (суть с разными экземплярами "стратегий")...2017-01-09T09:41:45Z2017-01-09T09:41:45Zgem81https://stocksharp.com/users/62541/info@stocksharp.com<div class="quote"><span class="quotetitle">RomSunZ <a href="https://stocksharp.com/posts/m/38579/"><img src="https://stocksharp.com/images/icon_latest_reply.gif" title="Go to" alt="Go to" /></a></span><div class="innerquote">Вопрос на засыпку, как в примерах с отдельными ChartWindow (суть с разными экземплярами "стратегий") все строится, а у Вас нет?</div></div><br /><br />Написано всё как в примере. Результат на картинке. Первый раз всё вырисовывает, открываешь второй раз чарт по тому же инструменту, пусто<br /><br /><a href='https://stocksharp.com/file/104054/sh_double_sec_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.com/file/104054/sh_double_sec_png/?size=500x500" alt="sh_double_sec.png" title="sh_double_sec.png" /></a><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.com/posts/m/38579/Вопрос на засыпку, как в примерах с отдельными ChartWindow (суть с разными экземплярами "стратегий")...2017-01-09T08:34:35Z2017-01-09T08:34:35ZRomSunZhttps://stocksharp.com/users/6384/info@stocksharp.comВопрос на засыпку, как в примерах с отдельными ChartWindow (суть с разными экземплярами "стратегий") все строится, а у Вас нет?Copyright @ StockSharp Platform LLC 2010 - 2024