平均足を使うと、トレンドの流れが把握しやすいということで、前回、作成したTreeView付ローソク足・出来高チャートに平均足を選択できるように追加してみました。
平均足は、下記の計算式になりますが、今回、1日目だけ違う計算式を使用しています。
1日目の始値:(当日の始値+当日の終値)÷2
| 始値 | (前日の平均足の始値+前日の平均足の終値)÷2 ただし、1日目は(前日の始値+前日の高値+前日の安値+前日の終値)÷4 |
| 高値 | 当日の高値 |
| 安値 | 当日の安値 |
| 終値 | 終値(当日の始値+当日の高値+当日の安値+当日の終値)÷4 |
コントロールの配置

btnView_Clickへの追加
平均足の計算処理を追加する。
変更点は、2022/3/16のコメントで囲っているところ
object date;
double high;
double low;
double open;
double end;
// 2022/3/16 start
double prebegin = 0; // 前日の始値
double preend = 0; // 前日の終値
// 2022/3/16 end
// ローソク足の表示
for (int i = 0, j = 0 ; i < dataCount; i++, j++)
{
date = PanStock.Rows[j]["date"];
high = Convert.ToDouble(PanStock.Rows[j]["high_v"]);
low = Convert.ToDouble(PanStock.Rows[j]["low_v"]);
open = Convert.ToDouble(PanStock.Rows[j]["open_v"]);
end = Convert.ToDouble(PanStock.Rows[j]["close_v"]);
// 2022/3/16 start 平均足に変換する
if (radioButton2.Checked == true)
{
if (i == 0)
{
end = (open + low + high + end) / 4;
open = (end + open) / 2; // 平均足の始値
open = Math.Round(open, MidpointRounding.AwayFromZero); // 四捨五入
}
else
{
end = (open + low + high + end) / 4;
open = (preend + prebegin) / 2; // 平均足の始値
open = Math.Round(open, MidpointRounding.AwayFromZero); // 四捨五入
}
}
preend = end;
prebegin = open;
// 2022/3/16 end
// データポイントの値の登録
chart1.Series[legend1].Points.AddXY(DateTime.Parse(date.ToString()), high);
chart1.Series[legend1].Points[i].YValues[1] = low;
chart1.Series[legend1].Points[i].YValues[2] = open;
chart1.Series[legend1].Points[i].YValues[3] = end;
}実行結果




