ローソク足に平均足を追加する

平均足を使うと、トレンドの流れが把握しやすいということで、前回、作成したTreeView付ローソク足・出来高チャートに平均足を選択できるように追加してみました。

平均足は、下記の計算式になりますが、今回、1日目だけ違う計算式を使用しています。
1日目の始値:(当日の始値+当日の終値)÷2

始値(前日の平均足の始値+前日の平均足の終値)÷2
ただし、1日目は(前日の始値+前日の高値+前日の安値+前日の終値)÷4
高値当日の高値
安値当日の安値
終値終値(当日の始値+当日の高値+当日の安値+当日の終値)÷4
情報提供元:Weblio辞書

コントロールの配置

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;
            }

実行結果

タイトルとURLをコピーしました