[Excel]VBAで株価チャート(ローソク足)を作る - FB post for mutter

[Excel]VBAで株価チャート(ローソク足)を作る

| コメント(0) | トラックバック(0)

ExcelのVBAによるグラフ作成です。今回は、『株価チャート』を作ってみようと思います。VBAによる自動化が役立ちやすい分野でもあります。

今回も基本仕様、

[Excel]VBAでインライングラフを作成する
[Excel]VBAでインライングラフを作成する2

に従い作成します。

『株価チャート』にも色々なグラフがあります。今回は一般的な人でも一度は見た事があるだろう、いわゆる『ローソク足』と言うタイプのチャートを書いてみます。

ローソク足は、取引開始の価格『始値』と取引終了の価格『終値』。その日の一番高い金額がついた『高値』、同様に一番低い金額の『安値』を1つのグラフとして示すものです。
その日の『終値』が翌日の『始値』になります。
『始値』より『終値』の方が高くなった場合には、白い四角でその金額の幅を示します(陽線)。逆に、『終値』の方が低い場合には、黒塗りの四角で金額の幅を示します(陰線)。
『高値』と『安値』はその四角の上下に線として表します。

このグラフには、良く『移動平均』と言うグラフを組み合わせて表示する事があります。例えば、『高値』/『安値』への2区間移動平均なら、今日の『高値』/『安値』と、前日『高値』/『安値』の平均を取り、今日の平均値としそれを繋げて示すグラフのことです。

完成版

先ずは、完成版のExcel画面を御覧ください。『ローソク足』グラフとはこの様なグラフの事です。

完成版のExcel画面

例の様にデータは架空の物です。僕は、そこまで株式などに詳しく無いですが、幾つかの株式について、複数の日足を参考にして作成してみました。
参考にした日足とは金額も増減も変更してあるので、現実味が帯びてないデータになってしまいましたが、グラフを描く。と言う目的としては支障は無いと思います。

グラフ部分

『高値』, 『安値』を追いかけている線はある物の、若干違う場所を追っている箇所もあると思います。また、ところどころカクカクと無理に曲がっている様な雰囲気も感じられると思います。移動平均グラフの特徴的な動きです。

完成版ソース

次に、ソースです。基本的にはとてもシンプルです。移動平均線を2つ追加してあるのでコードは長いですが、主要な部分は実にシンプルなことが分かると思います。
追って説明を行います。

Sub NewGraph5()
    ' 変数定義
    Dim i As Integer, table_br As Integer

    ' グラフの削除
    For i = ActiveSheet.ChartObjects.Count To 1 Step -1
         ActiveSheet.ChartObjects(i).Delete
    Next i

    ' 表のサイズを調べる
    Range("A2").CurrentRegion.Select
    table_br = Selection(Selection.Count).Row

    ' グラフエリア確保
    ActiveSheet.Shapes.AddChart.Select

    ' 株価チャートをつくる
    ActiveChart.ChartType = xlStockOHLC

    ' グラフは、I2~N23 の範囲に入れる
    ActiveChart.Parent.Top = ActiveSheet.Range("I2:N23").Top
    ActiveChart.Parent.Left = ActiveSheet.Range("I2:N23").Left
    ActiveChart.Parent.Height = ActiveSheet.Range("I2:N23").Height
    ActiveChart.Parent.Width = ActiveSheet.Range("I2:N23").Width

    ' データソースを指定
    ActiveChart.SetSourceData _
      Source:=Range(Cells(1, 1), Cells(table_br, 5)), _
      PlotBy:=xlColumns

    ' 高値(グラフ2)へ近似曲線を指定
    ActiveChart.FullSeriesCollection(2).Select
    ActiveChart.FullSeriesCollection(2).Trendlines.Add
    ActiveChart.FullSeriesCollection(2).Trendlines(1).Select

    ' 2データの移動平均を選択
    Selection.Type = xlMovingAvg
    Selection.Period = 2

    ' 線の、色(.ForeColor.RGB)
    '       透明度(.Transparency)
    '       形状(.DashStyle)
    '       太さ(.Weight)
    ' .Visible = msoTrue も無くても動く模様。
    Selection.Format.Line.Visible = msoTrue
    Selection.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
    Selection.Format.Line.Transparency = 0
    Selection.Format.Line.DashStyle = msoLineSysDot
    Selection.Format.Line.Weight = 1.5

    ' 安値(グラフ3)へ近似曲線を指定
    ActiveChart.FullSeriesCollection(3).Select
    ActiveChart.FullSeriesCollection(3).Trendlines.Add
    ActiveChart.FullSeriesCollection(3).Trendlines(1).Select

    ' 2データの移動平均を選択
    Selection.Type = xlMovingAvg
    Selection.Period = 2

    ' 線の、色(.ForeColor.RGB)
    '       透明度(.Transparency)
    '       形状(.DashStyle)
    '       太さ(.Weight)
    ' .Visible = msoTrue も無くても動く模様。
    Selection.Format.Line.Visible = msoTrue
    Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 255)
    Selection.Format.Line.Transparency = 0
    Selection.Format.Line.DashStyle = msoLineSysDot
    Selection.Format.Line.Weight = 1.5

    ' 凡例をグラフの下移動
    ActiveChart.Legend.Select
    Selection.Position = xlBottom

    ' カーソルをA1へ移動
    Range("A1").Select
End Sub

変数定義~グラフエリアの確保

この辺りはパターン化されている部分ですね。

' 変数定義
Dim i As Integer, table_br As Integer

' グラフの削除
For i = ActiveSheet.ChartObjects.Count To 1 Step -1
     ActiveSheet.ChartObjects(i).Delete
Next i

' 表のサイズを調べる
Range("A2").CurrentRegion.Select
table_br = Selection(Selection.Count).Row

' グラフエリア確保
ActiveSheet.Shapes.AddChart.Select

株価チャートを作る

ローソク足を選択します。

' 株価チャートをつくる
ActiveChart.ChartType = xlStockOHLC

グラフの場所とサイズ

グラフを置く位置と、グラフのサイズを設定します。

' グラフは、I2~N23 の範囲に入れる
ActiveChart.Parent.Top = ActiveSheet.Range("I2:N23").Top
ActiveChart.Parent.Left = ActiveSheet.Range("I2:N23").Left
ActiveChart.Parent.Height = ActiveSheet.Range("I2:N23").Height
ActiveChart.Parent.Width = ActiveSheet.Range("I2:N23").Width

データソースの指定

データソースの場所を指定します。Excelのローソク足チャートでは、日付, 始値, 高値, 安値, 終値の順序でデータを作成する事になっています。

' データソースを指定
ActiveChart.SetSourceData _
  Source:=Range(Cells(1, 1), Cells(table_br, 5)), _
  PlotBy:=xlColumns

ここまでの設定で、ローソク足チャートの設定は完了です。

近似曲線(高値側)の設定

次に、近似曲線を設定します。設定するタイプは、移動平均で、2区間を選択します。
高値と安値それぞれに設定します。高値は赤色, 安値は青色で示す事にします。

' 高値(グラフ2)へ近似曲線を指定
ActiveChart.FullSeriesCollection(2).Select
ActiveChart.FullSeriesCollection(2).Trendlines.Add
ActiveChart.FullSeriesCollection(2).Trendlines(1).Select

' 2データの移動平均を選択
Selection.Type = xlMovingAvg
Selection.Period = 2

' 線の、色(.ForeColor.RGB)
'       透明度(.Transparency)
'       形状(.DashStyle)
'       太さ(.Weight)
' .Visible = msoTrue も無くても動く模様。
Selection.Format.Line.Visible = msoTrue
Selection.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
Selection.Format.Line.Transparency = 0
Selection.Format.Line.DashStyle = msoLineSysDot
Selection.Format.Line.Weight = 1.5

高値は、データ軸の2軸目に当たります。(始値, 高値, 安値, 終値の順に、1軸, 2軸, 3軸, 4軸です。)
そのため、

ActiveChart.FullSeriesCollection(2).Select
ActiveChart.FullSeriesCollection(2).Trendlines.Add

2軸目を選択し、近似曲線を追加します。
追加された、近似曲線は2軸目の1番目の近似曲線なので、

ActiveChart.FullSeriesCollection(2).Trendlines(1).Select

FullSeriesCollection(2)につづいて、Trendlines(1)と指定する事になります。
次に、近似曲線の種類として、2区間の移動平均である事を指定します。

' 2データの移動平均を選択
Selection.Type = xlMovingAvg
Selection.Period = 2

最後に、線の体裁を整えます。

' 線の、色(.ForeColor.RGB)
'       透明度(.Transparency)
'       形状(.DashStyle)
'       太さ(.Weight)
' .Visible = msoTrue も無くても動く模様。
Selection.Format.Line.Visible = msoTrue
Selection.Format.Line.ForeColor.RGB = RGB(255, 0, 0)
Selection.Format.Line.Transparency = 0
Selection.Format.Line.DashStyle = msoLineSysDot
Selection.Format.Line.Weight = 1.5

近似曲線(安値側)の設定

高値用の移動平均曲線の追加と要領は同じです。違いは対象とする軸の番号と、表示色の違い位ですね。

' 安値(グラフ3)へ近似曲線を指定
ActiveChart.FullSeriesCollection(3).Select
ActiveChart.FullSeriesCollection(3).Trendlines.Add
ActiveChart.FullSeriesCollection(3).Trendlines(1).Select

' 2データの移動平均を選択
Selection.Type = xlMovingAvg
Selection.Period = 2

' 線の、色(.ForeColor.RGB)
'       透明度(.Transparency)
'       形状(.DashStyle)
'       太さ(.Weight)
' .Visible = msoTrue も無くても動く模様。
Selection.Format.Line.Visible = msoTrue
Selection.Format.Line.ForeColor.RGB = RGB(0, 0, 255)
Selection.Format.Line.Transparency = 0
Selection.Format.Line.DashStyle = msoLineSysDot
Selection.Format.Line.Weight = 1.5

凡例の位置を移動する

初期状態だと、グラフの右側に凡例が表示されていたので、グラフの下へ移動しました。

    ' 凡例をグラフの下移動
    ActiveChart.Legend.Select
    Selection.Position = xlBottom

カーソルをA1へ

最後に、カーソルをA1へ移動して置きます。

' カーソルをA1へ移動
Range("A1").Select

特定の目的だけに使用する、自由度の少ないグラフなので、設定する情報もとても少ないです。
ここまで学習が進むと、グラフの種類など最小限度の情報が分かれば、今までの知識の蓄積である程度のグラフが直ぐに作れそうです。

トラックバック(0)

トラックバックURL:

コメントする

サムネイル

[Excel]VBAで株価チャート(ローソク足)を作る - FB post for mutter
RSS 0.91
RSS 0.92
RSS 1.0
RSS 2.0
ATOM

twitter

Creative Commons License
このブログはクリエイティブ・コモンズでライセンスされています。
Powered by Movable Type 6.3.3

このブログ記事について

このページは、いまい やすゆきが2017年2月 3日 22:40に書いたブログ記事です。

ひとつ前のブログ記事は「[Excel]VBAでレーダーチャートを作る」です。

次のブログ記事は「Office365への移行と、戦いの日」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。