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

広告

posted by fanblog

広告

posted by fanblog
2013年07月25日
第2回 極大値極小値の表示
(1) 極大値の表示

Set sr = ch.SeriesCollection("高値")
sr.HasDataLabels = True
sr.DataLabels.Position = xlLabelPositionAbove


極大値はDataLabelsオブジェクトで表示します。
高値のSeriesオブジェクトのHasDataLabelsプロパティをTrueにします。
ローソク足の上に表示するためDataLabels.Position = xlLabelPositionAboveとします。

v = sr.Values
極大値配列 = 極大値配列算出(v, 最小間隔)

For i = 1 To UBound(v)
  If 極大値配列(i) = "極大値" Then
    sr.DataLabels(i).Text = v(i)
  Else
    sr.DataLabels(i).Text = ""
  End If
Next


DataLabels Text に価格をセットします。極大値でないものは""をセットします。

(2) 極大値の算出

Private Function 極大値配列算出(データ配列, 最小間隔)

n = UBound(データ配列)
ReDim a(1 To n)

For i = 1 To n
  開始行 = i - 最小間隔
  終了行 = i + 最小間隔
  If 開始行 < 1 Then 開始行 = 1
  If 終了行 > n Then 終了行 = n

  For j = 開始行 To 終了行
   If データ配列(j) > データ配列(i) Then Exit For
  Next j
  If j > 終了行 Then a(i) = "極大値"
Next i

極大値配列算出 = a

End Function


極大値配列を算出する関数です。
入力引数はデータ配列と最小間隔です。
出力は極大値配列です。該当配列要素に"極大値"とセットされます。

近傍で最大のものが極大値になります。近傍の半径を最小間隔で与えています。
データ配列は高値配列です。

フォントサイズ = sr.DataLabels.Font.Size
チャート幅 = ch.Axes(xlCategory).Width
最小間隔 = Fix(フォントサイズ * 3 / (チャート幅 / 実表示本数)) + 1
If 最小間隔 < 6 Then 最小間隔 = 6


2つの極大値が重ならないように最小間隔を計算しています。"103.734" "1.34153" 等の数値を考えると極大値の最大文字数は7文字となります。その後半部分は3文字になります。最小間隔の計算においてフォントサイズ * 3をおこなっているのはそのためです。最後に最小間隔が小さくなり過ぎないように最小の最小間隔を6としています。最小間隔は近傍半径なので近傍直径は11になります。11=(6-1)*2+1です。

(3) 極小値の表示

Set sr = ch.SeriesCollection("安値")
sr.HasDataLabels = True
sr.DataLabels.Position = xlLabelPositionBelow


極大値と同様です。安値配列を対象としていることとローソク足の下に表示するため DataLabels.Position = xlLabelPositionBelow としているのが相違点です。

(4) 極小値の計算

Private Function 極小値配列算出(データ配列, 最小間隔)

n = UBound(データ配列)
ReDim a(1 To n)

For i = 1 To n
  開始行 = i - 最小間隔
  終了行 = i + 最小間隔
  If 開始行 < 1 Then 開始行 = 1
  If 終了行 > n Then 終了行 = n

 For j = 開始行 To 終了行
   If データ配列(j) < データ配列(i) Then Exit For
  Next j
  If j > 終了行 Then a(i) = "極小値"
Next i

極小値配列算出 = a

End Function


極小値配列を算出する関数です。
入力引数はデータ配列と最小間隔です。
出力は極小値配列です。該当配列要素に"極小値"とセットされます。
データ配列は安値配列です。

計算方法は極大値と同様です。

エクセルファイルです。

    ダウンロード


前へ   次へ

Posted by vbafan at 10:14 | この記事のURL
この記事のURL

×

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