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とかの数値です。プロパティシートで設定します。
出力は単純移動平均配列です。
エクセルファイルです。
    ダウンロード
前へ   次へ
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とかの数値です。プロパティシートで設定します。
出力は単純移動平均配列です。
エクセルファイルです。
    ダウンロード
前へ   次へ
【このカテゴリーの最新記事】
-
no image