Сделал все по Вашей рекомендации.
Создал отдельный метод:
public IEnumerable<Message> GetTrades(DateTimeOffset d)
{
var trades = _historyTicks.Where(ht => ((ht.ServerTime.Date == d.Date) &&
(ht.ServerTime.TimeOfDay == d.TimeOfDay)));
return trades;
}
Изменил:
_historyConnector.RegisterHistorySource(_selSecurity, MarketDataTypes.Trades, null, GetTrades);
Поставил внутри метода GetTrades точку останова, но программа в него не заходит
Сделал дополнительную подписку на событие коннектора появления "нового сообщения" и вывод всех приходящих сообщений в окно Debug
historyConnector.NewMessage += (m) =>
{
var m1 = m;
Debug.Print(m.ToString());
};
После вызова _historyConnector.Connect();
в переменную m приходит первое сообщение:
Error,T(L)=0001/01/01 00:00:00.000,Error=Не найден подходящий адаптер для -8.
затем последовательно приходят следующие сообщения:
Connect,T(L)=0001/01/01 00:00:00.000
Connect,T(L)=2017/03/13 09:59:42.000
PortfolioLookupResult,T(L)=2017/03/13 09:59:42.000,Orig=1
OrderStatus,T(L)=2017/03/13 09:59:42.000,Sec=S#:@, Native:,Type:,OriginTransId=0,TransId=2,OrderId=,TransId=2
PortfolioChange,T(L)=2017/03/13 09:59:42.000,T(S)=0001/01/01 00:00:00.000,P=test account,Changes=[RealizedPnL, 0],[VariationMargin, 0],[CurrentValue, 1000000],[BlockedValue, 0],[Commission, 0]
Board,T(L)=2017/03/13 09:59:42.000,Code=TQBR,Ex=MOEX
Security,T(L)=2017/03/13 09:59:42.000,Sec=S#:SBER@TQBR, Native:,Type:
SecurityLookupResult,T(L)=2017/03/13 09:59:42.000,Orig=3
MarketData,T(L)=2017/03/13 09:59:42.000,Sec=S#:@, Native:,Type:,Sec=S#:@, Native:,Type:,Types=Level1,IsSubscribe=True,TransId=0,OrigId=4
Time,T(L)=2017/03/13 07:00:00.000,ID=0,Response=
SecurityLookupResult,T(L)=2017/03/13 15:45:00.000,Orig=3
Time,T(L)=2017/03/13 15:45:00.000,ID=0,Response=
Time,T(L)=2017/03/13 15:45:01.000,ID=0,Response=
Time,T(L)=2017/03/13 15:45:02.000,ID=0,Response=
Time,T(L)=2017/03/14 07:00:00.000,ID=0,Response=
Time,T(L)=2017/03/14 15:45:00.000,ID=0,Response=
Time,T(L)=2017/03/14 15:45:01.000,ID=0,Response=
Time,T(L)=2017/03/14 15:45:02.000,ID=0,Response=
PortfolioLookupResult,T(L)=2017/03/14 15:45:02.000,Orig=1
Disconnect,T(L)=2017/03/14 15:45:02.000
MarketData,T(L)=2017/03/14 15:45:02.000,Sec=S#:@, Native:,Type:,Sec=S#:@, Native:,Type:,Types=Level1,IsSubscribe=False,TransId=0,OrigId=5
Disconnect,T(L)=2017/03/14 18:49:49.000
Прилагаю файл сообщений Debug.
тики загружены в переменную _historyTicks по акциям SBER за период с 13.03.17 по 14.03.17, общее кол-во 105943 шт.
дата первого тика d1= {13.03.2017 9:59:42 +03:00}, дата последнего тика d2={14.03.2017 18:49:49 +03:00}
Текст кода следующий:
public IEnumerable<Message> GetTrades(DateTimeOffset d)
{
var trades = _historyTicks.Where(ht => ((ht.ServerTime.Date == d.Date) &&
(ht.ServerTime.TimeOfDay == d.TimeOfDay)));
return trades;
}
. . .
if (_historyTicks != null)
{
d1 = _historyTicks.ElementAt(0).ServerTime;
d2 = _historyTicks.ElementAt(_historyTicks.Count() - 1).ServerTime;
}
_selSecurity = SecFinamBuilder.SelectedSecurityModyf;
_selPortfolio = new Portfolio
{
Name = "test account",
BeginValue = 1000000,
};
_historyConnector = new HistoryEmulationConnector(new[] {_selSecurity}, new[] {_selPortfolio})
{
EmulationAdapter =
{
Emulator = { Settings = { MatchOnTouch = false, } }
},
UseExternalCandleSource = false,
CreateDepthFromOrdersLog = false,
CreateTradesFromOrdersLog = false,
};
_historyConnector.HistoryMessageAdapter.StartDate = d1;
_historyConnector.HistoryMessageAdapter.StopDate = d2;
_historyConnector.RegisterHistorySource(_selSecurity, MarketDataTypes.Trades, null, GetTrades);
_historyConnector.NewMessage += (m) =>
{
var m1 = m;
Debug.Print(m.ToString());
};
_historyConnector.Connect();
var candleManager = new CandleManager(_historyConnector);
LoadSettingsDiagram();
_candleTimeFrame = TimeSpan.FromMinutes(5);
_connectorCandleSеries = new CandleSeries(typeof(TimeFrameCandle), _selSecurity, _candleTimeFrame);
candleManager.Processing += DrawElement;
candleManager.Start(_connectorCandleSеries);
_historyConnector.Start();