В последние пару дней я пытаюсь использовать элемент управления MS-chart для составления графика StockData (интервал 1 мин, свеча), который у меня есть на моем сервере sql. я думал, что это будет легко ... но теперь я нахожусь в точке, где я скоро заплачу.
У меня так много проблем, если кто-нибудь сможет решить любую, он будет благословен навсегда:
// мой код внизу, возможно, я сделал несколько фатальных ошибок
всякий раз, когда я меняюсь
series.XValueType = ChartValueType.Time;
полоса прокрутки больше не работает должным образом, я не могу больше ее перетаскивать, но могу
укажите где-нибудь на полосу прокрутки, и это приведет меня туда, но я не могу плавно перетащить ее, как если бы это был простой индекс int.
, где я прокручиваю различные часы (минуты за минутой), у меня серьезные проблемы
с осью Y я установил максимум и минимум в начале, но это не очень эффективно
когда вы прокрутите график.
для каждой точки, которую я установил (в цикле заполнения)
series.Points[index]["PriceUpColor"] = "Green";
series.Points[index]["PriceDownColor"] = "Red";
но все свечи оказались красными независимо.
У меня есть кнопка, когда она нажата. Я хочу, чтобы график был заполнен, это не
работать, это работает, только если я поместил свой код под form_load
я установил ось lbl
chartArea.AxisX.LabelStyle.Format = "hh:mm";
это правильный код?
когда у меня есть значения с плавающей запятой (пример: 26.52), но когда я помещаю эти значения в
series.Points.AddXY, результат для символов будет 26.5273287623, что, конечно, не помогает, я пробовал много разных решений (приведение, удаление цифр и т. д.)
но не смог найти решение
Наконец
вот мой код, я помещаю диаграмму в форму и вызываю эту функцию, чтобы изменить настройку диаграммы и заполнить ее (я уже делаю неправильно?)
Я понимаю, что это довольно долго, что я могу сказать, спасибо за вашу помощь! (вся помощь приветствуется!)
private void MyChart(Chart chart1, DailyBarData dbb)
-> получение компонента графика и dailybardata, и теоретически должен заполнить график соответственно
-> Я также вставил некоторые случайные данные
{
int viewSize = 30;
chart1.Series.Clear();
var series = chart1.Series.Add("Price");
series.ChartType = SeriesChartType.Candlestick;
series.YValueType = ChartValueType.Auto;
series.XValueType = ChartValueType.Time;
DateTime date = dbb.Bars[0].time.AddMinutes (1); //getting the first minute
double viewdistanceDouble = date.AddMinutes(viewSize).ToOADate(); // getting the initital X loc - im guessing this is not good
double startdateDouble = date.ToOADate();
double maxy = 0; //minmax values for the chart
double miny = 10000000;
for (int index = 0; index < dbb.Count()-1; index++)
{
BarData b = dbb.Bars[index];
series.Points.AddXY(
b.time, // X value is a date
b.TwoDigits (b.High), // High Y value - is originally a float, here i mult by 100, cast to int then double then divide by 100
//and gets the exact same result..... i realize this is unneeded but i cant solve it
b.TwoDigits(b.Low), // Low Y value
b.TwoDigits(b.Open), // Open Y value
b.TwoDigits(b.Close)); // Close Y value
if (b.Low < miny) miny = b.Low;
if (b.High > maxy) maxy = b.High;
// u can use this code instead, however those values are ints and not floats which is half of the problem
// with this values i get less problems
//series.Points.AddXY(
// date, // X value is a date
// rnd.Next(40, 50), // High Y value
// rnd.Next(10, 20), // Low Y value
// rnd.Next(20, 40), // Open Y value
// rnd.Next(20, 40)); // Close Y value
//date = date.AddMinutes(1);
series.Points[index]["PriceUpColor"] = "Green"; // this code have unclear effects as it always red
series.Points[index]["PriceDownColor"] = "Red";
series.Points[index].Color = Color.Black;
series.Points[index].BorderColor = Color.Black;
}
var chartArea = chart1.ChartAreas[series.ChartArea];
chartArea.AxisX.LabelStyle.Format = "hh:mm";
chartArea.AxisX.Interval = 5;
chartArea.AxisX.IntervalType = DateTimeIntervalType.Minutes;
chartArea.AxisX.ScaleView.Zoom(startdateDouble, viewdistanceDouble); //starting scale , rarly works
chartArea.AxisX.ScaleView.SmallScrollSize = viewSize;
chartArea.AxisX.ScrollBar.IsPositionedInside = true;
chartArea.AxisX.ScrollBar.ButtonStyle = ScrollBarButtonStyles.SmallScroll;
chartArea.AxisY.Maximum = maxy ; //by the values found on the loop, not good i want it to be automated when u scroll
chartArea.AxisY.Minimum = miny;
}