Создание WeightedIndexSecurity из исторических данных (получить исторический спред 2-х инструментов)

Создание WeightedIndexSecurity из исторических данных (получить исторический спред 2-х инструментов)
Atom
12/21/2017
Дмитрий_


Здравствуйте.

Подскажите, как правильно создать WeightedIndexSecurity из исторических данных?

Имею:
Security _leg1Security = new Security() { Id = "SBER@TQBR" };
Security _leg2Security = new Security() { Id = "SBERP@TQBR" };

DateTime from = new DateTime(2017, 1, 3).ChangeKind(DateTimeKind.Utc);
DateTime to = new DateTime(2017, 1, 4).ChangeKind(DateTimeKind.Utc);

private TimeSpan _timeFrame = TimeSpan.FromMinutes(1);

В переменных _leg1TimeFrameCandles и _leg2TimeFrameCandles исторические 1-мин свечи, загруженные из локального хранилища.

_portfolio = new Portfolio
{
Name = "Test Account",
BeginValue = 1000000,
};

WeightedIndexSecurity _spreadSecurity = new WeightedIndexSecurity() { Id = "Index1", Board = ExchangeBoard.Forts };
_spreadSecurity.Weights.Add(_leg1Security.Id.ToSecurityId(), Convert.ToDecimal(1));
_spreadSecurity.Weights.Add(_leg2Security.Id.ToSecurityId(), Convert.ToDecimal(-1));

var securityList = new List<Security> { _spreadSecurity };
var portfolioList = new List<Portfolio> { _portfolio };

_historyEmulationConnector = new HistoryEmulationConnector(securityList, portfolioList);
_spreadCandleSeries = new CandleSeries(typeof(TimeFrameCandle), _spreadSecurity, TimeSpan.FromMinutes(1)) { BuildCandlesMode = BuildCandlesModes.Build };

ConfigManager.RegisterService<ISecurityProvider>(_historyEmulationConnector);

CandleManager _spreadCandleManager = new CandleManager(_historyEmulationConnector);
_spreadCandleManager.Processing += DrawSpreadCandle;

_spreadCandleManager.Start(_spreadCandleSeries); (Исключение - System.InvalidOperationException: "Инструмент S#:SBER@TQBR, Native:,Type: не найден.")


private void DrawSpreadCandle(CandleSeries series, Candle candle)
{
Debug.WriteLine(string.Format("series= {0}, candle= {1}, candleseries= {2}", series.Security.Id, candle.Security.Id, _spreadCandleSeries.Security.Id));

var data = new ChartDrawData();
data.Group(candle.OpenTime).Add(_spreadChartCandleElement, candle);

try
{
Chart.Draw(data);
}
catch (Exception ex)
{
}
}

Как получить исторический спред этих 2-х инструментов?


1 2  >
Support

Avatar
Date: 12/26/2017
Reply


Добрый день.

Могли бы вы конкретизировать ваш вопрос? Если ваш вопрос как создавать индекс, то вы его задаёте правильно. Ещё можно использовать ExpressionIndexSecurity.
Thanks:

Дмитрий_

Avatar
Date: 12/26/2017
Reply


Ок.

Проблема на строчке
_spreadCandleManager.Start(_spreadCandleSeries); (Исключение - System.InvalidOperationException: "Инструмент S#:SBER@TQBR, Native:,Type: не найден.")

1 вопрос. Как убрать исключение?

2 вопрос. Как получить переменную _spreadTimeFrameCandles = _leg1TimeFrameCandles - _leg2TimeFrameCandles ?
(_leg1TimeFrameCandles и _leg2TimeFrameCandles исторические 1-мин свечи, загруженные из локального хранилища.)

Возможно разрешив вопрос 1, вопрос 2 отпадёт.
Thanks:

Support

Avatar
Date: 12/27/2017
Reply


В конструктор HistoryConnector передаётся список доступных инструментов. Среди них нет необходимого. Поэтому возникает ошибка.

Так же вы можете напрямую загрузить свечи по индексу из хранилища.
Thanks:

Дмитрий_

Avatar
Date: 12/27/2017
Reply


1) "В конструктор HistoryConnector передаётся список доступных инструментов. Среди них нет необходимого. Поэтому возникает ошибка."
Перепроверил, все инструменты есть.
Снимок.PNG
Снимок1.PNG

Исключение
Снимок3.PNG

Код _spreadSecurity, _historyEmulationConnector, _spreadCandleSeries, _spreadCandleManager.
Снимок2.PNG

2) "Так же вы можете напрямую загрузить свечи по индексу из хранилища."
Вы имеете ввиду передачу загруженных свечей в _historyEmulationConnector, используя _historyEmulationConnector.RegisterHistorySource?


Снимок1.PNG 8 KB (594) Снимок2.PNG 46 KB (667) Снимок.PNG 37 KB (630) Снимок3.PNG 24 KB (566)
Thanks:

Support

Avatar
Date: 12/28/2017
Reply


Можно загрузить данные напрямую из хранилища, используя Storage API
Thanks:

Дмитрий_

Avatar
Date: 12/28/2017
Reply


Данные Sber и sberp, я загружаю из локального хранилища. Но данных их спреда (разницы) у меня в хранилище нет.
Thanks:

Дмитрий_

Avatar
Date: 12/28/2017
Reply


Мне нужно сохранить данные спреда в локальном хранилище?
Thanks:

Support

Avatar
Date: 12/28/2017
Reply


Вы можете строить спред напрямую из хранящихся у вас данных. Storage API умеет строить сразу для индексов данные их компонентов.
Thanks: Дмитрий_

Дмитрий_

Avatar
Date: 12/28/2017
Reply


Возможно я что-то просмотрел в документации. Будьте добры, скиньте пожалуйста ссылку на документацию или на код.
Thanks:

Support

Avatar
Date: 12/31/2017
Reply


http://doc.stocksharp.ru...0-a7c7-0979dba1ad0a.htm

Индексные инструменты поддерживаются как обычные.
Thanks:
1 2  >

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

loading
clippy