アフィリエイト広告を利用しています

広告

posted by fanblog

広告

posted by fanblog
2013年07月25日
第5回 単純移動平均線
(1) 単純移動平均線の表示

n = 最終行取得(wss)
終値配列 = wss.Range(wss.Cells(2, データの終値), wss.Cells(n, データの終値)).Value
移動平均線配列 = 単純移動平均線算出(終値配列, 周期, 実表示本数)

Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 移動平均線配列
sr.Name = "移動平均線" & 周期


wss はデータシートをあらわす Worksheet オブジェクトです。
ch Chart オブジェクトです。
sr Series オブジェクトです。
終値配列は元の4本値データから終値だけを抜き出して配列にしたものです。

終値配列から移動平均配列を計算します。
Chart オブジェクトの SeriesCollection NewSeries を行って新しい Series オブジェクトを取得します。移動平均線は折線なので Series オブジェクトの ChartType xlLine をセットします。 Series オブジェクトの Values に計算した移動平均配列をセットします。

(2) 複数の単純移動平均線の表示

n = 最終行取得(wss)
終値配列 = wss.Range(wss.Cells(2, データの終値), wss.Cells(n, データの終値)).Value

If BOOLプロパティ取得("単純移動平均線") Then
    i = 2
    周期 = 配列プロパティ取得("単純移動平均線", i)

    While 周期 > 0
     移動平均線配列 = 単純移動平均線算出(終値配列, 周期, 実表示本数)

     Set sr = ch.SeriesCollection.NewSeries
     sr.ChartType = xlLine
     sr.Values = 移動平均線配列
     sr.Name = "移動平均線" & 周期

     i = i + 1
     周期 = 配列プロパティ取得("単純移動平均線", i)
    Wend
End If


まず単純移動平均線を表示するかどうか if ... End if で判断し、While ... Wend で複数の単純移動平均線を表示します。

(3) Y軸の設定

If ch.ChartGroups.Count > 1 Then ch.Axes(xlValue, xlSecondary).MinimumScale = Y軸最小値
If ch.ChartGroups.Count > 1 Then ch.Axes(xlValue, xlSecondary).MaximumScale = Y軸最大値


Y軸は価格を表します。
Y軸最小値とY軸最大値はローソク足を表示する際に計算した値です。

ローソク足のチャートは第1Y軸(左端のY軸)(xlPrimary)になり、移動平均線は第2Y軸(右端のY軸)(xlSecondary)になります。第1Y軸と第2Y軸の最大値と最小値は同じ値にしなくてはなりません。
移動平均線を表示しない場合もあるので条件付の設定になります。移動平均線を表示したかどうかは ChartGroups Count を調べればわかります。ローソク足が1番目の ChartGroup になり移動平均線が2番目の ChartGroup になります。移動平均線を表示しなければ ChartGroups Count は1です。

(4) 単純移動平均線の計算

Function 単純移動平均線算出(データ配列, 周期, 実表示本数)

n = UBound(データ配列)
ReDim a(1 To 実表示本数, 1 To 1)

j = 1
For i = n - 実表示本数 + 1 To n
  開始行 = i - 周期 + 1
  終了行 = i
  If 開始行 < 1 Then 開始行 = 1

  合計 = 0
  For k = 開始行 To 終了行
   合計 = 合計 + データ配列(k, 1)
  Next k

  件数 = 終了行 - 開始行 + 1

  a(j, 1) = 合計 / 件数
  j = j + 1
Next i

単純移動平均線算出 = a

End Function


単純移動平均線算出の関数です。
入力引数はデータ配列, 周期, 実表示本数です。
データ配列は終値配列です。元データ400本をそのまま渡します。これは画面に表示されないデータも計算対象になるからです。
周期は何本の平均をとるかの指定です。21とか13等の数値です。プロパティシートで設定します。
実表示本数は画面に表示する本数です。データが400本あってもすべて表示するわけではないので100とか200とかの数値です。プロパティシートで設定します。

出力は単純移動平均配列です。

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 15:21 | この記事のURL
この記事のURL

×

この広告は30日以上新しい記事の更新がないブログに表示されております。