/// <summary> /// Returns candlestick chart data filtered by url parameters. /// </summary> /// <param name="pair"></param> /// <param name="startTime">Start of time range for data in epoch seconds</param> /// <param name="endTime">End of time range for data in epoch seconds</param> /// <param name="interval">Candlestick period in minutes Possible values are: 1, 5, 30, 60, 360, 1440</param> /// <returns></returns> public async Task <List <CandleStick> > GetCandleSticksAsync(string pair, int startTime, int endTime, int interval) { if (string.IsNullOrEmpty(pair)) { throw new ArgumentNullException(nameof(pair)); } if (startTime <= 0) { throw new ArgumentOutOfRangeException(nameof(startTime)); } if (endTime <= 0) { throw new ArgumentOutOfRangeException(nameof(endTime)); } if (interval <= 0) { throw new ArgumentOutOfRangeException(nameof(interval)); } var query = HttpUtility.ParseQueryString(string.Empty); query["pair"] = pair; query["interval"] = interval.ToString(); query["start_time"] = startTime.ToString(); query["end_time"] = endTime.ToString(); string queryString = query.ToString().Insert(0, "?"); var result = await ExecuteCall(Utils.ComposeUrl(getCandleSticks, queryString)); return(CandleStick.FromJson(result)); }
public async Task <IEnumerable <CandleStick> > GetCandlesAtOrAfter(GetAfterCandleStickQuery query, CancellationToken cancellationToken) { var command = CreateCommand(); command.CommandText = $"SELECT * FROM CandleSticks WHERE Date >= @Date"; command.Parameters.Add(new SqlParameter("@Date", query.Date)); var queryResult = new List <CandleStick>(); using (var reader = await ExecuteReaderAsync(command, cancellationToken)){ while (reader.Read()) { var candleStick = CandleStick.Create( reader.GetInt32(1), reader.GetInt64(2), reader.GetInt64(3), reader.GetInt64(4), reader.GetInt64(5), reader.GetDateTime(6) ); candleStick.Id = reader.GetInt16(0); queryResult.Add(candleStick); } } return(queryResult); }
public override bool StartCSV(string aCsvString) { string[] nRows = aCsvString.Replace("\r", "").Split('\n'); for (int i = nRows.Length - 1; i > 0; i--) { if (String.IsNullOrEmpty(nRows[i])) { continue; } Regex CSVParser = new Regex(",(?=(?:[^\"]*\"[^\"]*\")*(?![^\"]*\"))"); string[] nDataArray = CSVParser.Split(nRows[i]); CandleStick nData = new CandleStick(); nData.Date = DateTime.Parse(nDataArray[0]); nData.Open = double.Parse(nDataArray[1]); nData.High = double.Parse(nDataArray[2]); nData.Low = double.Parse(nDataArray[3]); nData.Close = double.Parse(nDataArray[4]); nData.Volume = long.Parse(nDataArray[5]); nData.AdjClose = double.Parse(nDataArray[6]); if (this.mStockData.StartDate == default(DateTime) || this.mStockData.StartDate.Date.CompareTo(nData.Date.Date) > 0) { this.mStockData.StartDate = nData.Date; } if (this.mStockData.LastDate == default(DateTime) || this.mStockData.LastDate.Date.CompareTo(nData.Date.Date) < 0) { this.mStockData.DataPoints.Add(nData); this.mStockData.LastDate = nData.Date; } } return(true); }
public async Task <CandleStick> GetById(int entityId, CancellationToken cancellationToken) { var command = CreateCommand(); command.CommandText = $"SELECT * FROM CandleSticks WHERE Id = @Id"; command.Parameters.Add(new SqlParameter("@Id", entityId)); CandleStick entity; using (var reader = await ExecuteReaderAsync(command, cancellationToken)){ if (!reader.Read()) { return(default(CandleStick)); } var candleStick = CandleStick.Create( reader.GetInt32(1), reader.GetInt64(2), reader.GetInt64(3), reader.GetInt64(4), reader.GetInt64(5), reader.GetDateTime(6) ); candleStick.Id = reader.GetInt16(0); entity = candleStick; } return(entity); }
public async Task <IEnumerable <CandleStick> > GetAll(CancellationToken cancellationToken) { var command = CreateCommand(); command.CommandText = $"SELECT * FROM CandleSticks"; var queryResult = new List <CandleStick>(); using (var reader = await ExecuteReaderAsync(command, cancellationToken)){ while (reader.Read()) { var candleStick = CandleStick.Create( reader.GetInt32(1), reader.GetInt64(2), reader.GetInt64(3), reader.GetInt64(4), reader.GetInt64(5), reader.GetDateTime(6) ); candleStick.Id = reader.GetInt16(0); queryResult.Add(candleStick); } } return(queryResult); }
public ChartingForm(StockData aStock) { this.Stock = aStock; this.SPList = new StockPointList(); this.MACDList = new List <MacdPoint>(); for (int i = 0; i < this.Stock.DataPoints.Count; i++) { CandleStick nCandleStick = this.Stock.DataPoints[i]; XDate xDate = new XDate(nCandleStick.Date); StockPt nPoint = new StockPt(xDate.XLDate, nCandleStick.High, nCandleStick.Low, nCandleStick.Open, nCandleStick.Close, nCandleStick.Volume); this.SPList.Add(nPoint); } InitializeComponent(); this.ZedGraphControl.MasterPane = new MasterPane(); this.mCandleStickPane = new GraphPane(); this.mMacdPane = new GraphPane(); this.mStochasticPane = new GraphPane(); InitializeZedGraph(); DrawSmaGraph(this.mCandleStickPane, 20, Color.Red); DrawSmaGraph(this.mCandleStickPane, 50, Color.Blue); DrawCandleStickGraph(this.mCandleStickPane); DrawMacdGraph(this.mMacdPane, 12, 26, 9, Color.Blue, Color.Red); DrawStochPane(this.mStochasticPane, 14, 3, 3, Color.Blue, Color.Red); this.ZedGraphControl.AxisChange(); this.ZedGraphControl.Dock = DockStyle.Fill; this.ZedGraphControl.Refresh(); }
private async Task <string> OutputFileContentAsJSONString(string ticker) { string contentRootPath = _env.ContentRootPath; var csvDataFromDisk = System.IO.File.ReadLines(contentRootPath + $"/MarketData/Daily/{ticker}.csv"); var i = 0; List <CandleStick> candleSticks = new List <CandleStick>(); foreach (var each in csvDataFromDisk) { if (i == 0) { i++; continue; } try { var candleStickObj = CandleStick.FromCsv(each.ToString()); if (candleStickObj != null) { candleSticks.Add(candleStickObj); } } catch (Exception ex) { } i++; } return(JsonConvert.SerializeObject(candleSticks.OrderBy(x => x.DateTime))); }
/// <summary> /// Primary constructor /// </summary> public CandlePriceSaver(string u, string p) { m_username = u; m_password = p; instrumentList = ContractUtilities.ContractMetaInfo.cmeFuturesTickerheadList.Union(ContractUtilities.ContractMetaInfo.iceFuturesTickerheadList).ToArray(); liquidContractList = new ContractUtilities.ContractList(instrumentList); DateTime referanceDate = DateTime.Today; int minInterval = 10; //30 startTime = new DateTime(referanceDate.Year, referanceDate.Month, referanceDate.Day, 1, 0, 0); endTime = new DateTime(referanceDate.Year, referanceDate.Month, referanceDate.Day, 9, 0, 0); //900 candleObj = new DataAnalysis.CandleStick(startTime, endTime, liquidContractList.dbTickerList.ToArray(), minInterval); OutputFolder = TA.DirectoryNames.GetDirectoryName(ext: "overnightCandlestick") + TA.DirectoryNames.GetDirectoryExtension(DateTime.Now.Date); System.IO.Directory.CreateDirectory(OutputFolder); ttapiSubs = new ttapiUtils.Subscription(m_username, m_password); ttapiSubs.dbTickerList = liquidContractList.dbTickerList; ttapiSubs.ilsUpdateList = new List <EventHandler <InstrumentLookupSubscriptionEventArgs> > { ttapiSubs.startPriceSubscriptions }; ttapiSubs.asu_update = ttapiSubs.startInstrumentLookupSubscriptions; ttapiSubs.priceUpdatedEventHandler = m_ps_FieldsUpdated; }
public List <CandleStick> GetHistory(string symbol, DateTime startTime, DateTime endTime, Frequency frequency) { //Create the target URL string targetUrl = _BaseApiUrl + $"/{symbol}/pricehistory"; //Convert the start and end times to UTC startTime = startTime.ToUniversalTime(); endTime = endTime.ToUniversalTime(); //Convert the start and endtimes to unix epoch milliseconds long startDateMilliseconds = ((DateTimeOffset)startTime).ToUnixTimeMilliseconds(); long endDateMilliseconds = ((DateTimeOffset)endTime).ToUnixTimeMilliseconds(); //Add the parameters to the URL targetUrl += $"?startDate={startDateMilliseconds}&"; targetUrl += $"endDate={endDateMilliseconds}&"; targetUrl += $"frequencyType={frequency.ToString().ToLower()}&"; targetUrl += $"frequency=1"; //Send the HTTP Request var result = _HttpClient.GetAsync(targetUrl).Result; //Read the result string var response = result.Content.ReadAsStringAsync().Result; //Parse the main part of the response var responseJson = JsonConvert.DeserializeObject <JSON.Ticker.PriceHistory>(response); //Create a list of candlesticks to send back var candlesticks = new List <CandleStick>(); //Loop through all JSON and parse it to the universal candlestick type foreach (var candlestick in responseJson.candles) { //Create a new candlestick struct var finalCandlestick = new CandleStick { Symbol = symbol, Time = DateTimeOffset.FromUnixTimeMilliseconds(candlestick.datetime).UtcDateTime, Open = (Decimal)candlestick.open, Close = (Decimal)candlestick.close, High = (Decimal)candlestick.high, Low = (Decimal)candlestick.low, Volume = candlestick.volume }; //Check that the candlestick is in the specified bounds if (finalCandlestick.Time < startTime || finalCandlestick.Time > endTime) { continue; } //Add the candlestick to the candlestick list candlesticks.Add(finalCandlestick); } //Return the candlesticks return(candlesticks); }
public void Add(CandleStick candleStick) { new Validations.FrameAddValidation(this, candleStick).Validate(); _candleSticks.Add(candleStick); _lastCandleStick = candleStick; _count++; }
public CandleData GetCandleData() { var data = new CandleData() { ResultSet = new Dictionary <int, IList <CandleStick> >() }; var candleSet = new List <CandleStick>(); var candle1 = new CandleStick() { CloseTime = 1505599920, OpenPrice = 0.014018m, HighPrice = 0.014018m, LowPrice = 0.014018m, ClosePrice = 0.014018m, Volume = 41.618446m }; var candle2 = new CandleStick() { CloseTime = 1505599860m, OpenPrice = 0.014158m, HighPrice = 0.014158m, LowPrice = 0.014011m, ClosePrice = 0.014143m, Volume = 300.7724m }; var candle3 = new CandleStick() { CloseTime = 1505599800, OpenPrice = 0.014158m, HighPrice = 0.014158m, LowPrice = 0.014158m, ClosePrice = 0.014158m, Volume = 11.847191m }; var candle4 = new CandleStick() { CloseTime = 1505599740, OpenPrice = 0.014158m, HighPrice = 0.014158m, LowPrice = 0.014158m, ClosePrice = 0.014158m, Volume = 1.9391322m }; candleSet.Add(candle1); candleSet.Add(candle2); candleSet.Add(candle3); candleSet.Add(candle4); data.ResultSet.Add(60, candleSet); return(data); }
public void AppendCandleStick(CandleStick candleStick) { if (HasMaxCandleSticks()) { throw CandleStickExceptions.MaxNumberOfCandleSticks(this.GetType(), _MaxNumberOfCandleSticks); } _CandleSticks.Add(candleStick); }
public void AddRange(IEnumerable <CandleStick> candleSticks) { candleSticks.ToList().Sort(new CandleStickComparer()); new Validations.FrameAddRangeValidation(this, candleSticks).Validate(); _candleSticks.AddRange(candleSticks); _lastCandleStick = candleSticks.Last(); _count += candleSticks.Count(); }
private bool TrendIsUpOnlyCheckHigh(CandleStick First, CandleStick Second) { //1 => upward // -1 => downward if (Second.High >= First.High) { return(true); //going upward } return(false); // going downward }
private static void FillVTrendLines(CandleStick candle) { candle.VTrendLines.Add(new DoubleLineElement { StartValue = 10, EndValue = 13, Color = "#FF5904".FromHtml(), DisplayValue = "Result Impact", IsTrendZone = true, Alpha = 10 }); }
private static void FillTrendset(CandleStick candle, string name, double minX, double maxX) { candle.Trendset.Name = name; for (int x = (int)minX; x < (int)maxX; x++) { var data = candle.Dataset.ElementAtOrDefault(x); if (data != null && data.High.HasValue && data.Low.HasValue) { candle.Trendset.AddSet(x, (data.High.Value + data.Low.Value) / 2.0); } } }
public CandleStick GetCandleStick(ChartHistory history, int index) { var candleStick = new CandleStick { Open = history.Opens[index], Low = history.Lows[index], High = history.Highs[index], Close = history.Closes[index] }; return(candleStick); }
private int Trend(CandleStick First, CandleStick Second) { //1 => upward // -1 => downward // 0 if (Second.High > First.High && Second.Low > First.Low) { return(1); //going upward } if (Second.High < First.High && Second.Low < First.Low) { return(-1); // going downward } return(0); }
public async Task Update(CandleStick entity, CancellationToken cancellationToken) { var command = CreateCommand(); command.CommandText = $"UPDATE CandleSticks SET High = @High, Open = @Open, Close = @Close, Low = @Low, Volume = @Volume, Date = @Date);"; command.Parameters.Add(new SqlParameter("@Id", entity.Id)); command.Parameters.Add(new SqlParameter("@High", entity.High)); command.Parameters.Add(new SqlParameter("@Open", entity.Open)); command.Parameters.Add(new SqlParameter("@Close", entity.Close)); command.Parameters.Add(new SqlParameter("@Low", entity.Low)); command.Parameters.Add(new SqlParameter("@Volume", entity.Volume)); command.Parameters.Add(new SqlParameter("@Date", entity.Date)); await ExecuteNonQueryAsync(command, cancellationToken); }
private static void FillData(CandleStick candle, double minX, double maxX) { for (double x = minX; x < maxX; x += 1) { var open = rnd.Next(30, 60) * rnd.Next(90, 111) * (x / 10.0) / 2000.0; // var high = rnd.Next(22, 28) * rnd.Next(90, 110) * 1.1 * x / 50.0; var high = open + rnd.Next(-120, 120) * 0.01; var volume = rnd.Next(20, 100) * 1000000.0; candle.AddSet(x, open, open - rnd.Next(-50, 100) * 0.01, high, high - rnd.Next(-50, 100) * 0.01, volume); } }
private CandleStick Combine(bool IsUpward, CandleStick _SecondCS, CandleStick _ThirdCS) { if (IsUpward) { var NewHigh = Math.Max(_SecondCS.High, _ThirdCS.High); var NewLow = Math.Max(_SecondCS.Low, _ThirdCS.Low); //when growing trend, open = newLow, close = newHigh, green stick increasing return(new CandleStick(_SecondCS.Date + "," + NewLow + "," + NewHigh + "," + NewLow + "," + NewHigh)); } else { var NewHigh = Math.Min(_SecondCS.High, _ThirdCS.High); var NewLow = Math.Min(_SecondCS.Low, _ThirdCS.Low); //when growing trend, open = newLow, close = newHigh, green stick increasing return(new CandleStick(_SecondCS.Date + "," + NewHigh + "," + NewHigh + "," + NewLow + "," + NewLow)); } }
private static void FillTrendLines(CandleStick candle) { // displayvalue='S1' thickness='0' dashed='1' dashLen='2' dashGap='2' candle.TrendLines.Add(new DoubleLineElement { StartValue = 4.2, Color = "#0382AB".FromHtml(), DisplayValue = "S1", Thickness = 0, IsDashed = true, DashLen = 2, DashGap = 2 }); candle.TrendLines.Add(new DoubleLineElement { StartValue = 4.8, Color = "#0382AB".FromHtml(), DisplayValue = "S2", Thickness = 0, IsDashed = true, DashLen = 2, DashGap = 2 }); candle.TrendLines.Add(new DoubleLineElement { StartValue = 15.5, Color = "#0382AB".FromHtml(), DisplayValue = "R1", Thickness = 0, IsDashed = true, DashLen = 2, DashGap = 2 }); candle.TrendLines.Add(new DoubleLineElement { StartValue = 14.2, Color = "#0382AB".FromHtml(), DisplayValue = "R2", Thickness = 0, IsDashed = true, DashLen = 2, DashGap = 2 }); }
private static CandleStick CreateSimpleCandleStick(string caption) { var candle = new CandleStick { Caption = caption, Palette = rnd.Next(1, 6), BearBorderColor = "#E33C3C".FromHtml(), BearFillColor = "#E33C3C".FromHtml(), BullBorderColor = "#1F3165".FromHtml(), PYAxisName = "Price", VYAxisName = "Volume (In Millions)", NumPDivLines = 5, ShowVolumeChart = true, VolumeHeightPercent = 30, NumberAttr = { NumberPrefix = "$" } }; return(candle); }
public async Task Add(CandleStick entity, CancellationToken cancellationToken) { var command = CreateCommand(); command.CommandText = $"INSERT INTO CandleSticks VALUES(@High, @Open, @Close, @Low, @Volume, @Date);"; command.Parameters.Add(new SqlParameter("@High", entity.High)); command.Parameters.Add(new SqlParameter("@Open", entity.Open)); command.Parameters.Add(new SqlParameter("@Close", entity.Close)); command.Parameters.Add(new SqlParameter("@Low", entity.Low)); command.Parameters.Add(new SqlParameter("@Volume", entity.Volume)); command.Parameters.Add(new SqlParameter("@Date", entity.Date)); var id = await ExecuteScalarAsync(command, cancellationToken); if (id != null) { entity.Id = (int)id; } }
public static PatternScanResults Create(CandleStick candle, bool patternTriggered) => new PatternScanResults { CandleStick = candle, IsPatternTriggered = patternTriggered };
public async Task Handle(CreateCandleStickCommand command, CancellationToken cancellationToken) { var candleStick = CandleStick.Create(command.High, command.Open, command.Close, command.Low, command.Volume, command.Date); await _repository.Add(candleStick, cancellationToken); }
/// <summary> /// Returns 24-hour data for all pairs and markets. /// </summary> /// <returns></returns> public async Task <List <CandleStick> > Get24HourDataAsync() { var result = await ExecuteCall(get24HourData); return(CandleStick.FromJson(result)); }
public FrameAddValidation(IFrame frame, CandleStick candleStick) { _frame = frame; _candleStick = candleStick; }
public void Publish(string currency, CandleStick kline) { Console.WriteLine($"publishing on {currency}"); Clients.Group(currency).SendAsync(currency, kline); }
private void instantiateChartObject(double[][] ohlcDatas) { double[][] ohlc72 = new double[72][]; int counter = 71; for (int i = ohlcDatas.Length - 1; i >= 0; i--) { if (ohlcDatas[i] == null) { continue; } ohlc72[counter] = ohlcDatas[i]; counter--; if (counter == -1) { break; } } ohlcDatas = ohlc72; double highest = 0.0; double lowest = 114514191981.0; double highestTotal = 0.0; double lowestTotal = 114514191981.0; int correctCount = 1; foreach (double[] ohlc in ohlcDatas) { if (ohlc == null) { break; } if (ohlc[2] > highest) { highest = ohlc[2]; } if (ohlc[3] < lowest) { lowest = ohlc[3]; } if (ohlc[5] > highestTotal) { highestTotal = ohlc[5]; } else if (ohlc[5] < lowestTotal) { lowestTotal = ohlc[5]; } correctCount++; } double diff = (highest - lowest) * 0.05; highest += diff; lowest -= diff; GameObject candle = null; Vector3 pos = transform.position; foreach (double[] ohlc in ohlcDatas) { if (ohlc == null) { break; } candle = Instantiate(candlePrefab, pos, transform.rotation); candle.name = ohlc[0].ToString(); // candle.transform.parent = transform; candle.transform.SetParent(transform, false); //candle.transform.localScale = new Vector3(50, 50, 50); CandleStick candleComponent = candle.GetComponent <CandleStick>(); candleComponent.highest = highest; candleComponent.lowest = lowest; candleComponent.open = ohlc[1]; candleComponent.high = ohlc[2]; candleComponent.low = ohlc[3]; candleComponent.close = ohlc[4]; candleComponent.highestTotal = highestTotal; candleComponent.lowestTotal = lowestTotal; candleComponent.total = ohlc[5]; pos.x += 0.3f; } this.transform.localScale = new Vector3(size, size * 1.3f, size); Vector3 parentPos = this.transform.position; parentPos.y -= 1; parentPos.x -= (pos.x / 2) * size; this.transform.position = parentPos; }