/// <summary> /// Read already downloaded OHLC data /// </summary> /// <param name="curPair"></param> /// <param name="freq"></param> /// <param name="item"></param> /// <returns></returns> private GetOHLCResult ReadOHLC(CurrencyPair curPair, Frequency freq, string item = "Close") { string pathLib = GetOHLCLibraryPath(curPair, freq); GetOHLCResult res = new GetOHLCResult { Pairs = new Dictionary <string, List <OHLC> > { { curPair.GetRequestID(), new List <OHLC> { } } } }; List <string[]> csv = StaticLibrary.LoadCsvFile(pathLib); bool isHeaders = true; string[] headers = null; foreach (string[] array in csv) { if (isHeaders) { headers = array; isHeaders = false; } else { OHLC ohlc = DataLibraryStaticLibrary.ReadOHLCItems(array, headers); res.Pairs[curPair.GetRequestID()].Add(ohlc); } } return(res); }
/// <summary> /// Gets the ohlc. /// </summary> /// <param name="pair">The pair.</param> /// <param name="interval">The interval.</param> /// <param name="since">The since.</param> public GetOHLCResult GetOHLC(string pair, int?interval = null, int?since = null) { var param = new Dictionary <string, string>(); param.Add("pair", pair); if (interval != null) { param.Add("interval", interval.ToString()); } if (since != null) { param.Add("since", since.ToString()); } var res = QueryPublic("OHLC", param); JObject obj = (JObject)JsonConvert.DeserializeObject(res); JArray err = (JArray)obj["error"]; if (err.Count != 0) { throw new KrakenException(err[0].ToString(), JsonConvert.DeserializeObject <ResponseBase>(res)); } JObject result = obj["result"].Value <JObject>(); var ret = new GetOHLCResult(); ret.Pairs = new Dictionary <string, List <OHLC> >(); foreach (var o in result) { if (o.Key == "last") { ret.Last = o.Value.Value <long>(); } else { var ohlc = new List <OHLC>(); foreach (var v in o.Value.ToObject <decimal[][]>()) { ohlc.Add(new OHLC() { Time = (int)v[0], Open = v[1], High = v[2], Low = v[3], Close = v[4], Vwap = v[5], Volume = v[6], Count = (int)v[7] }); } ret.Pairs.Add(o.Key, ohlc); } } return(ret); }
public IEnumerable <TradeBar> DownloadTradeBars(Symbol symbol, DateTime startTimeUtc, DateTime endTimeUtc, Resolution resolution, DateTimeZone requestedTimeZone) { string krakenSymbol = SymbolMapper.GetBrokerageSymbol(symbol); int interval = ResolutionToInterval(resolution); GetOHLCResult result = _restApi.GetOHLC(krakenSymbol, interval, (int)ToUnix(startTimeUtc)); Dictionary <string, List <OHLC> > dict = result.Pairs; List <OHLC> list = dict[krakenSymbol]; foreach (OHLC candle in list) { yield return(new TradeBar(DateTimeOffset.FromUnixTimeSeconds(candle.Time).DateTime, symbol, candle.Open, candle.High, candle.Low, candle.Close, candle.Volume, TimeSpan.FromMinutes(interval))); } }
/// <summary> /// Gets the history for the requested security /// </summary> /// <param name="request">The historical data request</param> /// <returns>An enumerable of bars covering the span specified in the request</returns> public override IEnumerable <BaseData> GetHistory(HistoryRequest request) { // TradeBar Symbol leanSymbol = request.Symbol; string krakenSymbol = SymbolMapper.GetBrokerageSymbol(leanSymbol); long startTime = ((DateTimeOffset)request.StartTimeUtc).ToUnixTimeSeconds(); long endTime = ((DateTimeOffset)request.EndTimeUtc).ToUnixTimeSeconds(); TickType tickType = request.TickType; Resolution resolution = request.Resolution; int interval = ResolutionToInterval(resolution); DateTimeZone zone = request.DataTimeZone; Type dataType = request.DataType; while (startTime > endTime) { GetOHLCResult result = _restApi.GetOHLC(krakenSymbol, interval, (int)startTime); startTime = result.Last; Dictionary <string, List <OHLC> > dict = result.Pairs; List <OHLC> list = dict[krakenSymbol]; foreach (OHLC candle in list) { if (candle.Time <= endTime) { yield return(new TradeBar(FromUnix(candle.Time), leanSymbol, candle.Open, candle.High, candle.Low, candle.Close, candle.Volume, TimeSpan.FromMinutes(interval))); } } } yield return(null); }