public ActionResult <string> All() { var RequestData = CryptoGlobals.GetRequestData(Request); if (RequestData.ContainsKey("action") && RequestData.ContainsKey("source") && RequestData.ContainsKey("options") && RequestData.ContainsKey("token")) { var action = RequestData["action"]; var token = RequestData["token"]; var source = RequestData["source"]; var market = RequestData["market"]; var startS = RequestData["start"]; var endS = RequestData["end"]; var interval = RequestData["interval"]; var options = RequestData["options"]; var ui = Globals.GetUserFromToken(token); if (ui == null) { return("invalid token"); } if (action == "backtest") { var tOptions = JsonConvert.DeserializeObject <StrategyOptions>(options); if (tOptions == null) { return("invalid strategy options"); } var cInterval = CryptoGlobals.GetKlineFromString(interval); DateTime start = DateTime.MinValue; DateTime end = DateTime.MaxValue; DateTime dt1, dt2; if (DateTime.TryParseExact(startS, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt1)) { start = dt1; } else { return("Invalid start date"); } if (DateTime.TryParseExact(endS, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt2)) { end = dt2; } else { return("Invalid end date"); } var res = Backtest(source, market, cInterval, start, end, tOptions); return(res); } } return(""); }
public ActionResult <string> Get(string Symbol) { var RequestData = new Dictionary <string, string>(); RequestData = CryptoGlobals.GetRequestData(Request); Symbol = Symbol.Replace("-", ""); var interval = KlineInterval.FifteenMinutes; var start = new DateTime(2019, 7, 1); var end = DateTime.Now; var symbol = Symbol.ToUpper(); var liteJson = false; var justOK = false; var jsonP = ""; if (RequestData.ContainsKey("interval")) { var tempInterval = RequestData["interval"].ToString(); interval = CryptoGlobals.GetKlineFromString(tempInterval); } else { return("interval missing"); } Response.Headers.Add("Access-Control-Allow-Origin", "*"); if (RequestData.ContainsKey("jsonp")) { jsonP = RequestData["jsonp"]; } if (RequestData.ContainsKey("justok")) { justOK = true; } if (RequestData.ContainsKey("lite") && RequestData["lite"] == "true") { liteJson = true; } if (RequestData.ContainsKey("start") && RequestData.ContainsKey("end")) { var startS = RequestData["start"].ToString(); var endS = RequestData["end"].ToString(); DateTime dt1; if (DateTime.TryParseExact(startS, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt1)) { start = dt1; } else { return("Invalid start date"); } DateTime dt2; if (DateTime.TryParseExact(endS, "yyyy-MM-dd", CultureInfo.InvariantCulture, DateTimeStyles.None, out dt2)) { end = dt2.AddDays(1); // because we are NOT getting time. So we want to get UNTIL the next day if (end > DateTime.Now) { end = DateTime.Now; } } else { return("Invalid end date"); } } else { return(JsonConvert.SerializeObject(new KeyValuePair <string, string>("Error", "You have to use start & date query"))); } if (!CandleHelper.Jobs.ContainsKey(symbol) || (CandleHelper.Jobs.ContainsKey(symbol) && CandleHelper.Jobs[symbol].Done)) { if (CandleHelper.Jobs.ContainsKey(symbol)) { CandleHelper.Jobs.Remove(symbol); } DateTime small = DateTime.MinValue; DateTime big = DateTime.MinValue; List <CandleInfo> allCandles = null; if (CandleHelper.CandlesAvailable(symbol, interval, start, end, out small, out big, out allCandles)) { var finalS = ""; if (justOK) { finalS = "ok"; } else { if (liteJson) { var temp = new List <CandleInfo>(); foreach (var item in allCandles) { temp.Add(item); // timestamp, o,h,l,c // highchart requires timestamp*1000 or else dates are invalid } finalS = JsonConvert.SerializeObject(temp); } else { finalS = JsonConvert.SerializeObject(allCandles); } } //Response.ContentType = "application/javascript"; if (jsonP != "") { return(jsonP + "(" + finalS + ")"); } return(finalS); // let's retrieve em all?? return("Small: " + small.ToString() + Environment.NewLine + "Big: " + big.ToString()); } else { if (big == DateTime.MinValue) { big = start; } else { big = big.MinusKlineInterval(interval).MinusKlineInterval(interval); } CandleHelper.Jobs[symbol] = new CandleJob(symbol, start, end, interval); // we just started the job CandleHelper.Jobs[symbol].StartWork(); return("working"); } } else { return("working"); } }