Skip to main content.

(PR:株式会社インデペンデンスシステムズ横浜では、開発の御依頼をお待ちしております。)

Friday, October 23, 2009

Yahoo!ファイナンスから株価時系列データを取得するプログラム(その5)ローソク足チャート作成

今回は、実際の株価時系列データから前回のチャート・コントロールを使ってローソク足を表示する処理についてです。

まずは、ローソク足チャートについてです。以下、Wikipediaのローソク足のページからの引用です。
ローソク足(ローソクあし)は、株価などの相場の値動きを時系列に沿って図表として表す手法の一つである。単位期間を定め、単位期間中に初めに付いた値段を始値、最後に付いた値段を終値、最も高い値段を高値、最も安い値段を安値とし、この四種の値段(四本値)をローソクと呼ばれる一本の棒状の図形に作図し、時系列に沿って並べてグラフとしたものである。

ローソクには、始値よりも終値が高い陽線(ようせん)と、始値よりも終値が安い陰線(いんせん)の2種類がある。(※一部省略)陽線を白抜きの四角形、陰線を黒く塗りつぶした四角形で表示する様に変化し、現在では黒と白で表示するのが暗黙の了解となっている。(Wikipediaからの引用ここまで)

実際の例として、キヤノンの2009/10/1から2009/10/16のデータを保存してExcelでローソク足を表示すると、以下のようになりました。10/13、14、16日が陽線(白抜き)で、それ以外が、陰線(黒の塗りつぶし)になっています。(※始値と終値が同じ日もあります。)


次にチャート・コントロールでの表示についてです。今回のプログラムで以下のように表示してみました。

・データソースの設定
Yahoo!ファイナンスから取得したデータ(独自クラスStockPriceの配列)をチャート・コントロールのデータソースに設定します。プログラム内で動的に設定しています。
ソースは以下です。
//
// Yahoo!ファイナンスより株価時系列データを取得するサンプルプログラム
// チャートフォーム
//
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

using System.Collections;
using System.Globalization;
using StockClass;

namespace StockPrices
{
    public partial class Chart : Form
    {
        private ArrayList prices = null;

        public void SetPrices(ArrayList ar)
        {
            prices = ar;
        }

        public Chart()
        {
            InitializeComponent();
        }

        private void Chart_Load(object sender, EventArgs e)
        {
            if (prices != null)
            {
                //データの設定
                chartPrices.DataSource = prices.ToArray(typeof(StockPrice));

                //minの設定
                long minVal = long.MaxValue;
                foreach (StockPrice sp in prices)
                {
                    try
                    {
                        if (long.Parse(sp.LowPrice, NumberStyles.AllowThousands) < minVal)
                        {
                            minVal = long.Parse(sp.LowPrice, NumberStyles.AllowThousands);
                        }
                    }
                    catch
                    {
                    }
                }

                if (minVal != long.MaxValue)
                {
                    chartPrices.ChartAreas[0].AxisY.Minimum = minVal - 70; //70というのは適当な数値
                }

            }
        }

        //
        // 閉じる
        //
        private void btnClose_Click(object sender, EventArgs e)
        {
            this.Close();
        }
     
    }
}


・Seriesプロパティ
チャート・コントロールのSeriesプロパティをプロパティ画面から以下のように設定します。
まずはチャート・コントロールのプロパティ画面を開きます。以下の画面です。。

ここから、Seriesプロパティのコレクションを編集します。
charttypeをCandlestickに設定して、データソースを以下のように設定します。
XValueMember:PriceDate
YValueMember:HighPrice,LowPrice,EndPrice,StartPrice
各項目は、データソースに設定した独自クラスStockPriceのプロパティです。X軸は、日付で、Y軸は、高値、安値、終値、始値の順で設定しています。(Y軸は順序を変えると違う表示になってしまいます。)


これで作成したチャートが以下のようになります。上のExcelで作成したチャートと同じようなチャートになるのが確認出来ます。ただし、陰線が黒ではなく青での塗りつぶしになっています。実際には、チャート・コントロールでいろいろな設定が出来ますので、その設定を変更する画面というか機能が必要になるかと思います。
※注意点ですが、陽線と陰線の表示方法、色に関してはいろいろとあるようです。いろいろというのは、印刷方法、日本と欧米での表示方法等のことです。ここでは、陰線を青の塗りつぶしとしましたが、チャート・コントロールのサンプルでは、逆になっていました。これは、上のSeriesプロパティで、YValueMemberの順番を変更すれば、青と白が反対になります。以下参考サイト。
ローソク足の見方|テクニカル分析入門



今回でこのYahoo!ファイナンスから株価時系列データを取得するプログラムについては終了です。

ソース一式

Windowsプログラミング関連記事