LoginSignup
9
9

More than 5 years have passed since last update.

C#:Chartコントロールでローソク足を表示させる

Last updated at Posted at 2018-01-05

Chartコントロールでローソク足を表示させる

ただでさえ情報が少ない、C#のChartコントロールに関する情報。
ましてやChartコントロールを使ってローソク足を表示するための情報は皆無に等しいのが現状です。
そこで、断片的な情報を集めて試行錯誤した結果をまとめます。

本記事のコードは以下の環境で確認しています

  • Microsoft Visual Studio Community 2017
  • .NET Framework 4.7

私がつまづいたのは以下の二点です
・X軸を日付にするには?DateTimeを代入したいのにdouble型でしか値を指定できない
 また、X軸の最大値最小値はどうやって設定すればいいの?
 →OLEオートメーション日付に変換する必要がある
・四本値(高値、安値、始値、終値)のDataPointインスタンスの作成方法?
 →System.Windows.Forms.DataVisualization.Charting.DataPoint
  (double xValue, double[] yValues)メソッドを用いる

横軸を日付にするには?

ChartArea.AxisX.IntervalTypeをDateTimeIntervalType.Daysにする。
また、横軸の最大値最小値を設定する場合はDateTime.ToOADate()メソッドで
OLEオートメーション日付に変換

// グラフ領域の設定
ChartArea area = new ChartArea();
// 横軸を日付に設定
area.AxisX.IntervalType = DateTimeIntervalType.Days;
// 横軸の最大・最小値を設定 DateTimeをToOADateメソッドを用いてdoubleに変換
area.AxisX.Minimum = new DateTime(2010, 1, 1).ToOADate();
area.AxisX.Maximum = new DateTime(2010, 1, 10).ToOADate();

4本値データのDataPointインスタンスの作成方法

// 日付を格納する
DateTime date = new DateTime(2010, 1, 4);
// High Low Open Closeの順番で配列を作成
double[] values = new double[4] { 1010, 990, 1000, 1005 };
// 日付、四本値の配列からDataPointのインスタンスを作成
DataPoint dp = new DataPoint(date.ToOADate(), values);

サンプルコード

以上の事を踏まえたうえでChartコントロールにローソク足を表示させるソースコード(全体)
フォームアプリケーションにChartントロール(chart1)を追加した後、以下のコードをコピペして実行してみてください。

Form1.cs
public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();

        // グラフ領域の設定
        ChartArea area = new ChartArea();

        // 横軸(日付軸)の設定 
        // DateTimeのままでは使えないので
        //ToOADateメソッドでOLEオートメーション日付に変換
        area.AxisX.Title = "日付";
        area.AxisX.IntervalType = DateTimeIntervalType.Days;
        area.AxisX.Minimum = new DateTime(2010, 1, 1).ToOADate();
        area.AxisX.Maximum = new DateTime(2010, 1, 10).ToOADate();

        // 縦軸(株価軸)の設定
        area.AxisY.Title = "株価";
        area.AxisY.Minimum = 950;
        area.AxisY.Maximum = 1050;

        // 既定のグラフ領域の設定をクリアした後、設定する
        chart1.ChartAreas.Clear();
        chart1.ChartAreas.Add(area);

        // データ系列を作成する
        Series series = new Series();
        series.ChartType = SeriesChartType.Candlestick;
        series.Color = Color.Red;

        for (int i = 0; i < 5; i++)
        {
            // 日付(2010/1/4から5本)
            DateTime date = new DateTime(2010, 1, 4).AddDays(i);

            // High Low Open Closeの順番で配列を作成
            double[] values = new double[4] 
            {
                1010 + i, 990 + i, 1000 + i, 1005 + i
            };

            // 日付、四本値の配列からDataPointのインスタンスを作成
            DataPoint dp = new DataPoint(date.ToOADate(), values);
            series.Points.Add(dp);
        }

        chart1.Series.Clear();
        chart1.Series.Add(series);
    }
}
9
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
9