注目の記事 PICK UP!

  • C#

C# LINQでボリンジャーバンドを作成する

LINQを使って、ボリンジャーバンドの計算方法を紹介します。

データは、下記の為替データを使って計算します。

 

スポンサーリンク

 

 


/// <summary>
/// 為替データを使ってボリンジャーバンドを計算します
/// </summary>
/// <param name="dt">為替チャートデータ</param>
/// <param name="s">移動平均の開始位置</param>
/// <param name="e">移動平均の終了位置</param>
/// <returns>ボリンジャーバンド</returns>
public DataTable MovingAverage(DataTable dt,int s,int e)
{
    int sMA = s;
    int eMA = e;
    // 移動平均を格納するカラム
    dt.Columns.Add("MA", typeof(double));
    dt.Columns.Add("+1σ", typeof(double));
    dt.Columns.Add("-1σ", typeof(double));

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        // 平均値の計算する対象範囲
        var query = from DataRow myRow in dt.Rows
                    where (int)myRow["ID"] >= sMA && (int)myRow["ID"] <= eMA
                    select myRow;

        // 移動平均の開始位置
        if (i >= eMA - 1)
        {
            // 移動平均の計算結果
            double avg = query.AsEnumerable()
                .Average(row => row.Field<double>("Close"));

            // 移動平均の結果をDataTableに格納
            dt.Rows[i]["MA"] = avg;

            // 偏差^2
            double sum = query.AsEnumerable()
                .Sum(row => (row.Field<double>("Close") - avg) * (row.Field<double>("Close") - avg));

            // 件数
            int cnt = query.AsEnumerable().Count();

            // 標準偏差
            double stdv = Math.Sqrt(sum / cnt);

            // 平均 + 標準偏差 = ±1σ
            dt.Rows[i]["+1σ"] = avg + stdv;
            dt.Rows[i]["-1σ"] = avg - stdv;

            sMA++;
            eMA++;

        }
    }
    return dt;
}

 

移動平均の計算方法

移動平均の計算方法とは

偏差^2の計算方法

偏差 = 終値 – 平均
35行目で偏差^2したものを合計しています。

件数の算出

AsEnumerable.Countメソッドを使って、件数を算出しています。

標準偏差の算出

Math.Sqrtメソッドで平方根をとって標準偏差を計算しています。

スポンサーリンク

  • コメント: 1

関連記事

  1. C# DataTableの特定レコードを削除

  2. C# DataTableからComputeを使って合計値や平均値を算出する

  3. C# LINQで移動平均線を作成する

  4. C# DataTableにカラムを追加

  5. C# LINQを使って重複行をGroup byする方法

  6. C# DataTableのデータをゼロパディング(ゼロ埋め)する

  7. C#でHTMLのtableタグを生成する方法

  8. C# JSONファイルの読み込み方法

  9. C#でOutlook2010を使ったメール送信方法

コメント

  1. この記事へのコメントはありません。

  1. この記事へのトラックバックはありません。

PAGE TOP