Instrument - Soybeans dec 2014. It have 2 nontrade periods: 1) 7:45 - 8:30 2) 13:45 - 19:00
Code: Select all
List <Tick> LocMarketStream = DataLoaderRequest(To, From).Where(x => x.Bar.Time >= From && x.Bar.Time < To).ToList();
ManualResetEvent[] manualEventTrade = new ManualResetEvent[] {new ManualResetEvent(false)};
ManualResetEvent[] manualEventsAsk = new ManualResetEvent[] {new ManualResetEvent(false)};
ManualResetEvent[] manualEventsBid = new ManualResetEvent[] {new ManualResetEvent(false)};
public List<Tick> DataLoaderRequest(DateTime ToDate, DateTime FromDate, bool DoSort = true, int Sleeping = 0)
{
List<Tick>LocMarketStream = new List<Tick>();
BeforeSortMarketStream = new List<Tick>();
InstrumentDataRequest Request = Bars.Request;
Request.Resolution = new Resolution { Size = 1, Type = EResolution.Tick };
Request.FilterOutOfRangeData = true;
Request.Range = DataRequest.CreateFromTo(FromDate, ToDate);
Request.Range.ToAlwaysIsNow = false;
IDataLoaderResult iResTrade, iResAsk, iResBid;
Request.QuoteField = RequestQuoteField.Trade;
manualEventTrade[0] = new ManualResetEvent(false);
iResTrade = DataLoader.BeginLoadData(Request, OnData, manualEventTrade[0]);
Request.QuoteField = RequestQuoteField.Ask;
manualEventsAsk[0] = new ManualResetEvent(false);
iResAsk = DataLoader.BeginLoadData(Request, OnData, manualEventsAsk[0]);
Request.QuoteField = RequestQuoteField.Bid;
manualEventsBid[0] = new ManualResetEvent(false);
iResBid = DataLoader.BeginLoadData(Request, OnData, manualEventsBid[0]);
if (Sleeping > 0) Thread.Sleep(Sleeping);
ManualResetEvent.WaitAny(manualEventTrade);
ManualResetEvent.WaitAny(manualEventsAsk);
ManualResetEvent.WaitAny(manualEventsBid);
// Sorting data
if (DoSort)
{
LocMarketStream = BeforeSortMarketStream.OrderBy(x => x.Bar.TickID).OrderBy(x => x.Bar.Time).ToList();
}
else {
LocMarketStream = BeforeSortMarketStream;
}
return LocMarketStream;
}
public void OnData(IDataLoaderResult Result)
{
ManualResetEvent _are = (ManualResetEvent)Result.State;
if (Result.IsCompleted)
{
switch (Result.Event)
{
case DataLoadedEvent.History:
foreach (Bar b in Result.Data) BeforeSortMarketStream.Add(new Tick { Bar = b, EventType = Result.Event, QouteField = Result.Request.QuoteField });
break;
case DataLoadedEvent.RTUpdateLastBar: // this tick is updating the last bar
BeforeSortMarketStream.Add(new Tick { Bar = Result.RTData.Value, EventType = Result.Event, QouteField = Result.Request.QuoteField });
break;
case DataLoadedEvent.None: // this tick is updating the last bar
BeforeSortMarketStream.Add(new Tick { Bar = Result.RTData.Value, EventType = Result.Event, QouteField = Result.Request.QuoteField });
break;
case DataLoadedEvent.RTNewBar: // this tick starts a new bar
foreach (Bar b in Result.Data) BeforeSortMarketStream.Add(new Tick { Bar = b, EventType = Result.Event, QouteField = Result.Request.QuoteField });
break;
}
}else{
}
_are.Set();
}
It`s loading ticks only in past of day from 0:00 to 13:45. After 13:45 to 23:59 its don't loading ticks.
I don`t understand why:(