Another question about DataLoader  [SOLVED]

Questions about MultiCharts .NET and user contributed studies.
Alexxx
Posts: 25
Joined: 28 Aug 2014
Has thanked: 4 times
Been thanked: 2 times

Another question about DataLoader

Postby Alexxx » 01 Nov 2014

I have this situation!
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();
}
I`m loading every Bar-Close all ticks last and prelist bars. But its don`t normal work!
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:(

Alexxx
Posts: 25
Joined: 28 Aug 2014
Has thanked: 4 times
Been thanked: 2 times

Re: Another question about DataLoader  [SOLVED]

Postby Alexxx » 09 Nov 2014

Reason of this actions MC is setting of session on chart.
Format Instrument -> Setting -> Session -> I set 24 hour. Now it work full day.


Return to “MultiCharts .NET”