注目の記事 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));

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

                    // 移動平均の計算結果
                    double avg = query.AsEnumerable()
                        .Average(row => double.Parse(row.Field<string>("Close").ToString()));

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

                    sMA++;
                    eMA++;

                }
    }
    return dt;
}

 

移動平均の計算の流れ

青⇒赤⇒緑の流れで1行ずつ動かしながら平均値を算出していきます。

矢印の長さは、19行目のLINQにあるwhere句に該当します。

移動平均の計算方法

 

スポンサーリンク

  • コメント: 2

関連記事

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

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

  3. C# LINQを使ってDataTableを並び替える

  4. C# Webページのデータを取得する方法

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

  6. C# DataTableを高速にExcel出力する

  7. C# DataTableをCSVに書き込む

  8. C# DataTableにExcelを読み込む

  9. C# LINQでDataTableから高速に特定行を検索する方法

コメント

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

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

PAGE TOP