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

解決


  2012-08-31 18:31:48  No: 147774

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 22:47:02  No: 147775

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


  2012-09-02 04:36:10  No: 147776

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

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


shu  2012-09-03 09:21:46  No: 147777

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-06 02:33:28  No: 147778

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加