Сообщество. StockSharphttps://stocksharp.ru/handlers/atom.ashx?category=community&page=55Copyright @ StockSharp Platform LLC 2010 - 20242024-03-29T13:28:45Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/topic/8952/Создание WeightedIndexSecurity из исторических данных (получить исторический спред 2-х инструментов)2017-12-21T20:39:37Z2018-01-09T20:04:19ZДмитрий_https://stocksharp.ru/users/62269/info@stocksharp.ruЗдравствуйте.<br /><br />Подскажите, как правильно создать WeightedIndexSecurity из исторических данных?<br /><br />Имею:<br />Security _leg1Security = new Security() { Id = "SBER@TQBR" };<br />Security _leg2Security = new Security() { Id = "SBERP@TQBR" };<br /><br />DateTime from = new DateTime(2017, 1, 3).ChangeKind(DateTimeKind.Utc);<br />DateTime to = new DateTime(2017, 1, 4).ChangeKind(DateTimeKind.Utc);<br /><br />private TimeSpan _timeFrame = TimeSpan.FromMinutes(1);<br /><br />В переменных _leg1TimeFrameCandles и _leg2TimeFrameCandles исторические 1-мин свечи, загруженные из локального хранилища.<br /><br />_portfolio = new Portfolio<br /> {<br /> Name = "Test Account",<br /> BeginValue = 1000000,<br /> };<br /><br />WeightedIndexSecurity _spreadSecurity = new WeightedIndexSecurity() { Id = "Index1", Board = ExchangeBoard.Forts };<br /> _spreadSecurity.Weights.Add(_leg1Security.Id.ToSecurityId(), Convert.ToDecimal(1));<br /> _spreadSecurity.Weights.Add(_leg2Security.Id.ToSecurityId(), Convert.ToDecimal(-1));<br /><br /> var securityList = new List<Security> { _spreadSecurity };<br /> var portfolioList = new List<Portfolio> { _portfolio };<br /><br />_historyEmulationConnector = new HistoryEmulationConnector(securityList, portfolioList);<br /> _spreadCandleSeries = new CandleSeries(typeof(TimeFrameCandle), _spreadSecurity, TimeSpan.FromMinutes(1)) { BuildCandlesMode = BuildCandlesModes.Build };<br /><br /> ConfigManager.RegisterService<ISecurityProvider>(_historyEmulationConnector);<br /><br /> CandleManager _spreadCandleManager = new CandleManager(_historyEmulationConnector);<br />_spreadCandleManager.Processing += DrawSpreadCandle;<br /><br /> _spreadCandleManager.Start(_spreadCandleSeries); (Исключение - System.InvalidOperationException: "Инструмент S#:SBER@TQBR, Native:,Type: не найден.")<br /><br /><br />private void DrawSpreadCandle(CandleSeries series, Candle candle)<br /> {<br /> Debug.WriteLine(string.Format("series= {0}, candle= {1}, candleseries= {2}", series.Security.Id, candle.Security.Id, _spreadCandleSeries.Security.Id));<br /><br /> var data = new ChartDrawData();<br /> data.Group(candle.OpenTime).Add(_spreadChartCandleElement, candle);<br /><br /> try<br /> {<br /> Chart.Draw(data);<br /> }<br /> catch (Exception ex)<br /> {<br /> }<br /> }<br /><br />Как получить исторический спред этих 2-х инструментов?https://stocksharp.ru/topic/8816/Не правильное исполнение сделок при тестировании на свечах2017-11-10T17:10:36Z2018-01-09T10:34:06ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruСтратегия из примера SampleHistoryTesting. Та что на СМА. <br />Изменил лишь периоды средних, для наглядности. При старых тоже сойдет, но период тестирования больше брать придется.<br /><div class="code"><strong>Код</strong><div class="innercode"><br />_shortMa = new SimpleMovingAverage { Length = 1 };<br />_longMa = new SimpleMovingAverage { Length = 30 };<br /></div></div><br />Инструмент сбер за октябрь 2017, минутки. <br /><a href='https://stocksharp.ru/file/105254/image5334_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105254/image5334_png/?size=500x500" alt="image5334.png" title="image5334.png" /></a><br />Такой эквити на этой стратегии быть не может. Ни стратегия а грааль просто.<br />Как она так сделки исполняет непонятно.<br /><a href='https://stocksharp.ru/file/105255/image7243_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105255/image7243_png/?size=500x500" alt="image7243.png" title="image7243.png" /></a><br />Еще раз хочу обратить внимание это не моя стратегия, а стандартная из примера SampleHistoryTesting.<br /><br />https://stocksharp.ru/topic/8979/RelativeVigorIndex ошибка "Индекс за пределами диапазона"2018-01-04T09:10:34Z2018-01-04T09:12:24Zmegagnomhttps://stocksharp.ru/users/50444/info@stocksharp.ruДобрый день.<br /><br />Пишу свой индикатор, который использует значения из индикатора RelativeVigorIndex. В методе Process() возникает ошибка: System.ArgumentOutOfRangeException: "Индекс за пределами диапазона. Индекс должен быть положительным числом, а его размер не должен превышать размер коллекции.<br />Имя параметра: index"<br /><br />В чем может быть причина?<br />Пример упрощенного кода в котором возникает ошибка:<br /><br /><br /><br /> public class Test : BaseIndicator<br /> {<br /> public override bool IsFormed => _rvi.IsFormed;<br /> private readonly RelativeVigorIndex _rvi = new RelativeVigorIndex(new RelativeVigorIndexAverage { Length = 1 },<br /> new RelativeVigorIndexSignal { Length = 1 });<br /><br /> protected override IIndicatorValue OnProcess(IIndicatorValue input)<br /> {<br /> _rvi.Process(input);<br /> _rvi.Average.Process(input);<br /><br /><br /> if (input.IsFormed)<br /> {<br /> var result = _rvi.Average.GetCurrentValue();<br /> return new DecimalIndicatorValue(this, result);<br /> }<br /><br /> return new DecimalIndicatorValue(this, 0);<br /> }<br /> }https://stocksharp.ru/topic/8960/MarketQuotingStrategy не работает на QUIK Junior2017-12-25T06:22:00Z2017-12-26T15:29:54ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruMarketQuotingStrategy не работает на QUIK Junior, на боевом не проверял.<br />в логе выдает следующее<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_cdec7a4be6b54039a65bd8d1a5c9d9ac');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_cdec7a4be6b54039a65bd8d1a5c9d9ac' style='display:none'><br />MQ_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:44 PM +10:00 Info Strategy Started. [0,-1]. Position 0.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:44 PM +10:00 Info Strategy Started. [0,1]. Position 0.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:44 PM +10:00 Info Quoting to Buy volume 1.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:44 PM +10:00 Info Price of current NULL and best 132.36.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:44 PM +10:00 Info Best bid NULL and best ask NULL.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:44 PM +10:00 Info Registration of new (0xF952C9) order for Buy with price 132.36 and volume 1. <br />MQ_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info New position: (S#:SBER@QJSIM, Native:,Type:Stock, NL0011100043)=0.<br />MQ_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Error Order 47284174 (0xEB01F5) was not registered because ' Not found transaction for this class: "QJSIM".'.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info New position: (S#:SBER@QJSIM, Native:,Type:Stock, NL0011100043)=0.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Position changed by 0. Remaining volume 1.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Order 47284173 (0xF952C9) accepted by the exchange.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Reset registration errors counter from 0 to zero.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Price of current 132.36 and best 132.61.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Best bid NULL and best ask NULL.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Quoting order 47284173 (0xF952C9) to Buy with price 132.36 volume 1.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Reregistration of order 47284173 (0xF952C9) with price 132.36 to price 132.61. <br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Requoting registered for order 47284174 (0xEB01F5) to Buy with price 132.61.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Error Order 47284173 (0xF952C9) was not cancelled because System.InvalidOperationException: Not found transaction for this class: "QJSIM"..<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Error Order 47284174 (0xEB01F5) was not registered because ' Not found transaction for this class: "QJSIM".'.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Error Order 47284174 (0xEB01F5) was not registered because ' Not found transaction for this class: "QJSIM".'.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Current errors count 1. Maximum 100.<br />MQS_SBER@QJSIM_NL0011100043 25-Dec-17 01:08:48 PM +10:00 Info Order 47284174 (0xEB01F5) no longer active.<br /></div><br />То есть она сначала выставляет заявку, потом не может ее перерегистрировать так как "Not found transaction for this class: "QJSIM". Раньше такой проблемы не было.<br />Хотя если руками выставлять и отменять заявку проблемы не возникает.<br />и еще заметил что в PortfolioGrid инструмент отображается как SBER@MICEX а не SBER@QJSIM. Возможно это связанные проблемы.<br /><a href='https://stocksharp.ru/file/105485/image9161_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105485/image9161_png/?size=500x500" alt="image9161.png" title="image9161.png" /></a><br />https://stocksharp.ru/topic/8922/правила Security.WhenLastTradePriceMore и Security.WhenLastTradePriceLess2017-12-11T09:29:24Z2017-12-26T12:03:34ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ru1) При следующем коде WhenLastTradePriceLess вообще ни разу не сработало, WhenLastTradePriceMore срабатывает как то избирательно и очень редко. Хотя в connector.NewTrade я вижу, что сделки приходят. Как я понимаю они при таких условиях все сделки мне выдавать должны.<br />Коннектор КВИК.<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:c#">
//-----------------------------------------------------------------------------------------------------------------------------------
connector.NewTrade += (t) =>
{
if (t.Security == security)
{
}
};
//-----------------------------------------------------------------------------------------------------------------------------------
security.WhenLastTradePriceLess(connector, connector, new Unit(999999999m)).Do((a) =>
{
}).Apply();
security.WhenLastTradePriceMore(connector, connector, new Unit(0.1m)).Do((a) =>
{
}).Apply();
</pre>
</div></div><br /><br />2) Судя по исходникам правила Security.WhenLastTradePriceMore и Security.WhenLastTradePriceLess будут срабатывать не только при получении новой сделки но и при любом изменении инструмента, даже если новой сделки не было. Чем обосновано такое решение?<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_2db189a68b0e45f09b0c842f46263134');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_2db189a68b0e45f09b0c842f46263134' style='display:none'><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:c#">
public static MarketRule<Security, Security> WhenBestAskPriceLess(this Security security, IConnector connector, Unit price)
{
return CreateSecurityCondition(security, connector, Level1Fields.BestAskPrice, price, true);
}
public static MarketRule<Security, Security> WhenLastTradePriceMore(this Security security, IConnector connector, IMarketDataProvider provider, Unit price)
{
return CreateLastTradeCondition(security, connector, provider, price, false);
}
//-----------------------------------------------------------------------------------------------------------------------------------
private static SecurityChangedRule CreateSecurityCondition(Security security, IConnector connector, Level1Fields field, Unit offset, bool isLess)
{
if (security == null)
throw new ArgumentNullException(nameof(security));
if (offset == null)
throw new ArgumentNullException(nameof(offset));
if (offset.Value == 0)
throw new ArgumentException(LocalizedStrings.Str1051, nameof(offset));
if (offset.Value < 0)
throw new ArgumentException(LocalizedStrings.Str1052, nameof(offset));
var price = (decimal?)connector.GetSecurityValue(security, field);
if (price == null && offset.Type != UnitTypes.Limit)
throw new InvalidOperationException(LocalizedStrings.Str1053);
if (isLess)
{
var finishPrice = (decimal)(offset.Type == UnitTypes.Limit ? offset : price - offset);
return new SecurityChangedRule(security, connector, s =>
{
var quote = (decimal?)connector.GetSecurityValue(s, field);
return quote != null && quote < finishPrice;
});
}
else
{
var finishPrice = (decimal)(offset.Type == UnitTypes.Limit ? offset : price + offset);
return new SecurityChangedRule(security, connector, s =>
{
var quote = (decimal?)connector.GetSecurityValue(s, field);
return quote != null && quote > finishPrice;
});
}
//-----------------------------------------------------------------------------------------------------------------------------------
private sealed class SecurityLastTradeRule : SecurityRule<Security>
{
private readonly Func<Security, bool> _condition;
public SecurityLastTradeRule(Security security, IConnector connector, Func<Security, bool> condition)
: base(security, connector)
{
if (condition == null)
throw new ArgumentNullException(nameof(condition));
_condition = condition;
Name = LocalizedStrings.Str1049 + " " + security;
Connector.SecurityChanged += OnSecurityChanged;
Connector.NewTrade += OnNewTrade;
}
private void OnSecurityChanged(Security security)
{
if (CheckLastTrade(security))
Activate(security);
}
private bool CheckLastTrade(Security security)
{
if (Security is BasketSecurity basket)
{
return basket.Contains(SecurityProvider, security) && _condition(security);
}
else
{
return security == Security && _condition(Security);
}
}
private void OnNewTrade(Trade trade)
{
if (CheckTrades(Security, trade))
Activate(trade.Security);
}
private bool CheckTrades(Security security, Trade trade)
{
return security is BasketSecurity basket
? basket.Contains(SecurityProvider, trade.Security) && _condition(trade.Security)
: trade.Security == security && _condition(trade.Security);
}
protected override void DisposeManaged()
{
Connector.NewTrade -= OnNewTrade;
Connector.SecurityChanged -= OnSecurityChanged;
base.DisposeManaged();
}
}
</pre>
</div></div><br /></div><br />https://stocksharp.ru/topic/8958/Сделки дочерней стратегии MarketQuotingStrategy, не считаются сделками родительской стратегии2017-12-24T07:35:50Z2017-12-24T08:14:03ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruСделки дочерней стратегии MarketQuotingStrategy, не считаются сделками родительской стратегии.<br />Тоесть, если я использую<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:c#">
var childStrategy = new MarketQuotingStrategy(Sides.Buy, 1);
ChildStrategies.Add(childStrategy);
</pre>
</div></div><br />то в сделки совершенные MarketQuotingStrategy не будут приходить через событие _strategy.NewMyTrade родительской стратегии. <br />PNL тоже не считается.https://stocksharp.ru/topic/8944/Конференция2017-12-18T15:30:57Z2017-12-21T10:24:51ZДенисhttps://stocksharp.ru/users/95977/info@stocksharp.ruЗдравствуйте!!!<br />Мне пришло письмо от Стокшарп с предложением участия в конференции алготрейдеров. В данной конференции поучаствовать не получилось. Хотел бы посмотреть видео данной конференции. Если у Вас имеется данное видео, сообщите, пожалуйста, где можно его посмотреть?https://stocksharp.ru/topic/8951/Как в Visual Studio 2017 получить проект с исходными кодами S#.API?2017-12-21T01:07:11Z2017-12-21T01:07:11ZAlekseyStockSharphttps://stocksharp.ru/users/100193/info@stocksharp.ruФайл солюшена в распакованной папке исходных кодов я не нашел, а Nuget ничего не загружает:<br /><br /><div class="code"><strong>Код</strong><div class="innercode">PM> Install-Package StockSharp -Version 4.3.28 <br />GET https://api.nuget.org/v3/registration3-gz-semver2/stocksharp/index.json<br />OK https://api.nuget.org/v3/registration3-gz-semver2/stocksharp/index.json 860 мс<br />Идет восстановление пакетов для C:\Users\Денис\source\repos\StockSharp\StockSharp\StockSharp.csproj...<br />Install-Package : Обнаружен цикл. <br />StockSharp -> StockSharp (>= 4.3.28).<br />строка:1 знак:1<br />+ Install-Package StockSharp -Version 4.3.28<br />+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />+ CategoryInfo : NotSpecified: (:) [Install-Package], Exception<br />+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand<br /><br />Install-Package : Сбой при восстановлении пакета. Откат изменений пакета для «StockSharp».<br />строка:1 знак:1<br />+ Install-Package StockSharp -Version 4.3.28<br />+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~<br />+ CategoryInfo : NotSpecified: (:) [Install-Package], Exception<br />+ FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand<br /><br />Прошло времени: 00:00:01.7404228</div></div><br /><br />Не добавлять же все файлы в проект руками...https://stocksharp.ru/topic/8950/Oткуда можно скачать бесплатно / платно историю по стаканам инструментов фондового рынка?2017-12-21T00:59:15Z2017-12-21T00:59:15ZAlekseyStockSharphttps://stocksharp.ru/users/100193/info@stocksharp.ru Я перепробовал все возможные источники в S#.Data, но так и не добился результата.<br /><br />Я правильно понимаю, что если в качестве источника исторических данных выступает торговый терминал, то в качестве истории можно получить в лучшем случае тики (потому что передавать старые стаканы в терминал для брокера нет никакой необходимости)?https://stocksharp.ru/topic/8942/Примеры SampleHistoryTesting и SampleHistoryTestingParallel + вопрос по Commission2017-12-17T18:01:43Z2017-12-20T06:14:31ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ru1) SampleHistoryTestingParallel <br />Пример не работает, вернее само BatchEmulation работает. Вот стратегия которая там есть не работает, если вместо лимиток поставить маркет заявки то все нормально становится.<br />2) SampleHistoryTesting <br />В примере не рассчитывается комиссия. Хотя в примере расчет комиссии подразумевается. И это единственный пример где комиссия упоминается.<br />Возникает вопрос, как правильно рассчитывать комиссию?https://stocksharp.ru/topic/3465/Установка S# Studio2013-03-13T14:41:11Z2017-12-16T19:16:53Zesperhttps://stocksharp.ru/users/5990/info@stocksharp.ruДля установки S# Studio необходимо:<br /><ol><li><a href="http://stocksharp.com/products/download/" title="http://stocksharp.com/products/download/">Скачать архив</a> с системой автообновления с сайта S#<br /><div align="center"><a href='https://stocksharp.ru/file/102264/a0_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102264/a0_jpg/?size=500x500" alt=""/></a></div><br /><li>Распаковать архив в директорию, откуда будет запускаться S# Studio<br /><div align="center"><a href='https://stocksharp.ru/file/102265/a1_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102265/a1_jpg/?size=500x500" alt=""/></a></div><br /><div align="center"><a href='https://stocksharp.ru/file/102266/a2_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102266/a2_jpg/?size=500x500" alt=""/></a></div><br /><li>Запустить Studio.Update.exe и выбрать обновить текущую версию<br /><div align="center"><a href='https://stocksharp.ru/file/102267/a3_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102267/a3_jpg/?size=500x500" alt=""/></a></div><br /><div align="center"><a href='https://stocksharp.ru/file/102268/a4_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102268/a4_jpg/?size=500x500" alt=""/></a></div><br /><li>Начнется загрузка последней доступной версии S# Studio<br /><div align="center"><a href='https://stocksharp.ru/file/102269/a5_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102269/a5_jpg/?size=500x500" alt=""/></a></div><br /><div align="center"><a href='https://stocksharp.ru/file/102270/a6_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102270/a6_jpg/?size=500x500" alt=""/></a></div><br /><li>После завершения загрузки необходимо запустить Studio.exe из директории, в которую был распакован архив в п.2<br /><div align="center"><a href='https://stocksharp.ru/file/102271/a7_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/102271/a7_jpg/?size=500x500" alt=""/></a></div><br /></ol>https://stocksharp.ru/topic/8926/Алгостратегии на американских акциях. В России!2017-12-12T15:19:18Z2017-12-12T16:50:03ZЮрий Басанговhttps://stocksharp.ru/users/7/info@stocksharp.ru<div align="center"><a href='https://stocksharp.ru/file/105429/algovecher_jpg/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105429/algovecher_jpg/?size=500x500" alt="logo" title="logo" /></a></div><br /><br />Добрый день, друзья!<br />С удовольствием анонсируем уникальное событие, которое состоится уже в этот четверг - <b><span style="color:green">14 декабря в 19:00</span></b>. В этот день на Санкт-Петербургской бирже разработчики торговых роботов соберутся, чтобы рассказать об успешных кейсах торговли американскими акциями и поделиться опытом технологической интеграции. <br /><br />В первой части встречи участники представят свои наработки в области алгоритмической торговли, а во второй, вместе с другими участниками в формате круглого стола обсудят следующие темы:<br /> • Стратегии, обыгравшие индекс в 2017 году.<br /> • Акции и отрасли, которые будут двигаться быстрее рынка в 2018 году.<br /> • Идеи использования ETF в алготорговле на волатильном рынке.<br /> • Планы разработки и реализации стратегий на рынке иностранных ценных бумаг Санкт-Петербургской биржи.<br /><br />Принять участие в мероприятии возможно в двух форматах:<br />- <u>Очно</u>. Только для обладателей <b>любой </b>нашей корпоративной лицензии. <a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAABoPEfQKhnnrfPPnV2dkaMZxSM9_JePITaPpdtv--tOPZNjZ7sLMNFITVbmTMWag9Q" title="https://spbexchange.timepad.ru/event/628052/">Регистрация по ссылке</a><br />- <u>В формате видеоконференции</u>. Мероприятие будет идти в Facebook аккаунтах Санкт-Петербургской биржи и журнала Financial One. Приглашаем Вас принять участие в дискуссии!<br /><a target="_blank" rel="nofollow" href="https://stocksharp.ru/away/?u=AQAAAAAAAAAAtji3-65c6dBFwx_goIOOafTbgwrXkBYpVm4yIAL9b_N8QXyRxJ7dWd4TJd6ELgQ" title="http://investor.spbexchange.ru/ru/algorithm/">Подробнее о трансляции по ссылке</a><br /><br /><br />https://stocksharp.ru/topic/8877/как заставить StatisticParameterGrid обновляться2017-11-29T18:32:39Z2017-12-12T15:12:17ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruОбратил внимание на непонятное поведение StatisticParameterGrid. Если его на экране нет, спрятан где нибудь в закладках, то при переходе на него он показывает какие то данные похожие на актуальные, но дальше не обновляется. <br />Код используется как в примерах<br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:c#">
StatisticParameterGrid.Parameters.Clear();
StatisticParameterGrid.Parameters.AddRange(_firstStrategy.StatisticManager.Parameters);
</pre>
</div></div><br />На первом рисунке сначала протестировал стратегию, потом перешел на вкладку статистика, статистику видно.<br /><a href='https://stocksharp.ru/file/105350/image1508_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105350/image1508_png/?size=500x500" alt="image1508.png" title="image1508.png" /></a><br />На втором сначала перешел на вкладку статистика, потом запустил тестирование, статистики нет.<br /><a href='https://stocksharp.ru/file/105351/image8979_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105351/image8979_png/?size=500x500" alt="image8979.png" title="image8979.png" /></a><br />И в первом и втором случае, условия одинаковые, тестирование прошло до конца. Пример стандартный SampleHistoryTesting<br />Вопрос, как выводить актуальную статистку?<br />https://stocksharp.ru/topic/8914/Формат имени файлов при Экспорте с Hydra ?2017-12-09T23:26:02Z2017-12-09T23:29:08ZChixUKhttps://stocksharp.ru/users/100134/info@stocksharp.ruЯ чего-то или туплю, кто знает как сделать чтобы у Утилиты Экспорт, имя выгружаемого файла соответствовало формату Тикер.csv к примеру AAPL.csv ?<br /><br />Автоматически генерируемое <a href="https://stocksharp.ru/away/?u=AQAAAAAAAAAC9BBKzZTDWyz9Iof0pVRYX-grIAcutg-4EC7lWGx6TCX1HKRIdASZnp3L_zHbwtlIe4qUnraZEShki5s99RLNxlAfKCYhzTnevaPChIPM5Q">candles_TimeFrameCandle_00_01_00_ABC@XNYS_2017_12_04_2017_12_08.csv</a> совсем не катит, ни для Нинзи, Мультичартса и АМИ.<br /><br />Речь идет о выгрузке сотен тикеров, и в ручную править имена файлов как-то жесть.https://stocksharp.ru/topic/8901/Не срабатывает СandleManager.Processing в версии 4.3.282017-12-06T20:23:57Z2017-12-09T12:58:10ZКонстантинhttps://stocksharp.ru/users/98279/info@stocksharp.ruДобрый день. Перешёл с версии 4.3.25 на 4.3.28. Просто подменил библиотеки StockSharp и Ecng. В результате перестали приходить свечи, то есть событие СandleManager.Processing не срабатывает.<br />Накидал по быстрому код:<br /><div class="code"><strong>Код</strong><div class="innercode"><br />using Ecng.Common;<br />using StockSharp.Algo.Candles;<br />using StockSharp.BusinessEntities;<br />using StockSharp.Quik;<br />using System;<br />using System.Net;<br />using System.Security;<br /><br />namespace SimpleCandle<br />{ class Program<br /> {<br /> private static QuikTrader _trader;<br /> private static Security _security;<br /><br /> private static void Main(string[] args)<br /> {<br /> _trader = new QuikTrader()<br /> {<br /> LuaLogin = "Quik",<br /> LuaPassword = "Quik".To<SecureString>(),<br /> LuaFixServerAddress = "127.0.0.1:5001".To<EndPoint>(),<br /> };<br /><br /> _trader.NewSecurity += security =><br /> {<br /> if (security.Id != "SBER@QJSIM") return;<br /><br /> _security = security;<br /> Console.WriteLine($"Инструмент {security.Name} получен!");<br /> Start();<br /> };<br /> _trader.Connect();<br /> Console.ReadKey();<br /> }<br /><br /> private static void Start()<br /> {<br /> var candleManager = new CandleManager(_trader);<br /> candleManager.Processing += (series, candle) =><br /> {<br /> Console.WriteLine(<br /> $"Новая свеча {candle.Security.Code} => {candle.CloseTime} => {candle.ClosePrice} => {candle.TotalVolume}");<br /> };<br /> candleManager.Start(new CandleSeries(typeof(TimeFrameCandle), _security, TimeSpan.FromSeconds(1)));<br /> }<br /><br /> }<br />}<br /></div></div><br /><br />Это баг или я что то не так делаю?https://stocksharp.ru/topic/8899/Как подключить S#.Designer2017-12-05T17:23:34Z2017-12-05T17:23:34ZДмитрийhttps://stocksharp.ru/users/100096/info@stocksharp.ruНа обучающем видео есть вкладка финам, у меня в установленной программе ее нет. Как подключить программу для скачивания исторических данных?https://stocksharp.ru/topic/8840/Поведение MarketDepth в SampleRealTimeEmulation2017-11-19T11:11:48Z2017-12-05T11:22:49ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruЕсли в примере SampleRealTimeEmulation закоментировать строчку _connector.RegisterMarketDepth(security);<br /><a href='https://stocksharp.ru/file/105292/image20_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105292/image20_png/?size=500x500" alt="image20.png" title="image20.png" /></a><br />То он продолжает генерировать стакан. Возникает вопрос.<br />1) Это нормальное поведение для RealTimeEmulationTrader?<br />2) Если это нормальное поведение, то как отключить генерацию стакана?https://stocksharp.ru/topic/8898/тестирование на тиках HistoryEmulationConnector2017-12-05T07:31:24Z2017-12-05T10:07:01ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruИнструмент, портфель, коннектор, свечи делаю так<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_6720eeddadb84e7e916fce455c762f69');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_6720eeddadb84e7e916fce455c762f69' style='display:none'><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:c#">
_security = new Security
{
Id = "BRZ7@FORTS",
Code = "BRZ7",
PriceStep = 0.01m,
Board = ExchangeBoard.Micex
};
_portfolio = new Portfolio { Name = "test account", BeginValue = 1000000 };
StorageRegistry storageRegistry = new StorageRegistry
{
DefaultDrive = new LocalMarketDataDrive(@"d:\S#History\"),
};
_connector = new HistoryEmulationConnector(new[] { _security }, new[] { _portfolio })
{
HistoryMessageAdapter =
{
StorageRegistry=storageRegistry,
StorageFormat = StorageFormats.Csv,
StartDate = DateTimePickerBegin.Value.Value.ChangeKind(DateTimeKind.Utc),
StopDate = DateTimePickerEnd.Value.Value.ChangeKind(DateTimeKind.Utc),
}
};
_connector.LogLevel = LogLevels.Info;
_logManager.Sources.Add(_connector);
_candleSeries = new CandleSeries(CandleSettingsEditor.Settings.CandleType, _security, CandleSettingsEditor.Settings.Arg)
{
BuildCandlesMode = BuildCandlesModes.Build,
BuildCandlesFrom = MarketDataTypes.Trades,
};
</pre>
</div></div><br /></div><br />стратегия самая простая если свеча красная покупаем по рынку, если зеленая продаем по рынку.<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_8820fb825dcf4495bef96ad7bcf458aa');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_8820fb825dcf4495bef96ad7bcf458aa' style='display:none'><br /><div class="code"><strong>Код</strong><div class="innercode"><pre class="brush:c#">
public class MyStrategy : Strategy
{
CandleSeries _candleSeries;
private ICandleManager _candleManager;
public MyStrategy(CandleSeries candleSeries)
{
_candleSeries = candleSeries;
}
protected override void OnStarted()
{
_candleManager = this.GetCandleManager();
_candleManager.WhenCandlesFinished(_candleSeries).Do(_candleManager_Processing).Apply(this);
base.OnStarted();
}
private void _candleManager_Processing(Candle candle)
{
if (candle.OpenPrice < candle.ClosePrice && Position >= 0)
{
RegisterOrder(this.SellAtMarket(Volume + Math.Abs(Position)));
}
else
if (candle.OpenPrice > candle.ClosePrice && Position <= 0)
{
RegisterOrder(this.BuyAtMarket(Volume + Math.Abs(Position)));
}
}
}
</pre>
</div></div><br /></div><br />В сделках вижу что есть отмененные заявки. <br /><a href='https://stocksharp.ru/file/105386/image8134_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105386/image8134_png/?size=500x500" alt="image8134.png" title="image8134.png" /></a><br />А в логах говорит, что <br /><a href='https://stocksharp.ru/file/105387/image7371_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105387/image7371_png/?size=500x500" alt="image7371.png" title="image7371.png" /></a><br />или так<br /><a href='https://stocksharp.ru/file/105388/image8988_png/' class='lightview' data-lightview-options="skin: 'mac'" data-lightview-group='mixed'><img src="https://stocksharp.ru/file/105388/image8988_png/?size=500x500" alt="image8988.png" title="image8988.png" /></a><br />Вопросы<br />Как так происходит? <br />Почему на эмуляции неудовлетворенна заявка с таким маленьким объемом? <br />Почему в ошибке он говорит что объем 0? Я проверял много раз и объем там не может быть 0.<br /><br />Такому тестированию доверять как то не получается...https://stocksharp.ru/topic/8897/Эмуляция недостающих свечей2017-12-05T01:45:09Z2017-12-05T10:05:30ZДмитрий_https://stocksharp.ru/users/62269/info@stocksharp.ruЗдравствуйте.<br /><br />Качаю исторические данные для 2-х инструментов.<br />Используя два инструмента - хочу создать индекс.<br />Иногда, количество 1-мин свечей одного инструмента != количеству 1-мин свечей другого инструмента.<br /><br />И дабы не создавать кривой индекс<br />Вопросы:<br />1) Содержит S# API функционал для эмуляции недостающих свечей?<br />2) Как данную проблему решают профессиональные алготрейдеры?<br /><br />https://stocksharp.ru/topic/8874/Проблемы подключения к Hydra через Fix 2017-11-28T13:07:48Z2017-11-28T17:12:26ZИван З.https://stocksharp.ru/users/6502/info@stocksharp.ruHydra со всеми обновлениями. <br />1) Не приходят инструменты при Trader.LookupSecurities(new Security());<br />Подключение есть. У Гидры в логах пишет предупреждение Security is not specified. Ошибок нет.<br />С пол года назад все работало.<br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_03b4ae4503284dbda911f57ec8baa6f4');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_03b4ae4503284dbda911f57ec8baa6f4' style='display:none'><br />S#.Data (Hydra) 11/28/2017 7:41:41 PM +10:00 Info S#.Data (Hydra) v4.4.0.0<br />FixServer 11/28/2017 7:41:52 PM +10:00 Info Server 0.0.0.0:5002 started.<br />FixServer 11/28/2017 7:41:52 PM +10:00 Info FixServer started.<br />FixServer 11/28/2017 7:41:52 PM +10:00 Info FixServer outgoing thread started.<br />FixServer 11/28/2017 7:42:26 PM +10:00 Info Connected '127.0.0.1:58502' to '0.0.0.0:5002'.<br />FixServer 11/28/2017 7:42:26 PM +10:00 Info Received first byte from '127.0.0.1:58502'.<br />FixServer 11/28/2017 7:42:26 PM +10:00 Info From : Logon<br />FixServer 11/28/2017 7:42:26 PM +10:00 Info Client hydra_user (127.0.0.1:58502) authorized.<br />FixServer 11/28/2017 7:42:28 PM +10:00 Info Sending Logon to client.<br />FixServer 11/28/2017 7:42:28 PM +10:00 Info Session started.<br />FixServer 11/28/2017 7:42:30 PM +10:00 Info From hydra_user 127.0.0.1:58502: SecurityListRequest<br />FixServer 11/28/2017 7:42:30 PM +10:00 Info From hydra_user 127.0.0.1:58502: OrderMassStatusRequest<br />FixServer 11/28/2017 7:42:30 PM +10:00 Info From hydra_user 127.0.0.1:58502: SecurityListRequest<br />FixServer 11/28/2017 7:42:30 PM +10:00 Warning Security is not specified.<br /></div><br />2) После Trader.Disconnect();<br />Повторно подключится к гидре не удается, в Trader.ConnectionError приходит следующая ошибка.<br /><br />Connection process was interrupted because of an unexpected disconnection.<br />Unable to write data to the transport connection: An established connection was aborted by the software in your host machine.<br /><br /><div class='spoilertitle'><input type='button' value='Показать спойлер' class='btn btn-primary' onclick="toggleSpoiler(this, 'spolier_03de37700b8f494391f62a6d96ef5afe');" title='Показать спойлер' /></div><div class='spoilerbox' id='spolier_03de37700b8f494391f62a6d96ef5afe' style='display:none'><br />S#.Data (Hydra) 11/28/2017 7:52:38 PM +10:00 Info S#.Data (Hydra) v4.4.2.0<br />FixServer 11/28/2017 7:52:51 PM +10:00 Info Server 0.0.0.0:5002 started.<br />FixServer 11/28/2017 7:52:51 PM +10:00 Info FixServer started.<br />FixServer 11/28/2017 7:52:51 PM +10:00 Info FixServer outgoing thread started.<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info Connected '127.0.0.1:59518' to '0.0.0.0:5002'.<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info Received first byte from '127.0.0.1:59518'.<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info Connected '127.0.0.1:59519' to '0.0.0.0:5002'.<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info Received first byte from '127.0.0.1:59519'.<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info From : Logon<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info From : Logon<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info Client hydra_user (127.0.0.1:59519) authorized.<br />FixServer 11/28/2017 7:53:06 PM +10:00 Info Client hydra_user (127.0.0.1:59518) authorized.<br />FixServer 11/28/2017 7:53:08 PM +10:00 Info Sending Logon to client.<br />FixServer 11/28/2017 7:53:08 PM +10:00 Info Sending Logon to client.<br />FixServer 11/28/2017 7:53:08 PM +10:00 Info Session started.<br />FixServer 11/28/2017 7:53:08 PM +10:00 Info Session started.<br />FixServer 11/28/2017 7:53:08 PM +10:00 Info From hydra_user 127.0.0.1:59519: SecurityListRequest<br />FixServer 11/28/2017 7:53:08 PM +10:00 Info From hydra_user 127.0.0.1:59518: OrderMassStatusRequest<br />FixServer 11/28/2017 7:53:08 PM +10:00 Warning Security is not specified.<br />FixServer 11/28/2017 7:53:17 PM +10:00 Info From hydra_user 127.0.0.1:59518: Logout<br />FixServer 11/28/2017 7:53:17 PM +10:00 Info From hydra_user 127.0.0.1:59519: Logout<br />FixServer 11/28/2017 7:53:17 PM +10:00 Info Disconnect hydra_user (127.0.0.1:59518)<br />FixServer 11/28/2017 7:53:17 PM +10:00 Info Disconnect hydra_user (127.0.0.1:59519)<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Connected '127.0.0.1:59563' to '0.0.0.0:5002'.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Received first byte from '127.0.0.1:59563'.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info From : Logon<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Client hydra_user (127.0.0.1:59563) authorized.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Sending Logon to client.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Session started.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Connected '127.0.0.1:59564' to '0.0.0.0:5002'.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Received first byte from '127.0.0.1:59564'.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info From : Logon<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Client hydra_user (127.0.0.1:59564) authorized.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Disconnect hydra_user (127.0.0.1:59563)<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Sending Logon to client.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Session started.<br />FixServer 11/28/2017 7:53:36 PM +10:00 Error System.IO.IOException: Unable to read data from the transport connection: A blocking operation was interrupted by a call to WSACancelBlockingCall. ---> System.Net.Sockets.SocketException: A blocking operation was interrupted by a call to WSACancelBlockingCall<br /> at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)<br /> --- End of inner exception stack trace ---<br /> at System.Net.Sockets.NetworkStream.Read(Byte[] buffer, Int32 offset, Int32 size)<br /> at Ecng.Serialization.BinaryHelper.ReadBytes(Stream stream, Byte[] buffer, Int32 len, Int32 pos)<br /> at StockSharp.Fix.Native.BaseFixReader.ReadByte()<br /> at StockSharp.Fix.Native.TextFixReader.ReadTag()<br /> at #=qECbQYrnCUhCERgXSneZKcsfqD7iSLMz3vhOhKJvt5pUZjAjcYhJzkzDN7URjtcPz.#=qK5MIUfS2gj4q$9kVDfLA6w==(IFixReader #=qP2e$994s2t_hrClE4jL2xw==, FixTags #=q$Mgx84yaYFY$VGlSefJEcg==)<br /> at #=qECbQYrnCUhCERgXSneZKcsfqD7iSLMz3vhOhKJvt5pUZjAjcYhJzkzDN7URjtcPz.#=qnQz65V1hSjv7Za4Hu6Nvtw==(IFixReader #=qP2e$994s2t_hrClE4jL2xw==, Boolean #=qrWSUPqUkhs9_5vYvQLxXllpJ3N7fWgp$f$nXIUfbOMI=, String #=qVAZasEIKImPf_tmVsmAv0t6CLQQ5nU2gPAaUqmSK2wk=)<br /> at StockSharp.Fix.FixServer.#=q2oyo7MU$2AxjJdNknh2rVQ==(IFixReader #=qP2e$994s2t_hrClE4jL2xw==, FixSession[] #=qzsL33j8BZAesfcdiGtibxw==, #=qENMrL9OvFG4yJ5oX$GQk4sUdqp32hSd4iKkZMCc44ZfZ02p_Nxww2SAnTPN5Votu& #=qJWPLcnjelO$jE$im53AK9g==, TcpClient #=q2noQdgv3H4k_vOEqIWSB6w==, EndPoint #=qc8B1ratO37irYZ3U9HNS6w==, String& #=qhhxyp7GJm3H2m7cyE7N4yQ==, Boolean& #=qYM_AMtaiN2bvAMgxnwWRow==)<br /> at StockSharp.Fix.FixServer.#=qPtKoq0t9t$3urUjq81dORPJNiMhhUvRYsxQHJbOPBFg=.#=q9foryVv8CbzoZJ16TJbpUA==(IAsyncResult #=qRmghNt46RgH54v0HlSGj4A==)<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info Disconnect hydra_user (127.0.0.1:59563)<br />FixServer 11/28/2017 7:53:36 PM +10:00 Info From hydra_user 127.0.0.1:59564: SecurityListRequest<br /><br /></div><br />Приходится перезагружать гидру<br />