private void FillChart() { List <CandleDate> listCandles = new List <CandleDate>(); using (var reader = new StreamReader(Environment.CurrentDirectory + "\\wti_180.csv")) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); CandleDate cd = new CandleDate(); cd.dt = Convert.ToDateTime(values[0].Trim() + " " + values[1].Trim()); cd.open = Convert.ToDouble(values[2].Trim()); cd.high = Convert.ToDouble(values[3].Trim()); cd.low = Convert.ToDouble(values[4].Trim()); cd.close = Convert.ToDouble(values[5].Trim()); cd.volume = Convert.ToDouble(values[6].Trim()); listCandles.Add(cd); } } listCandles.Reverse(); int blockSize = 100; chart.Series[0].Points.Clear(); foreach (var dc in listCandles) { chart.Series[0].Points.AddXY(dc.dt, dc.high, dc.low, dc.open, dc.close); } var chartArea = chart.ChartAreas[chart.Series[0].ChartArea]; chartArea.AxisX.Minimum = 0; chartArea.AxisX.Maximum = listCandles.Count; chartArea.CursorX.AutoScroll = true; chartArea.AxisX.ScaleView.Zoomable = true; chartArea.AxisX.ScaleView.SizeType = DateTimeIntervalType.Number; int position = listCandles.Count - blockSize; int size = listCandles.Count; chartArea.AxisX.ScaleView.Zoom(position, size + 1); // disable zoom-reset button (only scrollbar's arrows are available) chartArea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.All; chartArea.AxisX.ScaleView.SmallScrollSize = 10; chart_AxisViewChanged(chart, new ViewEventArgs(chartArea.AxisX, size + 1)); }
private List <CandleDate> findCandles(CandleDate candle, int findMinute, int findCount) { List <CandleDate> sourcesList = null; List <CandleDate> findLists = new List <CandleDate>(); if (findMinute == 60) { sourcesList = listCandles60; } else if (findMinute == 120) { sourcesList = listCandles120; } else if (findMinute == 180) { sourcesList = listCandles180; } int idx = sourcesList.FindIndex(t => t.dt == candle.dt); if (idx > findCount) { int findIndex = idx + 1; int findLength = idx + findCount; //for (int i = idx - findCount + 1; i <= idx; i++) //{ // findLists.Add(sourcesList[i]); //} for (int i = findIndex; i <= findLength; i++) { if (sourcesList.Count > i) { findLists.Add(sourcesList[i]); } } } return(findLists); }
private void btnLoad_Click(object sender, EventArgs e) { listCandles60.Clear(); using (var reader = new StreamReader(Environment.CurrentDirectory + "\\wti_60.csv")) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); CandleDate cd = new CandleDate(); cd.dt = Convert.ToDateTime(values[0].Trim() + " " + values[1].Trim()); cd.open = Convert.ToDouble(values[2].Trim()); cd.high = Convert.ToDouble(values[3].Trim()); cd.low = Convert.ToDouble(values[4].Trim()); cd.close = Convert.ToDouble(values[5].Trim()); cd.volume = Convert.ToDouble(values[6].Trim()); listCandles60.Add(cd); } } listCandles120.Clear(); using (var reader = new StreamReader(Environment.CurrentDirectory + "\\wti_120.csv")) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); CandleDate cd = new CandleDate(); cd.dt = Convert.ToDateTime(values[0].Trim() + " " + values[1].Trim()); cd.open = Convert.ToDouble(values[2].Trim()); cd.high = Convert.ToDouble(values[3].Trim()); cd.low = Convert.ToDouble(values[4].Trim()); cd.close = Convert.ToDouble(values[5].Trim()); cd.volume = Convert.ToDouble(values[6].Trim()); listCandles120.Add(cd); } } listCandles180.Clear(); using (var reader = new StreamReader(Environment.CurrentDirectory + "\\wti_180.csv")) { while (!reader.EndOfStream) { var line = reader.ReadLine(); var values = line.Split(','); CandleDate cd = new CandleDate(); cd.dt = Convert.ToDateTime(values[0].Trim() + " " + values[1].Trim()); cd.open = Convert.ToDouble(values[2].Trim()); cd.high = Convert.ToDouble(values[3].Trim()); cd.low = Convert.ToDouble(values[4].Trim()); cd.close = Convert.ToDouble(values[5].Trim()); cd.volume = Convert.ToDouble(values[6].Trim()); listCandles180.Add(cd); } } listCandles60.Reverse(); listCandles120.Reverse(); listCandles180.Reverse(); }