2013年08月01日
第12回 一目均衡表
(1) 一目均衡表の計算式
転換線=9日間の中間値
基準線=26日間の中間値
先行スパン1=(転換値+基準値)÷2を25日先にシフト
先行スパン2 =52日間の中間値を25日先にシフト
遅行スパン=終値を25日前にシフト
雲=先行スパン1と先行スパン2で囲まれた領域
中間値=(その期間の最高値+その期間の最安値)÷2
「25日先にシフト」は「当日を含めて26日先にシフト」と同じ意味
「25日前にシフト」は「当日を含めて26日前にシフト」と同じ意味
(2) 画像をシフト
Private Sub シフトして余白期間作成(ch, シフト期間)
For Each sr In ch.SeriesCollection
  v = sr.Values
  n = UBound(v)
  For i = 1 To n - シフト期間
    v(i) = v(i + シフト期間)
    If sr.HasDataLabels Then sr.DataLabels(i).Text = sr.DataLabels(i + シフト期間).Text
  Next i
  For i = i To n
    v(i) = Empty
    If sr.HasDataLabels Then sr.DataLabels(i).Text = ""
  Next i
  sr.Values = v
Next sr
v = ch.Axes(xlCategory).CategoryNames
n = UBound(v)
For i = 1 To n - シフト期間
  v(i) = v(i + シフト期間)
Next i
For i = i To n
  v(i) = ""
Next i
ch.Axes(xlCategory).CategoryNames = v
End Sub
一目均衡表は25日先までのグラフを表示するので既に描画したローソク足やX軸等を25日分、左にシフトします。空白になる25日分の series オブジェクトの values の各要素には Empty をセットします。
(3) 雲の描画
Sub 雲描画(ch, 先行スパン1配列, 先行スパン2配列)
n = UBound(先行スパン1配列)
ReDim 差分配列(1 To n, 1 To 1)
For i = 1 To n
   差分配列(i, 1) = 先行スパン1配列(i, 1) - 先行スパン2配列(i, 1)
Next i
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlAreaStacked
sr.Values = 先行スパン2配列
sr.Name = "先行スパン2-2"
sr.Format.Fill.Visible = False
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlAreaStacked
sr.Values = 差分配列
sr.Name = "雲"
sr.Format.Fill.ForeColor.RGB = RGB(192, 192, 192)
End Sub
積み上げ面グラフを使って雲を表示します。
先行スパン1配列から先行スパン2配列を引いた差分配列を作ります。プラスの数値とマイナスの数値が混在していますが、そのまま使えます。
最初に先行スパン2配列をChartType = xlAreaStacked で表示します。Format.Fill.Visible = False で先行スパン2の領域を非表示にします。
次に差分配列をChartType = xlAreaStacked で表示します。先行スパン2の上に「先行スパン1と先行スパン2の差分」が積み上がったグラフが作成されますが、土台のグラフである先行スパン2を非表示にしたため雲の部分のみが表示されます。
(4) 一目均衡表の計算
(4-1) メーンルーチン
Private Sub 一目均衡表算出(データ配列, 実表示本数, シフト期間, 転換線配列, 基準線配列, 先行スパン1配列, 先行スパン2配列, 遅行スパン配列)
終了行 = UBound(データ配列, 1)
ReDim 転換線配列(1 To 実表示本数, 1 To 1)
ReDim 基準線配列(1 To 実表示本数, 1 To 1)
ReDim 先行スパン1配列(1 To 実表示本数, 1 To 1)
ReDim 先行スパン2配列(1 To 実表示本数, 1 To 1)
ReDim 遅行スパン配列(1 To 実表示本数, 1 To 1)
開始行 = 終了行 - 実表示本数 + 1
開始行 = 開始行 + シフト期間
j = 1
For i = 開始行 To 終了行
   転換線配列(j, 1) = 期間中間値算出(データ配列, 転換線期間, i)
   基準線配列(j, 1) = 期間中間値算出(データ配列, 基準線期間, i)
   j = j + 1
Next i
j = 1
For i = 開始行 - 先行期間 + 1 To 終了行
   先行スパン1配列(j, 1) = (期間中間値算出(データ配列, 転換線期間, i) + 期間中間値算出(データ配列, 基準線期間, i)) / 2
   先行スパン2配列(j, 1) = 期間中間値算出(データ配列, 先行スパン2期間, i)
   j = j + 1
Next i
j = 1
For i = 開始行 + 遅行期間 - 1 To 終了行
   遅行スパン配列(j, 1) = データ配列(i, データの終値)
   j = j + 1
Next i
End Sub
(4-2) 中間値の計算
Private Function 期間中間値算出(データ配列, 周期, 終了行)
期間 = 周期
開始行 = 終了行 - 期間 + 1
If 開始行 < 1 Then 開始行 = 1
高値 = データ配列(終了行, データの高値)
安値 = データ配列(終了行, データの安値)
For i = 開始行 To 終了行 - 1
If 高値 < データ配列(i, データの高値) Then 高値 = データ配列(i, データの高値)
If 安値 > データ配列(i, データの安値) Then 安値 = データ配列(i, データの安値)
Next i
期間中間値算出 = (高値 + 安値) / 2
End Function
(5) 一目均衡表の表示
Sub 一目均衡表表示(ch, データ配列, 実表示本数)
シフトして余白期間作成 ch, 先行期間 - 1
一目均衡表算出 データ配列, 実表示本数, 先行期間 - 1, 転換線配列, 基準線配列, 先行スパン1配列, 先行スパン2配列, 遅行スパン配列
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 転換線配列
sr.Name = "転換線"
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 基準線配列
sr.Name = "基準線"
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 先行スパン1配列
sr.Name = "先行スパン1"
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 先行スパン2配列
sr.Name = "先行スパン2"
Set sr = ch.SeriesCollection.NewSeries
sr.ChartType = xlLine
sr.Values = 遅行スパン配列
sr.Name = "遅行スパン"
雲描画 ch, 先行スパン1配列, 先行スパン2配列
End Sub
(6) プロパティシートの設定
B8セルをTRUEにすると一目均衡表が表示されます。
エクセルファイルです。
    ダウンロード
前へ   次へ
【このカテゴリーの最新記事】
-
no image