VB2010 Chartでローソク足チャートを…

解決


 2012-08-31 09:31:48  No: 147774  IP: [192.*.*.*]

http://msdn.microsoft.com/ja-jp/library/dd456671(v=vs.100)
ここにあるようなローソク足チャートを作りたく、棒グラフのサンプルでトライしたのですが、
何分超素人の悲しさ、どうしても上手く行きません。
申し訳ないのですがお教えいただけないでしょうか。

※  ライブラリの説明では「高値、安値、始値、終値」の順になってますが、
日本では一般的に「始値、高値、安値、終値」の順ですので変更が必要なのかもしれません。
また、右端上に表示されるコメントは不要ですので削除したいです。

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    '初期化    
    Chart1.Series.Clear()
    'データの取得
    Dim ds As DataSet = GetData()
    'Chartコントロールにデータソースを設定
    Chart1.DataSource = ds
    'Chartコントロールにタイトルを設定
    Chart1.Titles.Add("株価 ローソク足")
    'グラフの種類,系列,軸の設定
    For I As Integer = 1 To ds.Tables(0).Columns.Count - 1
        '列名の取得
        Dim columnName As String = ds.Tables(0).Columns(I).ColumnName
        '系列の設定
        Chart1.Series.Add(columnName)
        'グラフの種類
        Chart1.Series(columnName).ChartType = DataVisualization.Charting.SeriesChartType.Candlestick
        'X軸
        Chart1.Series(columnName).XValueMember = ds.Tables(0).Columns(0).ColumnName.ToString
        Chart1.ChartAreas(0).AxisX.MajorGrid.Enabled = False
        Chart1.ChartAreas(0).AxisX.MinorGrid.Enabled = False
        'Y軸
        Chart1.Series(columnName).YValueMembers = columnName
    Next
    'X軸タイトル
    Chart1.ChartAreas(0).AxisX.Title = "年月日"
    Chart1.DataBind()
End Sub
 ' データの設定
Private Function GetData() As DataSet
    Dim ds As New DataSet
    Dim dt As New DataTable
    Dim dtRow As DataRow
    '列の作成
    dt.Columns.Add("日付", Type.GetType("System.String"))
    dt.Columns.Add("始値", Type.GetType("System.Int32"))
    dt.Columns.Add("高値", Type.GetType("System.Int32"))
    dt.Columns.Add("安値", Type.GetType("System.Int32"))
    dt.Columns.Add("終値", Type.GetType("System.Int32"))
    ds.Tables.Add(dt)
    
    '株価データ      ※実際にはCSVファイルから持ってきます。
    dtRow = ds.Tables(0).NewRow
    dtRow(0) = "2012/08/01" '日付
    dtRow(1) = "500"        '始値
    dtRow(2) = "800"        '高値
    dtRow(3) = "200"        '安値
    dtRow(4) = "300"        '終値
    ds.Tables(0).Rows.Add(dtRow)

    dtRow = ds.Tables(0).NewRow
    dtRow(0) = "2012/08/01" '日付
    dtRow(1) = "1000"       '始値
    dtRow(2) = "2300"       '高値
    dtRow(3) = "400"        '安値
    dtRow(4) = "800"        '終値
    ds.Tables(0).Rows.Add(dtRow)

    Return (ds)
End Function

編集 削除
shu  2012-09-01 13:47:02  No: 147775  IP: [192.*.*.*]

Seriesを4つ作成するのではなくて
1つのSeriesを作成し
YValueMembers = "高値, 安値, 始値, 終値"
とすれば良いと思います。

編集 削除
 2012-09-01 19:36:10  No: 147776  IP: [192.*.*.*]

shuさん、
教えて頂いたように変更しましたら上手く行きました。
ありがとうございました。

あと…、
右端上に表示される「高値, 安値, 始値, 終値とその罫線」は不要ですので消したいです。
棒の色は PriceUpColor、PriceUpColor カスタム属性によって決まる、とありますがその書式が分かりません。
よろしくお願いします。

編集 削除
shu  2012-09-03 00:21:46  No: 147777  IP: [192.*.*.*]

srs.IsVisibleInLegend = False
        srs.SetCustomProperty("PriceUpColor", "DarkBlue")
        srs.SetCustomProperty("PriceDownColor", "DarkGreen")

srsは対象のSeries

参考URL:
http://msdn.microsoft.com/ja-jp/library/dd456638.aspx

編集 削除
 2012-09-05 17:33:28  No: 147778  IP: [192.*.*.*]

shuさん、ありがとうございます。
解決することが出来ました。
厚く御礼申し上げます

編集 削除