今回はボリンジャーバンド、エンベロープについて解説する。どちらのチャートもFinancialFormulaメソッドに数値パラメータが2つ、出力されるYの値が2つのケースだ。出力されるYの値が2つの場合は、最終的にどのようなチャートで表現したいのかによってFinancialFormulaメソッドの利用方法が若干変わってくることに注意が必要だ。
まずはボリンジャーバンドから作成してみよう。FinancialFormulaメソッドの数値パラメータとして集計期間と標準偏差の係数の二つが必要となる。この二つの数値をカンマ刻みで数値パラメータとして文字列で入力する。そして参照元として作成済みのローソク足の4つ目の値(Price:Y4)である終値を設定して、出力結果の名称を設定する。出力結果の名称の設定方法が最終的に描画したいチャートの形状により変わってくることになる。リファレンスには範囲グラフもしくは2本の折れ線がよいとある。ただしリファレンスの使用例はコードに誤りがありエラーとなってしまう。そんなわけでここでは折れ線にする場合と範囲グラフにする場合のコードを載せておこう。
折れ線の場合は出力結果に2つの系列名称を付ける必要がある。リファレンスには系列一つでYとY2になっているがエラーが発生する。集計期間は5日、標準偏差の係数は2、高値の出力をBB1、低値の出力をBB2としている。バグなのか仕様なのか不明だが、出力の系列を複数にする場合は系列名称の後ろに「:Y」を付けないとダメらしい。ボリンジャーバンドはトレンド系なのでローソク足チャートと同じチャートエリアに表示する。
' ボリンジャーバンド(折れ線)
Chart1.DataManipulator.FinancialFormula(FinancialFormula.BollingerBands, "5,2", "Price:Y4", "BB1:Y,BB2:Y")
Chart1.Series("BB1").ChartType = SeriesChartType.Line
Chart1.Series("BB1").ChartArea = "PriceArea"
Chart1.Series("BB1").Legend = "PriceLegend"
Chart1.Series("BB1").LegendText = "ボリンジャーバンド(高)"
Chart1.Series("BB2").ChartType = SeriesChartType.Line
Chart1.Series("BB2").ChartArea = "PriceArea"
Chart1.Series("BB2").Legend = "PriceLegend"
Chart1.Series("BB2").LegendText = "ボリンジャーバンド(低)"
' 要素数の補正 (その6など参照)
' 欠落ポイント対応 (その6など参照)

範囲グラフの場合は出力結果の系列は1つとなる。FinancialFormulaメソッドの引数は最後の出力結果の系列名称を「BB」のみとする。このように設定すると系列BBのYには高値、Y2には安値が格納される。範囲グラフを扱う場合はチャートを塗りつぶしてしまうことに注意する必要がある。透過色で色を設定しないと後ろが見えなくなってしまう。
' ボリンジャーバンド(範囲)
Chart1.DataManipulator.FinancialFormula(FinancialFormula.BollingerBands, "5,2", "Price:Y4", "BB")
Chart1.Series("BB").ChartType = SeriesChartType.Range
Chart1.Series("BB").ChartArea = "PriceArea"
Chart1.Series("BB").Legend = "PriceLegend"
Chart1.Series("BB").LegendText = "ボリンジャーバンド"
Chart1.Series("BB").Color = Drawing.Color.FromArgb(64, Drawing.Color.Red)
Chart1.Series("BB").BorderColor = Drawing.Color.Red
' 要素数の補正 (その6など参照)
' 欠落ポイント対応 (その6など参照)

次にエンベロープを作成してみる。こちらもリファレンスの使用例通りにコードするとエラーとなる。集計期間は5日、上下シフトの割合を10%としている。折れ線の場合しか載せないが、範囲グラフの気を付ける点は上記のボリンジャーバンドと同様である。
' エンベロープ(折れ線)
Chart1.DataManipulator.FinancialFormula(FinancialFormula.Envelopes, "5,10", "Price:Y4", "ENV1:Y,ENV2:Y")
Chart1.Series("ENV1").ChartType = SeriesChartType.Line
Chart1.Series("ENV1").ChartArea = "PriceArea"
Chart1.Series("ENV1").Legend = "PriceLegend"
Chart1.Series("ENV1").LegendText = "エンベロープ(高)"
Chart1.Series("ENV2").ChartType = SeriesChartType.Line
Chart1.Series("ENV2").ChartArea = "PriceArea"
Chart1.Series("ENV2").Legend = "PriceLegend"
Chart1.Series("ENV2").LegendText = "エンベロープ(低)"
' 要素数の補正 (その6など参照)
' 欠落ポイント対応 (その6など参照)

次回は移動平均収束拡散法(MACD)を取り上げる。